def test_fir_filter_scf_002(self): self.generate_scf_source() expected_data = ((0.00824625696987 - 1.50158575707e-05j), (0.0020101047121 - 0.0116540221497j), (-0.0126378880814 - 0.00259830290452j), (-0.00363933457993 + 0.00837504956871j), (0.00107023562305 + 0.00915473792702j), (0.0169738996774 + 0.00422182958573j), (0.00630031805485 - 0.025423232466j), (-0.0283014029264 + 0.00104465708137j), (0.00890890974551 + 0.0115978596732j), (-0.0142687577754 + 0.00306978379376j), (0.02845691517 + 0.0331163145602j), (0.0538152232766 - 0.0908300876617j), (-0.0843691527843 - 0.0956566259265j), (0.0476895272732 + 0.0747984498739j), (0.0898786485195 + 0.082478672266j), (-0.0330070182681 + 0.101965606213j), (0.0574697069824 - 0.0350842289627j), (-0.0770940706134 - 0.230615705252j), (-0.103762261569 - 0.0382265634835j), (0.11808334291 + 0.104863762856j)) src = blocks.vector_source_s(self.src_data) op = filter.freq_xlating_fir_filter_scf(4, self.taps, self.fc, self.fs) dst = blocks.vector_sink_c() self.tb.connect(src, op, dst) self.tb.run() result_data = dst.data() self.assertComplexTuplesAlmostEqual(expected_data, result_data[-20:], 5)
def test_fir_filter_scf_001(self): self.generate_scf_source() expected_data = ( (-0.0330070219934 + 0.101965591311j), (-0.0484239049256 + 0.0872343629599j), (-0.0214109234512 + 0.102555386722j), (0.0484058149159 + 0.0557125210762j), (0.0574690811336 - 0.0350844524801j), (0.0365394353867 - 0.0802438184619j), (0.0453781634569 - 0.130992040038j), (0.00801951438189 - 0.214278846979j), (-0.0770946145058 - 0.230616629124j), (-0.105601429939 - 0.190731987357j), (-0.105361394584 - 0.177761554718j), (-0.131518915296 - 0.136102750897j), (-0.103761836886 - 0.0382263250649j), (-0.0167790111154 + 0.0152206514031j), (0.0277570039034 + 0.0300403907895j), (0.056065287441 + 0.0806603953242j), (0.118084669113 + 0.104863211513j), (0.128281414509 + 0.0677760615945j), (0.0748447552323 + 0.0619902014732j), (0.0512856245041 + 0.0775099247694j)) src = blocks.vector_source_s(self.src_data) op = filter.freq_xlating_fir_filter_scf(1, self.taps, self.fc, self.fs) dst = blocks.vector_sink_c() self.tb.connect(src, op, dst) self.tb.run() result_data = dst.data() self.assertComplexTuplesAlmostEqual(expected_data, result_data[-20:], 5)
def test_fir_filter_scf_002(self): self.generate_scf_source() expected_data = ((0.00824625696987-1.50158575707e-05j), (0.0020101047121-0.0116540221497j), (-0.0126378880814-0.00259830290452j), (-0.00363933457993+0.00837504956871j), (0.00107023562305+0.00915473792702j), (0.0169738996774+0.00422182958573j), (0.00630031805485-0.025423232466j), (-0.0283014029264+0.00104465708137j), (0.00890890974551+0.0115978596732j), (-0.0142687577754+0.00306978379376j), (0.02845691517+0.0331163145602j), (0.0538152232766-0.0908300876617j), (-0.0843691527843-0.0956566259265j), (0.0476895272732+0.0747984498739j), (0.0898786485195+0.082478672266j), (-0.0330070182681+0.101965606213j), (0.0574697069824-0.0350842289627j), (-0.0770940706134-0.230615705252j), (-0.103762261569-0.0382265634835j), (0.11808334291+0.104863762856j)) src = blocks.vector_source_s(self.src_data) op = filter.freq_xlating_fir_filter_scf(4, self.taps, self.fc, self.fs) dst = blocks.vector_sink_c() self.tb.connect(src, op, dst) self.tb.run() result_data = dst.data() self.assertComplexTuplesAlmostEqual(expected_data, result_data[-20:], 5)
def test_fir_filter_scf_001(self): self.generate_scf_source() expected_data = ((-0.0330070219934+0.101965591311j), (-0.0484239049256+0.0872343629599j), (-0.0214109234512+0.102555386722j), (0.0484058149159+0.0557125210762j), (0.0574690811336-0.0350844524801j), (0.0365394353867-0.0802438184619j), (0.0453781634569-0.130992040038j), (0.00801951438189-0.214278846979j), (-0.0770946145058-0.230616629124j), (-0.105601429939-0.190731987357j), (-0.105361394584-0.177761554718j), (-0.131518915296-0.136102750897j), (-0.103761836886-0.0382263250649j), (-0.0167790111154+0.0152206514031j), (0.0277570039034+0.0300403907895j), (0.056065287441+0.0806603953242j), (0.118084669113+0.104863211513j), (0.128281414509+0.0677760615945j), (0.0748447552323+0.0619902014732j), (0.0512856245041+0.0775099247694j)) src = blocks.vector_source_s(self.src_data) op = filter.freq_xlating_fir_filter_scf(1, self.taps, self.fc, self.fs) dst = blocks.vector_sink_c() self.tb.connect(src, op, dst) self.tb.run() result_data = dst.data() self.assertComplexTuplesAlmostEqual(expected_data, result_data[-20:], 5)
def test_fir_filter_scf_002(self): self.generate_scf_source() decim = 4 lo = sig_source_c(self.fs, -self.fc, 1, len(self.src_data)) despun = mix(lo, self.src_data) expected_data = fir_filter(despun, self.taps, decim) src = blocks.vector_source_s(self.src_data) op = filter.freq_xlating_fir_filter_scf(decim, self.taps, self.fc, self.fs) dst = blocks.vector_sink_c() self.tb.connect(src, op, dst) self.tb.run() result_data = dst.data() self.assertComplexTuplesAlmostEqual(expected_data, result_data, 4)
def test_fir_filter_scf_002(self): self.generate_scf_source() decim = 4 lo = sig_source_c(self.fs, -self.fc, 1, len(self.src_data)) despun = mix(lo, self.src_data) expected_data = fir_filter(despun, self.taps, decim) src = blocks.vector_source_s(self.src_data) op = filter.freq_xlating_fir_filter_scf(decim, self.taps, self.fc, self.fs) dst = blocks.vector_sink_c() self.tb.connect(src, op, dst) self.tb.run() result_data = dst.data() self.assertComplexTuplesAlmostEqual(expected_data, result_data, 4)
if not op.nosync: u.set_clock_source("external", uhd.ALL_MBOARDS) u.set_time_source("external", uhd.ALL_MBOARDS) #u.set_clock_source("none", uhd.ALL_MBOARDS) #u.set_time_source("none", uhd.ALL_MBOARDS) if op.dec > 1: taps = firdes.low_pass_2(1.0, float(op.samplerate), float(op.samplerate)/float(op.dec)/2.0, 0.2*(float(op.samplerate)/float(op.dec)), 80.0, window=firdes.WIN_BLACKMAN_hARRIS) lpf0 = filter.freq_xlating_fir_filter_scf(op.dec,taps,0.0,op.samplerate) lpf1 = filter.freq_xlating_fir_filter_scf(op.dec,taps,0.0,op.samplerate) if op.filesize == None: op.filesize=op.samplerate/op.dec # wait until time 0.2 to 0.5 past full second, then latch. # we have to trust NTP to be 0.2 s accurate. It might be a good idea to do a ntpdate before running # uhdsampler.py tt = time.time() while tt-math.floor(tt) < 0.2 or tt-math.floor(tt) > 0.3: tt = time.time() time.sleep(0.01) print("Latching at "+str(tt)) if not op.nosync: u.set_time_unknown_pps(uhd.time_spec(math.ceil(tt)+1.0))
if not op.nosync: u.set_clock_source("external", uhd.ALL_MBOARDS) u.set_time_source("external", uhd.ALL_MBOARDS) #u.set_clock_source("none", uhd.ALL_MBOARDS) #u.set_time_source("none", uhd.ALL_MBOARDS) if op.dec > 1: taps = firdes.low_pass_2(1.0, float(op.samplerate), float(op.samplerate) / float(op.dec) / 2.0, 0.2 * (float(op.samplerate) / float(op.dec)), 80.0, window=firdes.WIN_BLACKMAN_hARRIS) lpf0 = filter.freq_xlating_fir_filter_scf(op.dec, taps, 0.0, op.samplerate) lpf1 = filter.freq_xlating_fir_filter_scf(op.dec, taps, 0.0, op.samplerate) if op.filesize == None: op.filesize = op.samplerate / op.dec # wait until time 0.2 to 0.5 past full second, then latch. # we have to trust NTP to be 0.2 s accurate. It might be a good idea to do a ntpdate before running # uhdsampler.py tt = time.time() while tt - math.floor(tt) < 0.2 or tt - math.floor(tt) > 0.3: tt = time.time() time.sleep(0.01) print("Latching at " + str(tt)) if not op.nosync: u.set_time_unknown_pps(uhd.time_spec(math.ceil(tt) + 1.0))