diff options
Diffstat (limited to 'gr-blocks/lib/complex_to_interleaved_short_impl.cc')
-rw-r--r-- | gr-blocks/lib/complex_to_interleaved_short_impl.cc | 20 |
1 files changed, 11 insertions, 9 deletions
diff --git a/gr-blocks/lib/complex_to_interleaved_short_impl.cc b/gr-blocks/lib/complex_to_interleaved_short_impl.cc index 2e8e8d047d..6a20e0b59f 100644 --- a/gr-blocks/lib/complex_to_interleaved_short_impl.cc +++ b/gr-blocks/lib/complex_to_interleaved_short_impl.cc @@ -14,21 +14,26 @@ #include "complex_to_interleaved_short_impl.h" #include <gnuradio/io_signature.h> +#include <volk/volk.h> namespace gr { namespace blocks { -complex_to_interleaved_short::sptr complex_to_interleaved_short::make(bool vector) +complex_to_interleaved_short::sptr complex_to_interleaved_short::make(bool vector, + float scale_factor) { - return gnuradio::get_initial_sptr(new complex_to_interleaved_short_impl(vector)); + return gnuradio::get_initial_sptr( + new complex_to_interleaved_short_impl(vector, scale_factor)); } -complex_to_interleaved_short_impl::complex_to_interleaved_short_impl(bool vector) +complex_to_interleaved_short_impl::complex_to_interleaved_short_impl(bool vector, + float scale_factor) : sync_interpolator( "complex_to_interleaved_short", io_signature::make(1, 1, sizeof(gr_complex)), io_signature::make(1, 1, vector ? 2 * sizeof(short) : sizeof(short)), vector ? 1 : 2), + d_scalar(scale_factor), d_vector(vector) { } @@ -37,14 +42,11 @@ int complex_to_interleaved_short_impl::work(int noutput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items) { - const gr_complex* in = (const gr_complex*)input_items[0]; + const float* in = (const float*)input_items[0]; short* out = (short*)output_items[0]; - int npairs = (d_vector ? noutput_items : noutput_items / 2); - for (int i = 0; i < npairs; i++) { - *out++ = (short)lrintf(in[i].real()); // FIXME saturate? - *out++ = (short)lrintf(in[i].imag()); - } + volk_32f_s32f_convert_16i( + out, in, d_scalar, d_vector ? noutput_items * 2 : noutput_items); return noutput_items; } |