예제 #1
0
    def test_001_t(self):
        # set up fg
        test_len = 1024

        packet_len = test_len
        samp_rate = 2000

        center_freq = 1e9
        velocity = (5, 15, 20)

        src = radar.signal_generator_cw_c(packet_len, samp_rate, (0, 0), 1)
        head = blocks.head(8, test_len)
        sim = radar.static_target_simulator_cc(
            (10, 10, 10), velocity, (1e12, 1e12, 1e12), (0, 0, 0), (0, ),
            samp_rate, center_freq, 1, True, False)
        mult = blocks.multiply_cc()
        fft = radar.ts_fft_cc(packet_len)
        cfar = radar.os_cfar_c(samp_rate, 5, 0, 0.78, 10, True)
        est = radar.estimator_cw(center_freq)
        res1 = radar.print_results()
        res2 = radar.print_results()
        gate = radar.msg_gate(('velocity', 'bla'), (8, 8), (17, 17))
        debug1 = blocks.message_debug()
        debug2 = blocks.message_debug()

        self.tb.connect(src, head, (mult, 1))
        self.tb.connect(head, sim, (mult, 0))
        self.tb.connect(mult, fft, cfar)
        self.tb.msg_connect(cfar, 'Msg out', est, 'Msg in')
        self.tb.msg_connect(est, 'Msg out', res1, 'Msg in')
        self.tb.msg_connect(est, 'Msg out', debug1, 'store')
        self.tb.msg_connect(est, 'Msg out', gate, 'Msg in')
        self.tb.msg_connect(gate, 'Msg out', debug2, 'store')
        self.tb.msg_connect(gate, 'Msg out', res2, 'Msg in')

        self.tb.start()
        sleep(0.5)
        self.tb.stop()
        self.tb.wait()

        # check data
        msg1 = debug1.get_message(0)  # msg without gate
        msg2 = debug2.get_message(0)  # msg with gate
        self.assertEqual(
            "velocity", pmt.symbol_to_string(pmt.nth(0, (pmt.nth(
                1, msg1)))))  # check velocity message part (symbol), 1
        self.assertEqual(
            "velocity", pmt.symbol_to_string(pmt.nth(0, (pmt.nth(
                1, msg2)))))  # check velocity message part (symbol), 2
        self.assertEqual(pmt.length(pmt.nth(1, pmt.nth(1, msg1))),
                         3)  # check number of targets without gate
        self.assertEqual(pmt.length(pmt.nth(1, pmt.nth(1, msg2))),
                         1)  # check nubmer of targets with gate
        self.assertAlmostEqual(
            1, velocity[1] / pmt.f32vector_ref(pmt.nth(1,
                                                       (pmt.nth(1, msg2))), 0),
            1)  # check velocity value
