summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorThomas Habets <thomas@habets.se>2020-08-12 12:14:00 +0100
committerMartin Braun <martin@gnuradio.org>2020-08-14 04:08:48 -0700
commit328454fdae0e7693ec9a7829e6d126510837f152 (patch)
tree068f94a5ac723ad9da41e2d3c4e704346c563c7d
parent2dcac4cc04f130fec5a707189165c39c6d03b2da (diff)
digital/pfb_clock_sync: Remove manual memory management and pointers
-rw-r--r--gr-digital/lib/pfb_clock_sync_ccf_impl.cc21
-rw-r--r--gr-digital/lib/pfb_clock_sync_ccf_impl.h6
-rw-r--r--gr-digital/lib/pfb_clock_sync_fff_impl.cc24
-rw-r--r--gr-digital/lib/pfb_clock_sync_fff_impl.h7
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);