为了正常的体验网站,请在浏览器设置里面开启Javascript功能!

学习和掌握用MATLAB程序实现低通、高通、带通和带阻滤波器算法

2019-04-10 13页 doc 31KB 27阅读

用户头像

is_496339

暂无简介

举报
学习和掌握用MATLAB程序实现低通、高通、带通和带阻滤波器算法《数字信号处理》实验报告 实验六  四种数字滤波器设计 班级:计科121              学号:1208060135 姓名: 刘国强                成绩: 日期:2014年11月17日    地点:博学楼 706 一、实验目的 1. 学习和掌握用MATLAB程序实现低通、高通、带通和带阻滤波器算法 2. 用MATLAB实现上述四种滤波器。 二、实验内容 1.用MATLAB程序实现低通、高通、带通和带阻滤波器算法 2.具体实现方法自己确定,但必须有对应的数学公式、 3. 关键参数δp、δs、ωp、 ω...
学习和掌握用MATLAB程序实现低通、高通、带通和带阻滤波器算法
《数字信号处理》实验报告 实验六  四种数字滤波器设计 班级:计科121              学号:1208060135 姓名: 刘国强                成绩: 日期:2014年11月17日    地点:博学楼 706 一、实验目的 1. 学习和掌握用MATLAB程序实现低通、高通、带通和带阻滤波器算法 2. 用MATLAB实现上述四种滤波器。 二、实验内容 1.用MATLAB程序实现低通、高通、带通和带阻滤波器算法 2.具体实现方法自己确定,但必须有对应的数学公式、 3. 关键参数δp、δs、ωp、 ωs、ωc和N的设定。 4. 探讨N值大小对滤波图曲线影响,并作出该滤波器幅频和相频特性曲线图。 三、实验结果 基于切比雪夫一致逼近法设计FIR数字低通滤波器 clear all;               f=[0 0.6 0.7 1];                     %给定频率轴分点 A=[1 1 0 0];                     %给定在这些频率分点上理想的幅频响应 weigh=[1 10];                  %给定在这些频率分点上的加权 b=remez(32,f,A,weigh);            %设计出切比雪夫最佳一致逼近滤波器 [h,w]=freqz(b,1,256,1); h=abs(h); h=20*log10(h); subplot(211) stem(b,'.'); grid; title(‘切比雪夫逼近滤波器的抽样值’) subplot(212) plot(w,h); grid; title('滤波器幅频特性(dB)') 基于汉宁窗的FIR数字高通滤波器设计 function s2 Fs=15000; t=(0:100)/Fs; x=sin(2*pi*500*t)+sin(2*pi*3000*t) subplot(245); stem(x); title('原始信号'); axis([0,100,-2,2]); Ws=7*pi/30; Wp=13*pi/30; tr_wid=Wp-Ws;     %过渡带宽度 N=ceil(11*pi/tr_wid)  %滤波器长度 n=0:1:N-1; Wc=(Ws+Wp)/2;     %理想高通滤波器的截止频率 hd=ideal_hp1(Wc,N);  %理想高通滤波器的单位冲激响应 w_bla=(blackman(N))'; %布拉克曼 h=hd.*w_bla;                            %截取得到实际的单位脉冲响应 [db,mag,pha,grd,w]=freqz_m(h,[1]); %计算实际滤波器的幅度响应 delta_w=2*pi/1000; As=-round(max(db(1:1:Ws/delta_w+1))) %实际阻带纹波,round是取整函数 y=filter(h,1,x) subplot(246) plot(y) title('滤波后的信号'); axis([0,100,-1,1]) subplot(241) stem(n,hd) title('理想单位脉冲响应hd(n)') subplot(242) stem(n,w_bla) title('布拉克满窗w(n)') subplot(243) stem(n,h) title('实际单位脉冲响应hd(n)') subplot(244) plot(w/pi,db) title('幅度响应(dB)') axis([0,1,-100,10]) function [db,mag,pha,grd,w] = freqz_m(b,a); [H,w] = freqz(b,a,1000,'whole'); H = (H(1:1:501))'; w = (w(1:1:501))'; mag = abs(H); db = 20*log10((mag+eps)/max(mag)); pha = angle(H); grd = grpdelay(b,a,w); subplot(247); plot(pha) title('相频响应') function hd=ideal_hp1(Wc,N) alp=(N-1)/2; n=0:1:N-1; m=n-alp+eps;    %eps是一个很小很小的数 hd=[sin(pi*m)-sin(Wc*m)]./(pi*m); 基于频域抽样法的FIR数字带通滤波器设计 wsl=0.12*pi;          %低阻带边缘 wsh=0.82*pi;          %高阻带边缘 wpl=0.32*pi;          %低通带边缘 wph=0.62*pi;          %低通带边缘 delta=(wpl-wsl);        %过渡带 M=ceil(2*pi*3/delta);    %抽样点数 al=(M-1)/2; wl=(2*pi/M);          %抽样间隔 k=0:M-1; T1=0.12; T2=0.6;        %过渡带样本点 Hrs=[zeros(1,ceil(0.12*pi/wl)+1),T2,T1,ones(1,ceil(0.3*pi/wl)),T1,T2,zeros(1,ceil(0.3734*pi/wl)),T2,T1,ones(1,ceil(0.3*pi/wl)),T1,T2,zeros(1,ceil(0.12*pi/wl)+1)]; wdl=[0 0.12 0.32 0.62 0.82 1]; k1=0:floor((M-1)/2);k2=floor((M-1)/2)+1:M-1; angH=[-al*(2*pi)/M*k1,al*(2*pi)/M*(M-k2)]; H=Hrs.*exp(j*angH); h=real(ifft(H));            %傅里叶反变换      figure(1);                %冲击响应图 stem(k,h); title(‘impulse  response’); xlabel('n');ylabel('h(n)'); grid; figure(2);                %幅频曲线图frequency in pi units Hf=abs(H);w=k*wl/pi; plot(w,Hf,'*b-') axis([0 1 -0.1 1.1]); title(‘impulse  response’); xlabel(‘frequency in pi units’); ylabel('Hr(w)'); set(gca,'xtickmode','manual','xtick',wdl); set(gca,'ytickmode','manual','ytick',[0 0.12 0.6 1]); grid; figure(3); fs=15000; [c,f3]=freqz(h,1); f3=f3/pi*fs/2; plot(f3,20*log10(abs(c))); title(‘频谱特性’); xlabel('频率/HZ'); ylabel('衰减/dB'); grid; t=(0:100)/fs; x=sin(2*pi*t*700)+sin(2*pi*t*3200)+sin(2*pi*t*6200); q=filter(h,1,x); [a,f1]=freqz(x); f1=f1/pi*fs/2; [b,f2]=freqz(q); f2=f2/pi*fs/2; figure(4); subplot(2,1,1); plot(f1,abs(a)); title('输入波形频谱图'); xlabel('频率');ylabel('幅度') subplot(2,1,2); plot(f2,abs(b)); title('输出波形频谱图'); xlabel('频率');ylabel('幅度') 用matlab设计一个带阻滤波器,信号有5Hz,40Hz,50Hz,要求把40Hz的滤除,程序是这样的,滤波器和产生的信 w1=38/100; w2=42/100; [B,A]=butter(1,[w1,w2],'stop'); [h,w]=freqz(B,A); f=w/pi*100; figure(1), plot(f,20*log10(abs(h))); axis([0,80,-30,10]); grid; xlabel('频率/Hz') ylabel('幅度/dB') title('频率响应曲线') fs=200; t=0:1/fs:1; x1=sin(2*pi*5*t)+sin(2*pi*50*t)+sin(2*pi*40*t); Y1=fft(x1,128); Y2=abs(Y1); f=(0:64)*100/64; figure(2), subplot(2,1,1),plot(f,Y2(1:65)),title('原始信号'); y=filter(B,A,Y2); subplot(2,1,2),plot(y),title('滤波后信号'); 四、实验感想和建议 通过本次的实验,学会了用MATLAB程序实现低通、高通、带通和带阻滤波器算法,并且实现了关键参数δp、δs、ωp、 ωs、ωc和N的设定。 但是未探讨N值大小对滤波图曲线影响,也未作出该滤波器幅频和相频特性曲线图。 继续阅读
/
本文档为【学习和掌握用MATLAB程序实现低通、高通、带通和带阻滤波器算法】,请使用软件OFFICE或WPS软件打开。作品中的文字与图均可以修改和编辑, 图片更改请在作品中右键图片并更换,文字修改请直接点击文字进行修改,也可以新增和删除文档中的内容。
[版权声明] 本站所有资料为用户分享产生,若发现您的权利被侵害,请联系客服邮件isharekefu@iask.cn,我们尽快处理。 本作品所展示的图片、画像、字体、音乐的版权可能需版权方额外授权,请谨慎使用。 网站提供的党政主题相关内容(国旗、国徽、党徽..)目的在于配合国家政策宣传,仅限个人学习分享使用,禁止用于任何广告和商用目的。

历史搜索

    清空历史搜索