예제 #2
0
    def test_001_t(self):
        # set up fg
        test_len = 1024

        packet_len = test_len
        samp_rate = 2000

        center_freq = 1e9
        velocity = (5, 15, 20)

        src = radar.signal_generator_cw_c(packet_len, samp_rate, (0, 0), 1)
        head = blocks.head(8, test_len)
        sim = radar.static_target_simulator_cc(
            (10, 10, 10), velocity, (1e12, 1e12, 1e12), (0, 0, 0), (0,), samp_rate, center_freq, 1, True, False
        )
        mult = blocks.multiply_cc()
        fft = radar.ts_fft_cc(packet_len)
        cfar = radar.os_cfar_c(samp_rate, 5, 0, 0.78, 10, True)
        est = radar.estimator_cw(center_freq)
        res1 = radar.print_results()
        res2 = radar.print_results()
        gate = radar.msg_gate(("velocity", "bla"), (8, 8), (17, 17))
        debug1 = blocks.message_debug()
        debug2 = blocks.message_debug()

        self.tb.connect(src, head, (mult, 1))
        self.tb.connect(head, sim, (mult, 0))
        self.tb.connect(mult, fft, cfar)
        self.tb.msg_connect(cfar, "Msg out", est, "Msg in")
        self.tb.msg_connect(est, "Msg out", res1, "Msg in")
        self.tb.msg_connect(est, "Msg out", debug1, "store")
        self.tb.msg_connect(est, "Msg out", gate, "Msg in")
        self.tb.msg_connect(gate, "Msg out", debug2, "store")
        self.tb.msg_connect(gate, "Msg out", res2, "Msg in")

        self.tb.start()
        sleep(0.5)
        self.tb.stop()
        self.tb.wait()

        # check data
        msg1 = debug1.get_message(0)  # msg without gate
        msg2 = debug2.get_message(0)  # msg with gate
        self.assertEqual(
            "velocity", pmt.symbol_to_string(pmt.nth(0, (pmt.nth(1, msg1))))
        )  # check velocity message part (symbol), 1
        self.assertEqual(
            "velocity", pmt.symbol_to_string(pmt.nth(0, (pmt.nth(1, msg2))))
        )  # check velocity message part (symbol), 2
        self.assertEqual(pmt.length(pmt.nth(1, pmt.nth(1, msg1))), 3)  # check number of targets without gate
        self.assertEqual(pmt.length(pmt.nth(1, pmt.nth(1, msg2))), 1)  # check nubmer of targets with gate
        self.assertAlmostEqual(
            1, velocity[1] / pmt.f32vector_ref(pmt.nth(1, (pmt.nth(1, msg2))), 0), 1
        )  # check velocity value
    def test_001_t(self):
        # set up fg
        test_len = 1024

        packet_len = test_len
        samp_rate = 2000

        center_freq = 1e9
        velocity = 15

        src = radar.signal_generator_cw_c(packet_len, samp_rate, (0, 0), 1)
        head = blocks.head(8, test_len)
        sim = radar.static_target_simulator_cc(
            (10, 10), (velocity, velocity), (1e9, 1e9), (0, 0), (0, ),
            samp_rate, center_freq, 1, True, False)
        mult = blocks.multiply_cc()
        fft = radar.ts_fft_cc(packet_len)
        cfar = radar.os_cfar_c(samp_rate, 5, 0, 0.78, 10, True)
        est = radar.estimator_cw(center_freq)
        res = radar.print_results()
        debug = blocks.message_debug()

        self.tb.connect(src, head, (mult, 1))
        self.tb.connect(head, sim, (mult, 0))
        self.tb.connect(mult, fft, cfar)
        self.tb.msg_connect(cfar, 'Msg out', est, 'Msg in')
        self.tb.msg_connect(est, 'Msg out', res, 'Msg in')
        self.tb.msg_connect(est, 'Msg out', debug, 'store')
        #self.tb.msg_connect(est,'Msg out',debug,'print')

        self.tb.start()
        sleep(0.5)
        self.tb.stop()
        self.tb.wait()

        # check data
        msg = debug.get_message(0)
        self.assertEqual("rx_time",
                         pmt.symbol_to_string(pmt.nth(0, (pmt.nth(
                             0, msg)))))  # check rx_time message part (symbol)
        self.assertEqual(0,
                         pmt.to_uint64(
                             pmt.tuple_ref(pmt.nth(1, (pmt.nth(0, msg))),
                                           0)))  # check rx_time value
        self.assertEqual(
            0.0, pmt.to_double(pmt.tuple_ref(pmt.nth(1, (pmt.nth(0, msg))),
                                             1)))
        self.assertEqual(
            "velocity", pmt.symbol_to_string(pmt.nth(
                0, (pmt.nth(1, msg)))))  # check velocity message part (symbol)
        self.assertAlmostEqual(
            1, velocity / pmt.f32vector_ref(pmt.nth(1, (pmt.nth(1, msg))), 0),
            2)  # check velocity value
예제 #4
0
    def test_001_t(self):
        # check doppler freq (frequency shifting)
        # set up fg
        test_len = 1000

        packet_len = test_len
        samp_rate = 2000
        frequency = (0, )
        amplitude = 1

        Range = (10, )
        velocity = (15, )
        rcs = (1e9, )
        azimuth = (0, )
        position_rx = (0, )
        center_freq = 1e9
        rndm_phase = True
        self_coupling = False
        self_coupling_db = -10

        src = radar.signal_generator_cw_c(packet_len, samp_rate, frequency,
                                          amplitude)
        head = blocks.head(8, test_len)
        sim = radar.static_target_simulator_cc(Range, velocity, rcs, azimuth,
                                               position_rx, samp_rate,
                                               center_freq, self_coupling_db,
                                               rndm_phase, self_coupling)
        mult = blocks.multiply_cc()
        snk = blocks.vector_sink_c()

        self.tb.connect(src, head, sim)
        self.tb.connect((sim, 0), (mult, 0))
        self.tb.connect((head, 0), (mult, 1))
        self.tb.connect(mult, snk)
        self.tb.run()

        # check data
        data = snk.data()
        doppler_freq = 2 * velocity[
            0] * center_freq / 3e8  # peak estimation, calc with doppler formula
        fft = numpy.fft.fft(data)  # get fft
        num = np.argmax(abs(fft))  # index of max sample
        fft_freq = samp_rate * num / len(
            fft
        )  # calc freq out of max sample index, works only for frequencies < samp_rate/2!

        self.assertAlmostEqual(fft_freq, doppler_freq,
                               2)  # check if peak in data is doppler peak
