diff options
author | Sylvain Munaut <tnt@246tNt.com> | 2016-10-23 16:44:39 +0200 |
---|---|---|
committer | Dimitri Stolnikov <horiz0n@gmx.net> | 2017-02-27 23:03:43 +0100 |
commit | 71846180f548bac7412ce0fede505672c343b2d5 (patch) | |
tree | 0d3320324aef0430e629beff3591a7b3f382ec05 | |
parent | 43df1c98c4110a4d3b66ce867da7c21dbf1e6d58 (diff) |
bladeRF: Use VOLK for type conversion
Signed-off-by: Sylvain Munaut <tnt@246tNt.com>
-rw-r--r-- | lib/bladerf/bladerf_sink_c.cc | 7 | ||||
-rw-r--r-- | lib/bladerf/bladerf_source_c.cc | 19 |
2 files changed, 7 insertions, 19 deletions
diff --git a/lib/bladerf/bladerf_sink_c.cc b/lib/bladerf/bladerf_sink_c.cc index 5c4b45f..7019629 100644 --- a/lib/bladerf/bladerf_sink_c.cc +++ b/lib/bladerf/bladerf_sink_c.cc @@ -38,6 +38,8 @@ #include <gnuradio/tags.h> #include <gnuradio/sync_block.h> +#include <volk/volk.h> + #include "arg_helpers.h" #include "bladerf_sink_c.h" @@ -259,10 +261,7 @@ int bladerf_sink_c::work( int noutput_items, } /* Convert floating point samples into fixed point */ - for (int i = 0; i < 2 * noutput_items;) { - _conv_buf[i++] = (int16_t)(scaling * real(*in)); - _conv_buf[i++] = (int16_t)(scaling * imag(*in++)); - } + volk_32f_s32f_convert_16i(_conv_buf, (float*)in, scaling, 2 * noutput_items); if (_use_metadata) { ret = transmit_with_tags(noutput_items); diff --git a/lib/bladerf/bladerf_source_c.cc b/lib/bladerf/bladerf_source_c.cc index ac002db..17aeacf 100644 --- a/lib/bladerf/bladerf_source_c.cc +++ b/lib/bladerf/bladerf_source_c.cc @@ -36,6 +36,8 @@ #include <gnuradio/io_signature.h> +#include <volk/volk.h> + #include "arg_helpers.h" #include "bladerf_source_c.h" #include "osmosdr/source.h" @@ -139,8 +141,7 @@ int bladerf_source_c::work( int noutput_items, gr_vector_void_star &output_items ) { int ret; - int16_t *current; - const float scaling = 1.0f / 2048.0f; + const float scaling = 2048.0f; gr_complex *out = static_cast<gr_complex *>(output_items[0]); struct bladerf_metadata meta; struct bladerf_metadata *meta_ptr = NULL; @@ -183,20 +184,8 @@ int bladerf_source_c::work( int noutput_items, _consecutive_failures = 0; } - current = _conv_buf; - /* Convert them from fixed to floating point */ - for (int i = 0; i < noutput_items; ++i) { - float x, y; - - x = scaling * *current; - current++; - - y = scaling * *current; - current++; - - out[i] = gr_complex(x, y) ; - } + volk_16i_s32f_convert_32f((float*)out, _conv_buf, scaling, 2*noutput_items); return noutput_items; } |