0

这就是我执行以下代码时得到的。

Traceback (most recent call last):
 File "usrp.py",line 100 in <module>
  tb.set_freq(i)
 File "usrp.py",line 77 in set_freq
  self.wxgui_fftsink2_0.set_baseband_freq(self.freq)
 File "usr/local/lib/python2.7/dist-packages/gnuradio/wxgui/common.py",line 131 in set
 def set(value): controller[key]=value
 File "usr/local/lib/python2.7/dist-packages/gnuradio/wxgui/pubsub.py",line 44 in _setitem_
  elif self._proxies[key] is not None:
AttributeError: 'fft_window' object has no attribute '_proxies'

我在循环依赖中看到了这种错误。我之前通过只导入包而不是使用 from 关键字来解决循环依赖。我在这种情况下尝试过 import gnuradio 但没有用。以下是我正在处理的代码on.如果可以解决,那将是很大的帮助。我没有遇到过这种错误。

#!/usr/bin/env python
##################################################
# Gnuradio Python Flow Graph
# Title: Usrp
# Generated: Sat Feb 21 11:26:17 2015
##################################################
#################################################

# Gnuradio Python Flow Graph
# Title: Usrp
# Generated: Sat Feb 21 11:26:17 2015
##################################################
from gnuradio import analog
from gnuradio import blocks
from gnuradio import eng_notation
from gnuradio import gr
from gnuradio import wxgui
from gnuradio.eng_option import eng_option
from gnuradio.fft import window
from gnuradio.filter import firdes
from gnuradio.wxgui import fftsink2
from grc_gnuradio import wxgui as grc_wxgui
from optparse import OptionParser
import wx,time,random

class usrp(grc_wxgui.top_block_gui):
    def __init__(self):
        grc_wxgui.top_block_gui.__init__(self, title="Usrp")
        ##################################################
        # Variables
        ##################################################
        self.samp_rate = samp_rate = 32000
        self.freq = freq = 900e6
        ##################################################
        # Blocks
        ##################################################
        self.wxgui_fftsink2_0 = fftsink2.fft_sink_c(
            self.GetWin(),
            baseband_freq=freq,
            y_per_div=10,
            y_divs=10,
            ref_level=0,
            ref_scale=2.0,
            sample_rate=samp_rate
            fft_size=1024,
            fft_rate=15,
            average=False,
            avg_alpha=None,
            title="FFT Plot",
            peak_hold=False,
        )
        self.Add(self.wxgui_fftsink2_0.win)
        self.blocks_throttle_0 = blocks.throttle(gr.sizeof_gr_complex*1, samp_rate,True)
        self.analog_sig_source_x_0 = analog.sig_source_c(samp_rate, analog.GR_SIN_WAVE, 100e3,1, 0)

        ##################################################
        # Connections
        ##################################################
        self.connect((self.analog_sig_source_x_0, 0), (self.blocks_throttle_0, 0))
        self.connect((self.blocks_throttle_0, 0), (self.wxgui_fftsink2_0, 0))


    def get_samp_rate(self):
        return self.samp_rate


    def set_samp_rate(self, samp_rate):
        self.samp_rate = samp_rate
        self.wxgui_fftsink2_0.set_sample_rate(self.samp_rate)
        self.analog_sig_source_x_0.set_sampling_freq(self.samp_rate)
        self.blocks_throttle_0.set_sample_rate(self.samp_rate)


    def get_freq(self):
        return self.freq


    def set_freq(self, freq):
        self.freq = freq
        self.wxgui_fftsink2_0.set_baseband_freq(self.freq)


if __name__ == '__main__':
    import ctypes
    import sys
    if sys.platform.startswith('linux'):
        try:
            x11 = ctypes.cdll.LoadLibrary('libX11.so')
            x11.XInitThreads()
        except:
            print "Warning: failed to XInitThreads()"
    parser = OptionParser(option_class=eng_option, usage="%prog: [options]")
    (options, args) = parser.parse_args()
    tb = usrp()
    def t_range(beg,end,incr):
        while beg<=end:
            yield beg
            beg+=incr
    j=2
    for i in t_range(910e6,1010e6,10e6):
        tb.set_freq(i)
        #time.sleep(j)
        tb.Start(True)
        time.sleep(j)
        tb.Wait()
4

1 回答 1

0

这很可能不是循环依赖问题。

然而,我有点担心这个错误。你看,pubsub'__init__生成一个_proxies属性,所以如果一个类是 的子类pubsub,它应该有_proxies; 如果不是,它不应该看到那个调用。

class pubsub(dict):
    def __init__(self):
        self._publishers = { }
        self._subscribers = { }
        self._proxies = { }
    ....

因此,有趣的是,您的脚本对我有用(在修复缺失的 45 行之后),这可能表明您正在混合不同 GNU Radio 版本的源: WXGUI FFT

作为一种解决方案,我建议确保您真正使用的是 GNU Radio 的一个版本,最好是最新的,并从源代码安装(debian 的软件包也相当最新,感谢 Maitland),这可以使用自动发生炸弹。

于 2015-02-28T08:38:06.050 回答