#!/usr/bin/env python
+#
+# Copyright 2005,2006,2007 Free Software Foundation, Inc.
+#
+# This file is part of GNU Radio
+#
+# GNU Radio is free software; you can redistribute it and/or modify
+# it under the terms of the GNU General Public License as published by
+# the Free Software Foundation; either version 3, or (at your option)
+# any later version.
+#
+# GNU Radio is distributed in the hope that it will be useful,
+# but WITHOUT ANY WARRANTY; without even the implied warranty of
+# MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+# GNU General Public License for more details.
+#
+# You should have received a copy of the GNU General Public License
+# along with GNU Radio; see the file COPYING. If not, write to
+# the Free Software Foundation, Inc., 51 Franklin Street,
+# Boston, MA 02110-1301, USA.
+#
from gnuradio import gr, gru, eng_notation, optfir
from gnuradio import audio
from gnuradio import usrp
-from gnuradio import blks
+from gnuradio import blks2
from gnuradio.eng_option import eng_option
from gnuradio.wxgui import slider, powermate
-from gnuradio.wxgui import stdgui, fftsink, form, scopesink
+from gnuradio.wxgui import stdgui2, fftsink2, form, scopesink2
from optparse import OptionParser
-import usrp_dbid
+from usrpm import usrp_dbid
import sys
import math
import wx
"""
return usrp.pick_subdev(u, (usrp_dbid.TV_RX,
usrp_dbid.TV_RX_REV_2,
+ usrp_dbid.TV_RX_REV_3,
usrp_dbid.BASIC_RX))
-class wfm_rx_graph (stdgui.gui_flow_graph):
+class wfm_rx_block (stdgui2.std_top_block):
def __init__(self,frame,panel,vbox,argv):
- stdgui.gui_flow_graph.__init__ (self,frame,panel,vbox,argv)
+ stdgui2.std_top_block.__init__ (self,frame,panel,vbox,argv)
parser=OptionParser(option_class=eng_option)
parser.add_option("-R", "--rx-subdev-spec", type="subdev", default=None,
adc_rate = self.u.adc_rate() # 64 MS/s
usrp_decim = 200
self.u.set_decim_rate(usrp_decim)
- usrp_rate = adc_rate / usrp_decim # 320 kS/s
+ usrp_rate = adc_rate / usrp_decim # 320 kS/s
chanfilt_decim = 1
demod_rate = usrp_rate / chanfilt_decim
audio_decimation = 10
- audio_rate = demod_rate / audio_decimation # 32 kHz
+ audio_rate = 3*demod_rate / audio_decimation/2 # 48 kHz
if options.rx_subdev_spec is None:
options.rx_subdev_spec = pick_subdevice(self.u)
self.subdev = usrp.selected_subdev(self.u, options.rx_subdev_spec)
- chan_filt_coeffs = optfir.low_pass (1, # gain
+ chan_filt_coeffs = gr.firdes.low_pass_2 (1, # gain
usrp_rate, # sampling rate
- 80e3, # passband cutoff
- 115e3, # stopband cutoff
- 0.1, # passband ripple
- 60) # stopband attenuation
- #print len(chan_filt_coeffs)
+ 90e3, # passband cutoff
+ 30e3, # transition bandwidth
+ 70, # stopband attenuation
+ gr.firdes.WIN_BLACKMAN)
+ print len(chan_filt_coeffs)
chan_filt = gr.fir_filter_ccf (chanfilt_decim, chan_filt_coeffs)
+ self.rchan_sample = blks2.rational_resampler_fff(3,2)
+ self.lchan_sample = blks2.rational_resampler_fff(3,2)
- #self.guts = blks.wfm_rcv (self, demod_rate, audio_decimation)
- self.guts = blks.wfm_rcv_pll (self, demod_rate, audio_decimation)
+
+ #self.guts = blks2.wfm_rcv (demod_rate, audio_decimation)
+ self.guts = blks2.wfm_rcv_pll (demod_rate, audio_decimation)
# FIXME rework {add,multiply}_const_* to handle multiple streams
self.volume_control_l = gr.multiply_const_ff(self.vol)
# now wire it all together
self.connect (self.u, chan_filt, self.guts)
- self.connect ((self.guts, 0), self.volume_control_l, (audio_sink, 0))
- self.connect ((self.guts, 1), self.volume_control_r, (audio_sink, 1))
+ self.connect((self.guts, 0), self.lchan_sample,self.volume_control_l,(audio_sink,0))
+ self.connect((self.guts, 1), self.rchan_sample,self.volume_control_r,(audio_sink,1))
+
try:
self.guts.stereo_carrier_pll_recovery.squelch_enable(True)
except:
if 1:
- self.src_fft = fftsink.fft_sink_c (self, self.panel, title="Data from USRP",
- fft_size=512, sample_rate=usrp_rate)
+ self.src_fft = fftsink2.fft_sink_c(self.panel, title="Data from USRP",
+ fft_size=512, sample_rate=usrp_rate,
+ ref_scale=32768.0, ref_level=0, y_divs=12)
self.connect (self.u, self.src_fft)
vbox.Add (self.src_fft.win, 4, wx.EXPAND)
if 1:
- post_fm_demod_fft = fftsink.fft_sink_f (self, self.panel, title="Post FM Demod",
- fft_size=512, sample_rate=demod_rate,
- y_per_div=10, ref_level=0)
+ post_fm_demod_fft = fftsink2.fft_sink_f(self.panel, title="Post FM Demod",
+ fft_size=512, sample_rate=demod_rate,
+ y_per_div=10, ref_level=0)
self.connect (self.guts.fm_demod, post_fm_demod_fft)
vbox.Add (post_fm_demod_fft.win, 4, wx.EXPAND)
if 0:
- post_stereo_carrier_generator_fft = fftsink.fft_sink_c (self, self.panel, title="Post Stereo_carrier_generator",
+ post_stereo_carrier_generator_fft = fftsink2.fft_sink_c (self.panel, title="Post Stereo_carrier_generator",
fft_size=512, sample_rate=audio_rate,
y_per_div=10, ref_level=0)
self.connect (self.guts.stereo_carrier_generator, post_stereo_carrier_generator_fft)
vbox.Add (post_stereo_carrier_generator_fft.win, 4, wx.EXPAND)
if 0:
- post_deemphasis_left = fftsink.fft_sink_f (self, self.panel, title="Post_Deemphasis_Left",
+ post_deemphasis_left = fftsink2.fft_sink_f (self.panel, title="Post_Deemphasis_Left",
fft_size=512, sample_rate=audio_rate,
y_per_div=10, ref_level=0)
self.connect (self.guts.deemph_Left, post_deemphasis_left)
vbox.Add (post_deemphasis_left.win, 4, wx.EXPAND)
if 0:
- post_deemphasis_right = fftsink.fft_sink_f (self, self.panel, title="Post_Deemphasis_Right",
+ post_deemphasis_right = fftsink2.fft_sink_f(self.panel, title="Post_Deemphasis_Right",
fft_size=512, sample_rate=audio_rate,
y_per_div=10, ref_level=-20)
self.connect (self.guts.deemph_Left, post_deemphasis_right)
if 0:
- LmR_fft = fftsink.fft_sink_f (self, self.panel, title="LmR",
- fft_size=512, sample_rate=audio_rate,
- y_per_div=10, ref_level=-20)
+ LmR_fft = fftsink2.fft_sink_f(self.panel, title="LmR",
+ fft_size=512, sample_rate=audio_rate,
+ y_per_div=10, ref_level=-20)
self.connect (self.guts.LmR_real,LmR_fft)
vbox.Add (LmR_fft.win, 4, wx.EXPAND)
if 0:
- self.scope = scopesink.scope_sink_f(self, self.panel, sample_rate=demod_rate)
- self.connect (self.guts.fm_demod_a,self.scope)
+ self.scope = scopesink2.scope_sink_f(self.panel, sample_rate=demod_rate)
+ self.connect (self.guts.fm_demod,self.scope)
vbox.Add (self.scope.win,4,wx.EXPAND)
# control area form at bottom
if __name__ == '__main__':
- app = stdgui.stdapp (wfm_rx_graph, "USRP WFM RX")
+ app = stdgui2.stdapp (wfm_rx_block, "USRP WFM RX")
app.MainLoop ()