示例#1
0
    def test_stretch_01(self):
        tb = self.tb

        data = 10*[1,]
        data0 = map(lambda x: x/20.0, data)
        data1 = map(lambda x: x/10.0, data)

        expected_result0 = 10*[0.05,]
        expected_result1 = 10*[0.1,]

        src0 = blocks.vector_source_f(data0, False)
        src1 = blocks.vector_source_f(data1, False)
        inter = blocks.streams_to_vector(gr.sizeof_float, 2)
        op = blocks.stretch_ff(0.1, 2)
        deinter = blocks.vector_to_streams(gr.sizeof_float, 2)
        dst0 = blocks.vector_sink_f()
        dst1 = blocks.vector_sink_f()
        
        tb.connect(src0, (inter,0))
        tb.connect(src1, (inter,1))
        tb.connect(inter, op)
        tb.connect(op, deinter)
        tb.connect((deinter,0), dst0)
        tb.connect((deinter,1), dst1)
        tb.run()

        dst0_data = dst0.data()
        dst1_data = dst1.data()

        self.assertFloatTuplesAlmostEqual(expected_result0, dst0_data, 4)
        self.assertFloatTuplesAlmostEqual(expected_result1, dst1_data, 4)
    def test_002_t (self):
        #This tests multiple streams, to make sure it outputs the same input from before
        numstreams=3
        src_data0=(1.0,2.0,3.0)
        src_data1=(4.0,5.0,6.0)
        src_data2=(7.0,8.0,9.0)
        expected_result0=(1.0,2.0,3.0)
        src0 = blocks.vector_source_f(src_data0)
        src1 = blocks.vector_source_f(src_data1)
        src2 = blocks.vector_source_f(src_data2)
        blk = testblocks.streams_to_streams_ff(numstreams)
        dst0 = blocks.vector_sink_f()
        dst1 = blocks.vector_sink_f()
        dst2 = blocks.vector_sink_f()

        self.tb.connect(src0, (blk,0) )
        self.tb.connect(src1, (blk,1) )
        self.tb.connect(src2, (blk,2) )                
        self.tb.connect((blk,0), dst0)
        self.tb.connect((blk,1), dst1)
        self.tb.connect((blk,2), dst2)
        
        self.tb.run()
        result_data0 = dst0.data()
        result_data1 = dst1.data()
        result_data2 = dst2.data()
        # check data
        print result_data0
        self.assertFloatTuplesAlmostEqual(expected_result0, result_data0, 6)
    def test_002_t (self):
        vlen=16
        skip=4
        dc_null=2
        ofdm_sym=2
        expected_snr = ((1-0.01)/(0.01), (1-0.01)/(0.01))
        expected_noise = (0.01, 0.01)
        # define the blocks
        src_data = [0.1]*(skip/2) + [skip] + [0.1]*(skip/2-1)
        src_data = src_data * (vlen/skip)
        src_data = [0]*(dc_null/2) + src_data[:(vlen/2-dc_null/2)]  + src_data[(vlen/2+dc_null/2):] + [0]*(dc_null/2)
        src_data = src_data * (ofdm_sym)
        src = blocks.vector_source_c(src_data,False,vlen)
        snr_estim = ofdm.snr_estimator_dc_null(vlen,skip,dc_null)
        dst = blocks.vector_sink_f()
        dst_noise = blocks.vector_sink_f()

        # construct the flowgraph
        self.tb.connect(src,snr_estim)
        self.tb.connect((snr_estim,0),dst)
        self.tb.connect((snr_estim,1),dst_noise)

        # set up fg
        self.tb.run ()
        print "snr", dst.data()
        print "noise", dst_noise.data()

        # Compare with reference data from above
        self.assertFloatTuplesAlmostEqual(dst.data(),expected_snr)
        self.assertFloatTuplesAlmostEqual(dst_noise.data(),expected_noise)
示例#4
0
    def test_003_square3_ff(self):
        src_data0 = (0, 1, 0, 1, 0)
        src_data1 = (-3.0, 4.0, -5.5, 2.0, 3.0)
        src_data2 = (2.0, 2.0, 2.0, 2.0, 2.0)
        src_data3 = (2.7, 2.7, 2.1, 2.3, 2.5)
        expected_result0 = (-3.0, 2.0, -5.5, 2.0, 3.0)
        expected_result1 = (-3.0, 2.7, -5.5, 2.3, 3.0)
        src0 = blocks.vector_source_f(src_data0)
        src1 = blocks.vector_source_f(src_data1)
        src2 = blocks.vector_source_f(src_data2)
        src3 = blocks.vector_source_f(src_data3)
        sqr = square3_ff()
        dst0 = blocks.vector_sink_f()
        dst1 = blocks.vector_sink_f()
        self.tb.connect(src0, (sqr, 0))
        self.tb.connect(src1, (sqr, 1))
        self.tb.connect(src2, (sqr, 2))
        self.tb.connect(src3, (sqr, 3))
        self.tb.connect((sqr, 0), dst0)
        self.tb.connect((sqr, 1), dst1)
        self.tb.run()
        result_data0 = dst0.data()
        result_data1 = dst1.data()
        from pudb import set_trace

        set_trace()
        self.assertFloatTuplesAlmostEqual(expected_result0, result_data0, 6)
        self.assertFloatTuplesAlmostEqual(expected_result1, result_data1, 6)
示例#5
0
 def test_interleaving(self):
     # Takes 3 streams (a, b and c)
     # Outputs 2 streams.
     # First (d) is interleaving of a and b.
     # Second (e) is interleaving of a and b and c.  c is taken in
     #     chunks of 2 which are reversed.
     A = (1, 2, 3, 4, 5)
     B = (11, 12, 13, 14, 15)
     C = (99, 98, 97, 96, 95, 94, 93, 92, 91, 90)
     expected_D = (1, 11, 2, 12, 3, 13, 4, 14, 5, 15)
     expected_E = (1, 11, 98, 99, 2, 12, 96, 97, 3, 13, 94, 95,
                   4, 14, 92, 93, 5, 15, 90, 91)
     mapping = [[(0, 0), (1, 0)], # mapping to produce D
                [(0, 0), (1, 0), (2, 1), (2, 0)], # mapping to produce E
                ]
     srcA = blocks.vector_source_f(A, False, 1)
     srcB = blocks.vector_source_f(B, False, 1)
     srcC = blocks.vector_source_f(C, False, 2)
     vmap =  blocks.vector_map(gr.sizeof_int, (1, 1, 2), mapping)
     dstD = blocks.vector_sink_f(2)
     dstE = blocks.vector_sink_f(4)
     self.tb.connect(srcA, (vmap, 0))
     self.tb.connect(srcB, (vmap, 1))
     self.tb.connect(srcC, (vmap, 2))
     self.tb.connect((vmap, 0), dstD)
     self.tb.connect((vmap, 1), dstE)
     self.tb.run()
     self.assertEqual(expected_D, dstD.data())
     self.assertEqual(expected_E, dstE.data())
 def test_001_t (self):
     src_data0 = (20,121,210,11,110)
     src_data1 = (-3.0, 4.0, -5.5, 2.0, 3.0)
     src_data2 = (2.0, 2.0, 2.0, 2.0, 2.0)
     src_data3 = (2.7, 2.7, 2.1, 2.3, 2.5)
     expected_result0 = (-3.0, 2.0, 2.0, 2.0, 2.0)
     expected_result1 = (-3.0, 2.7, 2.1, 2.0, 2.5)
     src0 = blocks.vector_source_f (src_data0)
     src1 = blocks.vector_source_f (src_data1)
     src2 = blocks.vector_source_f (src_data2)
     src3 = blocks.vector_source_f (src_data3)
     switch = FM_stereo_mono_switch (75.0)
     dst0 = blocks.vector_sink_f ()
     dst1 = blocks.vector_sink_f ()
     self.tb.connect (src0, (switch,0))
     self.tb.connect (src1,(switch,1))
     self.tb.connect (src2,(switch,2))
     self.tb.connect (src3,(switch,3))
     self.tb.connect ((switch,0), dst0)
     self.tb.connect ((switch,1), dst1)
     self.tb.run ()
     result_data0 = dst0.data ()
     result_data1 = dst1.data ()
     #from pudb import set_trace; set_trace()
     self.assertFloatTuplesAlmostEqual (expected_result0, result_data0, 6)
     self.assertFloatTuplesAlmostEqual (expected_result1, result_data1, 6)
