Overlap-add in the frequency domainStarted by 5 years ago●1 reply●latest reply 5 years ago●502 views
I am relatively new to DSP and am trying to implement a frequency domain convolution for multiple channels. I'm trying to use fft convolution, but perform the overlap-add method in the frequency-domain, rather than time-domain. I have implemented this in MATLAB and I cannot seem to get it working correctly, so I just wanted to check that the fundamental idea is actually correct. The idea is to:
-> get input signal with N samples -> fft @ 2N -> multiply with an IR (already fft'd at 2N) -> add the previous overlap-add segment to the first N samples of the 2N signal -> save the last N samples of the 2N signals in the overlap-add vector -> ifft the first N samples of the processed 2N signal and output the real part of that.
I thought this would work because of the linearity properties of the DFT, by which an addition of the overlap-add segment could be done in the time-domain or frequency-domain to the same result, unless I have misunderstood this. However, I haven't been able to find any information explicitly saying that this is possible.
UPDATE: I've just realised that it may not actually work because I'm trying to handle the frequency-domain signals like time-domain signals (saving parts of them), whereas the FD signals are actually different, I think. So the new question is whether there's a way to perform the overlap-add method in the frequency-domain, so I can add all the different channels in the FD and performa single ifft for the final signal as opposed to multiple iffts for each channel before adding them together.
You wouldn’t be overlap adding in the frequency domain. The equivalent operation would be to to interpolate in the frequency domain, phase shift the second set of data and then add them together. The interpolation could be done by further zero padding the data, but I don’t think there’s any good reason to do it this way. The presumption would be that you had both sets of data already, so it would be more efficient to just treat them as a single set of data, or to just use overlap add instead. However, if you are just trying out the mathematics to see if it works that’s what you would do