Butterworth lowpass filter design code
5 次查看(过去 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!