示例#7
0
    def test_f_003(self):
        # Test scenariou where we have defined a puncture pattern with
        # more bits than the puncsize with a delay. The python code
        # doesn't account for this when creating self.expected, but
        # this should be equivalent to a puncpat of the correct size.

        self.puncsize = 4
        self.puncpat0 = 0x5555 # too many bits set
        self.puncpat1 = 0x55   # num bits = puncsize
        self.delay = 1

        src = blocks.vector_source_f(self.src_data)
        op0  = fec.puncture_ff(self.puncsize, self.puncpat0, self.delay)
        op1  = fec.puncture_ff(self.puncsize, self.puncpat1, self.delay)
        dst0 = blocks.vector_sink_f()
        dst1 = blocks.vector_sink_f()

        self.tb.connect(src, op0, dst0)
        self.tb.connect(src, op1, dst1)
        self.tb.run()

        dst_data0 = list(dst0.data())
        dst_data1 = list(dst1.data())

        self.assertEqual(dst_data1, dst_data0)
示例#8
0
    def test_deint_001 (self):
        lenx = 64
        src = blocks.vector_source_f (range (lenx))
        op = blocks.deinterleave (gr.sizeof_float)
        dst0 = blocks.vector_sink_f ()
        dst1 = blocks.vector_sink_f ()
        dst2 = blocks.vector_sink_f ()
        dst3 = blocks.vector_sink_f ()

        self.tb.connect (src, op)
        self.tb.connect ((op, 0), dst0)
        self.tb.connect ((op, 1), dst1)
        self.tb.connect ((op, 2), dst2)
        self.tb.connect ((op, 3), dst3)
        self.tb.run ()

        expected_result0 = tuple (range (0, lenx, 4))
        expected_result1 = tuple (range (1, lenx, 4))
        expected_result2 = tuple (range (2, lenx, 4))
        expected_result3 = tuple (range (3, lenx, 4))

        self.assertFloatTuplesAlmostEqual (expected_result0, dst0.data ())
        self.assertFloatTuplesAlmostEqual (expected_result1, dst1.data ())
        self.assertFloatTuplesAlmostEqual (expected_result2, dst2.data ())
        self.assertFloatTuplesAlmostEqual (expected_result3, dst3.data ())
示例#9
0
    def __init__(self, N, sps, rolloff, ntaps, bw, noise, foffset, toffset, poffset):
        gr.top_block.__init__(self)

        rrc_taps = filter.firdes.root_raised_cosine(
            sps, sps, 1.0, rolloff, ntaps)

        data = 2.0*scipy.random.randint(0, 2, N) - 1.0
        data = scipy.exp(1j*poffset) * data

        self.src = blocks.vector_source_c(data.tolist(), False)
        self.rrc = filter.interp_fir_filter_ccf(sps, rrc_taps)
        self.chn = channels.channel_model(noise, foffset, toffset)
        self.fll = digital.fll_band_edge_cc(sps, rolloff, ntaps, bw)

        self.vsnk_src = blocks.vector_sink_c()
        self.vsnk_fll = blocks.vector_sink_c()
        self.vsnk_frq = blocks.vector_sink_f()
        self.vsnk_phs = blocks.vector_sink_f()
        self.vsnk_err = blocks.vector_sink_f()

        self.connect(self.src, self.rrc, self.chn, self.fll, self.vsnk_fll)
        self.connect(self.rrc, self.vsnk_src)
        self.connect((self.fll,1), self.vsnk_frq)
        self.connect((self.fll,2), self.vsnk_phs)
        self.connect((self.fll,3), self.vsnk_err)
示例#10
0
 def test_001_t (self):
     """ Simplest possible test: put in zeros, then header,
     then payload, trigger signal, try to demux.
     The return signal from the header parser is faked via _post()
     Add in some tags for fun.
     """
     n_zeros = 1
     header = (1, 2, 3)
     payload = tuple(range(5, 20))
     data_signal = (0,) * n_zeros + header + payload
     trigger_signal = [0,] * len(data_signal)
     trigger_signal[n_zeros] = 1
     # This is dropped:
     testtag1 = make_tag('tag1', 0, 0)
     # This goes on output 0, item 0:
     testtag2 = make_tag('tag2', 23, n_zeros)
     # This goes on output 0, item 2:
     testtag3 = make_tag('tag3', 42, n_zeros + len(header) - 1)
     # This goes on output 1, item 3:
     testtag4 = make_tag('tag4', 314, n_zeros + len(header) + 3)
     data_src = blocks.vector_source_f(
             data_signal,
             False,
             tags=(testtag1, testtag2, testtag3, testtag4)
     )
     trigger_src = blocks.vector_source_b(trigger_signal, False)
     hpd = digital.header_payload_demux(
         len(header), 1, 0, "frame_len", "detect", False, gr.sizeof_float
     )
     mock_header_demod = HeaderToMessageBlock(
             numpy.float32,
             len(header),
             [len(payload)]
     )
     self.assertEqual(pmt.length(hpd.message_ports_in()), 2) #extra system port defined for you
     payload_sink = blocks.vector_sink_f()
     header_sink = blocks.vector_sink_f()
     self.connect_all_blocks(data_src, trigger_src, hpd, mock_header_demod, payload_sink, header_sink)
     self.run_tb(payload_sink, len(payload), header_sink, len(header))
     self.assertEqual(header_sink.data(), header)
     self.assertEqual(payload_sink.data(), payload)
     ptags_header = []
     for tag in header_sink.tags():
         ptag = gr.tag_to_python(tag)
         ptags_header.append({'key': ptag.key, 'offset': ptag.offset})
     expected_tags_header = [
             {'key': 'tag2', 'offset': 0},
             {'key': 'tag3', 'offset': 2},
     ]
     self.assertEqual(expected_tags_header, ptags_header)
     ptags_payload = []
     for tag in payload_sink.tags():
         ptag = gr.tag_to_python(tag)
         ptags_payload.append({'key': ptag.key, 'offset': ptag.offset})
     expected_tags_payload = [
             {'key': 'frame_len', 'offset': 0},
             {'key': 'tag4', 'offset': 3},
     ]
     self.assertEqual(expected_tags_payload, ptags_payload)
示例#11
0
 def test_001_t_tags (self):
     """ Like the previous test, but use a trigger tag instead of
     a trigger signal.
     """
     n_zeros = 1
     header = (1, 2, 3)
     payload = tuple(range(5, 20))
     data_signal = (0,) * n_zeros + header + payload
     # Trigger tag
     trigger_tag = make_tag('detect', True, n_zeros)
     # This is dropped:
     testtag1 = make_tag('tag1', 0, 0)
     # This goes on output 0, item 0:
     testtag2 = make_tag('tag2', 23, n_zeros)
     # This goes on output 0, item 2:
     testtag3 = make_tag('tag3', 42, n_zeros + len(header) - 1)
     # This goes on output 1, item 3:
     testtag4 = make_tag('tag4', 314, n_zeros + len(header) + 3)
     data_src = blocks.vector_source_f(
             data_signal,
             False,
             tags=(trigger_tag, testtag1, testtag2, testtag3, testtag4)
     )
     hpd = digital.header_payload_demux(
         len(header), 1, 0, "frame_len", "detect", False, gr.sizeof_float
     )
     self.assertEqual(pmt.length(hpd.message_ports_in()), 2) #extra system port defined for you
     header_sink = blocks.vector_sink_f()
     payload_sink = blocks.vector_sink_f()
     mock_header_demod = HeaderToMessageBlock(
             numpy.float32,
             len(header),
             [len(payload)]
     )
     self.connect_all_blocks(data_src, None, hpd, mock_header_demod, payload_sink, header_sink)
     self.run_tb(payload_sink, len(payload), header_sink, len(header))
     # Check results
     self.assertEqual(header_sink.data(),  header)
     self.assertEqual(payload_sink.data(), payload)
     ptags_header = []
     for tag in header_sink.tags():
         ptag = gr.tag_to_python(tag)
         ptags_header.append({'key': ptag.key, 'offset': ptag.offset})
     expected_tags_header = [
             {'key': 'tag2', 'offset': 0},
             {'key': 'tag3', 'offset': 2},
     ]
     self.assertEqual(expected_tags_header, ptags_header)
     ptags_payload = []
     for tag in payload_sink.tags():
         ptag = gr.tag_to_python(tag)
         ptags_payload.append({'key': ptag.key, 'offset': ptag.offset})
     expected_tags_payload = [
             {'key': 'frame_len', 'offset': 0},
             {'key': 'tag4', 'offset': 3},
     ]
     self.assertEqual(expected_tags_payload, ptags_payload)
