Python 2.7 gnuradio:如何在编写OOT块时动态更改noutput_项?

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)

当我在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):
    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
当输入索引或输出索引更改时,整个流程图将不响应。

有两件事:

  • 您在某个地方有一个bug,解决方法不是更改某些内容,而是修复该bug。完整的Python错误消息将准确地告诉您错误发生在哪一行

  • noutput\u items
    是GNU无线电在运行时设置的一个变量,用于让您知道在调用
    work
    时可能会产生多少输出。因此,这不是您可以设置的,而是您的
    工作
    方法必须尊重的

  • 我认为,假设您对GNU无线电的工作原理不太了解,这是公平的:

    GNU无线电基于在有足够的输出空间和足够的输入项进行处理时调用块的
    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的问题。