Butterworth lowpass filter design code
조회 수: 4 (최근 30일)
이전 댓글 표시
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!
댓글 수: 0
채택된 답변
Star Strider
2016년 10월 11일
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
추가 답변 (0개)
참고 항목
카테고리
Help Center 및 File Exchange에서 Digital Filter Analysis에 대해 자세히 알아보기
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!