DSPRelated.com
Forums

How different is the OVERLAP and ADD method from linear convolution

Started by Abhishek March 15, 2006
I refer to the method of overlap and add way of performing convolution
of large input signals given in proakis.
My question is,
How is this method of convolving the impulse response with the large
input signal by dividing it into small blocks different from the normal
way of convolution where we use the conv() function?
I tried out the method in MATLAB and both gave the same result.
But, I am sort of not getting how are the results the same even when we
are performing convolutions deifferently or seperately for diferent
blocks?
Can anybody elaborate?
Bye

Abhishek wrote:
> I refer to the method of overlap and add way of performing convolution > of large input signals given in proakis. > My question is, > How is this method of convolving the impulse response with the large > input signal by dividing it into small blocks different from the normal > way of convolution where we use the conv() function? > I tried out the method in MATLAB and both gave the same result. > But, I am sort of not getting how are the results the same even when we > are performing convolutions deifferently or seperately for diferent > blocks? > Can anybody elaborate? > Bye
For linear convolution both, signal and impuls response (IR), must be known completely. If you want to convolve signals in realtime, and only the IR is know, the OVERLAP and ADD method ist very usefull. But you didn't asked for this. Go on: Matlab interally uses fast convolution in conv() function -> see help. This saves CPU-time and memory when long "IR"-sequences are used. The signal is divided in fragments, then the fragments are zeropadded to lenghts of 8,16,64,128 or so (minimum is length(IR) + length(fragment)). Now it is transformed (DFT) by the Radix2-FFT algorithm, multiplied by the equivalent DFT of the "IR", then it is inverse transformed (iDFT by Radix2-FFT). Last the resulting fragments are overlaped and added to get the completely convolved signal. N=lenght(IR) For linear convolution you need around N^2 real-operations (multiplication+addition). For fast convolution you only need N * log N / log 2 complex-operations. In practise for N>=32 you save time. The results should be the same. But the journey is the reward. ;-) Bye
Abhishek wrote:
> I refer to the method of overlap and add way of performing convolution > of large input signals given in proakis. > My question is, > How is this method of convolving the impulse response with the large > input signal by dividing it into small blocks different from the normal > way of convolution where we use the conv() function? > I tried out the method in MATLAB and both gave the same result. > But, I am sort of not getting how are the results the same even when we > are performing convolutions deifferently or seperately for diferent > blocks? > Can anybody elaborate?
The windows necessary for finite-length FFTs produce artifacts at the ends. Suitable overlapping transforms the sum of one end artifact and the next start artifact into true data. The start and end artifacts or a transversal convolution are the same as the uncanceled start and end artifacts of the FFT convolution, so the results are identical within roundoff error. Jerry -- Engineering is the art of making what you want from things you can get. �����������������������������������������������������������������������