【Matlab】如何使用Filter Design设计低通、高通、带阻滤波器

如何使用Filter Design设计低通、高通、带阻数字滤波器。

文章目录

前言

一、低通滤波器

二、高通滤波器

三、带阻滤波器



前言

使用Matlab自带的Filter Design APP可以方便、快捷地设计各种FIR/IIR数字滤波器,并且能输出数字滤波器的阶数、幅度响应、相位响应等。


使用一个由10Hz,20Hz,30Hz的正弦波信号叠加的信号作为样本。

一、低通滤波器

       打开Filter Design,想要设计一个低通滤波器,滤出低于20Hz频率的信号,如下设计参数后,点击【Desigin Filter】后可以查看到设计的滤波器的幅度响应。点击【File】-【Save Session As】保存设计好的Fda格式的文件,里面存储滤波器的参数。

clc
clear all
fs = 100;
N = 1000;
n = 0:N-1;
t = n/fs;
f = n*fs/N;

Y = sin(2*pi*10*t) + 3*sin(2*pi*20*t) + 5*sin(2*pi*30*t);
importfile('...\LowPass20.fda');%此处需要修改fda文件路径
Numerator = s.current_filt.Numerator;
Y_filter = filter(Numerator,1,Y);

mag_Y = abs(fft(Y));
mag_Y_filter = abs(fft(Y_filter));
figure
subplot(221)
plot(t,Y)
subplot(222)
plot(f,mag_Y)
subplot(223)
plot(t,Y_filter)
subplot(224)
plot(f,mag_Y_filter)

 左侧是滤波前后的信号在时域上的显示,右侧是频谱图。可以看出,20和30Hz的信号成分被滤除了。

 

二、高通滤波器

同上文所说低通滤波器,需要根据实际需要设计滤波器参数。

三、带阻滤波器

需要注意的是,带阻滤波器与低通、高通滤波器的设计后的数据结构不一样,代码中需要修改。需要把原来的filter函数更改成sosfilt。

并且,滤波器的Fpass1和Fstop1以及Fpass2和Fstop2之间需要留足够的过渡带,否则设计出的滤波器阶数会很高,增加过多的计算成本,需要结合实际需要合理选择。

clc
clear all
fs = 100;
N = 1000;
n = 0:N-1;
t = n/fs;
f = n*fs/N;

Y = sin(2*pi*10*t) + 3*sin(2*pi*20*t) + 5*sin(2*pi*30*t);
importfile('...\BandStop20Hz.fda');
sos = s.current_filt.sosMatrix;
Y_filter = sosfilt(sos,Y);

mag_Y = abs(fft(Y));
mag_Y_filter = abs(fft(Y_filter));
figure
subplot(221)
plot(t,Y)
subplot(222)
plot(f,mag_Y)
subplot(223)
plot(t,Y_filter)
subplot(224)
plot(f,mag_Y_filter)


猜你喜欢

转载自blog.csdn.net/LusionLv/article/details/128938308