I have designed a FIR high-pass filter $\{h_n\}$ with length 257 to filter a signal $\{f_n\}$ with length 512. To convolve signal with filter in time,
I performed an FFT with length 768, padding zeroes at tail of $\{h_n\}$ and $\{f_n\}$, and then I multiplied their frequency responses $\{H_n\}$ and $\{F_n\}$ . To convert it back to time I performed an IFFT producing a filtered signal $\{\tilde{f}_n\}$.
However, $\{\tilde{f}_n\}$ has a time shift comparing to the origin signal, and their amplitudes also have a deviation. I know there is an 'Overlap-Add Method' to solve this problem, but my calculation resources are limited.
Is there any method to solve such problem using minimal times of FFT/IFFT?

  • $\begingroup$ 1. Did you take care of the FFT shift operations while doing IFFT/FFT? <br/> 2. Did you take care of the fact that multiplication in the frequency domain is circular convolution in time domain (not linear convolution)? 3. What tool are you using for this experiment? Matlab? $\endgroup$ Jan 16, 2021 at 10:09
  • $\begingroup$ What do you mean "their amplitudes have a deviation?" Also, the time-shift may simply be inherent in the group delay of your filter, so one thing you could do is try the minimum-phase version of your filter. $\endgroup$ Jan 16, 2021 at 18:43
  • 1
    $\begingroup$ To make any filter minimum phase, simply take all of the zeros in the z-domain that are outside the unit circle and replace them with zeros at the location of their reciprocals. Same frequency response but smaller group delay $\endgroup$ Jan 16, 2021 at 18:44

1 Answer 1


However, {f~n} has a time shift comparing to the origin signal, and their amplitudes also have a deviation.

Any causal system has a non-zero group delay. That's to be expected from systems theory!

So, yes, you've got a shift. And, unless your ${h_n}$ is a linear-phase filter, that delay isn't even constant for different frequencies.

This has nothing inherently to do with your method of convolution – it's just how the math works out.

If your filter is a linear-phase filter, then you can just time-shift the result back by half its length to compensate the group delay.

The usual way, however, is simply to be aware of the math behind all this and to work with the signal knowing that filtering is an operation with a group delay.


Your Answer

By clicking “Post Your Answer”, you agree to our terms of service and acknowledge you have read our privacy policy.

Not the answer you're looking for? Browse other questions tagged or ask your own question.