示例#12
0
    def __init__(self, N, sps, rolloff, ntaps, bw, noise,
                 foffset, toffset, poffset, mode=0):
        gr.top_block.__init__(self)

        rrc_taps = filter.firdes.root_raised_cosine(
            sps, sps, 1.0, rolloff, ntaps)

        gain = bw
        nfilts = 32
        rrc_taps_rx = filter.firdes.root_raised_cosine(
            nfilts, sps*nfilts, 1.0, rolloff, ntaps*nfilts)

        data = 2.0*scipy.random.randint(0, 2, N) - 1.0
        data = scipy.exp(1j*poffset) * data

        self.src = blocks.vector_source_c(data.tolist(), False)
        self.rrc = filter.interp_fir_filter_ccf(sps, rrc_taps)
        self.chn = channels.channel_model(noise, foffset, toffset)
        self.off = filter.fractional_resampler_cc(0.20, 1.0)

        if mode == 0:
            self.clk = digital.pfb_clock_sync_ccf(sps, gain, rrc_taps_rx,
                                                  nfilts, nfilts//2, 1)
            self.taps = self.clk.taps()
            self.dtaps = self.clk.diff_taps()

            self.delay = int(scipy.ceil(((len(rrc_taps)-1)/2 +
                                         (len(self.taps[0])-1)/2)/float(sps))) + 1


            self.vsnk_err = blocks.vector_sink_f()
            self.vsnk_rat = blocks.vector_sink_f()
            self.vsnk_phs = blocks.vector_sink_f()

            self.connect((self.clk,1), self.vsnk_err)
            self.connect((self.clk,2), self.vsnk_rat)
            self.connect((self.clk,3), self.vsnk_phs)

        else: # mode == 1
            mu = 0.5
            gain_mu = bw
            gain_omega = 0.25*gain_mu*gain_mu
            omega_rel_lim = 0.02
            self.clk = digital.clock_recovery_mm_cc(sps, gain_omega,
                                                    mu, gain_mu,
                                                    omega_rel_lim)

            self.vsnk_err = blocks.vector_sink_f()

            self.connect((self.clk,1), self.vsnk_err)

        self.vsnk_src = blocks.vector_sink_c()
        self.vsnk_clk = blocks.vector_sink_c()

        self.connect(self.src, self.rrc, self.chn, self.off, self.clk, self.vsnk_clk)
        self.connect(self.src, self.vsnk_src)
示例#13
0
 def test_non_sync_block(self):
     tb = gr.top_block ()
     src = blocks.vector_source_f(range(1000000))
     sinks = [blocks.vector_sink_f(), blocks.vector_sink_f()]
     dut = non_sync_block()
     tb.connect(src, dut)
     tb.connect((dut,0), sinks[0])
     tb.connect((dut,1), sinks[1])
     tb.run ()
     self.assertEqual(len(sinks[0].data()), 2*len(sinks[1].data()))
    def test_001_t (self):
        d_vlen=4
        d_skip=2
        d_dc_null=2

        sum_load=0
        sum_null=0

        #noise
        noise=np.random.normal(0,1,1000)
        src_data=[2,1]*10
#        src_data=[sum(x) for x in zip(data,noise)]
        src=blocks.vector_source_c(src_data,vlen=4)
        snr=ofdm.snr_estimator(d_vlen,d_skip)
        snr_dc_null=ofdm.snr_estimator_dc_null(d_vlen,d_skip,d_dc_null)
        dst=blocks.vector_sink_f()
        dst_noise=blocks.vector_sink_f()
        dst_dc_null=blocks.vector_sink_f()
        dst_dc_null_noise=blocks.vector_sink_f()
        #construct the flowgraph
        self.tb.connect(src,snr_dc_null)
        self.tb.connect(src,snr)

        self.tb.connect((snr_dc_null,0),dst_dc_null)
        self.tb.connect((snr_dc_null,1),dst_dc_null_noise)

        self.tb.connect((snr,0),dst)
        self.tb.connect((snr,1),dst_noise)
                
        # set up fg
        self.tb.run ()
        
        print "output", dst.data()
        print "output dc_null", dst_dc_null.data()
        # calculate reference data
        dc_null_noise=dst_dc_null.data()
        if not d_dc_null:
            for index,number in enumerate(src_data):
                square=number*number.conjugate()
                if not index%d_skip:
                    sum_load+=square
                else:
                    sum_null+=square
            estim =(1./d_skip)*((d_skip-1)*sum_load/sum_null-1)
            estim_noise = sum_null*d_skip/(d_skip-1)/d_vlen
        else:
            results=[0]*80
            estim_noise=results
            estim=results

#Compare with snr_estimator_block
        self.assertEqual(dst_dc_null.data(),dst.data())
        self.assertEqual(dst_dc_null_noise.data(),dst_noise.data())
示例#15
0
 def test_003_t (self):
     """
     Like test 1, but twice, plus one fail
     """
     n_zeros = 5
     header = (1, 2, 3)
     header_fail = (-1, -2, -4) # Contents don't really matter
     payload1 = tuple(range(5, 20))
     payload2 = (42,)
     data_signal = (0,) * n_zeros + header + payload1
     trigger_signal = [0,] * len(data_signal) * 2
     trigger_signal[n_zeros] = 1
     trigger_signal[len(data_signal)] = 1
     trigger_signal[len(data_signal)+len(header_fail)+n_zeros] = 1
     tx_signal = data_signal + header_fail + (0,) * n_zeros + header + payload2 + (0,) * 1000
     data_src = blocks.vector_source_f(tx_signal, False)
     trigger_src = blocks.vector_source_b(trigger_signal, False)
     hpd = digital.header_payload_demux(
         len(header), 1, 0, "frame_len", "detect", False, gr.sizeof_float
     )
     self.assertEqual(pmt.length(hpd.message_ports_in()), 1)
     header_sink = blocks.vector_sink_f()
     payload_sink = blocks.vector_sink_f()
     self.tb.connect(data_src,    (hpd, 0))
     self.tb.connect(trigger_src, (hpd, 1))
     self.tb.connect((hpd, 0), header_sink)
     self.tb.connect((hpd, 1), payload_sink)
     self.tb.start()
     time.sleep(.2) # Need this, otherwise, the next message is ignored
     hpd.to_basic_block()._post(
             pmt.intern('header_data'),
             pmt.from_long(len(payload1))
     )
     while len(payload_sink.data()) < len(payload1):
         time.sleep(.2)
     hpd.to_basic_block()._post(
             pmt.intern('header_data'),
             pmt.PMT_F
     )
     # This next command is a bit of a showstopper, but there's no condition to check upon
     # to see if the previous msg handling is finished
     time.sleep(.7)
     hpd.to_basic_block()._post(
             pmt.intern('header_data'),
             pmt.from_long(len(payload2))
     )
     while len(payload_sink.data()) < len(payload1) + len(payload2):
         time.sleep(.2)
     self.tb.stop()
     self.tb.wait()
     self.assertEqual(header_sink.data(),  header + header_fail + header)
     self.assertEqual(payload_sink.data(), payload1 + payload2)
示例#16
0
 def test_010_run(self):
     expected = (1.0, 2.0, 3.0, 4.0)
     hblock = gr.top_block("test_block")
     src = blocks.vector_source_f(expected, False)
     sink1 = blocks.vector_sink_f()
     sink2 = blocks.vector_sink_f()
     hblock.connect(src, sink1)
     hblock.connect(src, sink2)
     hblock.run()
     actual1 = sink1.data()
     actual2 = sink2.data()
     self.assertEqual(expected, actual1)
     self.assertEqual(expected, actual2)
示例#17
0
 def test_complex_to_float_2(self):
     src_data = (1+2j, 3+4j, 5+6j, 7+8j, 9+10j)
     expected_data1 = (1.0, 3.0, 5.0, 7.0, 9.0)
     expected_data2 = (2.0, 4.0, 6.0, 8.0, 10.0)
     src = blocks.vector_source_c(src_data)
     op = blocks.complex_to_float()
     dst1 = blocks.vector_sink_f()
     dst2 = blocks.vector_sink_f()
     self.tb.connect(src, op)
     self.tb.connect((op, 0), dst1)
     self.tb.connect((op, 1), dst2)
     self.tb.run()
     self.assertFloatTuplesAlmostEqual(expected_data1, dst1.data())
     self.assertFloatTuplesAlmostEqual(expected_data2, dst2.data())
    def test_001_t (self):
        test = ieee802154g.preamble_detector(8)

        # typical preamble cycle, at 8 samples per symbol.
        num_cycles = 20
        data = num_cycles * [-0.098, -0.064, 0.064, 0.093, 0.081, 0.071, 0.069, 0.065, 0.070, 0.037, -0.087, -0.118, -0.105, -0.101, -0.099, -0.095]
        src = blocks.vector_source_f(data, False)
        snk = blocks.vector_sink_f()

        self.tb.connect(src, test, snk)
        self.tb.run ()

        dst_data = snk.data()
        # check data
        assert len(dst_data) == num_cycles * 2
        cnt = 0
        locked = False
        pos = False
        for n in dst_data:
            if not locked:
                if n > 0.08:    # found peak positive
                    locked = True
                    pos = True
                elif cnt > 24:
                    assert False, "failed to lock"
                    break
            else:
                if pos:
                    assert n < 0
                else:
                    assert n > 0
                pos = not pos
            cnt += 1
示例#19
0
    def test_quad_demod_001(self):
        f = 1000.0
        fs = 8000.0

        src_data = []
        for i in xrange(200):
            ti = i/fs
            src_data.append(cmath.exp(2j*cmath.pi*f*ti))

        # f/fs is a quarter turn per sample.
        # Set the gain based on this to get 1 out.
        gain = 1.0/(cmath.pi/4)

        expected_result = [0,] + 199*[1.0]

        src = blocks.vector_source_c(src_data)
        op = analog.quadrature_demod_cf(gain)
        dst = blocks.vector_sink_f()
        
        self.tb.connect(src, op)
        self.tb.connect(op, dst)
        self.tb.run()
        
        result_data = dst.data()
        self.assertComplexTuplesAlmostEqual(expected_result, result_data, 5)
示例#20
0
    def test_int_002 (self):
        blksize = 4
        lenx = 64
        plusup_big = lambda a: a + (blksize * 4)
        plusup_little = lambda a: a + blksize
        a_vec = range(0,blksize)
        for i in range(0,(lenx/(4 * blksize)) - 1):
            a_vec += map(plusup_big, a_vec[len(a_vec) - blksize:])

        b_vec = map(plusup_little, a_vec)
        c_vec = map(plusup_little, b_vec)
        d_vec = map(plusup_little, c_vec)

        src0 = blocks.vector_source_f (a_vec)
        src1 = blocks.vector_source_f (b_vec)
        src2 = blocks.vector_source_f (c_vec)
        src3 = blocks.vector_source_f (d_vec)
        op = blocks.interleave (gr.sizeof_float, blksize)
        dst = blocks.vector_sink_f ()

        self.tb.connect (src0, (op, 0))
        self.tb.connect (src1, (op, 1))
        self.tb.connect (src2, (op, 2))
        self.tb.connect (src3, (op, 3))
        self.tb.connect (op, dst)
        self.tb.run ()
        expected_result = tuple (range (lenx))
        result_data = dst.data ()

        self.assertFloatTuplesAlmostEqual (expected_result, result_data)
示例#21
0
 def test_fir_filter_fff_001(self):
     src_data = 40*[1, 2, 3, 4]
     expected_data = (0.5, 1.5, 3.0, 5.0, 5.5, 6.5, 8.0, 10.0,
                      10.5, 11.5, 13.0, 15.0, 15.5, 16.5, 18.0,
                      20.0, 20.5, 21.5, 23.0, 25.0, 25.5, 26.5,
                      28.0, 30.0, 30.5, 31.5, 33.0, 35.0, 35.5,
                      36.5, 38.0, 40.0, 40.5, 41.5, 43.0, 45.0,
                      45.5, 46.5, 48.0, 50.0, 50.0, 50.0, 50.0,
                      50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0,
                      50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0,
                      50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0,
                      50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0,
                      50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0,
                      50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0,
                      50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0,
                      50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0,
                      50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0,
                      50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0,
                      50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0,
                      50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0,
                      50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0,
                      50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0,
                      50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0,
                      50.0, 50.0, 50.0, 50.0, 50.0, 50.0, 50.0,
                      50.0, 50.0, 50.0, 50.0, 50.0)
     src = blocks.vector_source_f(src_data)
     op  = filter.fir_filter_fff(1, 20*[0.5, 0.5])
     dst = blocks.vector_sink_f()
     self.tb.connect(src, op, dst)
     self.tb.run()
     result_data = dst.data()
     self.assertFloatTuplesAlmostEqual(expected_data, result_data, 5)
示例#22
0
    def test_004_es_source_pdus(self):
        print "test_004_es_source_pdus"       
        msg = pmt.cons( pmt.to_pmt( {"somekey":"val2", "somekey2":"someval2" } ), 
                        pmt.to_pmt( numpy.array( [0,1,2,3,4,5,6,7,8,9] , dtype=numpy.float32) ) );
        src = es.source([gr.sizeof_float], 8, 2);
        stb = blocks.message_strobe( msg, 100.0 );
        tb = gr.top_block();
        tb.msg_connect(stb, "strobe", src, "schedule_event");
        th = blocks.throttle(gr.sizeof_float, 1000*100);
        hd = blocks.head(gr.sizeof_float, 1000*100);
        snk = blocks.vector_sink_f();
        tb.connect(src,th,hd,snk);

        # TODO: this can not use run because it is 
        # subject to GNU Radio's shutdown msg block bug
        # for remaining upstream msg blocks ...
        #tb.run();

        # workaround
        tb.start();
        time.sleep(1);
        tb.stop();
        tb.wait();

        self.assertEqual( sum(snk.data())>0, True );
示例#23
0
 def run_once(self, X_in, A, tpp=gr.TPP_DONT, A2=None, tags=None, msg_A=None):
     """ 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)
     A_matrix = numpy.matrix(A)
     (N, M) = A_matrix.shape
     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)
     if A2 is not None:
         self.multiplier.set_A(A2)
         A = A2
         A_matrix = numpy.matrix(A)
     for i in xrange(N):
         if tags is None:
             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))
     sinks = []
     for i in xrange(M):
         sinks.append(blocks.vector_sink_f())
         self.tb.connect((self.multiplier, i), sinks[i])
     # Run and check
     self.tb.run()
     for i in xrange(X_in.shape[1]):
         Y_out_exp[:,i] = A_matrix * X_in[:,i]
     Y_out = [list(x.data()) for x in sinks]
     if tags is not None:
         self.the_tags = []
         for i in xrange(M):
             self.the_tags.append(sinks[i].tags())
     self.assertEqual(list(Y_out), Y_out_exp.tolist())
示例#24
0
    def test_001(self):
        """ Run test:
        - No overlap
        - Hamming window from Python
        - Constant input signal of amplitude 1

        The given input signal has a known power of 1. Therefore, the integral of the
        PSD estimation result should be pretty close to 1."""
        fft_len = 256
        overlap = 0
        alpha = 0.1
        window = hamming(fft_len)

        src_data = (1,) * (100 * fft_len)
        src = blocks.vector_source_c(src_data, False)
        welch = specest.welchsp(fft_len, overlap, alpha, False, window)
        sink = blocks.vector_sink_f(fft_len)

        self.tb.connect(src, welch, sink)
        self.tb.run()

        dst_data =  sink.data()
        dst_data = array(dst_data[-fft_len:])
        power_est = sum(dst_data) * 2 * pi / fft_len
        print power_est

        self.assertAlmostEqual(power_est, 1, 3)
示例#25
0
    def test_sf_tag(self):
        constA = [-3.0, -1.0, 1.0, 3]
        constB = [12.0, -12.0, 6.0, -6]
        src_data = (0, 1, 2, 3, 3, 2, 1, 0)
        expected_result = (-3, -1, 1, 3,
                            -6, 6, -12, 12)
        first_tag = gr.tag_t()
        first_tag.key = pmt.intern("set_symbol_table")
        first_tag.value = pmt.init_f32vector(len(constA), constA)
        first_tag.offset = 0
        second_tag = gr.tag_t()
        second_tag.key = pmt.intern("set_symbol_table")
        second_tag.value = pmt.init_f32vector(len(constB), constB)
        second_tag.offset = 4

        src = blocks.vector_source_s(src_data, False, 1, [first_tag, second_tag])
        op = digital.chunks_to_symbols_sf(constB)

        dst = blocks.vector_sink_f()
        self.tb.connect(src, op)
        self.tb.connect(op, dst)
        self.tb.run()

        actual_result = dst.data()
        self.assertEqual(expected_result, actual_result)
示例#26
0
    def test_003_t (self):
        vec_len = 3
        my_select = 2
        src_data = (1.0,2.0,3.0,4.0,5.0,6.0,7.0,8.0,9.0,1.0,10.0,100.0)
        expected_result = (3.0,6.0,9.0,100.0)

        src = blocks.vector_source_f(src_data)
        s2v = blocks.stream_to_vector(gr.sizeof_float, vec_len)
        blk = testblocks.vec_select(vec_len, my_select)
        dst = blocks.vector_sink_f()
        
        blk.set_select(3)
        
        self.tb.connect(src, s2v)
        self.tb.connect(s2v, blk)
        self.tb.connect(blk, dst)
        self.tb.run()
        result_data = dst.data()
        print "T3 Source: "
        print str(src_data).strip('[]')
        print "T3 Expected Results: "
        print str(expected_result).strip('[]')
        print "T3 Results: "
        print str(result_data).strip('[]')
        self.assertFloatTuplesAlmostEqual(expected_result, result_data, 6)
示例#27
0
    def test_003_ff(self):
        N = 10000        # number of samples to use
        fs = 1000        # baseband sampling rate
        rrate = 1.123    # resampling rate

        freq = 10
        data = sig_source_f(fs, freq, 1, N)
        ctrl = const_source_f(rrate, N)
        signal = blocks.vector_source_f(data)
        control = blocks.vector_source_f(ctrl)
        op = filter.fractional_resampler_ff(0, 1)
        snk = blocks.vector_sink_f()

        self.tb.connect(signal, op, snk)
        self.tb.connect(control, (op,1))
        self.tb.run() 

        Ntest = 5000
        L = len(snk.data())
        t = map(lambda x: float(x)/(fs/rrate), xrange(L))

        phase = 0.1884
        expected_data = map(lambda x: math.sin(2.*math.pi*freq*x+phase), t)

        dst_data = snk.data()

        self.assertFloatTuplesAlmostEqual(expected_data[-Ntest:], dst_data[-Ntest:], 3)
    def test_file_descriptor(self):
        src_data = range(1000)
        expected_result = range(1000)

        snk2 = blocks.vector_sink_f()

        with tempfile.NamedTemporaryFile() as temp:
            fhandle0 = open(temp.name, "wb")
            fd0 = fhandle0.fileno()

            src = blocks.vector_source_f(src_data)
            snk = blocks.file_descriptor_sink(gr.sizeof_float, fd0)

            self.tb.connect(src, snk)
            self.tb.run()
            os.fsync(fd0)
            fhandle0.close()

            fhandle1 = open(temp.name, "rb")
            fd1 = fhandle1.fileno()
            src2 = blocks.file_descriptor_source(gr.sizeof_float, fd1, False)

            self.tb.disconnect(src, snk)
            self.tb.connect(src2, snk2)
            self.tb.run()
            os.fsync(fd1)
            fhandle1.close()

        result_data = snk2.data()
        self.assertFloatTuplesAlmostEqual(expected_result, result_data)
        self.assertEqual(len(snk2.tags()), 0)
示例#29
0
    def test02(self):
        # Test float/float version
        omega = 2
        gain_omega = 0.01
        mu = 0.5
        gain_mu = 0.01
        omega_rel_lim = 0.001

        self.test = digital.clock_recovery_mm_ff(omega, gain_omega,
                                                 mu, gain_mu,
                                                 omega_rel_lim)
        
        data = 100*[1,]
        self.src = blocks.vector_source_f(data, False)
        self.snk = blocks.vector_sink_f()

        self.tb.connect(self.src, self.test, self.snk)
        self.tb.run()
        
        expected_result = 100*[0.99972, ] # doesn't quite get to 1.0
        dst_data = self.snk.data()

        # Only compare last Ncmp samples
        Ncmp = 30
        len_e = len(expected_result)
        len_d = len(dst_data)
        expected_result = expected_result[len_e - Ncmp:]
        dst_data = dst_data[len_d - Ncmp:]

        #print expected_result
        #print dst_data
        
        self.assertFloatTuplesAlmostEqual(expected_result, dst_data, 5)
示例#30
0
    def test_fff_000(self):
        N = 500         # number of samples to use
        fs = 5000.0     # baseband sampling rate
        rrate = 2.3421  # resampling rate

        nfilts = 32
        taps = filter.firdes.low_pass_2(nfilts, nfilts*fs, fs/2, fs/10,
                                        attenuation_dB=80,
                                        window=filter.firdes.WIN_BLACKMAN_hARRIS)

        freq = 121.213
        data = sig_source_f(fs, freq, 1, N)
        signal = blocks.vector_source_f(data)
        pfb = filter.pfb_arb_resampler_fff(rrate, taps, nfilts)
        snk = blocks.vector_sink_f()

        self.tb.connect(signal, pfb, snk)
        self.tb.run() 

        Ntest = 50
        L = len(snk.data())

        # Get group delay and estimate of phase offset from the filter itself.
        delay = pfb.group_delay()
        phase = pfb.phase_offset(freq, fs)
        
        # Create a timeline offset by the filter's group delay
        t = map(lambda x: float(x)/(fs*rrate), xrange(delay, L+delay))

        # Data of the sinusoid at frequency freq with the delay and phase offset.
        expected_data = map(lambda x: math.sin(2.*math.pi*freq*x+phase), t)

        dst_data = snk.data()

        self.assertFloatTuplesAlmostEqual(expected_data[-Ntest:], dst_data[-Ntest:], 2)
示例#31
0
 def test_vector_to_streams(self):
     # Split an input vector into N streams.
     N = 5
     M = 20
     src_data = list(range(0, M))
     expected_results = []
     for n in range(0, N):
         expected_results.append(list(range(n, M, N)))
     mapping = [[(0, n)] for n in range(0, N)]
     src = blocks.vector_source_f(src_data, False, N)
     vmap = blocks.vector_map(gr.sizeof_float, (N, ), mapping)
     dsts = [blocks.vector_sink_f(1) for n in range(0, N)]
     self.tb.connect(src, vmap)
     for n in range(0, N):
         self.tb.connect((vmap, n), dsts[n])
     self.tb.run()
     for n in range(0, N):
         result_data = list(dsts[n].data())
         self.assertEqual(expected_results[n], result_data)
 def test_002(self):
     payload = "test packet"     # payload length is 11 bytes
     header = "\x00\xd0\x00\xd0" # header contains packet length, twice (bit-swapped)
     packet = header + payload
     pad = (0,) * 64
     src_data = (0, 0, 1, 1, 1, 1, 0, 1, 1) + tuple(string_to_1_0_list(packet)) + pad
     src_floats = tuple(2*b-1 for b in src_data) # convert to binary antipodal symbols (-1,1)
     expected = src_floats[9+32:-len(pad)]
     src = blocks.vector_source_f(src_floats)
     op = digital.correlate_access_code_ff_ts("1011", 0, "sync")
     dst = blocks.vector_sink_f()
     self.tb.connect(src, op, dst)
     self.tb.run()
     result_data = dst.data()
     result_tags = dst.tags()
     self.assertEqual(len(result_data), len(payload)*8)
     self.assertEqual(result_tags[0].offset, 0)
     self.assertEqual(pmt.to_long(result_tags[0].value), len(payload)*8)
     self.assertFloatTuplesAlmostEqual(result_data, expected, 5)
示例#33
0
 def test_001(self):
     vlen = 10
     src_data = list(range(vlen)) * 100
     src = blocks.vector_source_f(src_data, False, vlen)
     zeromq_rep_sink = zeromq.rep_sink("tcp://127.0.0.1:0", 0)
     address = zeromq_rep_sink.last_endpoint()
     zeromq_req_source = zeromq.req_source(address, 0)
     sink = blocks.vector_sink_f(vlen)
     self.send_tb.connect(src, zeromq_rep_sink)
     self.recv_tb.connect(zeromq_req_source, sink)
     self.recv_tb.start()
     time.sleep(0.5)
     self.send_tb.start()
     time.sleep(0.5)
     self.recv_tb.stop()
     self.send_tb.stop()
     self.recv_tb.wait()
     self.send_tb.wait()
     self.assertFloatTuplesAlmostEqual(sink.data(), src_data)
示例#34
0
    def test_f_002(self):
        # Test scenariou where we have defined a puncture pattern with
        # more bits than the puncsize.

        self.puncsize = 4
        self.puncpat = 0x5555
        self.delay = 0

        self.puncture_setup()

        src = blocks.vector_source_f(self.src_data)
        op  = fec.puncture_ff(self.puncsize, self.puncpat, self.delay)
        dst = blocks.vector_sink_f()

        self.tb.connect(src, op, dst)
        self.tb.run()

        dst_data = list(dst.data())
        self.assertEqual(self.expected, dst_data)
示例#35
0
 def get_data(self):
     '''
         Returns the contents of the Vector Sink
     '''
     t = gr.top_block()
     fsource = blocks.file_source(gr.sizeof_float,"fsink.dat")
     self.vsink = blocks.vector_sink_f()
     '''if __name__!="__main__":
        print "in if condition"
        fsource.seek(-250,2)'''
     t.connect(fsource,self.vsink)
     t.run()
     samples=scipy.array(self.vsink.data())
     self.vsink.reset()
     self.fsink.close()
     open("SineData.dat",'w').close()
     #sleep(0.05)
     self.fsink.open("fsink.dat")
     return samples
示例#36
0
    def stest_003(self):
        src_data0 = [0, 2, -3, 0, 12, 0]
        src_data1 = [1, 1, 1, 1, 1, 1]

        expected_result = [
            float(min(x, y)) for x, y in zip(src_data0, src_data1)
        ]

        src0 = blocks.vector_source_f(src_data0)
        src1 = blocks.vector_source_f(src_data1)
        op = blocks.min_ff(1)
        dst = blocks.vector_sink_f()

        self.tb.connect(src0, (op, 0))
        self.tb.connect(src1, (op, 1))
        self.tb.connect(op, dst)
        self.tb.run()
        result_data = dst.data()
        self.assertEqual(expected_result, result_data)
示例#37
0
 def test_iir_direct_006(self):
     src_data = (1, 2, 3, 4, 5, 6, 7, 8)
     expected_result = (2, 13, 21, 59, 58, 186, 68, 583)
     fftaps = (2, 1)
     fbtaps = (0, -1)
     src = blocks.vector_source_f(src_data)
     op = filter.iir_filter_ffd(fftaps, fbtaps)
     fftaps = (2, 11, 0)
     fbtaps = (0, -1, 3)
     # FIXME: implement set_taps as generalized callback
     # op.set_taps(fftaps, fbtaps)
     op.set_fftaps(fftaps)
     op.set_fbtaps(fbtaps)
     dst = blocks.vector_sink_f()
     self.tb.connect(src, op)
     self.tb.connect(op, dst)
     self.tb.run()
     result_data = dst.data()
     self.assertFloatTuplesAlmostEqual(expected_result, result_data)
    def test_001_t (self):
        # data
        self.default = 1.5
        self.data = (-0.5, 3, -0.2, -0.8, 1, 1, 0, 1.12, -0.12, 0)
        self.expected = (1, 4, 3.8, 3, 4, 5, 5, 6.12, 6, 6)

        # blocks
        self.src = blocks.vector_source_f(self.data)
        self.sum = doa.cumulative_ff(self.default)
        self.snk = blocks.vector_sink_f()

        # connections
        self.tb.connect(self.src, self.sum, self.snk)
        self.tb.run ()

        # check data
        self.results = self.snk.data()
        print (self.results)
        self.assertComplexTuplesAlmostEqual(self.expected,self.results,5)
示例#39
0
    def test_deinterleave(self):
        tb = self.tb

        # set up fg
        cols, rows = 4, 10
        vec = sum((rows * [x, ] for x in range(cols)), [])
        expected = rows * list(range(cols))

        src = blocks.vector_source_f(vec, False)
        itlv = blocks.matrix_interleaver(
            gr.sizeof_float, rows=rows, cols=cols, deint=True)
        snk = blocks.vector_sink_f()

        tb.connect(src, itlv, snk)
        tb.run()
        result = snk.data()

        # check data
        self.assertFloatTuplesAlmostEqual(expected, result)
示例#40
0
 def test_031_multiple_internal_inputs(self):
     tb = gr.top_block()
     src = blocks.vector_source_f([
         1.0,
     ])
     hb = gr.hier_block2("hb", gr.io_signature(1, 1, gr.sizeof_float),
                         gr.io_signature(1, 1, gr.sizeof_float))
     m1 = multiply_const_ff(1.0)
     m2 = multiply_const_ff(2.0)
     add = add_ff()
     hb.connect(hb, m1)  # m1 is connected to hb external input #0
     hb.connect(hb, m2)  # m2 is also connected to hb external input #0
     hb.connect(m1, (add, 0))
     hb.connect(m2, (add, 1))
     hb.connect(add, hb)  # add is connected to hb external output #0
     dst = blocks.vector_sink_f()
     tb.connect(src, hb, dst)
     tb.run()
     self.assertEquals(dst.data(), (3.0, ))
示例#41
0
    def test_003_t(self):
        # data
        self.vector_length = 33
        self.data = (0.292036732051034, -0.707963267948966, -1.70796326794897,
                     -2.70796326794897, 2.57522203923062, 1.57522203923062,
                     0.575222039230621, -0.424777960769379, -1.42477796076938,
                     -2.42477796076938, 2.85840734641021, 1.85840734641021,
                     0.858407346410207, -0.141592653589793, -1.14159265358979,
                     -2.14159265358979, -3.14159265358979, 2.14159265358979,
                     1.14159265358979, 0.141592653589793, -0.858407346410207,
                     -1.85840734641021, -2.85840734641021, 2.42477796076938,
                     1.42477796076938, 0.424777960769379, -0.575222039230621,
                     -1.57522203923062, -2.57522203923062, 2.70796326794897,
                     1.70796326794897, 0.707963267948966, -0.292036732051034)
        self.expected = (
            0.292036732051034, -0.707963267948966, -1.70796326794897,
            -2.70796326794897, -3.70796326794897, -4.70796326794897,
            -5.70796326794897, -6.70796326794897, -7.70796326794897,
            -8.70796326794897, -9.70796326794897, -10.7079632679490,
            -11.7079632679490, -12.7079632679490, -13.7079632679490,
            -14.7079632679490, -15.7079632679490, -16.7079632679490,
            -17.7079632679490, -18.7079632679490, -19.7079632679490,
            -20.7079632679490, -21.7079632679490, -22.7079632679490,
            -23.7079632679490, -24.7079632679490, -25.7079632679490,
            -26.7079632679490, -27.7079632679490, -28.7079632679490,
            -29.7079632679490, -30.7079632679490, -31.7079632679490)
        self.min = -3.14159
        self.max = 3.14159

        # blocks
        self.src = blocks.vector_source_f(self.data, False, self.vector_length)
        self.unwrap = doa.unwrap_ff(self.vector_length, self.min, self.max)
        self.snk = blocks.vector_sink_f(self.vector_length)

        # connections
        self.tb.connect(self.src, self.unwrap, self.snk)
        self.tb.run()

        # check data
        self.result = self.snk.data()
        print(self.result)
        self.assertFloatTuplesAlmostEqual(self.expected, self.result, 3)
示例#42
0
 def run_once(self,
              X_in,
              A,
              tpp=gr.TPP_DONT,
              A2=None,
              tags=None,
              msg_A=None):
     """ 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)
     A_matrix = numpy.matrix(A)
     (N, M) = A_matrix.shape
     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)
     if A2 is not None:
         self.multiplier.set_A(A2)
         A = A2
         A_matrix = numpy.matrix(A)
     for i in xrange(N):
         if tags is None:
             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))
     sinks = []
     for i in xrange(M):
         sinks.append(blocks.vector_sink_f())
         self.tb.connect((self.multiplier, i), sinks[i])
     # Run and check
     self.tb.run()
     for i in xrange(X_in.shape[1]):
         Y_out_exp[:, i] = A_matrix * X_in[:, i]
     Y_out = [list(x.data()) for x in sinks]
     if tags is not None:
         self.the_tags = []
         for i in xrange(M):
             self.the_tags.append(sinks[i].tags())
     self.assertEqual(list(Y_out), Y_out_exp.tolist())
