完善资料让更多小伙伴认识你,还能领取20积分哦, 立即完善>
MATLAB如何来设计滤波器,今天我们先来设计一些FIR滤波器。
首先,我们打开MATLAB的help窗口,点击Help-》product Help 1.jpg (72.14 KB, 下载次数: 14) 2017-4-1 10:56 上传这里有很多的工具箱,我们找到我们需要的Signal Processing Toolbox。这里包括了很多关于信号处理的东西,有基础的传输函数定义,已经各种滤波器设计的例子,当然还有很多很多设计滤波器使用函数的介绍,这些都有详细的介绍。 首先还是介绍一下FIR滤波器,FIR滤波器中文意思就是有限冲击响应滤波器,是由差分方程描述的一类特殊离散时间系统。 2.png (18.28 KB, 下载次数: 19) 2017-4-1 10:56 上传 功能就是把一段离散的输入序列经过这个系统变成另一端离散的输出序列。不同的运算方法就代表了不同的系统。 MATLAB的help文档中,数字滤波器传递函数是这样描述的: 3.png (46.82 KB, 下载次数: 19) 2017-4-1 10:56 上传 如果a(1)=1;a(2)=a(3)=。。.=a(m+1)=0;那么这传递函数就变成了FIR滤波器传递函数,n就代表了阶数。所以,我们设计一个滤波器就只需要知道b(1),b(2),,,,,,,,,b(n+1)就可以了。 在针对FIR滤波器的设计中,MATLAB提供了如下的一些函数: 4.png (63.27 KB, 下载次数: 20) 2017-4-1 10:56 上传 而且这些函数都给出了详细的介绍,只是全是英文的,大家也可以仔细看看。 这里主要说一下这个fir1和fir2的使用 fir1: 共有如下几种函数形式: b = fir1(n,Wn) b = fir1(n,Wn,‘ftype’) b = fir1(n,Wn,window) b = fir1(n,Wn,‘ftype’,window) b = fir1(。。.,‘normalization’) 具体内容可以看fir1下的函数介绍 譬如运行下面语句 b = fir1(20,0.2) 会返回20阶,截止频率为0.2的FIR滤波器系数 5.png (16.56 KB, 下载次数: 14) 2017-4-1 10:57 上传 接下来,在运行下面语句就可以看到幅度频特性和相频特性,还有就是要注意一点。比如这个w=0.2所对应的模拟域数字频率应该是0.1*Fs,因为从图中可以看出0.2是相对于数字域频率pi的。 freqz(b,1) 6.jpg (84.01 KB, 下载次数: 20) 2017-4-1 10:57 上传 如要设计一个50阶,截止频率是0.25*pi的FIR高通数字滤波器可以这样写: b = fir1(50,0.25,‘high’); freqz(b,1); 运行结果如下 6.png (32.34 KB, 下载次数: 10) 2017-4-1 10:57 上传 把字符high改为low就是设计低通滤波器了 b = fir1(50,0.25,‘low’); freqz(b,1); 运行结果如下: 7.png (31.17 KB, 下载次数: 22) 2017-4-1 10:57 上传 也可以设计带通滤波器; b=fir1(40,[0.25,0.45]) freqz(b,1); 运行如下 8.png (32.43 KB, 下载次数: 21) 2017-4-1 10:57 上传 设计带阻滤波器 b=fir1(40,[0.25,0.45],‘stop’); freqz(b,1); 运行如下 9.png (32.06 KB, 下载次数: 18) 2017-4-1 10:57 上传 fir2: 可以实现任意频率响应的各种加窗FIR滤波器 共有如下函数形式: b = fir2(n,f,m) b = fir2(n,f,m,window) b = fir2(n,f,m,npt) b = fir2(n,f,m,npt,window) b = fir2(n,f,m,npt,lap) b = fir2(n,f,m,npt,lap,window) 具体参数描述见help文档,还是通过举例子来说明使用方法: Help文档里的例子: f = [0 0.6 0.6 1]; m = [1 1 0 0]; b = fir2(30,f,m); [h,w] = freqz(b,1,128); plot(f,m,w/pi,abs(h)); legend(‘Ideal’,‘fir2 Designed’) title(‘Comparison of Frequency Response Magnitudes’) 运行结果如下: 10.png (31.48 KB, 下载次数: 20) 2017-4-1 10:57 上传 可以看到Ideal是我们理想的低通滤波器曲线 fir2 Designe是我们用fir2函数设计出来的。 11.png (24.18 KB, 下载次数: 19) 2017-4-1 10:57 上传 现在我想我们应该会设计FIR滤波器了。 下面就举个例子看看滤波器的效果吧。 Fs=1000;%采样率=1k N=1024; n=0:N-1; f=n*Fs/N; t=0:1/Fs:1-1/Fs;%采样1s Signal=sin(2*pi*50*t); noise1=0.5*sin(2*pi*200*t); noise2=0.25*sin(2*pi*300*t); mix_signal=Signal+noise1+noise2; subplot(2,2,1); plot(t,mix_signal); xlabel(‘时间/t’); ylabel(‘振幅/v’); title(‘输入加噪信号’); grid on; subplot(2,2,2); Y=fft(mix_signal,N); plot(f,abs(Y)); xlabel(‘频率/Hz’); ylabel(‘幅度’); title(‘输入加噪信号频谱’); b=fir1(40,0.25); [H,F]=freqz(b,1,512); subplot(2,2,4); plot(F/pi,abs(H)); xlabel(‘*0.5Fs/Hz’); ylabel(‘幅度’); title(‘FIR滤波器幅频响应’); y2=filtfilt(b,1,mix_signal);%0.25*1000/2=125Hz y3=fft(y2,N); subplot(2,2,3); plot(f,abs(y3)); xlabel(‘频率/Hz’); ylabel(‘幅度’); title(‘滤除噪声后信号频谱’); 运行结果如下: 12.png (54.01 KB, 下载次数: 15) 2017-4-1 10:57 上传可以看到滤波器确实把200Hz和300Hz的噪声滤除了! |
|
|
|
只有小组成员才能发言,加入小组>>
调试STM32H750的FMC总线读写PSRAM遇到的问题求解?
1874 浏览 1 评论
X-NUCLEO-IHM08M1板文档中输出电流为15Arms,15Arms是怎么得出来的呢?
1658 浏览 1 评论
1143 浏览 2 评论
STM32F030F4 HSI时钟温度测试过不去是怎么回事?
759 浏览 2 评论
ST25R3916能否对ISO15693的标签芯片进行分区域写密码?
1720 浏览 2 评论
1963浏览 9评论
STM32仿真器是选择ST-LINK还是选择J-LINK?各有什么优势啊?
788浏览 4评论
STM32F0_TIM2输出pwm2后OLED变暗或者系统重启是怎么回事?
610浏览 3评论
628浏览 3评论
stm32cubemx生成mdk-arm v4项目文件无法打开是什么原因导致的?
590浏览 3评论
小黑屋| 手机版| Archiver| 电子发烧友 ( 湘ICP备2023018690号 )
GMT+8, 2025-1-11 09:38 , Processed in 0.601487 second(s), Total 75, Slave 59 queries .
Powered by 电子发烧友网
© 2015 bbs.elecfans.com
关注我们的微信
下载发烧友APP
电子发烧友观察
版权所有 © 湖南华秋数字科技有限公司
电子发烧友 (电路图) 湘公网安备 43011202000918 号 电信与信息服务业务经营许可证:合字B2-20210191 工商网监 湘ICP备2023018690号