diff options
Diffstat (limited to 'gr-qtgui/lib/freq_sink_f_impl.cc')
-rw-r--r-- | gr-qtgui/lib/freq_sink_f_impl.cc | 89 |
1 files changed, 24 insertions, 65 deletions
diff --git a/gr-qtgui/lib/freq_sink_f_impl.cc b/gr-qtgui/lib/freq_sink_f_impl.cc index f16af85bab..cfc5f2d9d4 100644 --- a/gr-qtgui/lib/freq_sink_f_impl.cc +++ b/gr-qtgui/lib/freq_sink_f_impl.cc @@ -64,14 +64,6 @@ freq_sink_f_impl::freq_sink_f_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_f_impl::freq_sink_f_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, true); - 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, true); + 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( - (float*)volk_malloc(d_fftsize * sizeof(float), volk_get_alignment())); - d_magbufs.push_back( - (double*)volk_malloc(d_fftsize * sizeof(double), volk_get_alignment())); - - memset(d_residbufs[i], 0, d_fftsize * sizeof(float)); - 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( - (float*)volk_malloc(d_fftsize * sizeof(float), volk_get_alignment())); - d_pdu_magbuf = (double*)volk_malloc(d_fftsize * sizeof(double), volk_get_alignment()); - d_magbufs.push_back(d_pdu_magbuf); - memset(d_residbufs[d_nconnections], 0, d_fftsize * sizeof(float)); - 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_f_impl::~freq_sink_f_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_f_impl::check_topology(int ninputs, int noutputs) @@ -436,20 +400,14 @@ bool freq_sink_f_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] = - (float*)volk_malloc(newfftsize * sizeof(float), volk_get_alignment()); - d_magbufs[i] = - (double*)volk_malloc(newfftsize * sizeof(double), volk_get_alignment()); - - memset(d_residbufs[i], 0, newfftsize * sizeof(float)); - 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_magbufs.size() - 1].data(); // Set new fft size and reset buffer index // (throws away any currently held data, but who cares?) @@ -460,12 +418,10 @@ bool freq_sink_f_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); @@ -538,9 +494,10 @@ void freq_sink_f_impl::_test_trigger_tags(int start, int nitems) } } -void freq_sink_f_impl::_test_trigger_norm(int nitems, std::vector<double*> inputs) +void freq_sink_f_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++; @@ -595,9 +552,9 @@ int freq_sink_f_impl::work(int noutput_items, for (int n = 0; n < d_nconnections; n++) { // Fill up residbuf with d_fftsize number of items in = (const float*)input_items[n]; - memcpy(d_residbufs[n], &in[d_index], sizeof(float) * d_fftsize); + memcpy(d_residbufs[n].data(), &in[d_index], sizeof(float) * 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]); @@ -673,14 +630,16 @@ void freq_sink_f_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 - memset(d_residbufs[d_nconnections], 0x00, sizeof(float) * d_fftsize); + memset(d_residbufs[d_nconnections].data(), 0x00, sizeof(float) * d_fftsize); // Copy in as much of the input samples as we can - memcpy(d_residbufs[d_nconnections], &in[min], sizeof(float) * (max - min)); + memcpy(d_residbufs[d_nconnections].data(), + &in[min], + sizeof(float) * (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]; } |