Application of filtfilt function

I have a mixed singal in time domain. I applied FFT to find the frequency components. Then I used "filtfilt" to filter the individual signal. Do I need to use ifft to get the time domain individual signal or filtfilt have already done it?
My question: is it necessary to use IFFT after performing the FILFILT on the frequency components of signals to get the time domain singal back?

 Accepted Answer

Star Strider
Star Strider on 25 Mar 2021
The filtfilt function filters in the time domain only.
To see the result of the filtering, calculate the fft of the time-domain signals before and after filtering. To see the transfer function of the filter with respect to the signal itself, use element-wise division of the fft of the filtered signal by the fft of the original (unfiltered) signal, and plot it.

7 Comments

Sohel Rana
Sohel Rana on 25 Mar 2021
Edited: Sohel Rana on 17 May 2021
Thank you for your explanation. It would be a great help if you tell me whether I'm doing right or wrong to get the time domain signal back?
I had a mixed signal x =x1+x1 where x1 and x2 are the individual signal. I applied FFT on x and got two peaks which corresponds two different frequencies (f1 and f2). Then I used two butterworth badnpass filters on these two frequencies with precise bandwidth. Finally I applied filtfilt to reconstruct the time domain signal.
Just as follow (only for x1 reconstruction):
x=x1+x2
y=fft(x)
which gives two peaks corresponding to two frequencies say f1 and f2
[b,a] = butter(order,[f1-dn, f1+dn],'bandpass'); % here dn is a small increment of frequencies
z=filtfilt(b,a,x)
Can I get the time domain signal back in this way? Is this the right way to reconstruct the signal?
Note that ‘z’ is the filtered time-domain signal. There is no need to reconstruct it. It already exists in your workspace, since that code appears to be more or less correct. (I cannot determine if it is from the posted code.)
Thank you! The same way the second signal x2 can be reconstructed by using f2.
z1 or z2 will always be time domain if I follow the above procedure, right?
Generally, ifft is applied on the signal after performing filtering to get the signal back in time domain. If I use filtfilt, then I don't need to use ifft anymore, right?
Neither the fft or ifft functions are necessary here, at least with respect to filtering. Everything is in the time domain.
Paul
Paul on 25 Mar 2021
Edited: Paul on 17 May 2021
Referring to this comment: After applying filtfilt to x, the output z is still, in general, not an exact reconstruction of x1.
Hi Paul,
Is there a better way to reconstruc signal?
Hard to say w/o knowing more about the signals. All I was saying is that this procedure cannot, in general, literally reconstruct the signal x1, though it might be very a good estimate of x1, depending on the properties of x1 and x2.

Sign in to comment.

More Answers (0)

Categories

Tags

Asked:

on 24 Mar 2021

Commented:

on 17 May 2021

Community Treasure Hunt

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

Start Hunting!