High-pass Butterworth filter and filtfilt

17 vues (au cours des 30 derniers jours)
Guglielmo Giambartolomei
Guglielmo Giambartolomei le 15 Fév 2017
Commenté : Star Strider le 16 Fév 2017
Hello everyone, I'm trying to high-filter a signal beacause when I perform a fft of the original signal I find a contribution at very low frequency even if I take the fft of detrend(signal). I want to cut out that contribution. I wrote this simple script:
Fcp=3; %cutoff frequency
[z,p,k]=butter(8,Fcp/(Fsp/2),'high');
sos=zp2sos(z,p,k);
%fvtool(sos,'Analysis','freq')
x101filtfilt=filtfilt(z,p,x101);
figure;
plot(t101,x101,t101,x101filtfilt);
grid on
title('PE101 (pressure signal)')
xlabel('t (s)')
ylabel('Pressure (kPa)')
legend({'Original PE101 Signal','Actual PE101 Signal (filtered and realigned signal)'});
The sampling frequency is 600 Hz and the signal x101 is about 180 s long. I receive the error: "Warning: Imaginary parts of complex X and/or Y arguments ignored". As a matter of fact the new signal x101filtfilt contains imaginary numbers. Where am I wrong? Thank you very much.
  1 commentaire
Jan
Jan le 15 Fév 2017
And does x101, z or p contain complex values? Which command produces this error?

Connectez-vous pour commenter.

Réponse acceptée

Star Strider
Star Strider le 15 Fév 2017
You have two errors that I can see.
1. You need both outputs from zp2sos:
[sos,g] = zp2sos(z,p,k);
2. Then use those in your filtfilt call:
x101filtfilt = filtfilt(sos,g,x101);
That should solve your imaginary number problem (unless ‘x101’ is complex).
I also analysed your filter with freqz:
freqz(sos, 2^16, Fsp)
It appears stable and that it will do what you want it to do.
  2 commentaires
Guglielmo Giambartolomei
Guglielmo Giambartolomei le 16 Fév 2017
Star Strider, you're a fallen angel; it works now! Your syntax is different from the one recommended in matlab guide. Thank you very much!
Star Strider
Star Strider le 16 Fév 2017
As always, my pleasure!

Connectez-vous pour commenter.

Plus de réponses (0)

Community Treasure Hunt

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

Start Hunting!

Translated by