251
254
self.tune_offset = 0 # -self.usrp_center - self.src.rx_freq(0)
254
self.src = gr.file_source (gr.sizeof_gr_complex,options.input_file)
257
self.src = gr.file_source (gr.sizeof_short,options.input_file)
255
258
self.tune_offset = 2200 # 2200 works for 3.5-4Mhz band
257
260
# save radio data to a file
258
261
if SAVE_RADIO_TO_FILE:
259
file = gr.file_sink(gr.sizeof_gr_complex, options.radio_file)
260
self.fg.connect (self.src, file)
262
file = gr.file_sink(gr.sizeof_short, options.radio_file)
263
self.tb.connect (self.src, file)
263
266
xlate_taps = gr.firdes.low_pass ( \
265
268
self.xlate = gr.freq_xlating_fir_filter_ccf ( \
266
269
fir_decim, xlate_taps, self.tune_offset, usb_rate )
271
# convert rf data in interleaved short int form to complex
272
s2ss = gr.stream_to_streams(gr.sizeof_short,2)
273
s2f1 = gr.short_to_float()
274
s2f2 = gr.short_to_float()
275
src_f2c = gr.float_to_complex()
276
self.tb.connect(self.src,s2ss)
277
self.tb.connect((s2ss,0),s2f1)
278
self.tb.connect((s2ss,1),s2f2)
279
self.tb.connect(s2f1,(src_f2c,0))
280
self.tb.connect(s2f2,(src_f2c,1))
268
283
# Complex Audio filter
269
284
audio_coeffs = gr.firdes.complex_band_pass (
279
294
self.audio_filter = gr.fir_filter_ccc ( 1, audio_coeffs)
281
296
# Main +/- 16Khz spectrum display
282
self.fft = fftsink.fft_sink_c (self.fg, self.panel_2, fft_size=512, sample_rate=self.af_sample_rate, average=True, size=(640,240))
297
self.fft = fftsink2.fft_sink_c (self.panel_2, fft_size=512, sample_rate=self.af_sample_rate, average=True, size=(640,240))
284
299
# AM Sync carrier
285
300
if AM_SYNC_DISPLAY:
286
self.fft2 = fftsink.fft_sink_c (self.fg, self.panel_9, y_per_div=20, fft_size=512, sample_rate=self.af_sample_rate, average=True, size=(640,240))
301
self.fft2 = fftsink.fft_sink_c (self.tb, self.panel_9, y_per_div=20, fft_size=512, sample_rate=self.af_sample_rate, average=True, size=(640,240))
288
303
c2f = gr.complex_to_float()
327
342
self.scale = gr.multiply_const_ff(0.00001)
328
343
dst = audio.sink(long(self.af_sample_rate))
330
self.fg.connect(self.src,self.xlate,self.fft)
331
self.fg.connect(self.xlate,self.audio_filter,self.sel_am,(am_det,0))
332
self.fg.connect(self.sel_am,pll,self.pll_carrier_scale,self.pll_carrier_filter,c2f3)
333
self.fg.connect((c2f3,0),phaser1,(f2c,0))
334
self.fg.connect((c2f3,1),phaser2,(f2c,1))
335
self.fg.connect(f2c,(am_det,1))
336
self.fg.connect(am_det,c2f2,(combine,0))
337
self.fg.connect(self.audio_filter,c2f,self.sel_sb,(combine,1))
345
self.tb.connect(src_f2c,self.xlate,self.fft)
346
self.tb.connect(self.xlate,self.audio_filter,self.sel_am,(am_det,0))
347
self.tb.connect(self.sel_am,pll,self.pll_carrier_scale,self.pll_carrier_filter,c2f3)
348
self.tb.connect((c2f3,0),phaser1,(f2c,0))
349
self.tb.connect((c2f3,1),phaser2,(f2c,1))
350
self.tb.connect(f2c,(am_det,1))
351
self.tb.connect(am_det,c2f2,(combine,0))
352
self.tb.connect(self.audio_filter,c2f,self.sel_sb,(combine,1))
338
353
if AM_SYNC_DISPLAY:
339
self.fg.connect(self.pll_carrier_filter,self.fft2)
340
self.fg.connect(combine,self.scale)
341
self.fg.connect(self.scale,(sqr1,0))
342
self.fg.connect(self.scale,(sqr1,1))
343
self.fg.connect(sqr1, intr, offset, (agc, 1))
344
self.fg.connect(self.scale,(agc, 0))
345
self.fg.connect(agc,dst)
354
self.tb.connect(self.pll_carrier_filter,self.fft2)
355
self.tb.connect(combine,self.scale)
356
self.tb.connect(self.scale,(sqr1,0))
357
self.tb.connect(self.scale,(sqr1,1))
358
self.tb.connect(sqr1, intr, offset, (agc, 1))
359
self.tb.connect(self.scale,(agc, 0))
360
self.tb.connect(agc,dst)
347
362
if SAVE_AUDIO_TO_FILE:
348
363
f_out = gr.file_sink(gr.sizeof_short,options.audio_file)
349
364
sc1 = gr.multiply_const_ff(64000)
350
365
f2s1 = gr.float_to_short()
351
self.fg.connect(agc,sc1,f2s1,f_out)
366
self.tb.connect(agc,sc1,f2s1,f_out)
355
370
# for mouse position reporting on fft display
356
371
em.eventManager.Register(self.Mouse, wx.EVT_MOTION, self.fft.win)