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 = (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
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
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
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)
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)
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)
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
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