def test_002_cc(self): N = 10000 # number of samples to use fs = 1000 # baseband sampling rate rrate = 1.123 # resampling rate freq = 10 signal = gr.sig_source_c(fs, gr.GR_SIN_WAVE, freq, 1) head = gr.head(gr.sizeof_gr_complex, N) op = filter.fractional_interpolator_cc(0.0, rrate) snk = gr.vector_sink_c() self.tb.connect(signal, head, op, snk) 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.cos(2.*math.pi*freq*x+phase) + \ 1j*math.sin(2.*math.pi*freq*x+phase), t) dst_data = snk.data() self.assertComplexTuplesAlmostEqual(expected_data[-Ntest:], dst_data[-Ntest:], 3)
def __init__(self, noise_voltage, freq, timing): gr.hier_block2.__init__( self, "channel_model", gr.io_signature(1, 1, gr.sizeof_gr_complex), gr.io_signature(1, 1, gr.sizeof_gr_complex), ) timing_offset = filter.fractional_interpolator_cc(0, timing) noise_adder = blocks.add_cc() noise = analog.noise_source_c(analog.GR_GAUSSIAN, noise_voltage, 0) freq_offset = analog.sig_source_c(1, analog.GR_SIN_WAVE, freq, 1.0, 0.0) mixer_offset = blocks.multiply_cc() self.connect(self, timing_offset) self.connect(timing_offset, (mixer_offset, 0)) self.connect(freq_offset, (mixer_offset, 1)) self.connect(mixer_offset, (noise_adder, 1)) self.connect(noise, (noise_adder, 0)) self.connect(noise_adder, self)