Working the following issue...any ideas? System: Ubuntu 10.10, Gnuradio 3.3.0, uhd (Mar 2011), USRP2, TVRX
Using the attached grc model results in a floating point exception:
gnuradio_core_runtime.py (1476)
top_block.py (96)
top_block_gui.py (72)
USRP2_WX.py (326)
General output in GRC:
Generating: "/home/jim/radiostuff/refs/gen/USRP2_WX.py"
Executing: "/home/jim/radiostuff/refs/gen/USRP2_WX.py"
linux; GNU C++ version 4.4.5; Boost_104200; UHD_003.000.000-3235792
Current recv frame size: 1476 bytes
Current send frame size: 1472 bytes
Making transport for DSP0...
Current recv sock buff size: 50000000 bytes
Making transport for DSP1...
Current recv sock buff size: 50000000 bytes
Making transport for ERR0...
mboard0 MIMO master
Warning:
The hardware does not support the requested RX sample rate:
Target sample rate: 3.200000 MSps
Actual sample rate: 3.225806 MSps #Betting this is the culprit but
haven't completed a trace
>>> gr_fir_ccc: using SSE
>>> Done
I'm looking through the UHD spec to see if there is a function that easily
resolves this but nothing has jumped out, yet.
It might be a memory issue. An attempt to sample at the 6Mz limit with the TVRX
(board responds with ~5.88...) results in gr_buffer:allocate_buffer: failed to
allocate buffer of size 18760, which points to an installation issue that make
check should have handled...a reinstall and closer scrutiny of the output
should highlight any neglected warnings/errors.
USRP2_WX.grc
Description: Binary data
#!/usr/bin/env python ################################################## # Gnuradio Python Flow Graph # Title: Usrp2 Wx # Generated: Thu Mar 31 00:08:03 2011 ################################################## from gnuradio import blks2 from gnuradio import eng_notation from gnuradio import gr from gnuradio import uhd from gnuradio import window from gnuradio.eng_option import eng_option from gnuradio.gr import firdes from gnuradio.wxgui import fftsink2 from gnuradio.wxgui import forms from gnuradio.wxgui import waterfallsink2 from grc_gnuradio import wxgui as grc_wxgui from optparse import OptionParser import wx class USRP2_WX(grc_wxgui.top_block_gui): def __init__(self): grc_wxgui.top_block_gui.__init__(self, title="Usrp2 Wx") ################################################## # Variables ################################################## self.usrp_inter = usrp_inter = 2 self.usrp_dec = usrp_dec = 25 self.cent_freq_m = cent_freq_m = 99.1e6 self.cent_freq_f = cent_freq_f = 0 self.adc_rate = adc_rate = 3.2e6 self.xlate_filter_taps = xlate_filter_taps = firdes.low_pass(1, adc_rate*usrp_inter/usrp_dec, 125000, 25000, firdes.WIN_HAMMING, 6.76) self.inc_dis = inc_dis = 10 self.gain = gain = 50 self.filter_gain = filter_gain = 10 self.cent_freq = cent_freq = cent_freq_m+cent_freq_f self.audio_rate = audio_rate = 48 self.audio_inter = audio_inter = 3 self.audio_dec = audio_dec = 16 ################################################## # Blocks ################################################## _gain_sizer = wx.BoxSizer(wx.VERTICAL) self._gain_text_box = forms.text_box( parent=self.GetWin(), sizer=_gain_sizer, value=self.gain, callback=self.set_gain, label='gain', converter=forms.float_converter(), proportion=0, ) self._gain_slider = forms.slider( parent=self.GetWin(), sizer=_gain_sizer, value=self.gain, callback=self.set_gain, minimum=0, maximum=100, num_steps=100, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.GridAdd(_gain_sizer, 4, 1, 1, 1) self.wxgui_waterfallsink2_0 = waterfallsink2.waterfall_sink_c( self.GetWin(), baseband_freq=cent_freq, dynamic_range=100, ref_level=50, ref_scale=2.0, sample_rate=adc_rate, fft_size=1024, fft_rate=5, average=False, avg_alpha=None, title="Waterfall Plot", size=((250,100)), ) self.GridAdd(self.wxgui_waterfallsink2_0.win, 1, 1, 1, 2) self.wxgui_fftsink2_1 = fftsink2.fft_sink_c( self.GetWin(), baseband_freq=0, y_per_div=10, y_divs=10, ref_level=50, ref_scale=2.0, sample_rate=adc_rate*usrp_inter/usrp_dec, fft_size=512, fft_rate=5, average=False, avg_alpha=None, title="FFT Plot", peak_hold=False, size=(200,300), ) self.GridAdd(self.wxgui_fftsink2_1.win, 1, 3, 1, 1) self.uhd_usrp_source_0 = uhd.usrp_source( device_addr="", io_type=uhd.io_type.COMPLEX_FLOAT32, num_channels=1, ) self.uhd_usrp_source_0.set_samp_rate(adc_rate) self.uhd_usrp_source_0.set_center_freq(cent_freq, 0) self.uhd_usrp_source_0.set_gain(gain, 0) _inc_dis_sizer = wx.BoxSizer(wx.VERTICAL) self._inc_dis_text_box = forms.text_box( parent=self.GetWin(), sizer=_inc_dis_sizer, value=self.inc_dis, callback=self.set_inc_dis, label='inc_dis', converter=forms.float_converter(), proportion=0, ) self._inc_dis_slider = forms.slider( parent=self.GetWin(), sizer=_inc_dis_sizer, value=self.inc_dis, callback=self.set_inc_dis, minimum=0, maximum=100, num_steps=100, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.GridAdd(_inc_dis_sizer, 5, 1, 1, 1) self.gr_freq_xlating_fir_filter_xxx_0 = gr.freq_xlating_fir_filter_ccc(audio_inter/audio_dec, (xlate_filter_taps), 0, adc_rate*usrp_inter/usrp_dec) _filter_gain_sizer = wx.BoxSizer(wx.VERTICAL) self._filter_gain_text_box = forms.text_box( parent=self.GetWin(), sizer=_filter_gain_sizer, value=self.filter_gain, callback=self.set_filter_gain, label='filter_gain', converter=forms.float_converter(), proportion=0, ) self._filter_gain_slider = forms.slider( parent=self.GetWin(), sizer=_filter_gain_sizer, value=self.filter_gain, callback=self.set_filter_gain, minimum=0, maximum=100, num_steps=100, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.Add(_filter_gain_sizer) _cent_freq_m_sizer = wx.BoxSizer(wx.VERTICAL) self._cent_freq_m_text_box = forms.text_box( parent=self.GetWin(), sizer=_cent_freq_m_sizer, value=self.cent_freq_m, callback=self.set_cent_freq_m, label='cent_freq_m', converter=forms.float_converter(), proportion=0, ) self._cent_freq_m_slider = forms.slider( parent=self.GetWin(), sizer=_cent_freq_m_sizer, value=self.cent_freq_m, callback=self.set_cent_freq_m, minimum=88e6, maximum=108e6, num_steps=1000, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.GridAdd(_cent_freq_m_sizer, 2, 1, 1, 1) _cent_freq_f_sizer = wx.BoxSizer(wx.VERTICAL) self._cent_freq_f_text_box = forms.text_box( parent=self.GetWin(), sizer=_cent_freq_f_sizer, value=self.cent_freq_f, callback=self.set_cent_freq_f, label='cent_freq_f', converter=forms.float_converter(), proportion=0, ) self._cent_freq_f_slider = forms.slider( parent=self.GetWin(), sizer=_cent_freq_f_sizer, value=self.cent_freq_f, callback=self.set_cent_freq_f, minimum=-1e4, maximum=1e4, num_steps=1000, style=wx.SL_HORIZONTAL, cast=float, proportion=1, ) self.GridAdd(_cent_freq_f_sizer, 3, 1, 1, 1) self.blks2_rational_resampler_xxx_0 = blks2.rational_resampler_ccc( interpolation=usrp_inter, decimation=usrp_dec, taps=None, fractional_bw=None, ) ################################################## # Connections ################################################## self.connect((self.uhd_usrp_source_0, 0), (self.blks2_rational_resampler_xxx_0, 0)) self.connect((self.uhd_usrp_source_0, 0), (self.wxgui_waterfallsink2_0, 0)) self.connect((self.blks2_rational_resampler_xxx_0, 0), (self.gr_freq_xlating_fir_filter_xxx_0, 0)) self.connect((self.gr_freq_xlating_fir_filter_xxx_0, 0), (self.wxgui_fftsink2_1, 0)) def get_usrp_inter(self): return self.usrp_inter def set_usrp_inter(self, usrp_inter): self.usrp_inter = usrp_inter self.set_xlate_filter_taps(firdes.low_pass(1, self.adc_rate*self.usrp_inter/self.usrp_dec, 125000, 25000, firdes.WIN_HAMMING, 6.76)) self.wxgui_fftsink2_1.set_sample_rate(self.adc_rate*self.usrp_inter/self.usrp_dec) def get_usrp_dec(self): return self.usrp_dec def set_usrp_dec(self, usrp_dec): self.usrp_dec = usrp_dec self.set_xlate_filter_taps(firdes.low_pass(1, self.adc_rate*self.usrp_inter/self.usrp_dec, 125000, 25000, firdes.WIN_HAMMING, 6.76)) self.wxgui_fftsink2_1.set_sample_rate(self.adc_rate*self.usrp_inter/self.usrp_dec) def get_cent_freq_m(self): return self.cent_freq_m def set_cent_freq_m(self, cent_freq_m): self.cent_freq_m = cent_freq_m self._cent_freq_m_slider.set_value(self.cent_freq_m) self._cent_freq_m_text_box.set_value(self.cent_freq_m) self.set_cent_freq(self.cent_freq_m+self.cent_freq_f) def get_cent_freq_f(self): return self.cent_freq_f def set_cent_freq_f(self, cent_freq_f): self.cent_freq_f = cent_freq_f self._cent_freq_f_slider.set_value(self.cent_freq_f) self._cent_freq_f_text_box.set_value(self.cent_freq_f) self.set_cent_freq(self.cent_freq_m+self.cent_freq_f) def get_adc_rate(self): return self.adc_rate def set_adc_rate(self, adc_rate): self.adc_rate = adc_rate self.uhd_usrp_source_0.set_samp_rate(self.adc_rate) self.set_xlate_filter_taps(firdes.low_pass(1, self.adc_rate*self.usrp_inter/self.usrp_dec, 125000, 25000, firdes.WIN_HAMMING, 6.76)) self.wxgui_fftsink2_1.set_sample_rate(self.adc_rate*self.usrp_inter/self.usrp_dec) self.wxgui_waterfallsink2_0.set_sample_rate(self.adc_rate) def get_xlate_filter_taps(self): return self.xlate_filter_taps def set_xlate_filter_taps(self, xlate_filter_taps): self.xlate_filter_taps = xlate_filter_taps self.gr_freq_xlating_fir_filter_xxx_0.set_taps((self.xlate_filter_taps)) def get_inc_dis(self): return self.inc_dis def set_inc_dis(self, inc_dis): self.inc_dis = inc_dis self._inc_dis_slider.set_value(self.inc_dis) self._inc_dis_text_box.set_value(self.inc_dis) def get_gain(self): return self.gain def set_gain(self, gain): self.gain = gain self._gain_slider.set_value(self.gain) self._gain_text_box.set_value(self.gain) self.uhd_usrp_source_0.set_gain(self.gain, 0) def get_filter_gain(self): return self.filter_gain def set_filter_gain(self, filter_gain): self.filter_gain = filter_gain self._filter_gain_slider.set_value(self.filter_gain) self._filter_gain_text_box.set_value(self.filter_gain) def get_cent_freq(self): return self.cent_freq def set_cent_freq(self, cent_freq): self.cent_freq = cent_freq self.uhd_usrp_source_0.set_center_freq(self.cent_freq, 0) self.wxgui_waterfallsink2_0.set_baseband_freq(self.cent_freq) def get_audio_rate(self): return self.audio_rate def set_audio_rate(self, audio_rate): self.audio_rate = audio_rate def get_audio_inter(self): return self.audio_inter def set_audio_inter(self, audio_inter): self.audio_inter = audio_inter def get_audio_dec(self): return self.audio_dec def set_audio_dec(self, audio_dec): self.audio_dec = audio_dec if __name__ == '__main__': parser = OptionParser(option_class=eng_option, usage="%prog: [options]") (options, args) = parser.parse_args() if gr.enable_realtime_scheduling() != gr.RT_OK: print "Error: failed to enable realtime scheduling." tb = USRP2_WX() tb.Run(True)
_______________________________________________ Discuss-gnuradio mailing list [email protected] http://lists.gnu.org/mailman/listinfo/discuss-gnuradio
