Hello everyone, I wrote a simple code to analyze an accelerometric signal in the frequency domain and I saw that the magnitudes over the 300 Hz are quite negligible. I used a Chebyshev type 1 lowpass filter and it works:
%%Design a Lowpass IIR Filter
N=7;
Fp=300;
Ap=1;
h=fdesign.lowpass('N,Fp,Ap', N, Fp, Ap, Fs);
d=design(h, 'cheby1');
%%Apply the filter to to Smooth out the Signal
xfilter = filter(d,x2);
%%Overlay the filtered signal on the original signal.
% Filtered signal is delayed
figure;
plot(t2,x2,'b',t2,xfilter,'r');
grid on;
legend({'Original Signal','Filtered Signal'});
%set(gcf,'NumberTitle','Off', 'Name','Filtered Signal vs. Actual Signal');
%%Compare the original signal and delay compensated filtered signal
figure;
xfiltfilt = filtfilt(d.sosMatrix,d.ScaleValues,x2);
plot(t2,x2,t2,xfiltfilt);
grid on
legend({'Original Signal','Actual (filtered and delayed signal)'});
Now, I'd like to use a Butterworth lowpass filter: how can I modify my script? Thank you very much!

 채택된 답변

Star Strider
Star Strider 2016년 10월 11일

0 개 추천

I would just substiture 'butter' here:
d=design(h, 'butter');
I would also add 'Ast' to the fdesign.lowpass parameters for a Butterworth design.
Also, use filtfilt for phase-neutral filtering, not filter, so your*|‘xfilter’|* assignment becomes:
xfilter = filtfilt(d,x2);
This applies to all filter designs, so try it with your Chebyshev Type I filter as well. The results will be different, perhaps noticeably so.

댓글 수: 4

Thank you Star Strider! I wrote this simple code for a Butterworth filter (I didn't use the design toolbox):
% Butterworth filter
Fc = 300;
Fs = 2400;
[b,a] = butter(10,Fc/(Fs/2));
figure;
freqz(b,a)
dataIn = x2;
%%Apply the filter to to Smooth out the Signal
xfilter = filter(b,a,dataIn);
%%Overlay the filtered signal on the original signal.
% Filtered signal is delayed
figure;
plot(t2,x2,'b',t2,xfilter,'r');
grid on;
legend({'Original Signal','Filtered Signal'});
%%Compare the original signal and delay compensated filtered signal
figure;
xfiltfilt = filtfilt(b,a,x2);
plot(t2,x2,t2,xfiltfilt);
grid on
legend({'Original Signal','Actual (filtered and delayed signal)'});
What do you think about it? Thanks!
Star Strider
Star Strider 2016년 10월 12일
I would use buttord to calculate the optimal filter order, and convert it to second-order-section form for stability. My filter design procedure for IIR filters is here: How to design a lowpass filter for ocean wave data in Matlab?
Thank you for sharing Star Strider.
Star Strider
Star Strider 2016년 10월 12일
My pleasure.
If my Answer helped you. please Accept it.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Community Treasure Hunt

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

Start Hunting!

Translated by