diff options
Diffstat (limited to 'gr-blocks/lib/complex_to_interleaved_char_impl.cc')
-rw-r--r-- | gr-blocks/lib/complex_to_interleaved_char_impl.cc | 24 |
1 files changed, 13 insertions, 11 deletions
diff --git a/gr-blocks/lib/complex_to_interleaved_char_impl.cc b/gr-blocks/lib/complex_to_interleaved_char_impl.cc index d875ce9772..a60a3d9675 100644 --- a/gr-blocks/lib/complex_to_interleaved_char_impl.cc +++ b/gr-blocks/lib/complex_to_interleaved_char_impl.cc @@ -14,21 +14,26 @@ #include "complex_to_interleaved_char_impl.h" #include <gnuradio/io_signature.h> +#include <volk/volk.h> namespace gr { namespace blocks { -complex_to_interleaved_char::sptr complex_to_interleaved_char::make(bool vector) +complex_to_interleaved_char::sptr complex_to_interleaved_char::make(bool vector, + float scale_factor) { - return gnuradio::get_initial_sptr(new complex_to_interleaved_char_impl(vector)); + return gnuradio::get_initial_sptr( + new complex_to_interleaved_char_impl(vector, scale_factor)); } -complex_to_interleaved_char_impl::complex_to_interleaved_char_impl(bool vector) +complex_to_interleaved_char_impl::complex_to_interleaved_char_impl(bool vector, + float scale_factor) : sync_interpolator( "complex_to_interleaved_char", io_signature::make(1, 1, sizeof(gr_complex)), io_signature::make(1, 1, vector ? 2 * sizeof(char) : sizeof(char)), vector ? 1 : 2), + d_scalar(scale_factor), d_vector(vector) { } @@ -37,14 +42,11 @@ int complex_to_interleaved_char_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]; - char* out = (char*)output_items[0]; - - int npairs = (d_vector ? noutput_items : noutput_items / 2); - for (int i = 0; i < npairs; i++) { - *out++ = (char)lrintf(in[i].real()); // FIXME saturate? - *out++ = (char)lrintf(in[i].imag()); - } + const float* in = (const float*)input_items[0]; + int8_t* out = (int8_t*)output_items[0]; + + volk_32f_s32f_convert_8i( + out, in, d_scalar, d_vector ? noutput_items * 2 : noutput_items); return noutput_items; } |