[hamradio-commits] [gnss-sdr] 07/44: Adding a filter for stream of shorts
Carles Fernandez
carles_fernandez-guest at moszumanska.debian.org
Sun Feb 15 15:32:18 UTC 2015
This is an automated email from the git hooks/post-receive script.
carles_fernandez-guest pushed a commit to branch next
in repository gnss-sdr.
commit b89e2b080254987ebc8521474b30314517789733
Author: Carles Fernandez <carles.fernandez at gmail.com>
Date: Tue Feb 3 16:14:42 2015 +0100
Adding a filter for stream of shorts
---
.../input_filter/gnuradio_blocks/CMakeLists.txt | 4 +-
.../gnuradio_blocks/byte_x2_to_complex_byte.cc | 4 +-
...x2_to_complex_byte.cc => cshort_to_float_x2.cc} | 39 ++++++--------
.../gnuradio_blocks/cshort_to_float_x2.h | 61 ++++++++++++++++++++++
...x2_to_complex_byte.cc => short_x2_to_cshort.cc} | 32 ++++++------
.../gnuradio_blocks/short_x2_to_cshort.h | 60 +++++++++++++++++++++
6 files changed, 157 insertions(+), 43 deletions(-)
diff --git a/src/algorithms/input_filter/gnuradio_blocks/CMakeLists.txt b/src/algorithms/input_filter/gnuradio_blocks/CMakeLists.txt
index 3da599a..b81a4a7 100644
--- a/src/algorithms/input_filter/gnuradio_blocks/CMakeLists.txt
+++ b/src/algorithms/input_filter/gnuradio_blocks/CMakeLists.txt
@@ -21,6 +21,8 @@ set(INPUT_FILTER_GR_BLOCKS_SOURCES
beamformer.cc
complex_byte_to_float_x2.cc
byte_x2_to_complex_byte.cc
+ cshort_to_float_x2.cc
+ short_x2_to_cshort.cc
)
include_directories(
@@ -34,4 +36,4 @@ include_directories(
file(GLOB INPUT_FILTER_GR_BLOCKS_HEADERS "*.h")
add_library(input_filter_gr_blocks ${INPUT_FILTER_GR_BLOCKS_SOURCES} ${INPUT_FILTER_GR_BLOCKS_HEADERS})
source_group(Headers FILES ${INPUT_FILTER_GR_BLOCKS_HEADERS})
-target_link_libraries(input_filter_gr_blocks ${GNURADIO_RUNTIME_LIBRARIES} ${VOLK_LIBRARIES})
\ No newline at end of file
+target_link_libraries(input_filter_gr_blocks ${GNURADIO_RUNTIME_LIBRARIES} ${VOLK_LIBRARIES})
diff --git a/src/algorithms/input_filter/gnuradio_blocks/byte_x2_to_complex_byte.cc b/src/algorithms/input_filter/gnuradio_blocks/byte_x2_to_complex_byte.cc
index 11b3b44..b9cae5a 100644
--- a/src/algorithms/input_filter/gnuradio_blocks/byte_x2_to_complex_byte.cc
+++ b/src/algorithms/input_filter/gnuradio_blocks/byte_x2_to_complex_byte.cc
@@ -1,6 +1,6 @@
/*!
* \file byte_x2_to_complex_byte.cc
- * \brief * \brief Adapts two signed char streams into a std::complex<signed char> stream
+ * \brief Adapts two signed char streams into a std::complex<signed char> stream
* \author Carles Fernandez Prades, cfernandez(at)cttc.es
*
* -------------------------------------------------------------------------
@@ -60,7 +60,7 @@ int byte_x2_to_complex_byte::work(int noutput_items,
// This could be put into a volk kernel
signed char real_part;
signed char imag_part;
- for(unsigned int number = 0; number < 2 * noutput_items; number++)
+ for(int number = 0; number < noutput_items; number++)
{
// lv_cmake(r, i) defined at volk/volk_complex.h
real_part = *in0++;
diff --git a/src/algorithms/input_filter/gnuradio_blocks/byte_x2_to_complex_byte.cc b/src/algorithms/input_filter/gnuradio_blocks/cshort_to_float_x2.cc
similarity index 56%
copy from src/algorithms/input_filter/gnuradio_blocks/byte_x2_to_complex_byte.cc
copy to src/algorithms/input_filter/gnuradio_blocks/cshort_to_float_x2.cc
index 11b3b44..861f1c0 100644
--- a/src/algorithms/input_filter/gnuradio_blocks/byte_x2_to_complex_byte.cc
+++ b/src/algorithms/input_filter/gnuradio_blocks/cshort_to_float_x2.cc
@@ -1,6 +1,6 @@
/*!
- * \file byte_x2_to_complex_byte.cc
- * \brief * \brief Adapts two signed char streams into a std::complex<signed char> stream
+ * \file cshort_to_float_x2.cc
+ * \brief Adapts a std::complex<short> stream into two float streams
* \author Carles Fernandez Prades, cfernandez(at)cttc.es
*
* -------------------------------------------------------------------------
@@ -29,44 +29,35 @@
*/
-#include "byte_x2_to_complex_byte.h"
+#include "cshort_to_float_x2.h"
#include <gnuradio/io_signature.h>
#include <volk/volk.h>
-byte_x2_to_complex_byte_sptr make_byte_x2_to_complex_byte()
+cshort_to_float_x2_sptr make_cshort_to_float_x2()
{
- return byte_x2_to_complex_byte_sptr(new byte_x2_to_complex_byte());
+ return cshort_to_float_x2_sptr(new cshort_to_float_x2());
}
-byte_x2_to_complex_byte::byte_x2_to_complex_byte() : sync_block("byte_x2_to_complex_byte",
- gr::io_signature::make (2, 2, sizeof(char)),
- gr::io_signature::make (1, 1, sizeof(lv_8sc_t))) // lv_8sc_t is a Volk's typedef for std::complex<signed char>
+cshort_to_float_x2::cshort_to_float_x2() : sync_block("cshort_to_float_x2",
+ gr::io_signature::make (1, 1, sizeof(lv_16sc_t)), // lv_8sc_t is a Volk's typedef for std::complex<signed char>
+ gr::io_signature::make (2, 2, sizeof(float)))
{
- const int alignment_multiple = volk_get_alignment() / sizeof(lv_8sc_t);
+ const int alignment_multiple = volk_get_alignment() / sizeof(lv_16sc_t);
set_alignment(std::max(1, alignment_multiple));
}
-int byte_x2_to_complex_byte::work(int noutput_items,
+int cshort_to_float_x2::work(int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
- const char *in0 = (const char *) input_items[0];
- const char *in1 = (const char *) input_items[1];
- lv_8sc_t *out = (lv_8sc_t *) output_items[0];
- // This could be put into a volk kernel
- signed char real_part;
- signed char imag_part;
- for(unsigned int number = 0; number < 2 * noutput_items; number++)
- {
- // lv_cmake(r, i) defined at volk/volk_complex.h
- real_part = *in0++;
- imag_part = *in1++;
- *out++ = lv_cmake(real_part, imag_part);
- }
-
+ const lv_16sc_t *in = (const lv_16sc_t *) input_items[0];
+ float *out0 = (float*) output_items[0];
+ float *out1 = (float*) output_items[1];
+ const float scalar = 1;
+ volk_16ic_s32f_deinterleave_32f_x2(out0, out1, in, scalar, noutput_items);
return noutput_items;
}
diff --git a/src/algorithms/input_filter/gnuradio_blocks/cshort_to_float_x2.h b/src/algorithms/input_filter/gnuradio_blocks/cshort_to_float_x2.h
new file mode 100644
index 0000000..ef5b333
--- /dev/null
+++ b/src/algorithms/input_filter/gnuradio_blocks/cshort_to_float_x2.h
@@ -0,0 +1,61 @@
+/*!
+ * \file cshort_to_float_x2.h
+ * \brief Adapts a std::complex<short> stream into two float streams
+ * \author Carles Fernandez Prades, cfernandez(at)cttc.es
+ *
+ * -------------------------------------------------------------------------
+ *
+ * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors)
+ *
+ * GNSS-SDR is a software defined Global Navigation
+ * Satellite Systems receiver
+ *
+ * This file is part of GNSS-SDR.
+ *
+ * GNSS-SDR is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GNSS-SDR is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#ifndef GNSS_SDR_CSHORT_TO_FLOAT_X2_H_
+#define GNSS_SDR_CSHORT_TO_FLOAT_X2_H_
+
+
+#include <string>
+#include <boost/shared_ptr.hpp>
+#include <gnuradio/sync_block.h>
+
+class cshort_to_float_x2;
+
+typedef boost::shared_ptr<cshort_to_float_x2> cshort_to_float_x2_sptr;
+
+cshort_to_float_x2_sptr make_cshort_to_float_x2();
+
+/*!
+ * \brief This class adapts a std::complex<short> stream
+ * into two 32-bits (float) streams
+ */
+class cshort_to_float_x2 : public gr::sync_block
+{
+private:
+ friend cshort_to_float_x2_sptr make_cshort_to_float_x2();
+public:
+ cshort_to_float_x2();
+
+ int work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+};
+
+#endif
diff --git a/src/algorithms/input_filter/gnuradio_blocks/byte_x2_to_complex_byte.cc b/src/algorithms/input_filter/gnuradio_blocks/short_x2_to_cshort.cc
similarity index 65%
copy from src/algorithms/input_filter/gnuradio_blocks/byte_x2_to_complex_byte.cc
copy to src/algorithms/input_filter/gnuradio_blocks/short_x2_to_cshort.cc
index 11b3b44..e55b1ac 100644
--- a/src/algorithms/input_filter/gnuradio_blocks/byte_x2_to_complex_byte.cc
+++ b/src/algorithms/input_filter/gnuradio_blocks/short_x2_to_cshort.cc
@@ -1,6 +1,6 @@
/*!
- * \file byte_x2_to_complex_byte.cc
- * \brief * \brief Adapts two signed char streams into a std::complex<signed char> stream
+ * \file short_x2_to_cshort.cc
+ * \brief Adapts two short streams into a std::complex<short> stream
* \author Carles Fernandez Prades, cfernandez(at)cttc.es
*
* -------------------------------------------------------------------------
@@ -29,38 +29,38 @@
*/
-#include "byte_x2_to_complex_byte.h"
+#include "short_x2_to_cshort.h"
#include <gnuradio/io_signature.h>
#include <volk/volk.h>
-byte_x2_to_complex_byte_sptr make_byte_x2_to_complex_byte()
+short_x2_to_cshort_sptr make_short_x2_to_cshort()
{
- return byte_x2_to_complex_byte_sptr(new byte_x2_to_complex_byte());
+ return short_x2_to_cshort_sptr(new short_x2_to_cshort());
}
-byte_x2_to_complex_byte::byte_x2_to_complex_byte() : sync_block("byte_x2_to_complex_byte",
- gr::io_signature::make (2, 2, sizeof(char)),
- gr::io_signature::make (1, 1, sizeof(lv_8sc_t))) // lv_8sc_t is a Volk's typedef for std::complex<signed char>
+short_x2_to_cshort::short_x2_to_cshort() : sync_block("short_x2_to_cshort",
+ gr::io_signature::make (2, 2, sizeof(short)),
+ gr::io_signature::make (1, 1, sizeof(lv_16sc_t))) // lv_8sc_t is a Volk's typedef for std::complex<signed char>
{
- const int alignment_multiple = volk_get_alignment() / sizeof(lv_8sc_t);
+ const int alignment_multiple = volk_get_alignment() / sizeof(lv_16sc_t);
set_alignment(std::max(1, alignment_multiple));
}
-int byte_x2_to_complex_byte::work(int noutput_items,
+int short_x2_to_cshort::work(int noutput_items,
gr_vector_const_void_star &input_items,
gr_vector_void_star &output_items)
{
- const char *in0 = (const char *) input_items[0];
- const char *in1 = (const char *) input_items[1];
- lv_8sc_t *out = (lv_8sc_t *) output_items[0];
+ const short *in0 = (const short *) input_items[0];
+ const short *in1 = (const short *) input_items[1];
+ lv_16sc_t *out = (lv_16sc_t *) output_items[0];
// This could be put into a volk kernel
- signed char real_part;
- signed char imag_part;
- for(unsigned int number = 0; number < 2 * noutput_items; number++)
+ short real_part;
+ short imag_part;
+ for(int number = 0; number < noutput_items; number++)
{
// lv_cmake(r, i) defined at volk/volk_complex.h
real_part = *in0++;
diff --git a/src/algorithms/input_filter/gnuradio_blocks/short_x2_to_cshort.h b/src/algorithms/input_filter/gnuradio_blocks/short_x2_to_cshort.h
new file mode 100644
index 0000000..5794d60
--- /dev/null
+++ b/src/algorithms/input_filter/gnuradio_blocks/short_x2_to_cshort.h
@@ -0,0 +1,60 @@
+/*!
+ * \file short_x2_to_cshort.h
+ * \brief Adapts two short streams into a std::complex<short> stream
+ * \author Carles Fernandez Prades, cfernandez(at)cttc.es
+ *
+ * -------------------------------------------------------------------------
+ *
+ * Copyright (C) 2010-2015 (see AUTHORS file for a list of contributors)
+ *
+ * GNSS-SDR is a software defined Global Navigation
+ * Satellite Systems receiver
+ *
+ * This file is part of GNSS-SDR.
+ *
+ * GNSS-SDR is free software: you can redistribute it and/or modify
+ * it under the terms of the GNU General Public License as published by
+ * the Free Software Foundation, either version 3 of the License, or
+ * (at your option) any later version.
+ *
+ * GNSS-SDR is distributed in the hope that it will be useful,
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ * GNU General Public License for more details.
+ *
+ * You should have received a copy of the GNU General Public License
+ * along with GNSS-SDR. If not, see <http://www.gnu.org/licenses/>.
+ *
+ * -------------------------------------------------------------------------
+ */
+
+#ifndef GNSS_SDR_SHORT_X2_TO_CSHORT_H_
+#define GNSS_SDR_SHORT_X2_TO_CSHORT_H_
+
+
+#include <string>
+#include <boost/shared_ptr.hpp>
+#include <gnuradio/sync_block.h>
+
+class short_x2_to_cshort;
+
+typedef boost::shared_ptr<short_x2_to_cshort> short_x2_to_cshort_sptr;
+
+short_x2_to_cshort_sptr make_short_x2_to_cshort();
+
+/*!
+ * \brief This class adapts two short streams into a std::complex<short> stream
+ */
+class short_x2_to_cshort : public gr::sync_block
+{
+private:
+ friend short_x2_to_cshort_sptr make_short_x2_to_cshort();
+public:
+ short_x2_to_cshort();
+
+ int work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+};
+
+#endif
--
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-hamradio/gnss-sdr.git
More information about the pkg-hamradio-commits
mailing list