free(d_buffer);
}
-gr_complex
+void
+gri_fir_filter_with_buffer_ccf::set_taps (const std::vector<float> &taps)
+{
+ d_taps = gr_reverse(taps);
+
+ if(d_buffer != NULL) {
+ free(d_buffer);
+ d_buffer = NULL;
+ }
+
+ // FIXME: memalign this to 16-byte boundaries for SIMD later
+ size_t t = sizeof(gr_complex) * 2 * d_taps.size();
+ d_buffer = (gr_complex*)malloc(t);
+ memset(d_buffer, 0x00, t);
+ d_idx = 0;
+}
+
+gr_complex
gri_fir_filter_with_buffer_ccf::filter (gr_complex input)
{
unsigned int i;
if(d_idx >= ntaps())
d_idx = 0;
- gr_complex out = gr_complex(0,0);
+ gr_complex out = 0;
for(i = 0; i < ntaps(); i++) {
- out += d_buffer[d_idx + i]*d_taps[i];
+ out += d_buffer[d_idx + i] * d_taps[i];
}
- return out;
+ return (gr_complex)out;
}
void
gri_fir_filter_with_buffer_ccf::filterN (gr_complex output[],
- const gr_complex input[],
- unsigned long n)
+ const gr_complex input[],
+ unsigned long n)
{
for(unsigned long i = 0; i < n; i++) {
output[i] = filter(input[i]);