diff options
author | Johnathan Corgan <johnathan@corganlabs.com> | 2015-10-03 10:56:51 -0700 |
---|---|---|
committer | Johnathan Corgan <johnathan@corganlabs.com> | 2015-10-03 10:56:51 -0700 |
commit | 8d3f6e315bae1d3e7cc0de171aa4dab56bfd2d2d (patch) | |
tree | 8b8e028450eb0b98675b13f5516f2ea0a409d646 | |
parent | 283ac81498c0ef8c1d9c7e5b7cabf35ac6eb414b (diff) |
blocks: enable missing multiply_matrix_cc and backport fixes
* multiply_matrix_cc_impl.cc existed but did not have fixes from master
* multiply_matrix_cc_impl.cc was missing from CMakeLists.txt
* multiply_matrix_cc was missing from SWIG
* QA from from master branch was backported
-rw-r--r-- | gr-blocks/lib/CMakeLists.txt | 1 | ||||
-rw-r--r-- | gr-blocks/lib/multiply_matrix_cc_impl.cc | 2 | ||||
-rwxr-xr-x | gr-blocks/python/blocks/qa_multiply_matrix_xx.py (renamed from gr-blocks/python/blocks/qa_multiply_matrix_ff.py) | 48 | ||||
-rw-r--r-- | gr-blocks/swig/blocks_swig3.i | 3 |
4 files changed, 47 insertions, 7 deletions
diff --git a/gr-blocks/lib/CMakeLists.txt b/gr-blocks/lib/CMakeLists.txt index 3b61d86fbf..2af83aaaed 100644 --- a/gr-blocks/lib/CMakeLists.txt +++ b/gr-blocks/lib/CMakeLists.txt @@ -202,6 +202,7 @@ list(APPEND gr_blocks_sources vector_to_streams_impl.cc wavfile_sink_impl.cc wavfile_source_impl.cc + multiply_matrix_cc_impl.cc multiply_matrix_ff_impl.cc ) diff --git a/gr-blocks/lib/multiply_matrix_cc_impl.cc b/gr-blocks/lib/multiply_matrix_cc_impl.cc index 603347d670..e9800c7599 100644 --- a/gr-blocks/lib/multiply_matrix_cc_impl.cc +++ b/gr-blocks/lib/multiply_matrix_cc_impl.cc @@ -106,7 +106,7 @@ namespace gr { ); for (size_t out_idx = 0; out_idx < noutput_ports; out_idx++) { - if (d_A[out_idx][in_idx] == 0) { + if (d_A[out_idx][in_idx] == std::complex<float>(0, 0)) { continue; } for (size_t i = 0; i < tags.size(); i++) { diff --git a/gr-blocks/python/blocks/qa_multiply_matrix_ff.py b/gr-blocks/python/blocks/qa_multiply_matrix_xx.py index 357120b34e..feee53d510 100755 --- a/gr-blocks/python/blocks/qa_multiply_matrix_ff.py +++ b/gr-blocks/python/blocks/qa_multiply_matrix_xx.py @@ -28,7 +28,20 @@ import pmt from gnuradio import gr, gr_unittest from gnuradio import blocks -class test_multiply_matrix_ff (gr_unittest.TestCase): +BLOCK_LOOKUP = { + 'float': { + 'src': blocks.vector_source_f, + 'sink': blocks.vector_sink_f, + 'mult': blocks.multiply_matrix_ff, + }, + 'complex': { + 'src': blocks.vector_source_c, + 'sink': blocks.vector_sink_c, + 'mult': blocks.multiply_matrix_cc, + }, +} + +class test_multiply_matrix_xx (gr_unittest.TestCase): def setUp (self): self.tb = gr.top_block () @@ -38,7 +51,15 @@ class test_multiply_matrix_ff (gr_unittest.TestCase): self.tb = None self.multiplier = None - def run_once(self, X_in, A, tpp=gr.TPP_DONT, A2=None, tags=None, msg_A=None): + def run_once(self, + X_in, + A, + tpp=gr.TPP_DONT, + A2=None, + tags=None, + msg_A=None, + datatype='float', + ): """ Run the test for given input-, output- and matrix values. Every row from X_in is considered an input signal on a port. """ X_in = numpy.matrix(X_in) @@ -47,7 +68,7 @@ class test_multiply_matrix_ff (gr_unittest.TestCase): self.assertTrue(N == X_in.shape[0]) # Calc expected Y_out_exp = numpy.matrix(numpy.zeros((M, X_in.shape[1]))) - self.multiplier = blocks.multiply_matrix_ff(A, tpp) + self.multiplier = BLOCK_LOOKUP[datatype]['mult'](A, tpp) if A2 is not None: self.multiplier.set_A(A2) A = A2 @@ -57,10 +78,13 @@ class test_multiply_matrix_ff (gr_unittest.TestCase): these_tags = () else: these_tags = (tags[i],) - self.tb.connect(blocks.vector_source_f(X_in[i].tolist()[0], tags=these_tags), (self.multiplier, i)) + self.tb.connect( + BLOCK_LOOKUP[datatype]['src'](X_in[i].tolist()[0], tags=these_tags), + (self.multiplier, i) + ) sinks = [] for i in xrange(M): - sinks.append(blocks.vector_sink_f()) + sinks.append(BLOCK_LOOKUP[datatype]['sink']()) self.tb.connect((self.multiplier, i), sinks[i]) # Run and check self.tb.run() @@ -86,6 +110,18 @@ class test_multiply_matrix_ff (gr_unittest.TestCase): ) self.run_once(X_in, A) + def test_001_t_complex (self): + """ Simplest possible check: N==M, unit matrix """ + X_in = ( + (1, 2, 3, 4), + (5, 6, 7, 8), + ) + A = ( + (1, 0), + (0, 1), + ) + self.run_once(X_in, A, datatype='complex') + def test_002_t (self): """ Switch check: N==M, flipped unit matrix """ X_in = ( @@ -168,5 +204,5 @@ class test_multiply_matrix_ff (gr_unittest.TestCase): if __name__ == '__main__': #gr_unittest.run(test_multiply_matrix_ff, "test_multiply_matrix_ff.xml") - gr_unittest.run(test_multiply_matrix_ff) + gr_unittest.run(test_multiply_matrix_xx) diff --git a/gr-blocks/swig/blocks_swig3.i b/gr-blocks/swig/blocks_swig3.i index 9c0208388e..f0b7750567 100644 --- a/gr-blocks/swig/blocks_swig3.i +++ b/gr-blocks/swig/blocks_swig3.i @@ -67,6 +67,7 @@ #include "gnuradio/blocks/multiply_const_vii.h" #include "gnuradio/blocks/multiply_const_vff.h" #include "gnuradio/blocks/multiply_const_vcc.h" +#include "gnuradio/blocks/multiply_matrix_cc.h" #include "gnuradio/blocks/multiply_matrix_ff.h" #include "gnuradio/blocks/mute_ss.h" #include "gnuradio/blocks/mute_ii.h" @@ -113,6 +114,7 @@ %include "gnuradio/blocks/multiply_const_vii.h" %include "gnuradio/blocks/multiply_const_vff.h" %include "gnuradio/blocks/multiply_const_vcc.h" +%include "gnuradio/blocks/multiply_matrix_cc.h" %include "gnuradio/blocks/multiply_matrix_ff.h" %include "gnuradio/blocks/mute_ss.h" %include "gnuradio/blocks/mute_ii.h" @@ -158,6 +160,7 @@ GR_SWIG_BLOCK_MAGIC2(blocks, multiply_const_vss); GR_SWIG_BLOCK_MAGIC2(blocks, multiply_const_vii); GR_SWIG_BLOCK_MAGIC2(blocks, multiply_const_vff); GR_SWIG_BLOCK_MAGIC2(blocks, multiply_const_vcc); +GR_SWIG_BLOCK_MAGIC2(blocks, multiply_matrix_cc); GR_SWIG_BLOCK_MAGIC2(blocks, multiply_matrix_ff); GR_SWIG_BLOCK_MAGIC2(blocks, mute_ss); GR_SWIG_BLOCK_MAGIC2(blocks, mute_ii); |