예제 #5
0
    def test_002_t(self):
        #print "TEST2: SHIFT OF 1 SAMPLE"
        # set up fg
        test_len = 1000
        packet_len = 1000
        c_light = 3e8

        samp_rate = 1000
        freq = 5
        ampl = 1

        R = c_light / 2 / samp_rate  # shift of 1 sample
        rcs = 1e9
        Range = (R, )
        velocity = (0, )  # no freq shift
        rcs = (rcs, )
        azimuth = (0, )
        position_rx = (0, )
        center_freq = 1e9
        rndm_phase = False
        self_coupling = False
        self_coupling_db = 1

        src = analog.sig_source_c(samp_rate, analog.GR_COS_WAVE, freq, ampl)
        head = blocks.head(8, test_len)
        s2ts = blocks.stream_to_tagged_stream(8, 1, packet_len, "packet_len")
        sim = radar.static_target_simulator_cc(Range, velocity, rcs, azimuth,
                                               position_rx, samp_rate,
                                               center_freq, self_coupling_db,
                                               rndm_phase, self_coupling)
        snk0 = blocks.vector_sink_c()
        snk1 = blocks.vector_sink_c()

        self.tb.connect(src, head, s2ts, sim, snk0)
        self.tb.connect(head, snk1)
        self.tb.run()

        # check data with shifting of 1 sample
        data_in = snk1.data()
        data_out = snk0.data()
        data_out = data_out / max(np.real(data_out))  # rescale output data
        self.assertComplexTuplesAlmostEqual(data_out[1:len(data_out) - 1],
                                            data_in[0:len(data_in) - 2], 4)
	def test_001_t (self):
		# check doppler freq (frequency shifting)
		# set up fg
		test_len = 1000
		
		packet_len = test_len
		samp_rate = 2000
		frequency = (0,)
		amplitude = 1
		
		Range = (10,)
		velocity = (15,)
		rcs = (1e9,)
		azimuth = (0,)
		position_rx = (0,)
		center_freq = 1e9
		rndm_phase = True
		self_coupling = False
		self_coupling_db = -10;
		
		src = radar.signal_generator_cw_c(packet_len,samp_rate,frequency,amplitude)
		head = blocks.head(8,test_len)
		sim = radar.static_target_simulator_cc(Range, velocity, rcs, azimuth, position_rx, samp_rate, center_freq, self_coupling_db, rndm_phase, self_coupling)
		mult = blocks.multiply_cc()
		snk = blocks.vector_sink_c()
		
		self.tb.connect(src,head,sim)
		self.tb.connect((sim,0),(mult,0))
		self.tb.connect((head,0),(mult,1))
		self.tb.connect(mult,snk)
		self.tb.run ()
		
		# check data
		data = snk.data()
		doppler_freq = 2*velocity[0]*center_freq/3e8 # peak estimation, calc with doppler formula
		fft = numpy.fft.fft(data) # get fft
		num = np.argmax(abs(fft)) # index of max sample
		fft_freq = samp_rate*num/len(fft) # calc freq out of max sample index, works only for frequencies < samp_rate/2!
		
		self.assertAlmostEqual(fft_freq,doppler_freq,2) # check if peak in data is doppler peak
