summaryrefslogtreecommitdiff
path: root/gr-qtgui/lib/freq_sink_c_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gr-qtgui/lib/freq_sink_c_impl.cc')
-rw-r--r--gr-qtgui/lib/freq_sink_c_impl.cc93
1 files changed, 27 insertions, 66 deletions
diff --git a/gr-qtgui/lib/freq_sink_c_impl.cc b/gr-qtgui/lib/freq_sink_c_impl.cc
index 059007f983..267e31e419 100644
--- a/gr-qtgui/lib/freq_sink_c_impl.cc
+++ b/gr-qtgui/lib/freq_sink_c_impl.cc
@@ -64,14 +64,6 @@ freq_sink_c_impl::freq_sink_c_impl(int fftsize,
d_port_bw(pmt::mp("bw")),
d_parent(parent)
{
- // Required now for Qt; argc must be greater than 0 and argv
- // must have at least one valid character. Must be valid through
- // life of the qApplication:
- // http://harmattan-dev.nokia.com/docs/library/html/qt4/qapplication.html
- d_argc = 1;
- d_argv = new char;
- d_argv[0] = '\0';
-
// setup bw input port
message_port_register_in(d_port_bw);
set_msg_handler(d_port_bw, [this](pmt::pmt_t msg) { this->handle_set_bw(msg); });
@@ -86,34 +78,16 @@ freq_sink_c_impl::freq_sink_c_impl(int fftsize,
message_port_register_in(pmt::mp("in"));
set_msg_handler(pmt::mp("in"), [this](pmt::pmt_t msg) { this->handle_pdus(msg); });
- d_main_gui = NULL;
-
- // Perform fftshift operation;
- // this is usually desired when plotting
- d_shift = true;
-
- d_fft = new fft::fft_complex_fwd(d_fftsize);
- d_fbuf = (float*)volk_malloc(d_fftsize * sizeof(float), volk_get_alignment());
- memset(d_fbuf, 0, d_fftsize * sizeof(float));
+ d_fft = std::make_unique<fft::fft_complex_fwd>(d_fftsize);
+ d_fbuf.resize(d_fftsize);
- d_index = 0;
// save the last "connection" for the PDU memory
- for (int i = 0; i < d_nconnections; i++) {
- d_residbufs.push_back((gr_complex*)volk_malloc(d_fftsize * sizeof(gr_complex),
- volk_get_alignment()));
- d_magbufs.push_back(
- (double*)volk_malloc(d_fftsize * sizeof(double), volk_get_alignment()));
-
- std::fill_n(d_residbufs[i], d_fftsize, 0);
- memset(d_magbufs[i], 0, d_fftsize * sizeof(double));
+ for (int i = 0; i < d_nconnections + 1; i++) {
+ d_residbufs.emplace_back(d_fftsize);
+ d_magbufs.emplace_back(d_fftsize);
}
- d_residbufs.push_back(
- (gr_complex*)volk_malloc(d_fftsize * sizeof(gr_complex), volk_get_alignment()));
- d_pdu_magbuf = (double*)volk_malloc(d_fftsize * sizeof(double), volk_get_alignment());
- d_magbufs.push_back(d_pdu_magbuf);
- std::fill_n(d_residbufs[d_nconnections], d_fftsize, 0);
- memset(d_pdu_magbuf, 0, d_fftsize * sizeof(double));
+ d_pdu_magbuf = d_magbufs[d_magbufs.size() - 1].data();
buildwindow();
@@ -126,16 +100,6 @@ freq_sink_c_impl::~freq_sink_c_impl()
{
if (!d_main_gui->isClosed())
d_main_gui->close();
-
- // +1 to handle PDU buffers; will also take care of d_pdu_magbuf
- for (int i = 0; i < d_nconnections + 1; i++) {
- volk_free(d_residbufs[i]);
- volk_free(d_magbufs[i]);
- }
- delete d_fft;
- volk_free(d_fbuf);
-
- delete d_argv;
}
bool freq_sink_c_impl::check_topology(int ninputs, int noutputs)
@@ -433,20 +397,14 @@ bool freq_sink_c_impl::fftresize()
// Resize residbuf and replace data
// +1 to handle PDU buffers
for (int i = 0; i < d_nconnections + 1; i++) {
- volk_free(d_residbufs[i]);
- volk_free(d_magbufs[i]);
-
- d_residbufs[i] = (gr_complex*)volk_malloc(newfftsize * sizeof(gr_complex),
- volk_get_alignment());
- d_magbufs[i] =
- (double*)volk_malloc(newfftsize * sizeof(double), volk_get_alignment());
-
- std::fill_n(d_residbufs[i], newfftsize, 0);
- memset(d_magbufs[i], 0, newfftsize * sizeof(double));
+ d_residbufs[i].clear();
+ d_residbufs[i].resize(newfftsize);
+ d_magbufs[i].clear();
+ d_magbufs[i].resize(newfftsize);
}
// Update the pointer to the newly allocated memory
- d_pdu_magbuf = d_magbufs[d_nconnections];
+ d_pdu_magbuf = d_magbufs[d_nconnections].data();
// Set new fft size and reset buffer index
// (throws away any currently held data, but who cares?)
@@ -457,12 +415,10 @@ bool freq_sink_c_impl::fftresize()
buildwindow();
// Reset FFTW plan for new size
- delete d_fft;
- d_fft = new fft::fft_complex_fwd(d_fftsize);
+ d_fft = std::make_unique<fft::fft_complex_fwd>(d_fftsize);
- volk_free(d_fbuf);
- d_fbuf = (float*)volk_malloc(d_fftsize * sizeof(float), volk_get_alignment());
- memset(d_fbuf, 0, d_fftsize * sizeof(float));
+ d_fbuf.clear();
+ d_fbuf.resize(d_fftsize);
d_fft_shift.resize(d_fftsize);
@@ -535,9 +491,10 @@ void freq_sink_c_impl::_test_trigger_tags(int start, int nitems)
}
}
-void freq_sink_c_impl::_test_trigger_norm(int nitems, std::vector<double*> inputs)
+void freq_sink_c_impl::_test_trigger_norm(int nitems,
+ std::vector<volk::vector<double>> inputs)
{
- const double* in = (const double*)inputs[d_trigger_channel];
+ const double* in = (const double*)inputs[d_trigger_channel].data();
for (int i = 0; i < nitems; i++) {
d_trigger_count++;
@@ -592,9 +549,10 @@ int freq_sink_c_impl::work(int noutput_items,
// Perform FFT and shift operations into d_magbufs
for (int n = 0; n < d_nconnections; n++) {
in = (const gr_complex*)input_items[n];
- memcpy(d_residbufs[n], &in[d_index], sizeof(gr_complex) * d_fftsize);
+ memcpy(
+ d_residbufs[n].data(), &in[d_index], sizeof(gr_complex) * d_fftsize);
- fft(d_fbuf, d_residbufs[n], d_fftsize);
+ fft(d_fbuf.data(), d_residbufs[n].data(), d_fftsize);
for (int x = 0; x < d_fftsize; x++) {
d_magbufs[n][x] = (double)((1.0 - d_fftavg) * d_magbufs[n][x] +
(d_fftavg)*d_fbuf[x]);
@@ -671,15 +629,18 @@ void freq_sink_c_impl::handle_pdus(pmt::pmt_t msg)
size_t max = std::min(d_fftsize, static_cast<int>(len));
for (int n = 0; n < nffts; n++) {
// Clear in case (max-min) < d_fftsize
- std::fill_n(d_residbufs[d_nconnections], d_fftsize, 0x00);
+ std::fill(std::begin(d_residbufs[d_nconnections]),
+ std::end(d_residbufs[d_nconnections]),
+ 0x00);
// Copy in as much of the input samples as we can
- memcpy(
- d_residbufs[d_nconnections], &in[min], sizeof(gr_complex) * (max - min));
+ memcpy(d_residbufs[d_nconnections].data(),
+ &in[min],
+ sizeof(gr_complex) * (max - min));
// Apply the window and FFT; copy data into the PDU
// magnitude buffer.
- fft(d_fbuf, d_residbufs[d_nconnections], d_fftsize);
+ fft(d_fbuf.data(), d_residbufs[d_nconnections].data(), d_fftsize);
for (int x = 0; x < d_fftsize; x++) {
d_pdu_magbuf[x] += (double)d_fbuf[x];
}