收藏 分销(赏)

matlab之经典数字滤波函数介绍.doc

上传人:仙人****88 文档编号:9460099 上传时间:2025-03-27 格式:DOC 页数:9 大小:394.50KB
下载 相关 举报
matlab之经典数字滤波函数介绍.doc_第1页
第1页 / 共9页
matlab之经典数字滤波函数介绍.doc_第2页
第2页 / 共9页
点击查看更多>>
资源描述
matlab之经典数字滤波函数介绍 南京理工大学仪器科学与技术专业 谭彩铭 2010-3-12 1 butter函数 设计一个9阶高通Butterworth数字滤波器,截止频率为300Hz Fs=1000; [b,a]=butter(9,300/(Fs/2),'high') freqz(b,a,128,Fs) 图1 图2 下面看一看freqz函数 例如对离散系统传递函数 freqz函数的的主要计算环节是计算 编写下图所示程序验证之 Fs=1000; [b,a]=butter(2,300/(Fs/2),'high') [h,f]=freqz(b,a,128,Fs); h1=(b(1)+b(2)*exp(-j*2*pi*f/Fs)+b(3)*exp(-2*j*2*pi*f/Fs))./(a(1)+a(2)*exp(-j*2*pi*f/Fs)+a(3)*exp(-2*j*2*pi*f/Fs)); plot(abs(h1-h)) title('abs(h1-h)') 图3 图4 可见h1和h相等 图2中出现小于-360度是否表达其他不同的意义?-361度和-1度有什么区别吗?对于正弦波应该是一样的,故理论上说应该没有区别。 butter函数的原理是什么? 顾名思义,butter函数的原理是基于Butterworth滤波器。 这里始终要带着这个问题去研究,滤波系数本身有什么特性竟然可使低频的滤掉,高频的通过,其实这里想要寻找的是敏捷控程,理论上这个问题的答案已经很成熟。 2 impinvar函数 用冲击响应不变法数字仿真模拟Butterworth滤波器,程序如下。 Fs=4000; [b,a]=butter(2,2*pi*1e3,'s') %design analog Butterworth lowpass filter [bz,az]=impinvar(b,a,Fs) 图5 3 bilinear函数 用双线性变换法数字仿真模拟Butterworth滤波器,程序如下。 Fs=4000; [b,a]=butter(2,2*pi*1e3,'s')%design analog Butterworth lowpass filter [bz,az]=bilinear(b,a,Fs) 图6 4 fir1函数 由理想滤波器幅频特性反推滤波系数,得出来的系数数量是无穷多的。故可采用加窗的方法舍去部分,留下有限的滤波系数数量,使仍能基本达到需要的滤波效果。 Window=boxcar(8); b=fir1(7,0.4,Window) freqz(b,1) 图7 图8 5 fir2函数 fir2函数的基本原理同fir1函数,它的功能更进一层,可以设计任意形状的频率响应图形。 f = 0:0.1:1; m = [0 0 1 1 0 0 1 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') 图9 图10、 图9中,w如果是角频率值,将w转换成频率值时,应该是将w除以2*pi,但是程序中为什么除以的是pi呢? 准确地说,图9中的w并非是角频率值,而是频率值,freqz函数调用时若没有加入采样率参数,其返回的频率值的范围是0~pi。 6 fir1函数补充 对调用方式b=fir(n,wn),wn的取值范围是(0,1),其中1对应于0.5fs(fs为采样率)。 fs=100; fc=[0.35 0.45]; b=fir1(40,fc); figure(1); freqz(b,1,128,fs) 图11 图12 对图11中程序,1对应0.5fs,那么0.45对应0.45*0.5*fs=22.5Hz,0.35对应0.35*0.5*fs=17.5Hz,和图12吻合。但是实际应用时,我们知道采样率,知道需要的通带,我们需要的是直接的答案。假设采样率为100Hz,现在要设计的带通滤波器的带宽是[20Hz,25Hz],对应图11中的fc我们该怎么取值,显然应该是fc=[20 25]/(0.5*fs)。如下图程序所示。 fs=100; fc=[20 25]/(0.5*fs); b=fir1(40,fc); figure(1); freqz(b,1,128,fs) 图13 图14 下列程序是较为综合的一个程序 clear; %signal generater fs=100; Ts=1/fs; sampletime=3; t=0:Ts:sampletime; f=5; x=sin(2*pi*f*t); %filter generater fc=4; %cutoff frequency in now sample rate b=fir1(40,fc/(0.5*fs)); figure(1); freqz(b,1,128,fs) %filter course y=filter(b,1,x); %print effect figure(2); plot(t,x); hold on; plot(t,y,'r'); hold off; 图15 图16 图17 由图17中,可得到信号频率为5Hz时的衰减系数约为0.25,,和图16基本吻合。 7 filter函数 Filter data with an infinite impulse response (IIR) or finite impulse response (FIR) filter 对y = filter(b,a,x),y(n) = b(1)*x(n) + b(2)*x(n-1) + ... + b(nb+1)*x(n-nb) - a(2)*y(n-1) - ... - a(na+1)*y(n-na) 8 filtfilt函数 Zero-phase digital filtering filtfilt函数的计算方式同filter函数一样,不同之处在于做了零相位处理。下图所示程序就可以清楚地看到这点区别。 clear; t=0:0.001:0.1; x1=sin(2*pi*40*t); x2=0.5*rand(size(t)); x=x1+x2; A=[1 -1.143 0.4128]; B=[0.06745 0.1348 0.06745]; y=filter(B,A,x); z=filtfilt(B,A,x); plot(t,x,t,y,t,z); legend('x','filter(x)','filtfilt(x)') 下面研究下,它的零相位处理是如何做到的? 直观的思维是先执行filter函数,在做平移即可。那么matalb中filtfilt函数是如何实现的呢? 此滤波是对信号x做前向和反向处理。 9 fftfilt函数 此函数基于FFT和重叠相加法的FIR滤波。 9
展开阅读全文

开通  VIP会员、SVIP会员  优惠大
下载10份以上建议开通VIP会员
下载20份以上建议开通SVIP会员


开通VIP      成为共赢上传
相似文档                                   自信AI助手自信AI助手

当前位置:首页 > 教育专区 > 小学其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        抽奖活动

©2010-2025 宁波自信网络信息技术有限公司  版权所有

客服电话:4009-655-100  投诉/维权电话:18658249818

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :微信公众号    抖音    微博    LOFTER 

客服