GNU无线电/Python-USRP同时接收和收集

GNU无线电/Python-USRP同时接收和收集,python,python-2.7,gnuradio,usrp,gnuradio-companion,Python,Python 2.7,Gnuradio,Usrp,Gnuradio Companion,我为这个冗长的问题提前道歉。我想确定我把所有东西都记下来了。我在GNU无线电的帮助下建立了一个看似简单的python脚本(并使用USRP b200)来连续接收信号,当该信号达到某个功率级别时,一个阈值变量会让用户知道检测到了信号,然后我想开始收集该信号以供以后查看。所以我有一个python脚本,它等待信号被检测到,然后当它被检测到时,它将使用另一个python脚本开始收集问题是,USRP不允许我同时接收和收集。USRP能同时接收和收集吗? 我的GNU收音机设置 UHD: USRP Source

我为这个冗长的问题提前道歉。我想确定我把所有东西都记下来了。我在GNU无线电的帮助下建立了一个看似简单的python脚本(并使用USRP b200)来连续接收信号,当该信号达到某个功率级别时,一个阈值变量会让用户知道检测到了信号,然后我想开始收集该信号以供以后查看。所以我有一个python脚本,它等待信号被检测到,然后当它被检测到时,它将使用另一个python脚本开始收集问题是,USRP不允许我同时接收和收集。USRP能同时接收和收集吗?

我的GNU收音机设置

UHD: USRP Source ---> Low Pass Filter ---> Complex to Mag^2 ---> Threshold ---> Probe Signal
带有功能探头和标签(用于向用户显示是否检测到信号)

GNU生成/我更新的Python代码

Class autoCollect(gr.top_block, Qt.QWidget):

    def __init__(self):
        .
        .    #some setup stuff
        .
        def _probe_variable_probe():
            while True:
                val = self.probe_signal.level()
                try:
                    self.set_probe_variable(val)
                except AttributeError:
                    pass
                if val == 1.0    # If there is a signal detected...
                    p = subprocess.Popen("python USRP_collect.py", shell=True)
                    p.wait()
        _probe_variable_thread = threading.Thread(target=_probe_variable_probe)
        _probe_variable_thread.daemon = True
        _probe_variable_thread.start()
        .
        .    #some more setup stuff
        .

if __name__ == '__main__':
    tb = autoCollect()
    tb.start()
    tb.show()
USRP\u收集

Class usrp_read(...):

    def __init__(...)
    .
    .
    .
if name == '__main__':
    tb = usrp_read(...)
    tb.run()
问题: 当我试图在自动收集脚本中调用USRP\u collect运行时,它会开始运行它,但当它到达
tb=USRP\u read()
时,它会给出一个错误

Traceback (most recent call last):
    File "USRP_collect.py", line 29, in __init__
然后是运行时错误

empty device address
我尝试运行一个视图文件而不是collect文件(视图只显示信号的fft,它自己工作),当我尝试调用该类时,它会给我相同的错误

USRP能否同时接收和收集数据

是的,所有设备都支持全双工

您的错误是试图从两个进程中使用相同的USRP。这是行不通的–您需要将接收器和发射器集成到同一流程图/流程中


事实上,在GNU无线电中,这很简单:只需在一个流图中使用USRP接收器和源。我不知道你的流程图是做什么的,但是:几乎可以肯定的是,信号探测不是一条可行的道路

基本上,我是在尝试接收一个信号,我正在使用另一个USRP(工作)发送该信号。然后我想知道信号的功率水平是否足够高,以确定是否存在信号。我通过设置一个阈值和探针来不断更新,让我知道是否有信号。你知道我如何在采集信号时保持它工作吗?