0

所以,我目前正在matlab中实现块卷积的重叠保存方法,并且在这样做时遇到了一些麻烦。

我的实现是使用缓冲输入来实时处理向量中的输入数据。输入被馈送到我的重叠保存类的实例,一旦缓冲区已满,输入超过预定义的块长度(大于过滤器长度),输入将按块处理(块长度的大小)使用标准的重叠保存算法,直到缓冲区中的数据长度小于块长度。然后它坐下来等待更多数据进入并重复该过程。

现在一切似乎都工作正常,但问题是在所有输入都传递给类之后刷新缓冲区。当调用 flush 方法时,缓冲区中的数据总是少于块大小,并且我在处理剩余数据时遇到了麻烦。

还应该值得注意的是,类在处理普通数据后,会将输入的最后 N-1 个(其中 N 是过滤器长度)数据点保留在缓冲区中,以维护算法的“重叠”部分用于后续数据或最后的冲洗。

我想我的问题是在调用 flush() 时应该如何处理缓冲区中的剩余数据?我尝试简单地进行零填充并将其与过滤器进行卷积,但这会产生垃圾输出......有什么建议吗?

注意:flush 的输出应该附加到处理普通数据块的输出中,并且这个新的输出应该与 matlab 中的 conv(input, filter) 的输出相匹配。

4

1 回答 1

0

这是一个非常笼统的问题,所以我将给出一个非常笼统的答案。冲洗的概念意味着您的输入已经结束。当您决定在输入信号完成后您希望处理器如何运行时,您可以对其进行编码。Zeros 是一种常见的方法,所以我只能怀疑您对零填充的尝试(我认为这是正确的答案)还有其他一些缺陷。或者你的信号可能只是在一个峰值处结束,而零填充引入了一个急剧的转变。在这种情况下,重复最后一个值可能是比零填充更好的解决方案。

于 2012-06-01T18:39:30.587 回答