예제 #7
0
	def test_001_t (self):
		# set up fg
		test_len = 1024

		packet_len = test_len
		samp_rate = 2000
		
		center_freq = 1e9
		velocity = 15

		src = radar.signal_generator_cw_c(packet_len,samp_rate,(0,0),1)
		head = blocks.head(8,test_len)
		sim = radar.static_target_simulator_cc((10,10),(velocity,velocity),(1e9,1e9),(0,0),(0,),samp_rate,center_freq,1,True,False)
		mult = blocks.multiply_cc()
		fft = radar.ts_fft_cc(packet_len)
		cfar = radar.os_cfar_c(samp_rate, 5, 0, 0.78, 10, True)
		est = radar.estimator_cw(center_freq)
		res = radar.print_results()
		debug = blocks.message_debug()

		self.tb.connect(src,head,(mult,1))
		self.tb.connect(head,sim,(mult,0))
		self.tb.connect(mult,fft,cfar)
		self.tb.msg_connect(cfar,'Msg out',est,'Msg in')
		self.tb.msg_connect(est,'Msg out',res,'Msg in')
		self.tb.msg_connect(est,'Msg out',debug,'store')
		#self.tb.msg_connect(est,'Msg out',debug,'print')

		self.tb.start()
		sleep(0.5)
		self.tb.stop()
		self.tb.wait()
		
		# check data
		msg = debug.get_message(0)
		self.assertEqual( "rx_time", pmt.symbol_to_string(pmt.nth(0,(pmt.nth(0,msg)))) ) # check rx_time message part (symbol)
		self.assertEqual( 0, pmt.to_uint64(pmt.tuple_ref(pmt.nth(1,(pmt.nth(0,msg))),0)) ) # check rx_time value
		self.assertEqual( 0.0, pmt.to_double(pmt.tuple_ref(pmt.nth(1,(pmt.nth(0,msg))),1)) )
		self.assertEqual( "velocity", pmt.symbol_to_string(pmt.nth(0,(pmt.nth(1,msg)))) ) # check velocity message part (symbol)
		self.assertAlmostEqual( 1, velocity/pmt.f32vector_ref(pmt.nth(1,(pmt.nth(1,msg))),0), 2 ) # check velocity value
	def test_002_t (self):
		#print "TEST2: SHIFT OF 1 SAMPLE"
		# set up fg
		test_len = 1000
		packet_len = 1000
		c_light = 3e8
		
		samp_rate = 1000
		freq = 5
		ampl = 1
		
		R = c_light/2/samp_rate # shift of 1 sample
		rcs = 1e9
		Range = (R,)
		velocity = (0,) # no freq shift
		rcs = (rcs,)
		azimuth = (0,)
		position_rx = (0,)
		center_freq = 1e9
		rndm_phase = False
		self_coupling = False
		self_coupling_db = 1;
		
		src = analog.sig_source_c(samp_rate, analog.GR_COS_WAVE, freq, ampl)
		head = blocks.head(8,test_len)
		s2ts = blocks.stream_to_tagged_stream(8,1,packet_len,"packet_len")
		sim = radar.static_target_simulator_cc(Range, velocity, rcs, azimuth, position_rx, samp_rate, center_freq, self_coupling_db, rndm_phase, self_coupling)
		snk0 = blocks.vector_sink_c()
		snk1 = blocks.vector_sink_c()
		
		self.tb.connect(src,head,s2ts,sim,snk0)
		self.tb.connect(head,snk1)
		self.tb.run()
		
		# check data with shifting of 1 sample
		data_in = snk1.data()
		data_out = snk0.data()
		data_out = data_out/max(np.real(data_out)) # rescale output data
		self.assertComplexTuplesAlmostEqual(data_out[1:len(data_out)-1],data_in[0:len(data_in)-2],4)
