0

当我在 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 如下:
selector :input index 和 output index 由 WX GUI Chooser block 控制
FSK4 MOD: 调制 fsk4 信号并将数据写入 raw.bin
FSK4 DEMOD : 从 raw.bin 读取数据并解调

file source -> /////// -> FSK4 MOD -> FSK4 DEMOD -> NULL SINK
               selector 
file source -> //////  -> GMKS MOD -> GMSK DEMOD ->NULL SINK

当输入索引或输出索引发生变化时,整个流程图将没有响应。

4

1 回答 1

4

有两件事:

  1. 你在某处有一个错误,解决方案不是改变某些东西,而是修复那个错误。完整的 Python 错误消息将准确地告诉您错误在哪一行。

  2. noutput_items是 GNU Radio 在运行时设置的一个变量,让您知道在调用work. 因此,这不是您可以设置的东西,而是您的work方法必须尊重的东西。

我认为假设您不太了解 GNU Radio 的工作原理是公平的:

GNU Radio 基于在work有足够的可用输出空间和足够的输入项来处理时调用块的函数。您的块可以使用的输出空间量work作为参数传递给您,并将在对work.

如果您还没有我强烈建议您阅读官方指导教程的第 1-3 章 。我们总是努力使这些教程保持最新。

编辑:您的命令表明您还没有真正理解我的意思,对不起。work所以:GNU Radio在执行时一遍又一遍地调用你的方法。

例如,它可能会调用work4000 个输入项和 4000 个输出项空间(您有一个同步块,因此输入数==输出数)。您work处理前 1000 个,因此return 1000. 所以剩下3000件。

现在,上游块做了一些事情,所以有 100 个新项目。因为之前的 3000 仍然存在,所以你的块work会被3100物品调用。

work处理任意数量的项目,并且returns 那个数字。GNU Radio 确保“剩余”项目保持可用,work如果有足够的输出,它会再次调用您。

于 2015-08-31T07:59:38.953 回答