跨数据块的连续流计算

时间:2017-10-31 15:36:48

标签: c++ stream redhawksdr

从bulkio输入流访问先前或即将发布的数据块的数据推荐方法是什么?编辑:我正在使用c ++。

例如,如果我想对输入数据流执行卷积,其中每个计算依赖于流中前向/后向的某些值,我将如何进入“下一个”数据块或“之前”在块边界执行卷积计算的数据块?或者暂时将此信息存储在组件内的某个位置,以便可以在一个块中使用它们?

或者更简单的例子,如果我向我的组件发送8个八位字节值的重复向量,我希望只要接收到1,组件就会从0翻转到1,反之亦然(取决于前一个块的最后一个索引)数据计算下一个数据块的第一个索引。)

所需:


in: [0,0,0,1,0,0,0] [0,0,0,1,0,0,0] [0,0,0,1,0,0,0] ->

out: [1,1,1,0,0,0,0] [0,0,0,1,1,1,1] [1,1,1,0,0,0,0]

我能够实现的目标:


in: [0,0,0,1,0,0,0] [0,0,0,1,0,0,0] [0,0,0,1,0,0,0] ->

out: [1,1,1,0,0,0,0] [1,1,1,0,0,0,0] [1,1,1,0,0,0,0]

我曾想过将先前处理过的块中的相关信息存储在组件代码serviceFunction()内部的某个变量中,尽管我还没有找到一种方法来实现这一点而不重新初始化值(是每个数据块)对serviceFunction()的新调用?)。

或者,我想创建一个只读属性来保存我关心的值,但我怀疑可能有一个我不知道的更好的方法。

谢谢,
-Mark

1 个答案:

答案 0 :(得分:0)

如果需要在读取之间保留一些样本数,BulkIO输入流支持数据重叠。您提供了许多要读取的样本,以及要使用的多个样本(必须小于或等于读取大小),下一次读取将从未使用的第一个样本开始。有关更多详细信息,请参阅BulkIO Stream API上的REDHAWK手册部分(2.0.8手册中的5.7.3)。您还可以通过简单地将最后一个数据块读取为组件类的成员变量来维护历史记录。

您的简单示例建议使用状态机而不是上次读取的内容。通常,如果您希望在serviceFunction()的迭代之间存储信息,则可以自由地将自己的成员变量添加到组件类中(例如," MyComponent_i")。没有必要声明属性来添加成员。在修改组件的属性或端口时,只能重新生成基类(例如," MyComponent_base"),因此保留对组件类所做的任何更改。