summaryrefslogtreecommitdiff
path: root/gr-digital/lib/pfb_clock_sync_ccf_impl.cc
diff options
context:
space:
mode:
Diffstat (limited to 'gr-digital/lib/pfb_clock_sync_ccf_impl.cc')
-rw-r--r--gr-digital/lib/pfb_clock_sync_ccf_impl.cc21
1 files changed, 10 insertions, 11 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