summaryrefslogtreecommitdiff
path: root/gr-fft/python/fft/qa_goertzel.py
diff options
context:
space:
mode:
authorJohnathan Corgan <johnathan@corganlabs.com>2013-06-04 13:01:12 -0400
committerJohnathan Corgan <johnathan@corganlabs.com>2013-06-04 13:01:12 -0400
commit8caec1685af6a53f7b1395983e840b778b1b4c4b (patch)
tree7ce40a12311d06508bc3722514d5725b96197b90 /gr-fft/python/fft/qa_goertzel.py
parentfc3f03eeba43ed55b45a7508cd519559cbb1ecf4 (diff)
parent48f3452530b29627ce57089b65363776dbe9a179 (diff)
Merge remote-tracking branch 'reynwar/uninstalled_imports' into merge-inplace
Diffstat (limited to 'gr-fft/python/fft/qa_goertzel.py')
-rwxr-xr-xgr-fft/python/fft/qa_goertzel.py65
1 files changed, 65 insertions, 0 deletions
diff --git a/gr-fft/python/fft/qa_goertzel.py b/gr-fft/python/fft/qa_goertzel.py
new file mode 100755
index 0000000000..c2c5c565e7
--- /dev/null
+++ b/gr-fft/python/fft/qa_goertzel.py
@@ -0,0 +1,65 @@
+#!/usr/bin/env python
+#
+# Copyright 2006,2007,2010,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.
+#
+
+from math import pi, cos
+
+from gnuradio import gr, gr_unittest, fft, blocks
+
+class test_goertzel(gr_unittest.TestCase):
+
+ def setUp(self):
+ self.tb = gr.top_block()
+
+ def tearDown(self):
+ self.tb = None
+
+ def make_tone_data(self, rate, freq):
+ return [cos(2*pi*x*freq/rate) for x in range(rate)]
+
+ def transform(self, src_data, rate, freq):
+ src = blocks.vector_source_f(src_data, False)
+ dft = fft.goertzel_fc(rate, rate, freq)
+ dst = blocks.vector_sink_c()
+ self.tb.connect(src, dft, dst)
+ self.tb.run()
+ return dst.data()
+
+ def test_001(self): # Measure single tone magnitude
+ rate = 8000
+ freq = 100
+ bin = freq
+ src_data = self.make_tone_data(rate, freq)
+ expected_result = 0.5
+ actual_result = abs(self.transform(src_data, rate, bin)[0])
+ self.assertAlmostEqual(expected_result, actual_result, places=4)
+
+ def test_002(self): # Measure off frequency magnitude
+ rate = 8000
+ freq = 100
+ bin = freq/2
+ src_data = self.make_tone_data(rate, freq)
+ expected_result = 0.0
+ actual_result = abs(self.transform(src_data, rate, bin)[0])
+ self.assertAlmostEqual(expected_result, actual_result, places=4)
+
+if __name__ == '__main__':
+ gr_unittest.run(test_goertzel, "test_goertzel.xml")