summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--gnuradio-core/src/lib/filter/.gitignore10
-rw-r--r--gnuradio-core/src/lib/filter/Makefile.am7
-rw-r--r--gnuradio-core/src/lib/filter/Makefile.gen17
-rwxr-xr-xgnuradio-core/src/lib/filter/generate_all.py2
-rwxr-xr-xgnuradio-core/src/lib/filter/generate_gri_fir_filter_with_buffer_XXX.py53
-rw-r--r--gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_XXX.cc.t (renamed from gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_ccf.cc)37
-rw-r--r--gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_XXX.h.t (renamed from gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_ccf.h)48
7 files changed, 130 insertions, 44 deletions
diff --git a/gnuradio-core/src/lib/filter/.gitignore b/gnuradio-core/src/lib/filter/.gitignore
index 2d009f154..4797b6b3a 100644
--- a/gnuradio-core/src/lib/filter/.gitignore
+++ b/gnuradio-core/src/lib/filter/.gitignore
@@ -211,4 +211,14 @@
/gr_rational_resampler_base_scc.cc
/gr_rational_resampler_base_scc.h
/gr_rational_resampler_base_scc.i
+/gri_fir_filter_with_buffer_ccc.cc
+/gri_fir_filter_with_buffer_ccc.h
+/gri_fir_filter_with_buffer_fcc.cc
+/gri_fir_filter_with_buffer_fcc.h
+/gri_fir_filter_with_buffer_fff.cc
+/gri_fir_filter_with_buffer_fff.h
+/gri_fir_filter_with_buffer_fsf.cc
+/gri_fir_filter_with_buffer_fsf.h
+/gri_fir_filter_with_buffer_scc.cc
+/gri_fir_filter_with_buffer_scc.h
/stamp-*
diff --git a/gnuradio-core/src/lib/filter/Makefile.am b/gnuradio-core/src/lib/filter/Makefile.am
index ff6c546fd..31f919ba7 100644
--- a/gnuradio-core/src/lib/filter/Makefile.am
+++ b/gnuradio-core/src/lib/filter/Makefile.am
@@ -44,6 +44,7 @@ code_generator = \
generate_gr_fir_sysconfig_generic.py \
generate_gr_fir_util.py \
generate_gr_freq_xlating_fir_filter_XXX.py \
+ generate_gri_fir_filter_with_buffer_XXX.py \
generate_utils.py \
gr_fir_XXX.cc.t \
gr_fir_XXX.h.t \
@@ -60,7 +61,11 @@ code_generator = \
gr_rational_resampler_base_XXX.i.t \
gr_freq_xlating_fir_filter_XXX.cc.t \
gr_freq_xlating_fir_filter_XXX.h.t \
- gr_freq_xlating_fir_filter_XXX.i.t
+ gr_freq_xlating_fir_filter_XXX.i.t \
+ gri_fir_filter_with_buffer_XXX.cc.t \
+ gri_fir_filter_with_buffer_XXX.h.t \
+ gri_fir_filter_with_buffer_XXX.i.t
+
# Source built by Python into $(builddir)
BUILT_SOURCES = \
diff --git a/gnuradio-core/src/lib/filter/Makefile.gen b/gnuradio-core/src/lib/filter/Makefile.gen
index 6809274fa..909899c05 100644
--- a/gnuradio-core/src/lib/filter/Makefile.gen
+++ b/gnuradio-core/src/lib/filter/Makefile.gen
@@ -40,7 +40,14 @@ GENERATED_H = \
gr_rational_resampler_base_fcc.h \
gr_rational_resampler_base_fff.h \
gr_rational_resampler_base_fsf.h \
- gr_rational_resampler_base_scc.h
+ gr_rational_resampler_base_scc.h \
+ gri_fir_filter_with_buffer_ccc.h \
+ gri_fir_filter_with_buffer_ccf.h \
+ gri_fir_filter_with_buffer_fcc.h \
+ gri_fir_filter_with_buffer_fff.h \
+ gri_fir_filter_with_buffer_fsf.h \
+ gri_fir_filter_with_buffer_scc.h
+
GENERATED_I = \
gr_fir_filter_ccc.i \
@@ -107,5 +114,11 @@ GENERATED_CC = \
gr_rational_resampler_base_fcc.cc \
gr_rational_resampler_base_fff.cc \
gr_rational_resampler_base_fsf.cc \
- gr_rational_resampler_base_scc.cc
+ gr_rational_resampler_base_scc.cc \
+ gri_fir_filter_with_buffer_ccc.cc \
+ gri_fir_filter_with_buffer_ccf.cc \
+ gri_fir_filter_with_buffer_fcc.cc \
+ gri_fir_filter_with_buffer_fff.cc \
+ gri_fir_filter_with_buffer_fsf.cc \
+ gri_fir_filter_with_buffer_scc.cc
diff --git a/gnuradio-core/src/lib/filter/generate_all.py b/gnuradio-core/src/lib/filter/generate_all.py
index b34e13c73..ceed2b851 100755
--- a/gnuradio-core/src/lib/filter/generate_all.py
+++ b/gnuradio-core/src/lib/filter/generate_all.py
@@ -30,6 +30,7 @@ import generate_gr_fir_sysconfig_generic
import generate_gr_fir_sysconfig
import generate_gr_fir_util
import generate_gr_fir_XXX
+import generate_gri_fir_filter_with_buffer_XXX
def generate_all():
generate_gr_fir_XXX.generate()
@@ -40,6 +41,7 @@ def generate_all():
generate_gr_fir_sysconfig_generic.generate()
generate_gr_fir_sysconfig.generate()
generate_gr_fir_util.generate()
+ generate_gri_fir_filter_with_buffer_XXX.generate()
output_glue('filter')
if __name__ == '__main__':
diff --git a/gnuradio-core/src/lib/filter/generate_gri_fir_filter_with_buffer_XXX.py b/gnuradio-core/src/lib/filter/generate_gri_fir_filter_with_buffer_XXX.py
new file mode 100755
index 000000000..7252e26f7
--- /dev/null
+++ b/gnuradio-core/src/lib/filter/generate_gri_fir_filter_with_buffer_XXX.py
@@ -0,0 +1,53 @@
+#!/usr/bin/env python
+# -*- python -*-
+#
+# Copyright 2010 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.
+#
+
+import re
+from generate_utils import *
+
+roots = ['gri_fir_filter_with_buffer_XXX',]
+
+def code3_to_input_cast (code3):
+ if i_code (code3) == 's' and o_code (code3) == 'c':
+ return '(float)'
+ return ''
+
+def expand_h_cc (root, code3):
+ d = init_dict (root, code3)
+ expand_template (d, root + '.h.t')
+ expand_template (d, root + '.cc.t')
+
+def init_dict (root, code3):
+ name = re.sub ('X+', code3, root)
+ d = standard_dict (name, code3)
+ d['INPUT_CAST'] = code3_to_input_cast (code3)
+ return d
+
+
+def generate ():
+ for r in roots:
+ for s in fir_signatures:
+ expand_h_cc (r, s)
+
+
+if __name__ == '__main__':
+ generate ()
diff --git a/gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_ccf.cc b/gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_XXX.cc.t
index 55e316d02..dd71a55fa 100644
--- a/gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_ccf.cc
+++ b/gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_XXX.cc.t
@@ -24,22 +24,39 @@
#include <config.h>
#endif
-#include <gri_fir_filter_with_buffer_ccf.h>
+#include <@NAME@.h>
-gri_fir_filter_with_buffer_ccf::gri_fir_filter_with_buffer_ccf(const std::vector<float> &taps)
+@NAME@::@NAME@(const std::vector<@TAP_TYPE@> &taps)
{
d_buffer = NULL;
set_taps(taps);
}
-gri_fir_filter_with_buffer_ccf::~gri_fir_filter_with_buffer_ccf()
+@NAME@::~@NAME@()
{
if(d_buffer != NULL)
free(d_buffer);
}
-gr_complex
-gri_fir_filter_with_buffer_ccf::filter (gr_complex input)
+void
+@NAME@::set_taps (const std::vector<@TAP_TYPE@> &taps)
+{
+ d_taps = gr_reverse(taps);
+
+ if(d_buffer != NULL) {
+ free(d_buffer);
+ d_buffer = NULL;
+ }
+
+ // FIXME: memalign this to 16-byte boundaries for SIMD later
+ size_t t = sizeof(@I_TYPE@) * 2 * d_taps.size();
+ d_buffer = (@I_TYPE@*)malloc(t);
+ memset(d_buffer, 0x00, t);
+ d_idx = 0;
+}
+
+@O_TYPE@
+@NAME@::filter (@I_TYPE@ input)
{
unsigned int i;
@@ -53,17 +70,17 @@ gri_fir_filter_with_buffer_ccf::filter (gr_complex input)
if(d_idx >= ntaps())
d_idx = 0;
- gr_complex out = gr_complex(0,0);
+ @O_TYPE@ out = 0;
for(i = 0; i < ntaps(); i++) {
- out += d_buffer[d_idx + i]*d_taps[i];
+ out += @INPUT_CAST@ d_buffer[d_idx + i] * d_taps[i];
}
return out;
}
void
-gri_fir_filter_with_buffer_ccf::filterN (gr_complex output[],
- const gr_complex input[],
- unsigned long n)
+@NAME@::filterN (@O_TYPE@ output[],
+ const @I_TYPE@ input[],
+ unsigned long n)
{
for(unsigned long i = 0; i < n; i++) {
output[i] = filter(input[i]);
diff --git a/gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_ccf.h b/gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_XXX.h.t
index c91d70534..d566b3674 100644
--- a/gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_ccf.h
+++ b/gnuradio-core/src/lib/filter/gri_fir_filter_with_buffer_XXX.h.t
@@ -21,13 +21,13 @@
*/
/*
- * WARNING: This file is automatically generated by generate_gr_fir_XXX.py
+ * WARNING: This file is automatically generated by generate_gri_fir_XXX.py
* Any changes made to this file will be overwritten.
*/
-#ifndef INCLUDED_GRI_FIR_FILTER_WITH_BUFFER_H
-#define INCLUDED_GRI_FIR_FILTER_WITH_BUFFER_H
+#ifndef @GUARD_NAME@
+#define @GUARD_NAME@
#include <vector>
#include <gr_types.h>
@@ -36,18 +36,18 @@
#include <cstdio>
/*!
- * \brief FIR with internal buffer for gr_complex input,
- gr_complex output and float taps
+ * \brief FIR with internal buffer for @I_TYPE@ input,
+ @O_TYPE@ output and @TAP_TYPE@ taps
* \ingroup filter
*
*/
-class gri_fir_filter_with_buffer_ccf {
+class @NAME@ {
protected:
- std::vector<float> d_taps; // reversed taps
- gr_complex *d_buffer;
- unsigned int d_idx;
+ std::vector<@TAP_TYPE@> d_taps; // reversed taps
+ @I_TYPE@ *d_buffer;
+ unsigned int d_idx;
public:
@@ -60,9 +60,9 @@ public:
* stored in new_taps[0], coefficient 1 is stored in
* new_taps[1], etc.
*/
- gri_fir_filter_with_buffer_ccf (const std::vector<float> &taps);
+ @NAME@ (const std::vector<@TAP_TYPE@> &taps);
- ~gri_fir_filter_with_buffer_ccf ();
+ ~@NAME@ ();
// MANIPULATORS
@@ -74,7 +74,7 @@ public:
*
* \returns the filtered input value.
*/
- gr_complex filter (gr_complex input);
+ @O_TYPE@ filter (@I_TYPE@ input);
/*!
* \brief compute an array of N output values.
@@ -82,7 +82,7 @@ public:
* \p input must have (n - 1 + ntaps()) valid entries.
* input[0] .. input[n - 1 + ntaps() - 1] are referenced to compute the output values.
*/
- void filterN (gr_complex output[], const gr_complex input[],
+ void filterN (@O_TYPE@ output[], const @I_TYPE@ input[],
unsigned long n);
/*!
@@ -92,27 +92,13 @@ public:
* input[0] .. input[decimate * (n - 1) + ntaps() - 1] are referenced to
* compute the output values.
*/
- void filterNdec (gr_complex output[], const gr_complex input[],
+ void filterNdec (@O_TYPE@ output[], const @I_TYPE@ input[],
unsigned long n, unsigned decimate);
/*!
* \brief install \p new_taps as the current taps.
*/
- void set_taps (const std::vector<float> &taps)
- {
- d_taps = gr_reverse(taps);
-
- if(d_buffer != NULL) {
- free(d_buffer);
- d_buffer = NULL;
- }
-
- // FIXME: memalign this to 16-byte boundaries for SIMD later
- size_t t = sizeof(gr_complex) * 2 * d_taps.size();
- d_buffer = (gr_complex*)malloc(t);
- memset(d_buffer, 0x00, t);
- d_idx = 0;
- }
+ void set_taps (const std::vector<@TAP_TYPE@> &taps);
// ACCESSORS
@@ -124,10 +110,10 @@ public:
/*!
* \return current taps
*/
- const std::vector<float> get_taps () const
+ const std::vector<@TAP_TYPE@> get_taps () const
{
return gr_reverse(d_taps);
}
};
-#endif /* INCLUDED_GR_GR_FIR_FILTER_WITH_BUFFER_CCF_H */
+#endif /* @GUARD_NAME@ */