예제 #9
0
    def test_003_t(self):
        #print "TEST3: AZIMUTH ESTIMATION"
        # set up fg
        packet_len = 2**12
        samp_rate = 32000
        center_freq = 2.45e9
        freq = 0
        ampl = 1

        Range = (20, )
        velocity = (10, )
        rcs = (1e9, 0)
        azimuth = (10, )
        position_rx = (0, 0.2)

        src = analog.sig_source_c(samp_rate, analog.GR_COS_WAVE, freq, ampl)
        head = blocks.head(8, packet_len)
        s2ts = blocks.stream_to_tagged_stream(8, 1, packet_len, 'packet_len')
        sim = radar.static_target_simulator_cc(Range, velocity, rcs, azimuth,
                                               position_rx, samp_rate,
                                               center_freq, -10, False, False)
        s2v0 = blocks.stream_to_vector(8, packet_len)
        fft0 = fft.fft_vcc(packet_len, 1, ())
        v2s0 = blocks.vector_to_stream(8, packet_len)
        snk0 = blocks.vector_sink_c()
        s2v1 = blocks.stream_to_vector(8, packet_len)
        fft1 = fft.fft_vcc(packet_len, 1, ())
        v2s1 = blocks.vector_to_stream(8, packet_len)
        snk1 = blocks.vector_sink_c()

        mult = blocks.multiply_conjugate_cc(packet_len)
        v2s2 = blocks.vector_to_stream(8, packet_len)
        snk2 = blocks.vector_sink_c()

        self.tb.connect(src, head, s2ts, sim)
        self.tb.connect((sim, 0), (s2v0, 0))
        self.tb.connect(s2v0, fft0, v2s0, snk0)
        self.tb.connect((sim, 1), (s2v1, 0))
        self.tb.connect(s2v1, fft1, v2s1, snk1)

        self.tb.connect((fft0, 0), (mult, 1))
        self.tb.connect((fft1, 0), (mult, 0))
        self.tb.connect(mult, v2s2, snk2)

        self.tb.run()

        # check ffts data0 und data1 on peak
        data0 = snk0.data()
        data1 = snk1.data()

        data0_abs = [0] * len(data0)
        data1_abs = [0] * len(data1)
        for k in range(len(data0)):
            data0_abs[k] = abs(data0[k])
            data1_abs[k] = abs(data1[k])

        num0 = np.argmax(data0_abs)  # index of max sample (data)
        num1 = np.argmax(data1_abs)  # index of max sample (data)
        #print "NUM0:", num0, "FREQ:", num0*samp_rate/packet_len, "VELOCITY:", num0*samp_rate/packet_len*3e8/2/center_freq, "PHI:", np.angle(data0[num0])
        #print "NUM1:", num1, "FREQ:", num1*samp_rate/packet_len, "VELOCITY:", num1*samp_rate/packet_len*3e8/2/center_freq, "PHI:", np.angle(data1[num1])

        # check fft data2 on peak
        data2 = snk2.data()
        data2_abs = [0] * len(data2)
        for k in range(len(data0)):
            data2_abs[k] = abs(data2[k])
        num2 = np.argmax(data2_abs)  # index of max sample (data)
        #print "NUM2:", num2, "FREQ:", num2*samp_rate/packet_len, "VELOCITY:", num2*samp_rate/packet_len*3e8/2/center_freq, "PHI:", np.angle(data2[num2])

        # assert phases of rx streams of angle(data1)-angle(data0) and angle(data2)
        self.assertAlmostEqual(
            np.angle(data1[num1]) - np.angle(data0[num0]),
            np.angle(data2[num2]), 4)

        # assert azimuth
        angle = np.arcsin(
            np.angle(data2[num2]) * 3e8 / center_freq / 2 / np.pi /
            0.2) / 2 / np.pi * 360
        self.assertAlmostEqual(angle / azimuth[0], 1, 0)