示例#43
0
    def test_pwr_squelch_004(self):
        alpha = 0.0001
        thr = -25

        src_data = [float(x) / 10.0 for x in range(1, 40)]
        src = blocks.vector_source_f(src_data)
        op = analog.pwr_squelch_ff(thr, alpha)
        dst = blocks.vector_sink_f()

        self.tb.connect(src, op)
        self.tb.connect(op, dst)
        self.tb.run()

        expected_result = src_data
        expected_result[0:20] = 20 * [
            0,
        ]

        result_data = dst.data()
        self.assertFloatTuplesAlmostEqual(expected_result, result_data, 4)
 def test_001_t(self):
     # test parameters
     output_pow = 1e-3
     wavelen = 850e-9
     ext_ratio = 20
     src_data = (0, 1, 1, 0, 1)
     # calculate laser output pattern
     expected_result = self.LaserOut(src_data, output_pow, ext_ratio)
     # create blocks and connect flowgraph
     src = blocks.vector_source_f(src_data)
     sqr = FSO_Comm.Laser_ff(output_pow, wavelen, ext_ratio)
     dst = blocks.vector_sink_f()
     self.tb.connect(src, sqr)
     self.tb.connect(sqr, dst)
     # set up fg
     self.tb.run()
     # check data
     result_data = dst.data()
     # check accuracy of calculated values from blocks
     self.assertFloatTuplesAlmostEqual(expected_result, result_data, 6)
