diff options
-rw-r--r-- | gr-filter/lib/filter_delay_fc_impl.cc | 16 | ||||
-rw-r--r-- | gr-filter/lib/hilbert_fc_impl.cc | 14 |
2 files changed, 23 insertions, 7 deletions
diff --git a/gr-filter/lib/filter_delay_fc_impl.cc b/gr-filter/lib/filter_delay_fc_impl.cc index ce320c557..279368664 100644 --- a/gr-filter/lib/filter_delay_fc_impl.cc +++ b/gr-filter/lib/filter_delay_fc_impl.cc @@ -25,6 +25,7 @@ #endif #include "filter_delay_fc_impl.h" +#include <volk/volk.h> namespace gr { namespace filter { @@ -44,6 +45,10 @@ namespace gr { d_fir = new kernel::fir_filter_fff(1, taps); d_delay = d_fir->ntaps() / 2; set_history(d_fir->ntaps()); + + const int alignment_multiple = + volk_get_alignment() / sizeof(float); + set_alignment(std::max(1, alignment_multiple)); } filter_delay_fc_impl::~filter_delay_fc_impl() @@ -73,6 +78,7 @@ namespace gr { float *in0 = (float *)input_items[0]; float *in1 = (float *)input_items[1]; gr_complex *out = (gr_complex *)output_items[0]; + float d_out; if(d_update) { d_fir->set_taps(d_taps); @@ -84,15 +90,17 @@ namespace gr { switch(input_items.size ()) { case 1: for(int i = 0; i < noutput_items; i++) { - out[i] = gr_complex (in0[i + d_delay], - d_fir->filter (&in0[i])); + d_fir->filterN(&d_out, &in0[i], 1); + out[i] = gr_complex(in0[i + d_delay], + d_out); } break; case 2: for(int j = 0; j < noutput_items; j++) { - out[j] = gr_complex (in0[j + d_delay], - d_fir->filter (&in1[j])); + d_fir->filterN(&d_out, &in1[j], 1); + out[j] = gr_complex(in0[j + d_delay], + d_out); } break; diff --git a/gr-filter/lib/hilbert_fc_impl.cc b/gr-filter/lib/hilbert_fc_impl.cc index 946b47e4a..7aaa23a62 100644 --- a/gr-filter/lib/hilbert_fc_impl.cc +++ b/gr-filter/lib/hilbert_fc_impl.cc @@ -27,6 +27,7 @@ #include "hilbert_fc_impl.h" #include <filter/firdes.h> #include <gr_io_signature.h> +#include <volk/volk.h> namespace gr { namespace filter { @@ -44,6 +45,10 @@ namespace gr { { d_hilb = new kernel::fir_filter_fff(1, firdes::hilbert(d_ntaps)); set_history (d_ntaps); + + const int alignment_multiple = + volk_get_alignment() / sizeof(float); + set_alignment(std::max(1, alignment_multiple)); } hilbert_fc_impl::~hilbert_fc_impl() @@ -58,10 +63,13 @@ namespace gr { { float *in = (float *)input_items[0]; gr_complex *out = (gr_complex *)output_items[0]; + float h_out; - for(int i = 0; i < noutput_items; i++) - out[i] = gr_complex (in[i + d_ntaps/2], - d_hilb->filter (&in[i])); + for(int i = 0; i < noutput_items; i++) { + d_hilb->filterN(&h_out, &in[i], 1); + out[i] = gr_complex(in[i + d_ntaps/2], + h_out); + } return noutput_items; } |