MATLAB Answers

Practical use of Phase Delay for IIR Filter on Pure Sinusoid

8 views (last 30 days)
I recently asked a question about Finding Dominant Frequency and Phase using FFT. My follow-up question has to do with the phase shift induced by an IIR filter. For example, consider a situation where I want to forecast a signal into the future. The original, noisy signal gets filtered (Row 1). The dominant frequency is determined (Row 2). The phase angle of the dominant frequency is determined (Row 3). Finally, the forecasted signal is aligned with the filtered signal based on the phase angle to the dominant frequency (Row 4).
However, the true goal is to align the forecasted signal with the original signal, but I don't understand how—other than empirically—to determine the phase shift. Is this information in phasedelay() (below)?
This essentially results in two phase shifts of the forecasted signal: one based on the original signal's phase (gathered from fft()), one to correct for the shift due to the IIR (unsure about this).
  3 Comments
Mathieu NOE
Mathieu NOE on 6 Oct 2020
Matt
i am not 100% sure of what you intend to do , but if you want to smooth some noisy sine waves without adding delay , you should try to use bandpass filters and not only low pass filters.
If you know or measure first the sine wave frequency (f0) set the bandpass filter low and high pass frequency like this :
f_low = f0/a
f_high = f0*a
a defines the bandwith (selectivity) of you filter (start with a = 2 for example and see the diffeence when increasing / decreasing a)
the benefit of doing this way is that your bandpass filter will have zero delay at the f0 frequency, so if you implement it on a DSP , you can observe both raw and filtered signals without delay.
to furtehr comment on phase behaviour of filters, there is NO filter that has not a phase roll with frequency - even Bessel filters. This applies for analog and digital filters as well. Only if there is need for it , there are "linear" phase filters and "non linear" phase filters - but there is no "phase neutral" filter on earth - not sure what neutral means here...

Sign in to comment.

Accepted Answer

Star Strider
Star Strider on 6 Oct 2020
To avoid the phase shift, use the filtfilt function instead of filter.
  4 Comments
Star Strider
Star Strider on 6 Oct 2020
I’m not certain what you want to do. If you’re doing anything in real-time, the Bessel filter (or several cascaded if necessary to get a shorter transition region) is likely the way to go for the reasons I stated. For real-time applications, it would be necessary to minimise the phase delay and phase distortion inherent in other filter designs.
I’ve not done anything with EEG for a while, and nothing about using (what appears to me to be) a feedback system for transcranial stimulation. That’s beyond the scope of my current expertise.
In any event, while you can use Bessel filters for real-time applications, to prototype them in MATLAB it is necessary to use filtfilt, since it provides phase-neutral filtering for all discrete filter designs.

Sign in to comment.

More Answers (0)

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!