示例#45
0
    def test_f_001(self):
        # Test normal operation of the puncture block with a delay

        self.puncsize = 8
        self.puncpat = 0xEE
        self.delay = 1

        self.src_data = list(range(16))

        self.puncture_setup()

        src = blocks.vector_source_f(self.src_data)
        op = fec.puncture_ff(self.puncsize, self.puncpat, self.delay)
        dst = blocks.vector_sink_f()

        self.tb.connect(src, op, dst)
        self.tb.run()

        dst_data = list(dst.data())
        self.assertEqual(self.expected, dst_data)
    def test_001_t(self):
        # set up fg
        senal_entrante = (1., 2., 3., 4., 5., 6, 7, 8, 9, 10)
        paso = 4
        Delay1 = 0
        src = blocks.vector_source_f(senal_entrante)
        prom = diezmoppenh3_ff(paso, Delay1)
        snk = blocks.vector_sink_f()
        self.tb.connect(src, prom)
        self.tb.connect(prom, snk)

        # check data
        self.tb.run()
        senal_salida = snk.data()
        print("entrada: ", senal_entrante)
        salida_esperada = (1., 0., 0., 0., 5., 0, 0, 0, 9, 0)
        print("salida esperada: ", salida_esperada)
        print("salida obtenida: ", senal_salida)

        self.assertFloatTuplesAlmostEqual(salida_esperada, senal_salida, 6)
