summaryrefslogtreecommitdiff
path: root/gr-analog/python/analog/qa_fastnoise.py
diff options
context:
space:
mode:
authorMarcus Müller <marcus.mueller@ettus.com>2018-03-30 20:50:04 +0200
committerMarcus Müller <marcus.mueller@ettus.com>2018-03-30 20:50:04 +0200
commit61c0382eb2935a6da6c81bd93c8b9c8ef2893df2 (patch)
tree5e67df4059f5522ccc62cd85f33100ee96bb7988 /gr-analog/python/analog/qa_fastnoise.py
parent9a6bf484394f5954483477856f6a6712331b9ee6 (diff)
parent20d463d138782fd56397f5324be6e34af156b239 (diff)
Merge branch 'maint' through 'last_merge_to_master'
This is the last time we're merging 'maint' to 'master'. The 'maint' branch will cease to exist shortly; we'll have a 'maint-3.7' branch. For further information on the new development model: http://lists.gnu.org/archive/html/discuss-gnuradio/2018-02/msg00133.html
Diffstat (limited to 'gr-analog/python/analog/qa_fastnoise.py')
-rw-r--r--gr-analog/python/analog/qa_fastnoise.py120
1 files changed, 104 insertions, 16 deletions
diff --git a/gr-analog/python/analog/qa_fastnoise.py b/gr-analog/python/analog/qa_fastnoise.py
index 91e1cb87b7..f712d66ca7 100644
--- a/gr-analog/python/analog/qa_fastnoise.py
+++ b/gr-analog/python/analog/qa_fastnoise.py
@@ -20,32 +20,120 @@
# Boston, MA 02110-1301, USA.
#
-from gnuradio import gr, gr_unittest, analog
+from gnuradio import gr, gr_unittest, analog, blocks
+import numpy
+
class test_fastnoise_source(gr_unittest.TestCase):
def setUp (self):
- self.tb = gr.top_block ()
+
+ self.num = 2**22
+ self.num_items = 10**6
+ self.default_args = {"samples": self.num, "seed": 43, "ampl": 1}
def tearDown (self):
- self.tb = None
+ pass
+
+ def run_test_real(self, form):
+ """ Run test case with float input/output
+ """
+ tb = gr.top_block()
+ src = analog.fastnoise_source_f(type=form, **self.default_args)
+ head = blocks.head(nitems=self.num_items, sizeof_stream_item=gr.sizeof_float)
+ sink = blocks.vector_sink_f()
+ tb.connect(src, head, sink)
+ tb.run()
+ return numpy.array(sink.data())
+
+ def run_test_complex(self, form):
+ """ Run test case with complex input/output
+ """
+ tb = gr.top_block()
+ src = analog.fastnoise_source_c(type=form, **self.default_args)
+ head = blocks.head(nitems=self.num_items, sizeof_stream_item=gr.sizeof_gr_complex)
+ sink = blocks.vector_sink_c()
+ tb.connect(src, head, sink)
+ tb.run()
+ return numpy.array(sink.data())
+
+ def test_001_real_uniform_moments(self):
+
+ data = self.run_test_real(analog.GR_UNIFORM)
+
+ self.assertAlmostEqual(min(data), -1, places=4)
+ self.assertAlmostEqual(max(data), 1, places=4)
+
+ # mean, variance
+ self.assertAlmostEqual(data.mean(), 0, places=2)
+ self.assertAlmostEqual(data.var(), (1-(-1))**2./12, places=3)
+
+ def test_001_real_gaussian_moments(self):
+ data = self.run_test_real(analog.GR_GAUSSIAN)
+
+ # mean, variance
+ self.assertAlmostEqual(data.mean(), 0, places=2)
+ self.assertAlmostEqual(data.var(), 1, places=2)
- def test_001(self):
- # Just confirm that we can instantiate a noise source
- op = analog.fastnoise_source_f(analog.GR_GAUSSIAN, 10, 10)
+ def test_001_real_laplacian_moments(self):
+ data = self.run_test_real(analog.GR_LAPLACIAN)
- def test_002(self):
- # Test get methods
- set_type = analog.GR_GAUSSIAN
- set_ampl = 10
- op = analog.fastnoise_source_f(set_type, set_ampl, 10)
- get_type = op.type()
- get_ampl = op.amplitude()
+ # mean, variance
+ self.assertAlmostEqual(data.mean(), 0, places=2)
+ self.assertAlmostEqual(data.var(), 2, places=2)
- self.assertEqual(get_type, set_type)
- self.assertEqual(get_ampl, set_ampl)
+ def test_001_complex_uniform_moments(self):
+ data = self.run_test_complex(analog.GR_UNIFORM)
+ # mean, variance
+ self.assertAlmostEqual(data.real.mean(), 0, places=2)
+ self.assertAlmostEqual(data.real.var(), 0.5*(1-(-1))**2./12, places=3)
+ self.assertAlmostEqual(data.imag.mean(), 0, places=2)
+ self.assertAlmostEqual(data.imag.var(), 0.5*(1-(-1))**2./12, places=3)
+
+ def test_001_complex_gaussian_moments(self):
+ data = self.run_test_complex(analog.GR_GAUSSIAN)
+
+ # mean, variance
+ self.assertAlmostEqual(data.real.mean(), 0, places=2)
+ self.assertAlmostEqual(data.real.var(), 0.5, places=2)
+
+ self.assertAlmostEqual(data.imag.mean(), 0, places=2)
+ self.assertAlmostEqual(data.imag.var(), 0.5, places=2)
+
+ def test_002_real_uniform_reproducibility(self):
+ data1 = self.run_test_real(analog.GR_UNIFORM)
+ data2 = self.run_test_real(analog.GR_UNIFORM)
+
+ # It's pseudoramdo thus must be equal
+ self.assertTrue(numpy.array_equal(data1, data2))
+
+ def test_002_real_gaussian_reproducibility(self):
+ data1 = self.run_test_real(analog.GR_GAUSSIAN)
+ data2 = self.run_test_real(analog.GR_GAUSSIAN)
+
+ self.assertTrue(numpy.array_equal(data1, data2))
+
+ def test_003_real_uniform_pool(self):
+ src = analog.fastnoise_source_f(type=analog.GR_UNIFORM, **self.default_args)
+ src2 = analog.fastnoise_source_f(type=analog.GR_UNIFORM, **self.default_args)
+ self.assertTrue(numpy.array_equal(numpy.array(src.samples()), numpy.array(src2.samples())))
+ def test_003_real_gaussian_pool(self):
+ src = analog.fastnoise_source_f(type=analog.GR_GAUSSIAN, **self.default_args)
+ src2 = analog.fastnoise_source_f(type=analog.GR_GAUSSIAN, **self.default_args)
+ self.assertTrue(numpy.array_equal(numpy.array(src.samples()), numpy.array(src2.samples())))
+ def test_003_cmplx_gaussian_pool(self):
+ src = analog.fastnoise_source_c(type=analog.GR_GAUSSIAN, **self.default_args)
+ src2 = analog.fastnoise_source_c(type=analog.GR_GAUSSIAN, **self.default_args)
+ self.assertTrue(numpy.array_equal(numpy.array(src.samples()), numpy.array(src2.samples())))
+ def test_003_cmplx_uniform_pool(self):
+ src = analog.fastnoise_source_c(type=analog.GR_UNIFORM, **self.default_args)
+ src2 = analog.fastnoise_source_c(type=analog.GR_UNIFORM, **self.default_args)
+ self.assertTrue(numpy.array_equal(numpy.array(src.samples()), numpy.array(src2.samples())))
+ def test_003_real_laplacian_pool(self):
+ src = analog.fastnoise_source_f(type=analog.GR_LAPLACIAN, **self.default_args)
+ src2 = analog.fastnoise_source_f(type=analog.GR_LAPLACIAN, **self.default_args)
+ self.assertTrue(numpy.array_equal(numpy.array(src.samples()), numpy.array(src2.samples())))
if __name__ == '__main__':
gr_unittest.run(test_fastnoise_source, "test_fastnoise_source.xml")
-