diff options
author | Thomas Habets <thomas@habets.se> | 2020-08-12 12:14:00 +0100 |
---|---|---|
committer | Martin Braun <martin@gnuradio.org> | 2020-08-14 04:08:48 -0700 |
commit | 328454fdae0e7693ec9a7829e6d126510837f152 (patch) | |
tree | 068f94a5ac723ad9da41e2d3c4e704346c563c7d | |
parent | 2dcac4cc04f130fec5a707189165c39c6d03b2da (diff) |
digital/pfb_clock_sync: Remove manual memory management and pointers
-rw-r--r-- | gr-digital/lib/pfb_clock_sync_ccf_impl.cc | 21 | ||||
-rw-r--r-- | gr-digital/lib/pfb_clock_sync_ccf_impl.h | 6 | ||||
-rw-r--r-- | gr-digital/lib/pfb_clock_sync_fff_impl.cc | 24 | ||||
-rw-r--r-- | gr-digital/lib/pfb_clock_sync_fff_impl.h | 7 |
4 files changed, 26 insertions, 32 deletions
diff --git a/gr-digital/lib/pfb_clock_sync_ccf_impl.cc b/gr-digital/lib/pfb_clock_sync_ccf_impl.cc index bdaa7d880a..7ab1e857d9 100644 --- a/gr-digital/lib/pfb_clock_sync_ccf_impl.cc +++ b/gr-digital/lib/pfb_clock_sync_ccf_impl.cc @@ -80,14 +80,14 @@ pfb_clock_sync_ccf_impl::pfb_clock_sync_ccf_impl(double sps, d_rate_f = d_rate - (float)d_rate_i; d_filtnum = (int)floor(d_k); - d_filters.resize(d_nfilters); - d_diff_filters.resize(d_nfilters); + d_filters.reserve(d_nfilters); + d_diff_filters.reserve(d_nfilters); // Create an FIR filter for each channel and zero out the taps std::vector<float> vtaps(1, 0); for (int i = 0; i < d_nfilters; i++) { - d_filters[i].reset(new kernel::fir_filter_ccf(1, vtaps)); - d_diff_filters[i].reset(new kernel::fir_filter_ccf(1, vtaps)); + d_filters.emplace_back(1, vtaps); + d_diff_filters.emplace_back(1, vtaps); } // Now, actually set the filters' taps @@ -194,10 +194,9 @@ void pfb_clock_sync_ccf_impl::update_gains() d_beta = (4 * d_loop_bw * d_loop_bw) / denom; } -void pfb_clock_sync_ccf_impl::set_taps( - const std::vector<float>& newtaps, - std::vector<std::vector<float>>& ourtaps, - std::vector<std::unique_ptr<kernel::fir_filter_ccf>>& ourfilter) +void pfb_clock_sync_ccf_impl::set_taps(const std::vector<float>& newtaps, + std::vector<std::vector<float>>& ourtaps, + std::vector<kernel::fir_filter_ccf>& ourfilter) { int i, j; @@ -224,7 +223,7 @@ void pfb_clock_sync_ccf_impl::set_taps( } // Build a filter for each channel and add it's taps to it - ourfilter[i]->set_taps(ourtaps[i]); + ourfilter[i].set_taps(ourtaps[i]); } // Set the history to ensure enough input items for each filter @@ -390,7 +389,7 @@ int pfb_clock_sync_ccf_impl::general_work(int noutput_items, count -= 1; } - out[i + d_out_idx] = d_filters[d_filtnum]->filter(&in[count + d_out_idx]); + out[i + d_out_idx] = d_filters[d_filtnum].filter(&in[count + d_out_idx]); d_k = d_k + d_rate_i + d_rate_f; // update phase @@ -427,7 +426,7 @@ int pfb_clock_sync_ccf_impl::general_work(int noutput_items, d_out_idx = 0; // Update the phase and rate estimates for this symbol - gr_complex diff = d_diff_filters[d_filtnum]->filter(&in[count]); + gr_complex diff = d_diff_filters[d_filtnum].filter(&in[count]); error_r = out[i].real() * diff.real(); error_i = out[i].imag() * diff.imag(); d_error = (error_i + error_r) / 2.0; // average error from I&Q channel diff --git a/gr-digital/lib/pfb_clock_sync_ccf_impl.h b/gr-digital/lib/pfb_clock_sync_ccf_impl.h index 6c9ed365a4..cd6d855c86 100644 --- a/gr-digital/lib/pfb_clock_sync_ccf_impl.h +++ b/gr-digital/lib/pfb_clock_sync_ccf_impl.h @@ -30,8 +30,8 @@ private: const int d_nfilters; int d_taps_per_filter; - std::vector<std::unique_ptr<kernel::fir_filter_ccf>> d_filters; - std::vector<std::unique_ptr<kernel::fir_filter_ccf>> d_diff_filters; + std::vector<kernel::fir_filter_ccf> d_filters; + std::vector<kernel::fir_filter_ccf> d_diff_filters; std::vector<std::vector<float>> d_taps; std::vector<std::vector<float>> d_dtaps; std::vector<float> d_updated_taps; @@ -53,7 +53,7 @@ private: void set_taps(const std::vector<float>& taps, std::vector<std::vector<float>>& ourtaps, - std::vector<std::unique_ptr<kernel::fir_filter_ccf>>& ourfilter); + std::vector<kernel::fir_filter_ccf>& ourfilter); public: pfb_clock_sync_ccf_impl(double sps, diff --git a/gr-digital/lib/pfb_clock_sync_fff_impl.cc b/gr-digital/lib/pfb_clock_sync_fff_impl.cc index fe3efc7435..e15b184e22 100644 --- a/gr-digital/lib/pfb_clock_sync_fff_impl.cc +++ b/gr-digital/lib/pfb_clock_sync_fff_impl.cc @@ -76,14 +76,14 @@ pfb_clock_sync_fff_impl::pfb_clock_sync_fff_impl(double sps, d_rate_f = d_rate - (float)d_rate_i; d_filtnum = (int)floor(d_k); - d_filters = std::vector<kernel::fir_filter_fff*>(d_nfilters); - d_diff_filters = std::vector<kernel::fir_filter_fff*>(d_nfilters); + d_filters.reserve(d_nfilters); + d_diff_filters.reserve(d_nfilters); // Create an FIR filter for each channel and zero out the taps std::vector<float> vtaps(1, 0); for (int i = 0; i < d_nfilters; i++) { - d_filters[i] = new kernel::fir_filter_fff(1, vtaps); - d_diff_filters[i] = new kernel::fir_filter_fff(1, vtaps); + d_filters.emplace_back(1, vtaps); + d_diff_filters.emplace_back(1, vtaps); } // Now, actually set the filters' taps @@ -95,13 +95,7 @@ pfb_clock_sync_fff_impl::pfb_clock_sync_fff_impl(double sps, set_relative_rate((uint64_t)d_osps, (uint64_t)d_sps); } -pfb_clock_sync_fff_impl::~pfb_clock_sync_fff_impl() -{ - for (int i = 0; i < d_nfilters; i++) { - delete d_filters[i]; - delete d_diff_filters[i]; - } -} +pfb_clock_sync_fff_impl::~pfb_clock_sync_fff_impl() {} bool pfb_clock_sync_fff_impl::check_topology(int ninputs, int noutputs) { @@ -189,7 +183,7 @@ void pfb_clock_sync_fff_impl::update_gains() void pfb_clock_sync_fff_impl::set_taps(const std::vector<float>& newtaps, std::vector<std::vector<float>>& ourtaps, - std::vector<kernel::fir_filter_fff*>& ourfilter) + std::vector<kernel::fir_filter_fff>& ourfilter) { int i, j; @@ -216,7 +210,7 @@ void pfb_clock_sync_fff_impl::set_taps(const std::vector<float>& newtaps, } // Build a filter for each channel and add it's taps to it - ourfilter[i]->set_taps(ourtaps[i]); + ourfilter[i].set_taps(ourtaps[i]); } // Set the history to ensure enough input items for each filter @@ -367,7 +361,7 @@ int pfb_clock_sync_fff_impl::general_work(int noutput_items, count -= 1; } - out[i + d_out_idx] = d_filters[d_filtnum]->filter(&in[count + d_out_idx]); + out[i + d_out_idx] = d_filters[d_filtnum].filter(&in[count + d_out_idx]); d_k = d_k + d_rate_i + d_rate_f; // update phase d_out_idx++; @@ -389,7 +383,7 @@ int pfb_clock_sync_fff_impl::general_work(int noutput_items, d_out_idx = 0; // Update the phase and rate estimates for this symbol - float diff = d_diff_filters[d_filtnum]->filter(&in[count]); + float diff = d_diff_filters[d_filtnum].filter(&in[count]); d_error = out[i] * diff; // Run the control loop to update the current phase (k) and diff --git a/gr-digital/lib/pfb_clock_sync_fff_impl.h b/gr-digital/lib/pfb_clock_sync_fff_impl.h index cb3d3f2272..c7473f2a46 100644 --- a/gr-digital/lib/pfb_clock_sync_fff_impl.h +++ b/gr-digital/lib/pfb_clock_sync_fff_impl.h @@ -30,8 +30,8 @@ private: const int d_nfilters; int d_taps_per_filter; - std::vector<kernel::fir_filter_fff*> d_filters; - std::vector<kernel::fir_filter_fff*> d_diff_filters; + std::vector<kernel::fir_filter_fff> d_filters; + std::vector<kernel::fir_filter_fff> d_diff_filters; std::vector<std::vector<float>> d_taps; std::vector<std::vector<float>> d_dtaps; std::vector<float> d_updated_taps; @@ -51,7 +51,7 @@ private: void set_taps(const std::vector<float>& taps, std::vector<std::vector<float>>& ourtaps, - std::vector<kernel::fir_filter_fff*>& ourfilter); + std::vector<kernel::fir_filter_fff>& ourfilter); public: pfb_clock_sync_fff_impl(double sps, @@ -76,6 +76,7 @@ public: std::string taps_as_string() const; std::string diff_taps_as_string() const; + void set_loop_bandwidth(float bw); void set_damping_factor(float df); void set_alpha(float alpha); |