예제 #10
0
	def test_001_t (self):
		# run full fsk setup on high sample rates
		test_len = 2**19

		packet_len = 2**19
		min_output_buffer = packet_len*2
		samp_rate = 5000000
		
		center_freq = 2.45e9
		
		Range = 50
		velocity = 5
				
		samp_per_freq = 1
		blocks_per_tag = packet_len/2
		freq_low = 0
		freq_high = 1250000
		amplitude = 1
		samp_discard = 0

		src = radar.signal_generator_fsk_c(samp_rate, samp_per_freq, blocks_per_tag, freq_low, freq_high, amplitude)
		src.set_min_output_buffer(min_output_buffer)
		
		head = blocks.head(8,test_len)
		head.set_min_output_buffer(min_output_buffer)
		
		sim = radar.static_target_simulator_cc((Range,),(velocity,),(1e20,),(0,),(0,),samp_rate,center_freq,1,False,False)
		sim.set_min_output_buffer(min_output_buffer)
		
		mult = blocks.multiply_conjugate_cc()
		mult.set_min_output_buffer(min_output_buffer)
		
		fft1 = radar.ts_fft_cc(packet_len/2)
		fft1.set_min_output_buffer(min_output_buffer)
		fft2 = radar.ts_fft_cc(packet_len/2)
		fft2.set_min_output_buffer(min_output_buffer)
		
		split = radar.split_fsk_cc(samp_per_freq,samp_discard)
		split.set_min_output_buffer(min_output_buffer)
		
		mult_conj = blocks.multiply_conjugate_cc()
		mult_conj.set_min_output_buffer(min_output_buffer)
		
		cfar = radar.find_max_peak_c(samp_rate/2,-120,0,(),False)
		cfar.set_min_output_buffer(min_output_buffer)
		
		est = radar.estimator_fsk(center_freq,freq_high-freq_low)
		res = radar.print_results()
		debug = blocks.message_debug()

		self.tb.connect(src,head,(mult,1))
		self.tb.connect(head,sim,(mult,0))
		self.tb.connect(mult,split)
		self.tb.connect((split,0),fft1)
		self.tb.connect((split,1),fft2)
		self.tb.connect(fft1,(mult_conj,0))
		self.tb.connect(fft2,(mult_conj,1))
		self.tb.connect(mult_conj,cfar)
		self.tb.msg_connect(cfar,'Msg out',est,'Msg in')
		self.tb.msg_connect(est,'Msg out',res,'Msg in')
		self.tb.msg_connect(est,'Msg out',debug,'store')

		self.tb.start()
		sleep(0.5)
		self.tb.stop()
		self.tb.wait()
		
		# check data
		msg = debug.get_message(0)
		#print "VELOCITY:", pmt.f32vector_ref(pmt.nth(1,(pmt.nth(1,msg))),0), velocity
		#print "RANGE:", pmt.f32vector_ref(pmt.nth(1,(pmt.nth(2,msg))),0), Range
		self.assertAlmostEqual( 1, velocity/pmt.f32vector_ref(pmt.nth(1,(pmt.nth(1,msg))),0), 1 ) # check velocity value
		self.assertAlmostEqual( 1, Range/pmt.f32vector_ref(pmt.nth(1,(pmt.nth(2,msg))),0), 1 ) # check range value
	def test_003_t (self):
		#print "TEST3: AZIMUTH ESTIMATION"
		# set up fg
		packet_len = 2**12
		samp_rate = 32000
		center_freq = 2.45e9
		freq = 0
		ampl = 1
		
		Range = (20,)
		velocity = (10,)
		rcs = (1e9,0)
		azimuth = (10,)
		position_rx = (0,0.2)
		
		src = analog.sig_source_c(samp_rate, analog.GR_COS_WAVE, freq, ampl)
		head = blocks.head(8,packet_len)
		s2ts = blocks.stream_to_tagged_stream(8,1,packet_len,'packet_len')
		sim = radar.static_target_simulator_cc(Range, velocity, rcs, azimuth, position_rx, samp_rate, center_freq, -10, False, False)
		s2v0 = blocks.stream_to_vector(8,packet_len)
		fft0 = fft.fft_vcc(packet_len,1,())
		v2s0 = blocks.vector_to_stream(8,packet_len)
		snk0 = blocks.vector_sink_c()
		s2v1 = blocks.stream_to_vector(8,packet_len)
		fft1 = fft.fft_vcc(packet_len,1,())
		v2s1 = blocks.vector_to_stream(8,packet_len)
		snk1 = blocks.vector_sink_c()
		
		mult = blocks.multiply_conjugate_cc(packet_len)
		v2s2 = blocks.vector_to_stream(8,packet_len)
		snk2 = blocks.vector_sink_c()
		
		
		self.tb.connect(src,head,s2ts,sim)
		self.tb.connect((sim,0),(s2v0,0))
		self.tb.connect(s2v0,fft0,v2s0,snk0)
		self.tb.connect((sim,1),(s2v1,0))
		self.tb.connect(s2v1,fft1,v2s1,snk1)
		
		self.tb.connect((fft0,0),(mult,1))
		self.tb.connect((fft1,0),(mult,0))
		self.tb.connect(mult,v2s2,snk2)
		
		self.tb.run()
		
		# check ffts data0 und data1 on peak
		data0 = snk0.data()
		data1 = snk1.data()
		
		data0_abs = [0]*len(data0)
		data1_abs = [0]*len(data1)
		for k in range(len(data0)):
			data0_abs[k] = abs(data0[k])
			data1_abs[k] = abs(data1[k])
		
		num0 = np.argmax(data0_abs) # index of max sample (data)
		num1 = np.argmax(data1_abs) # index of max sample (data)
		#print "NUM0:", num0, "FREQ:", num0*samp_rate/packet_len, "VELOCITY:", num0*samp_rate/packet_len*3e8/2/center_freq, "PHI:", np.angle(data0[num0])
		#print "NUM1:", num1, "FREQ:", num1*samp_rate/packet_len, "VELOCITY:", num1*samp_rate/packet_len*3e8/2/center_freq, "PHI:", np.angle(data1[num1])
		
		# check fft data2 on peak
		data2 = snk2.data()
		data2_abs = [0]*len(data2)
		for k in range(len(data0)):
			data2_abs[k] = abs(data2[k])
		num2 = np.argmax(data2_abs) # index of max sample (data)
		#print "NUM2:", num2, "FREQ:", num2*samp_rate/packet_len, "VELOCITY:", num2*samp_rate/packet_len*3e8/2/center_freq, "PHI:", np.angle(data2[num2])
		
		# assert phases of rx streams of angle(data1)-angle(data0) and angle(data2)
		self.assertAlmostEqual(np.angle(data1[num1])-np.angle(data0[num0]),np.angle(data2[num2]),4)
		
		# assert azimuth
		angle = np.arcsin(np.angle(data2[num2])*3e8/center_freq/2/np.pi/0.2)/2/np.pi*360;
		self.assertAlmostEqual(angle/azimuth[0],1,0)