示例#47
0
    def test_002_interp(self):
        taps = random_floats(31)
        src_data = random_floats(10000)
        interpolation = 3

        expected_result = reference_interp_filter(src_data, interpolation,
                                                  taps)

        tb = gr.top_block()
        src = blocks.vector_source_f(src_data)
        op = filter.rational_resampler_fff(interpolation, 1, taps)
        dst = blocks.vector_sink_f()
        tb.connect(src, op)
        tb.connect(op, dst)
        tb.run()
        result_data = dst.data()

        N = 1000
        offset = len(taps) - 1
        self.assertEqual(expected_result[offset:offset + N], result_data[0:N])
示例#48
0
 def test_002_freq(self):
     """ Add a fine frequency offset and see if that gets detected properly """
     fft_len = 32
     cp_len = 4
     # This frequency offset is normalized to rads, i.e. \pi == f_s/2
     max_freq_offset = 2 * numpy.pi / fft_len  # Otherwise, it's coarse
     freq_offset = ((2 * random.random()) - 1) * max_freq_offset
     sig_len = (fft_len + cp_len) * 10
     tx_signal = make_bpsk_burst(fft_len, cp_len, sig_len)
     sync = digital.ofdm_sync_sc_cfb(fft_len, cp_len, True)
     sink_freq = blocks.vector_sink_f()
     sink_detect = blocks.vector_sink_b()
     channel = channels.channel_model(0.005, freq_offset / 2.0 / numpy.pi)
     self.tb.connect(blocks.vector_source_c(tx_signal), channel, sync)
     self.tb.connect((sync, 0), sink_freq)
     self.tb.connect((sync, 1), sink_detect)
     self.tb.run()
     phi_hat = sink_freq.data()[sink_detect.data().index(1)]
     est_freq_offset = 2 * phi_hat / fft_len
     self.assertAlmostEqual(est_freq_offset, freq_offset, places=2)
