做block AEC 的时候看不懂对w补零,x加入上一帧,fft和ifft计算后舍弃前一半数据的操作。深入调查了一下循环卷积和overlap save。
https://www.zhihu.com/question/25525824中表示,循环卷积我理解是使用DFT(FFT)计算线性卷积时的衍生品。首先连续时间没有循环卷积概念,因为用FFT的时候在频率维度采样,照成时域延拓,因此FFT频域相乘等价于时域延拓后的两个序列的卷积,也就是圆卷积!
https://blog.robertelder.org/overlap-add-overlap-save/
中动态描述了overlap save和 overlap add 算法。 overlap add很好理解,就是每个frame补零,使得N>=L+M-1(两个序列之和-1),此时圆卷积的结果就是线性卷积。
overlap save 还是很不好理解,因为它依然使用了圆卷积。表现为前面补入上一帧的数据,两帧的数据与滤波器进行圆卷积,然后丢弃前一半的结果,得到线性卷积。(可以理解成当前帧的输出等于上一帧数据和这一帧数据的圆卷积)
对了,圆卷积可以通过矩阵运算计算,非常直观。可以看到overlap add 右上角由于补0都是不参与计算的。
他们的不同如下所示,
Here is a simple summary of differences between overlap add and overlap save th