Python 2.7 gnuradio:如何在编写OOT块时动态更改noutput_项?
当我在gnuradio中制作OOT块时Python 2.7 gnuradio:如何在编写OOT块时动态更改noutput_项?,python-2.7,signal-processing,gnuradio,modulation,Python 2.7,Signal Processing,Gnuradio,Modulation,当我在gnuradio中制作OOT块时 class mod(gr.sync_block): """ docstring for block mod """ def __init__(self): gr.sync_block.__init__(self, name="mod", in_sig=[np.byte], out_sig=[np.complex64]) def work(self, input_items, output_items)
class mod(gr.sync_block):
"""
docstring for block mod
"""
def __init__(self):
gr.sync_block.__init__(self,
name="mod",
in_sig=[np.byte],
out_sig=[np.complex64])
def work(self, input_items, output_items):
in0 = input_items[0]
out = output_items[0]
result=do(....)
out[:]=result
return len(output_items[0])
我得到:
ValueError: could not broadcast input array from shape (122879) into shape (4096)
我如何解决它?GRC如下所示:
选择器:输入索引和输出索引由WX GUI选择器块控制
FSK4 MOD:调制FSK4信号并将数据写入raw.bin
FSK4解调器:从raw.bin读取数据并进行解调
file source -> /////// -> FSK4 MOD -> FSK4 DEMOD -> NULL SINK
selector
file source -> ////// -> GMKS MOD -> GMSK DEMOD ->NULL SINK
当输入索引或输出索引更改时,整个流程图将不响应。有两件事:
noutput\u items
是GNU无线电在运行时设置的一个变量,用于让您知道在调用work
时可能会产生多少输出。因此,这不是您可以设置的,而是您的工作
方法必须尊重的work
函数。块可以使用的输出空间量作为参数传递给工作
,并在调用工作
之间更改
如果您尚未阅读,我强烈建议您阅读本手册的第1-3章。我们总是努力使这些教程保持最新
编辑:您的命令表明您没有真正理解我的意思,对不起。所以:GNU无线电在执行过程中一遍又一遍地调用您的工作
方法
例如,它可能使用4000个输入项和4000个输出项空间调用work
(您有一个同步块,因此输入数==输出数)。您的工作
处理其中的前1000个,因此返回1000个
。剩下3000件了
现在,上游块做了一些事情,所以有100个新项目。因为之前的3000个仍然存在,所以块的工作将被调用3100
项
您的工作
处理任意数量的项目,并返回该数字。GNU Radio确保“剩余”项目保持可用,如果我们的输出足够,它将再次调用您的工作。有两件事:
您在某个地方有一个bug,解决方法不是更改某些内容,而是修复该bug。完整的Python错误消息将准确地告诉您错误发生在哪一行
noutput\u items
是GNU无线电在运行时设置的一个变量,用于让您知道在调用work
时可能会产生多少输出。因此,这不是您可以设置的,而是您的工作
方法必须尊重的
我认为,假设您对GNU无线电的工作原理不太了解,这是公平的:
GNU无线电基于在有足够的输出空间和足够的输入项进行处理时调用块的work
函数。块可以使用的输出空间量作为参数传递给工作
,并在调用工作
之间更改
如果您尚未阅读,我强烈建议您阅读本手册的第1-3章。我们总是努力使这些教程保持最新
编辑:您的命令表明您没有真正理解我的意思,对不起。所以:GNU无线电在执行过程中一遍又一遍地调用您的工作
方法
例如,它可能使用4000个输入项和4000个输出项空间调用work
(您有一个同步块,因此输入数==输出数)。您的工作
处理其中的前1000个,因此返回1000个
。剩下3000件了
现在,上游块做了一些事情,所以有100个新项目。因为之前的3000个仍然存在,所以块的工作将被调用3100
项
您的工作
处理任意数量的项目,并返回该数字。GNU无线电确保“剩余”项目保持可用,如果我们的输出足够多,将再次调用您的工作。您有缩进问题。您有缩进问题。谢谢!因为我不能更改noutput_项,所以我将输出写入一个文件。(有两个模块用于调制/解调4fsk信号)好吧,当我停止从调制文件动态读取数据的GRC时,整个流程图总是没有响应。我真的不知道如何处理这些数据。我很确定你误解了(常规)工作应该如何实现,对不起,有人投了反对票,这在民主上是可以接受的。但是:我是GNU无线电维护人员。我最感兴趣的是我的答案有什么错误,或者它没有回答OP的问题。谢谢!因为我不能更改noutput_项,所以我将输出写入一个文件。(有两个模块用于调制/解调4fsk信号)好吧,当我停止从调制文件动态读取数据的GRC时,整个流程图总是没有响应。我真的不知道如何处理这些数据。我很确定你误解了(常规)工作应该如何实现,对不起,有人投了反对票,这在民主上是可以接受的。但是:我是GNU无线电维护人员。我最感兴趣的是我的答案有什么错误,或者它以何种方式没有回答OP的问题。