示例#49
0
 def test_004_t (self):
     tags = []
     tags.append(gr.tag_t())
     tags[0].key = pmt.string_to_symbol('key')
     tags[0].value = pmt.from_long(42)
     tags[0].offset = 0
     tags.append(gr.tag_t())
     tags[1].key = pmt.string_to_symbol('key')
     tags[1].value = pmt.from_long(42)
     tags[1].offset = 5
     tags.append(gr.tag_t())
     tags[2].key = pmt.string_to_symbol('secondkey')
     tags[2].value = pmt.from_long(42)
     tags[2].offset = 6
     src = blocks.vector_source_f(range(20), False, 1, tags)
     gate = blocks.tag_gate(gr.sizeof_float, True)
     sink = blocks.vector_sink_f()
     self.tb.connect(src, gate, sink)
     self.tb.run ()
     self.assertEqual(len(sink.tags()), 3)
def test_nrlz(self, param):
    """this function run the defined test, for easier understanding"""

    tb = self.tb

    src = blocks.vector_source_b(param.data_src, True, 1, [])
    dst = blocks.vector_sink_f()

    head = blocks.head(gr.sizeof_char, len(param.data_src))

    nrzl = ecss.nrzl_encoder_subcarrier(param.sine, param.freq_sub, param.bit_rate, param.samp_rate)

    tb.connect(src, head)
    tb.connect(head, nrzl)
    tb.connect(nrzl, dst)

    self.tb.run()

    out = dst.data()
    return out
