Circular convolution and linear convolution and fast convolution calculation

When doing block AEC, I can't understand the operation of padding w with zeros, adding x to the previous frame, and discarding the first half of the data after fft and ifft calculations. In-depth investigation of circular convolution and overlap save.
According to https://www.zhihu.com/question/25525824 , I understand that circular convolution is a derivative when using DFT (FFT) to calculate linear convolution. First of all, there is no concept of circular convolution in continuous time, because when using FFT, sampling in the frequency dimension is taken as time-domain extension, so FFT frequency-domain multiplication is equivalent to the convolution of two sequences after time-domain extension, that is Circle Convolution! The overlap save and overlap add algorithms are dynamically described in
https://blog.robertelder.org/overlap-add-overlap-save/ .
Overlap add is easy to understand, that is, each frame is filled with zeros, so that N>=L+M-1 (the sum of the two sequences -1), at this time the result of circular convolution is linear convolution.
Overlap save is still very difficult to understand, because it still uses circular convolution. The performance is that the data of the previous frame is added to the front, the data of the two frames is circularly convolved with the filter, and then the first half of the results are discarded to obtain a linear convolution. (It can be understood that the output of the current frame is equal to the circular convolution of the previous frame of data and this frame of data)
By the way, circular convolution can be calculated by matrix operations, which is very intuitive. It can be seen that the upper right corner of the overlap add is not involved in the calculation due to the 0 filling.

Here is a simple summary of differences
between overlap add and overlap save that might influence which one you use:

Overlap add will involve adding a number of values in the output to recover the final signal, whereas overlap save does not require any addition in this step. This might be important to you if you want to consider the numerical precision of your output, or if you want to reduce the number of addition operations.
The Overlap add method can be computed using linear convolution since the zero padding makes the circular convolution equal to linear convolution in these cases.
The Overlap save method doesn’t do as much zero padding, but instead re-uses values from the previous input interval. In overlap save, some values are considered contaminated due to aliasing of the circular convolution, so they are discarded from the output.
In overlap save there is less zero padding. In fact, the only time you need to zero pad is before the first interval, and after the last interval if the length of the input sequence isn’t evenly divided by L.

Guess you like

Origin blog.csdn.net/weixin_39987672/article/details/126349128