diff options
Diffstat (limited to 'gr-blocks/lib/interleaved_char_to_complex_impl.cc')
-rw-r--r-- | gr-blocks/lib/interleaved_char_to_complex_impl.cc | 18 |
1 files changed, 12 insertions, 6 deletions
diff --git a/gr-blocks/lib/interleaved_char_to_complex_impl.cc b/gr-blocks/lib/interleaved_char_to_complex_impl.cc index 31ed942485..1b1ace671f 100644 --- a/gr-blocks/lib/interleaved_char_to_complex_impl.cc +++ b/gr-blocks/lib/interleaved_char_to_complex_impl.cc @@ -19,16 +19,21 @@ namespace gr { namespace blocks { -interleaved_char_to_complex::sptr interleaved_char_to_complex::make(bool vector_input) +interleaved_char_to_complex::sptr interleaved_char_to_complex::make(bool vector_input, + float scale_factor) { - return gnuradio::get_initial_sptr(new interleaved_char_to_complex_impl(vector_input)); + return gnuradio::get_initial_sptr( + new interleaved_char_to_complex_impl(vector_input, scale_factor)); } -interleaved_char_to_complex_impl::interleaved_char_to_complex_impl(bool vector_input) +interleaved_char_to_complex_impl::interleaved_char_to_complex_impl(bool vector_input, + float scale_factor) : sync_decimator("interleaved_char_to_complex", gr::io_signature::make(1, 1, (vector_input ? 2 : 1) * sizeof(char)), gr::io_signature::make(1, 1, sizeof(gr_complex)), - vector_input ? 1 : 2) + vector_input ? 1 : 2), + d_scalar(scale_factor), + d_vector(vector_input) { const int alignment_multiple = volk_get_alignment() / sizeof(gr_complex); set_alignment(std::max(1, alignment_multiple)); @@ -38,10 +43,11 @@ int interleaved_char_to_complex_impl::work(int noutput_items, gr_vector_const_void_star& input_items, gr_vector_void_star& output_items) { - const int8_t* in = (const int8_t*)input_items[0]; float* out = (float*)output_items[0]; + const int8_t* in = (const int8_t*)input_items[0]; - volk_8i_s32f_convert_32f_u(out, in, 1.0, 2 * noutput_items); + // This calculates in[] * 1.0 / d_scalar + volk_8i_s32f_convert_32f(out, in, d_scalar, 2 * noutput_items); return noutput_items; } |