示例#51
0
    def test_001(self):
        #Test the overflow buffer in pdu_to_tagged_stream
        src_data = [1.0, 2.0, 3.0, 4.0, 5.0, 6.0, 7.0, 8.0, 9.0, 10.0]
        src = blocks.pdu_to_tagged_stream(blocks.float_t)
        snk = blocks.vector_sink_f()
 
        self.tb.connect(src, snk)
        port = pmt.intern("pdus")
 
        msg = pmt.cons( pmt.PMT_NIL, pmt.init_f32vector(10, src_data))
        src.to_basic_block()._post(port, msg)
 
        src.set_max_noutput_items(5)
 
        self.tb.start()
        #ideally, would wait until we get ten samples
        time.sleep(0.2)
        self.tb.stop()
 
        self.assertEqual(src_data, list(snk.data()) )
示例#52
0
    def test_window_overlapping(self):
        M = 8
        R = M / 2
        src_data = np.ones(M)
        op = self.make(M, R, [])
        window = op.window()
        expected_result = np.concatenate((np.concatenate(
            (np.zeros(R), src_data[:R])) * window, src_data * window))

        src = blocks.vector_source_f(src_data)
        dst = blocks.vector_sink_f()

        self.tb.connect(src, op)
        self.tb.connect(op, dst)
        self.tb.run()

        # check data
        result_data = dst.data()[:]
        # print result_data,expected_result
        self.assertFloatTuplesAlmostEqual(result_data, expected_result, 4)
示例#53
0
 def __init__(self, EbN0):
     gr.top_block.__init__(self)
     self.const = digital.qpsk_constellation()
     # Source is N_BITS bits, non-repeated
     data = map(
         int,
         numpy.random.randint(0, self.const.arity(),
                              N_BITS / self.const.bits_per_symbol()))
     src = blocks.vector_source_b(data, False)
     mod = digital.chunks_to_symbols_bc((self.const.points()), 1)
     add = blocks.add_vcc()
     noise = analog.noise_source_c(analog.GR_GAUSSIAN,
                                   self.EbN0_to_noise_voltage(EbN0),
                                   RAND_SEED)
     demod = digital.constellation_decoder_cb(self.const.base())
     ber = BitErrors(self.const.bits_per_symbol())
     self.sink = blocks.vector_sink_f()
     self.connect(src, mod, add, demod, ber, self.sink)
     self.connect(noise, (add, 1))
     self.connect(src, (ber, 1))
示例#54
0
    def xtest_003_interp(self):
        taps = random_floats(9)
        src_data = random_floats(10000)
        decimation = 3

        expected_result = reference_dec_filter(src_data, decimation, taps)

        tb = gr.top_block()
        src = blocks.vector_source_f(src_data)
        op = filter.rational_resampler_base_fff(1, decimation, taps)
        dst = blocks.vector_sink_f()
        tb.connect(src, op)
        tb.connect(op, dst)
        tb.run()
        result_data = dst.data()

        N = 10
        offset = 10#len(taps)-1
        print(expected_result[100+offset:100+offset+N])
        print(result_data[100:100+N])
示例#55
0
    def test_006_interp_decim(self):
        taps = random_floats(31)
        src_data = random_floats(10000)
        interp = 3
        decimation = 2

        expected_result = reference_interp_dec_filter(src_data, interp, decimation, taps)

        tb = gr.top_block()
        src = blocks.vector_source_f(src_data)
        op = filter.rational_resampler_base_fff(interp, decimation, taps)
        dst = blocks.vector_sink_f()
        tb.connect(src, op)
        tb.connect(op, dst)
        tb.run()
        result_data = dst.data()

        N = 1000
        offset = len(taps) // 2
        self.assertFloatTuplesAlmostEqual(expected_result[offset:offset+N], result_data[0:N], 5)
示例#56
0
 def test_001(self):
     vlen = 10
     src_data = list(range(vlen)) * 100
     src = blocks.vector_source_f(src_data, False, vlen)
     zeromq_pub_sink = zeromq.pub_sink(gr.sizeof_float, vlen,
                                       "tcp://127.0.0.1:5556", 0)
     zeromq_sub_source = zeromq.sub_source(gr.sizeof_float, vlen,
                                           "tcp://127.0.0.1:5556", 0)
     sink = blocks.vector_sink_f(vlen)
     self.send_tb.connect(src, zeromq_pub_sink)
     self.recv_tb.connect(zeromq_sub_source, sink)
     self.recv_tb.start()
     time.sleep(0.5)
     self.send_tb.start()
     time.sleep(0.5)
     self.recv_tb.stop()
     self.send_tb.stop()
     self.recv_tb.wait()
     self.send_tb.wait()
     self.assertFloatTuplesAlmostEqual(sink.data(), src_data)
示例#57
0
    def xtest_fff_006(self):
        random.seed(0)
        for i in xrange(25):
            sys.stderr.write("\n>>> Loop = %d\n" % (i,))
            dec = i + 1
            src_len = 4*1024
            src_data = make_random_float_tuple(src_len)
            ntaps = int(random.uniform(2, 100))
            taps = make_random_float_tuple(ntaps)
            expected_result = reference_filter_fff(dec, taps, src_data)

            src = blocks.vector_source_f(src_data)
            op = filter.fft_filter_fff(dec, taps)
            dst = blocks.vector_sink_f()
    	    tb = gr.top_block()
            tb.connect(src, op, dst)
            tb.run()
            result_data = dst.data()

            self.assert_fft_float_ok2(expected_result, result_data)
示例#58
0
    def test_004(self):
        ''' Test impulse response - short form, ff '''
        src_data = [
            1,
        ] + 100 * [
            0,
        ]
        expected_result = ((-0.029296875), (-0.0302734375), (0.96875),
                           (-0.0302734375), (-0.029296875))

        src = blocks.vector_source_f(src_data)
        op = filter.dc_blocker_ff(32, False)
        dst = blocks.vector_sink_f()

        self.tb.connect(src, op, dst)
        self.tb.run()

        # only test samples around D-1
        result_data = dst.data()[29:34]
        self.assertFloatTuplesAlmostEqual(expected_result, result_data)
示例#59
0
    def test_003_t(self):
        my_phi = 30
        my_psi = 15
        my_dist = 1

        g_tx = 0.86602540378 / math.pi
        g_rx = 0.96592582628
        G = g_tx * g_rx / (my_dist * my_dist)

        src_data = (1, 2, 3, 4, 5, 2.5, 5.234, 9.999)
        expected_result = (1 * G, 2 * G, 3 * G, 4 * G, 5 * G, 2.5 * G,
                           5.234 * G, 9.999 * G)
        src = blocks.vector_source_f(src_data)
        my_chan = vlc.channel_static(my_phi, my_psi, my_dist)
        dst = blocks.vector_sink_f()
        self.tb.connect(src, my_chan)
        self.tb.connect(my_chan, dst)
        self.tb.run()
        result_data = dst.data()
        self.assertFloatTuplesAlmostEqual(expected_result, result_data, 6)
示例#60
0
 def test_002_select_vectors(self):
     vlen_in = 2
     vlen_out = 10
     total_size = 10
     address = 3
     src_data = (0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16,
                 17, 18, 19, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13,
                 14, 15, 16, 17, 18, 19, 0)
     expected_data = (6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 6, 7, 8, 9, 10,
                      11, 12, 13, 14, 15)
     src = blocks.vector_source_f(src_data)
     s2v = blocks.stream_to_vector(gr.sizeof_float, vlen_in)
     select_subch = dab.select_subch_vfvf_make(vlen_in, vlen_out, address,
                                               total_size)
     v2s = blocks.vector_to_stream(gr.sizeof_float, vlen_out)
     dst = blocks.vector_sink_f()
     self.tb.connect(src, s2v, select_subch, v2s, dst)
     self.tb.run()
     result_data = dst.data()
     self.assertFloatTuplesAlmostEqual2(result_data, expected_data)