예제 #12
0
	def test_001_t (self):
		# set up fg
		samp_cw = 2**14
		samp_up = 2**14
		samp_down = samp_up
		packet_len = samp_cw+samp_up+samp_down
		min_output_buffer = packet_len*2
		test_len = 2*packet_len
		samp_rate = 10000000
		push_power = False
		
		center_freq = 5.7e9
		
		Range = 200
		velocity = 50
		
		freq_cw = 0
		freq_sweep = samp_rate/2
		amplitude = 1

		src = radar.signal_generator_fmcw_c(samp_rate, samp_up, samp_down, samp_cw, freq_cw, freq_sweep, amplitude)
		src.set_min_output_buffer(min_output_buffer)
		
		head = blocks.head(8,test_len)
		head.set_min_output_buffer(min_output_buffer)
		
		sim = radar.static_target_simulator_cc((Range,),(velocity,),(1e16,),(0,),(0,),samp_rate,center_freq,1,False,False)
		sim.set_min_output_buffer(min_output_buffer)
		
		mult = blocks.multiply_conjugate_cc()
		mult.set_min_output_buffer(min_output_buffer)
		
		decim_fac = 2**4
		
		resamp = filter.rational_resampler_ccc(1,decim_fac)
		resamp_tag = blocks.tagged_stream_multiply_length(8,'packet_len',1.0/float(decim_fac))
		resamp_tag.set_min_output_buffer(min_output_buffer/(decim_fac))
		
		packets = (samp_cw/(decim_fac), samp_up/(decim_fac), samp_down/(decim_fac))
		split_cw = radar.split_cc(0,packets)
		split_up = radar.split_cc(1,packets)
		split_down = radar.split_cc(2,packets)
		split_cw.set_min_output_buffer(min_output_buffer/(decim_fac))
		split_up.set_min_output_buffer(min_output_buffer/(decim_fac))
		split_down.set_min_output_buffer(min_output_buffer/(decim_fac))
		
		fft_cw = radar.ts_fft_cc(samp_cw/(decim_fac))
		fft_up = radar.ts_fft_cc(samp_up/(decim_fac))
		fft_down = radar.ts_fft_cc(samp_down/(decim_fac))
		fft_cw.set_min_output_buffer(min_output_buffer/(decim_fac))
		fft_up.set_min_output_buffer(min_output_buffer/(decim_fac))
		fft_down.set_min_output_buffer(min_output_buffer/(decim_fac))
		
		threshold = -300
		samp_protect = 0
		cfar_cw = radar.find_max_peak_c(samp_rate/(decim_fac), threshold, samp_protect, (0,0), False)
		cfar_up = radar.find_max_peak_c(samp_rate/(decim_fac), threshold, samp_protect, (0,0), False)
		cfar_down = radar.find_max_peak_c(samp_rate/(decim_fac), threshold, samp_protect, (0,0), False)
		
		est = radar.estimator_fmcw(samp_rate/(decim_fac), center_freq, freq_sweep, samp_up/(decim_fac), samp_down/(decim_fac), push_power)
		
		res = radar.print_results()
		debug = blocks.message_debug()
		
		self.tb.connect(src,head,(mult,0))
		self.tb.connect(head,sim,(mult,1))
		self.tb.connect(mult,resamp, resamp_tag)
		self.tb.connect(resamp_tag,split_cw, fft_cw, cfar_cw)
		self.tb.connect(resamp_tag,split_up, fft_up, cfar_up)
		self.tb.connect(resamp_tag,split_down, fft_down, cfar_down)
		
		self.tb.msg_connect(cfar_cw,'Msg out',est,'Msg in CW')
		self.tb.msg_connect(cfar_up,'Msg out',est,'Msg in UP')
		self.tb.msg_connect(cfar_down,'Msg out',est,'Msg in DOWN')
		self.tb.msg_connect(est,'Msg out',res,'Msg in')
		self.tb.msg_connect(est,'Msg out',debug,'store')
		
		# run fg
		self.tb.start()
		sleep(0.5)
		self.tb.stop()
		self.tb.wait()
		
		# check data
		msg = debug.get_message(0)
		self.assertGreater( velocity/pmt.f32vector_ref(pmt.nth(1,(pmt.nth(1,msg))),0), 0.8 ) # check velocity value
		self.assertGreater( Range/pmt.f32vector_ref(pmt.nth(1,(pmt.nth(2,msg))),0), 0.8 ) # check range value
