[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