所以,我目前正在matlab中实现块卷积的重叠保存方法,并且在这样做时遇到了一些麻烦。
我的实现是使用缓冲输入来实时处理向量中的输入数据。输入被馈送到我的重叠保存类的实例,一旦缓冲区已满,输入超过预定义的块长度(大于过滤器长度),输入将按块处理(块长度的大小)使用标准的重叠保存算法,直到缓冲区中的数据长度小于块长度。然后它坐下来等待更多数据进入并重复该过程。
现在一切似乎都工作正常,但问题是在所有输入都传递给类之后刷新缓冲区。当调用 flush 方法时,缓冲区中的数据总是少于块大小,并且我在处理剩余数据时遇到了麻烦。
还应该值得注意的是,类在处理普通数据后,会将输入的最后 N-1 个(其中 N 是过滤器长度)数据点保留在缓冲区中,以维护算法的“重叠”部分用于后续数据或最后的冲洗。
我想我的问题是在调用 flush() 时应该如何处理缓冲区中的剩余数据?我尝试简单地进行零填充并将其与过滤器进行卷积,但这会产生垃圾输出......有什么建议吗?
注意:flush 的输出应该附加到处理普通数据块的输出中,并且这个新的输出应该与 matlab 中的 conv(input, filter) 的输出相匹配。