summaryrefslogtreecommitdiff
path: root/gr-analog/lib
diff options
context:
space:
mode:
authorMartin Braun <martin.braun@kit.edu>2013-03-15 02:12:20 -0700
committerTom Rondeau <trondeau@vt.edu>2013-03-16 23:52:19 -0400
commit7fd15b67afa5abd20c0982bdd6bcb7191831bf73 (patch)
tree3bd525f2850e662a9ccfe0a6c286ff7c20ad57e3 /gr-analog/lib
parent34216336205ba3edc0bc308a8da9ad388f3d0774 (diff)
Squash/rebased martin/ofdm-master onto trial merge branch
Conflicts: gr-blocks/include/blocks/CMakeLists.txt
Diffstat (limited to 'gr-analog/lib')
-rw-r--r--gr-analog/lib/CMakeLists.txt2
-rw-r--r--gr-analog/lib/plateau_detector_fb_impl.cc82
-rw-r--r--gr-analog/lib/plateau_detector_fb_impl.h50
3 files changed, 133 insertions, 1 deletions
diff --git a/gr-analog/lib/CMakeLists.txt b/gr-analog/lib/CMakeLists.txt
index e90bef5015..ecc459cd3a 100644
--- a/gr-analog/lib/CMakeLists.txt
+++ b/gr-analog/lib/CMakeLists.txt
@@ -157,7 +157,7 @@ list(APPEND analog_libs
${Boost_LIBRARIES}
)
-add_library(gnuradio-analog SHARED ${analog_sources})
+add_library(gnuradio-analog SHARED ${analog_sources} plateau_detector_fb_impl.cc)
target_link_libraries(gnuradio-analog ${analog_libs})
GR_LIBRARY_FOO(gnuradio-analog RUNTIME_COMPONENT "analog_runtime" DEVEL_COMPONENT "analog_devel")
add_dependencies(gnuradio-analog analog_generated_includes analog_generated_swigs gnuradio-filter)
diff --git a/gr-analog/lib/plateau_detector_fb_impl.cc b/gr-analog/lib/plateau_detector_fb_impl.cc
new file mode 100644
index 0000000000..0d2890bc55
--- /dev/null
+++ b/gr-analog/lib/plateau_detector_fb_impl.cc
@@ -0,0 +1,82 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2012 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio 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, or (at your option)
+ * any later version.
+ *
+ * GNU Radio 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 GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifdef HAVE_CONFIG_H
+#include "config.h"
+#endif
+
+#include <gr_io_signature.h>
+#include "plateau_detector_fb_impl.h"
+
+namespace gr {
+ namespace analog {
+
+plateau_detector_fb::sptr
+plateau_detector_fb::make(int max_len, float threshold)
+{
+ return gnuradio::get_initial_sptr (new plateau_detector_fb_impl(max_len, threshold));
+}
+
+plateau_detector_fb_impl::plateau_detector_fb_impl(int max_len, float threshold)
+ : gr_sync_block("plateau_detector_fb",
+ gr_make_io_signature(1, 1, sizeof (float)),
+ gr_make_io_signature(1, 1, sizeof (char))),
+ d_max_len(max_len),
+ d_threshold(threshold)
+{}
+
+plateau_detector_fb_impl::~plateau_detector_fb_impl()
+{
+}
+
+int
+plateau_detector_fb_impl::work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items)
+{
+ const float *in = (const float *) input_items[0];
+ unsigned char *out = (unsigned char *) output_items[0];
+ int flank_start;
+
+ memset((void *) out, 0x00, noutput_items);
+ int i;
+ for (i = 0; i < noutput_items; i++) {
+ if (in[i] >= d_threshold) {
+ if (noutput_items-i < 2*d_max_len) { // If we can't finish, come back later
+ break;
+ }
+ flank_start = i;
+ while (i < noutput_items && in[i] >= d_threshold)
+ i++;
+ if ((i - flank_start) > 1) { // 1 Sample is not a plateau
+ out[flank_start + (i-flank_start)/2] = 1;
+ i = std::min(i+d_max_len, noutput_items-1);
+ }
+ }
+ }
+
+ return i;
+}
+
+ } /* namespace analog */
+} /* namespace gr */
+
diff --git a/gr-analog/lib/plateau_detector_fb_impl.h b/gr-analog/lib/plateau_detector_fb_impl.h
new file mode 100644
index 0000000000..daf1dd56d9
--- /dev/null
+++ b/gr-analog/lib/plateau_detector_fb_impl.h
@@ -0,0 +1,50 @@
+/* -*- c++ -*- */
+/*
+ * Copyright 2012 Free Software Foundation, Inc.
+ *
+ * This file is part of GNU Radio
+ *
+ * GNU Radio 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, or (at your option)
+ * any later version.
+ *
+ * GNU Radio 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 GNU Radio; see the file COPYING. If not, write to
+ * the Free Software Foundation, Inc., 51 Franklin Street,
+ * Boston, MA 02110-1301, USA.
+ */
+
+#ifndef INCLUDED_ANALOG_PLATEAU_DETECTOR_FB_IMPL_H
+#define INCLUDED_ANALOG_PLATEAU_DETECTOR_FB_IMPL_H
+
+#include <analog/plateau_detector_fb.h>
+
+namespace gr {
+ namespace analog {
+
+class plateau_detector_fb_impl : public plateau_detector_fb
+{
+ private:
+ int d_max_len;
+ float d_threshold;
+
+ public:
+ plateau_detector_fb_impl(int max_len, float threshold);
+ ~plateau_detector_fb_impl();
+
+ int work(int noutput_items,
+ gr_vector_const_void_star &input_items,
+ gr_vector_void_star &output_items);
+};
+
+ } // namespace analog
+} // namespace gr
+
+#endif /* INCLUDED_ANALOG_PLATEAU_DETECTOR_FB_IMPL_H */
+