summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Garver <garverp@gatech.edu>2014-12-02 13:04:25 -0500
committerPaul Garver <garverp@gatech.edu>2014-12-02 13:04:25 -0500
commit3ee2c52ccb27b54bf626721001512f6013b648c3 (patch)
tree4d2c16c1d614d6ef72ebed8655ac3654f9a67a9d
parent4ec1ab5487a7555c534d7c9768b853995f0ea8f8 (diff)
qtgui: Fix Y-Axis timescale issues on gr_spectrogram_plot/gr_spectrogram_plot_* by adding a function to set the time per fft. Scale should also update when a new FFT size or sample rate is entered via the GUI
-rw-r--r--gr-qtgui/apps/plot_form.py1
-rw-r--r--gr-qtgui/apps/plot_spectrogram_base.py2
-rw-r--r--gr-qtgui/include/gnuradio/qtgui/waterfall_sink_c.h1
-rw-r--r--gr-qtgui/include/gnuradio/qtgui/waterfall_sink_f.h1
-rw-r--r--gr-qtgui/include/gnuradio/qtgui/waterfalldisplayform.h4
-rw-r--r--gr-qtgui/lib/WaterfallDisplayPlot.cc4
-rw-r--r--gr-qtgui/lib/waterfall_sink_c_impl.cc6
-rw-r--r--gr-qtgui/lib/waterfall_sink_c_impl.h1
-rw-r--r--gr-qtgui/lib/waterfall_sink_f_impl.cc6
-rw-r--r--gr-qtgui/lib/waterfall_sink_f_impl.h1
-rw-r--r--gr-qtgui/lib/waterfalldisplayform.cc25
11 files changed, 48 insertions, 4 deletions
diff --git a/gr-qtgui/apps/plot_form.py b/gr-qtgui/apps/plot_form.py
index 75e39ec98e..931565bd3e 100644
--- a/gr-qtgui/apps/plot_form.py
+++ b/gr-qtgui/apps/plot_form.py
@@ -359,6 +359,7 @@ class plot_form(QtGui.QWidget):
sr = self.samp_rate_edit.text().toDouble()[0]
fr = self.freq_edit.text().toDouble()[0]
self.top_block.gui_snk.set_frequency_range(fr, sr)
+ self.top_block._samp_rate = sr
self.top_block.reset(self.top_block._start,
self.top_block._nsamps)
diff --git a/gr-qtgui/apps/plot_spectrogram_base.py b/gr-qtgui/apps/plot_spectrogram_base.py
index 26c336e36c..b252bb8863 100644
--- a/gr-qtgui/apps/plot_spectrogram_base.py
+++ b/gr-qtgui/apps/plot_spectrogram_base.py
@@ -100,6 +100,7 @@ class plot_base(gr.top_block):
self.connect(s, (self.gui_snk, i+1))
self.gui_snk.set_update_time(0);
+ self.gui_snk.set_time_per_fft(self._psd_size/self._samp_rate)
self.gui_snk.enable_menu(False)
self.gui_snk.set_fft_average(self._avg)
@@ -126,6 +127,7 @@ class plot_base(gr.top_block):
self.stop()
self.wait()
self.gui_snk.clear_data()
+ self.gui_snk.set_time_per_fft(self._psd_size/self._samp_rate)
self._start = newstart
self._nsamps = newnsamps
diff --git a/gr-qtgui/include/gnuradio/qtgui/waterfall_sink_c.h b/gr-qtgui/include/gnuradio/qtgui/waterfall_sink_c.h
index bf73db3f1a..9229682b28 100644
--- a/gr-qtgui/include/gnuradio/qtgui/waterfall_sink_c.h
+++ b/gr-qtgui/include/gnuradio/qtgui/waterfall_sink_c.h
@@ -109,6 +109,7 @@ namespace gr {
virtual void set_fft_size(const int fftsize) = 0;
virtual int fft_size() const = 0;
+ virtual void set_time_per_fft(const double t) = 0;
virtual void set_fft_average(const float fftavg) = 0;
virtual float fft_average() const = 0;
virtual void set_fft_window(const gr::filter::firdes::win_type win) = 0;
diff --git a/gr-qtgui/include/gnuradio/qtgui/waterfall_sink_f.h b/gr-qtgui/include/gnuradio/qtgui/waterfall_sink_f.h
index 4570ef9d54..0bbd7e0231 100644
--- a/gr-qtgui/include/gnuradio/qtgui/waterfall_sink_f.h
+++ b/gr-qtgui/include/gnuradio/qtgui/waterfall_sink_f.h
@@ -108,6 +108,7 @@ namespace gr {
virtual void set_fft_size(const int fftsize) = 0;
virtual int fft_size() const = 0;
+ virtual void set_time_per_fft(const double t) = 0;
virtual void set_fft_average(const float fftavg) = 0;
virtual float fft_average() const = 0;
virtual void set_fft_window(const gr::filter::firdes::win_type win) = 0;
diff --git a/gr-qtgui/include/gnuradio/qtgui/waterfalldisplayform.h b/gr-qtgui/include/gnuradio/qtgui/waterfalldisplayform.h
index e885a525b0..10378d4917 100644
--- a/gr-qtgui/include/gnuradio/qtgui/waterfalldisplayform.h
+++ b/gr-qtgui/include/gnuradio/qtgui/waterfalldisplayform.h
@@ -46,6 +46,7 @@ class WaterfallDisplayForm : public DisplayForm
WaterfallDisplayPlot* getPlot();
int getFFTSize() const;
+ double getTimePerFFT();
float getFFTAverage() const;
gr::filter::firdes::win_type getFFTWindowType() const;
@@ -87,6 +88,8 @@ public slots:
void autoScale(bool en=false);
void setPlotPosHalf(bool half);
+ void setTimePerFFT(double t);
+ void setUpdateTime(double t);
private slots:
void newData(const QEvent *updateEvent);
@@ -97,6 +100,7 @@ private:
double d_samp_rate, d_center_freq;
int d_fftsize;
+ double d_time_per_fft;
float d_fftavg;
gr::filter::firdes::win_type d_fftwintype;
double d_units;
diff --git a/gr-qtgui/lib/WaterfallDisplayPlot.cc b/gr-qtgui/lib/WaterfallDisplayPlot.cc
index 86724fe04d..ef1ec3bf03 100644
--- a/gr-qtgui/lib/WaterfallDisplayPlot.cc
+++ b/gr-qtgui/lib/WaterfallDisplayPlot.cc
@@ -62,7 +62,7 @@ public:
virtual QwtText label(double value) const
{
double secs = double(value * getSecondsPerLine());
- return QwtText(QString("").sprintf("%.1f", secs));
+ return QwtText(QString("").sprintf("%.2e", secs));
}
virtual void initiateUpdate()
@@ -119,7 +119,7 @@ protected:
QwtText t(QString("%1 %2, %3 s")
.arg(dp.x(), 0, 'f', getFrequencyPrecision())
.arg(d_unitType.c_str())
- .arg(secs, 0, 'f', 2));
+ .arg(secs, 0, 'e', 2));
return t;
}
diff --git a/gr-qtgui/lib/waterfall_sink_c_impl.cc b/gr-qtgui/lib/waterfall_sink_c_impl.cc
index 5e393528d4..a9a2d6c09e 100644
--- a/gr-qtgui/lib/waterfall_sink_c_impl.cc
+++ b/gr-qtgui/lib/waterfall_sink_c_impl.cc
@@ -458,6 +458,12 @@ namespace gr {
}
}
+ void
+ waterfall_sink_c_impl::set_time_per_fft(double t)
+ {
+ d_main_gui->setTimePerFFT(t);
+ }
+
int
waterfall_sink_c_impl::work(int noutput_items,
gr_vector_const_void_star &input_items,
diff --git a/gr-qtgui/lib/waterfall_sink_c_impl.h b/gr-qtgui/lib/waterfall_sink_c_impl.h
index d0e7eb13ba..6ab09bdd9b 100644
--- a/gr-qtgui/lib/waterfall_sink_c_impl.h
+++ b/gr-qtgui/lib/waterfall_sink_c_impl.h
@@ -106,6 +106,7 @@ namespace gr {
void set_intensity_range(const double min, const double max);
void set_update_time(double t);
+ void set_time_per_fft(double t);
void set_title(const std::string &title);
void set_line_label(int which, const std::string &label);
void set_line_alpha(int which, double alpha);
diff --git a/gr-qtgui/lib/waterfall_sink_f_impl.cc b/gr-qtgui/lib/waterfall_sink_f_impl.cc
index 0f7f9e0437..0c1fbbff36 100644
--- a/gr-qtgui/lib/waterfall_sink_f_impl.cc
+++ b/gr-qtgui/lib/waterfall_sink_f_impl.cc
@@ -465,6 +465,12 @@ namespace gr {
}
}
}
+
+ void
+ waterfall_sink_f_impl::set_time_per_fft(double t)
+ {
+ d_main_gui->setTimePerFFT(t);
+ }
int
waterfall_sink_f_impl::work(int noutput_items,
diff --git a/gr-qtgui/lib/waterfall_sink_f_impl.h b/gr-qtgui/lib/waterfall_sink_f_impl.h
index ca6e3f4264..2710f304ec 100644
--- a/gr-qtgui/lib/waterfall_sink_f_impl.h
+++ b/gr-qtgui/lib/waterfall_sink_f_impl.h
@@ -106,6 +106,7 @@ namespace gr {
void set_intensity_range(const double min, const double max);
void set_update_time(double t);
+ void set_time_per_fft(double t);
void set_title(const std::string &title);
void set_line_label(int which, const std::string &label);
void set_line_alpha(int which, double alpha);
diff --git a/gr-qtgui/lib/waterfalldisplayform.cc b/gr-qtgui/lib/waterfalldisplayform.cc
index c1dd8f7aab..9f87504d9c 100644
--- a/gr-qtgui/lib/waterfalldisplayform.cc
+++ b/gr-qtgui/lib/waterfalldisplayform.cc
@@ -48,7 +48,7 @@ WaterfallDisplayForm::WaterfallDisplayForm(int nplots, QWidget* parent)
d_clicked = false;
d_clicked_freq = 0;
-
+ d_time_per_fft = 0;
// We don't use the normal menus that are part of the displayform.
// Clear them out to get rid of their resources.
for(int i = 0; i < nplots; i++) {
@@ -138,7 +138,7 @@ WaterfallDisplayForm::newData(const QEvent *updateEvent)
d_max_val = *max_val;
}
- getPlot()->plotNewData(dataPoints, numDataPoints, d_update_time, dataTimestamp, 0);
+ getPlot()->plotNewData(dataPoints, numDataPoints, d_time_per_fft, dataTimestamp, 0);
}
void
@@ -337,3 +337,24 @@ WaterfallDisplayForm::setPlotPosHalf(bool half)
getPlot()->setPlotPosHalf(half);
getPlot()->replot();
}
+
+void
+WaterfallDisplayForm::setTimePerFFT(double t)
+{
+ d_time_per_fft = t;
+}
+
+double WaterfallDisplayForm::getTimePerFFT()
+{
+ return d_time_per_fft;
+}
+// Override displayform SetUpdateTime() to set FFT time
+void
+WaterfallDisplayForm::setUpdateTime(double t)
+{
+ d_update_time = t;
+ // Assume times are equal unless explictly told by setTimePerFFT()
+ // This is the case when plotting using gr_spectrogram_plot
+ d_time_per_fft = t;
+}
+