0
$\begingroup$

I am currently working on functional connectivity analysis of EEG, and need to bandpass filter my data into different frequency bands (Delta, Theta, Alpha and Beta). An important thing is that the filter doesn't cause phase distortion. I know a butterworth filter and processing the data in both the forward and reverse directions (e.g. with filtfilt in Matlab) is a good approach, however I was still wondering about the simple FFT/IFFT filtering approach. What are the exact disadvantages of this method? Does this method cause phase distortions? What are 'edge effects' that occur with this method?

$\endgroup$
  • $\begingroup$ since you mention filtfilt(), does this mean that you have a finite data set and you are processing not real-time? if you can use filtfilt(), then you can process the whole file with an FFT (and iFFT) and use nearly any frequency response you want. you will want to zero pad both ends and design your zero-phase frequency response (no phase distortion) in such a way that the length of the impulse response does not exceed the length of the zero pad. otherwise there will be time aliasing (wrap around) at the ends. $\endgroup$ – robert bristow-johnson May 20 '14 at 11:32
2
$\begingroup$

Edge effects due to circular convolution can occur if you don't zero pad the data sufficiently before FFT/IFFT filtering. Fast convolution filtering using shorter sequential segments or windows from a longer data stream requires both padding of the FFT and overlap add/save processing of the overlapping IFFT results.

Just naively zeroing FFT bins instead of using the transform of a properly designed time domain filter can lead to extreme ripples in the filter's frequency response and/or ringing in the FFT/IFFT filtered result.

No phase distortion should occur if the filter kernel has appropriate symmetry in the time domain.

The computational cost of an FFT (in CPU cycles or latency time) can be higher than with IIR filtering. But that depends on the length of the data and the filter complexity (in filter order and/or number of passes).

$\endgroup$

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

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