예제 #13
0
    def test_001_t(self):
        # set up fg
        samp_cw = 2**14
        samp_up = 2**14
        samp_down = samp_up
        packet_len = samp_cw + samp_up + samp_down
        min_output_buffer = packet_len * 2
        test_len = 2 * packet_len
        samp_rate = 10000000
        push_power = False

        center_freq = 5.7e9

        Range = 200
        velocity = 50

        freq_cw = 0
        freq_sweep = samp_rate / 2
        amplitude = 1

        src = radar.signal_generator_fmcw_c(samp_rate, samp_up, samp_down,
                                            samp_cw, freq_cw, freq_sweep,
                                            amplitude)
        src.set_min_output_buffer(min_output_buffer)

        head = blocks.head(8, test_len)
        head.set_min_output_buffer(min_output_buffer)

        sim = radar.static_target_simulator_cc(
            (Range, ), (velocity, ), (1e16, ), (0, ), (0, ), samp_rate,
            center_freq, 1, False, False)
        sim.set_min_output_buffer(min_output_buffer)

        mult = blocks.multiply_conjugate_cc()
        mult.set_min_output_buffer(min_output_buffer)

        decim_fac = 2**4

        resamp = filter.rational_resampler_ccc(1, decim_fac)
        resamp_tag = blocks.tagged_stream_multiply_length(
            8, 'packet_len', 1.0 / float(decim_fac))
        resamp_tag.set_min_output_buffer(min_output_buffer / (decim_fac))

        packets = (samp_cw / (decim_fac), samp_up / (decim_fac),
                   samp_down / (decim_fac))
        split_cw = radar.split_cc(0, packets)
        split_up = radar.split_cc(1, packets)
        split_down = radar.split_cc(2, packets)
        split_cw.set_min_output_buffer(min_output_buffer / (decim_fac))
        split_up.set_min_output_buffer(min_output_buffer / (decim_fac))
        split_down.set_min_output_buffer(min_output_buffer / (decim_fac))

        fft_cw = radar.ts_fft_cc(samp_cw / (decim_fac))
        fft_up = radar.ts_fft_cc(samp_up / (decim_fac))
        fft_down = radar.ts_fft_cc(samp_down / (decim_fac))
        fft_cw.set_min_output_buffer(min_output_buffer / (decim_fac))
        fft_up.set_min_output_buffer(min_output_buffer / (decim_fac))
        fft_down.set_min_output_buffer(min_output_buffer / (decim_fac))

        threshold = -300
        samp_protect = 0
        cfar_cw = radar.find_max_peak_c(samp_rate / (decim_fac), threshold,
                                        samp_protect, (0, 0), False)
        cfar_up = radar.find_max_peak_c(samp_rate / (decim_fac), threshold,
                                        samp_protect, (0, 0), False)
        cfar_down = radar.find_max_peak_c(samp_rate / (decim_fac), threshold,
                                          samp_protect, (0, 0), False)

        est = radar.estimator_fmcw(samp_rate / (decim_fac), center_freq,
                                   freq_sweep, samp_up / (decim_fac),
                                   samp_down / (decim_fac), push_power)

        res = radar.print_results()
        debug = blocks.message_debug()

        self.tb.connect(src, head, (mult, 0))
        self.tb.connect(head, sim, (mult, 1))
        self.tb.connect(mult, resamp, resamp_tag)
        self.tb.connect(resamp_tag, split_cw, fft_cw, cfar_cw)
        self.tb.connect(resamp_tag, split_up, fft_up, cfar_up)
        self.tb.connect(resamp_tag, split_down, fft_down, cfar_down)

        self.tb.msg_connect(cfar_cw, 'Msg out', est, 'Msg in CW')
        self.tb.msg_connect(cfar_up, 'Msg out', est, 'Msg in UP')
        self.tb.msg_connect(cfar_down, 'Msg out', est, 'Msg in DOWN')
        self.tb.msg_connect(est, 'Msg out', res, 'Msg in')
        self.tb.msg_connect(est, 'Msg out', debug, 'store')

        # run fg
        self.tb.start()
        sleep(0.5)
        self.tb.stop()
        self.tb.wait()

        # check data
        msg = debug.get_message(0)
        self.assertGreater(velocity /
                           pmt.f32vector_ref(pmt.nth(1, (pmt.nth(1, msg))), 0),
                           0.8)  # check velocity value
        self.assertGreater(Range /
                           pmt.f32vector_ref(pmt.nth(1, (pmt.nth(2, msg))), 0),
                           0.8)  # check range value