可以使用哪些差异或其他标准来帮助决定使用重叠添加和重叠保存进行过滤?重叠添加和重叠保存都描述为用于使用FIR滤波器内核对数据流进行基于FFT的快速卷积的算法。延迟,计算效率或缓存局部性(等)差异(如果有)是什么?还是一样?

#1 楼

从本质上讲,OS效率更高一些,因为它不需要添加重叠的瞬态。但是,如果需要以零填充而不是重复的采样重用FFT,则可能要使用OA。

这里是我前一段时间写过的文章的快速概述


快速卷积是指圆卷积的逐块使用
以完成线性卷积。快速卷积可以通过OA或OS方法实现。操作系统也称为“重叠报废”。在OA
滤波中,每个信号数据块仅包含与
允许循环卷积等效于线性卷积的数量一样的采样。 “
”过滤器的冲动响应来自“包裹”
序列的末尾。 OA过滤将一个块的输入接通瞬态与前一个块的输入断开瞬态相加。在OS过滤中,
如图1所示,对输入数据不执行零填充,
因此,圆形卷积不等于线性卷积。
“环绕”的部分是无用的和被丢弃的。为了对此进行补偿,将上一个输入块的最后一部分用作下一个块的开头。 OS不需要添加任何瞬变,因此比OA更快。


评论


$ \ begingroup $
很棒的文章! =)
$ \ endgroup $
– Phonon
2012年6月29日,0:52

$ \ begingroup $
在OA缓冲区零填充部分的DFT的计算方式上可能会有一些优化,这为OA方法提供了优势。这将取决于您的处理器和FFT软件包。另外,您可以为考虑到零填充的OA编写适合自己的FFT算法。
$ \ endgroup $
–orodbhen
16-10-10在17:35

$ \ begingroup $
@orodbhen,您知道这样的FFT软件包吗?
$ \ endgroup $
–马克·博格丁
16-10-10在18:14

$ \ begingroup $
@MarkBorgerding在OpenCV中,您可以指定零行的数量,但这特定于2D。至于那个或其他FFT包中存在哪些隐式优化,我不知道。我可以想到很多情况下,使用自定义FFT来利用稀疏性会有所帮助,但我本人并未走这条路。还没。
$ \ endgroup $
–orodbhen
16-10-11在18:59

$ \ begingroup $
您引用的好消息是因为该链接已损坏:(
$ \ endgroup $
–user541686
19年5月10日在21:08

#2 楼

通过将滤波器脉冲响应从因果关系转换为非因果关系,可以进一步调整OS效率。 Wikimedia的此Octave代码片段显示了两种方法以及常用的因果过滤器方法:索引$(1:L)$表示长度为$ L + M-1 $的反向DFT输出缓冲区可以位于整个输出数组中,与先前的输出段重叠$ M-1 $。因此,$ M-1 $先前的输出只是被覆盖(丢弃),因此不需要将$ L $“良好”的输出从一个缓冲区复制到另一个缓冲区。