数字滤波器设计与分析.docx
《数字滤波器设计与分析.docx》由会员分享,可在线阅读,更多相关《数字滤波器设计与分析.docx(11页珍藏版)》请在冰豆网上搜索。

数字滤波器设计与分析
吉林大学
仪器科学与电气工程学院
本科生实习报告
实习题目:
信号分析和处理
实习时间:
2012.09
专业:
电气工程及其自动化
所在班级:
65100615
学生姓名:
王双伟
指导教师:
朱凯光田宝凤林婷婷
信号实习报告
一.实验目的
加深对信号系统与信号处理理论的理解,学会信号处理的基本知识和方法,并在基本技能方面得到系统训练;熟悉MATLAB编程环境,掌握MATLAB编程基本技能,以及程序调试仿真方法,能够采用MATLAB语言和工具进行信号处理;掌握现代信号分析与处理技术,包括信号频谱分析和数字滤波器(FIR、IIR)设计,学会信号处理系统设计与系统功能检测的基本方法;将理论知识与实际应用结合,提高学生解决实际问题的动手能力,为信号系统与信号处理知识的应用、后续专业学习以及今后从事相关科学研究和实际工作打下坚实基础。
二.实验工具
计算机,matlab软件
三.实验内容
设计FIR数字带通滤波器,对于给定函数s=sin(2πx100t)+sin(2πx200t)+sin(2πx400t),设计带通滤波器滤除100和400赫兹的频率,并画出滤波前后的时频图及滤波器的增益图。
f1=100;f2=200;f3=400;
fs=2000;
m=(0.3*f1)/(fs/2);
M=round(8/m);
N=M-1;
fc=[0.15,0.3];
b=fir1(N,fc);
figure
(1)
[h,f]=freqz(b,1,1000);
plot(f*fs/(2*pi),20*log10(abs(h)))
xlabel('频率/赫兹');
ylabel('增益/分贝');
title('滤波器的增益响应');
figure
(2)
subplot(211)
t=0:
1/fs:
0.5;
s=sin(2*pi*f1*t)+sin(2*pi*f2*t)+sin(2*pi*f3*t);
plot(t,s);
xlabel('时间/秒');
ylabel('幅度');
title('信号滤波前时域图');
subplot(212)
Fs=fft(s,1000);
AFs=abs(Fs);
f=(0:
499)*fs/1000;
plot(f,AFs(1:
500)/1000);
xlabel('频率/赫兹');
ylabel('幅度');
title('信号滤波前频域图');
figure(3)
sf=filter(b,1,s);
subplot(211)
plot(t,sf)
xlabel('时间/秒');
ylabel('幅度');
title('信号滤波后时域图');
axis([0.20.5-22]);
subplot(212)
Fsf=fft(sf,1000);
AFsf=abs(Fsf);
f=(0:
499)*fs/1000;
plot(f,AFsf(1:
500)/1000)
xlabel('频率/赫兹');
ylabel('幅度');
title('信号滤波后频域图');
拓展内容
1.不同窗函数对信号截取的影响
比较矩形窗,三角窗,汉宁窗,哈明窗等对信号截取的影响。
f1=10;f2=20;f3=30;Tp=0.01;fs=1/Tp;N=200;
n=0:
N-1;t=n*Tp;
x=cos(2*pi*f1*t)+sin(2*pi*f2*t)+cos(2*pi*f3*t);
w1=boxcar(N);
w2=hamming(N);
w3=hanning(N);
w4=blackman(N);
w5=bartlett(N);
x1=x.*(w1.');
x2=x.*(w2.');
x3=x.*(w3.');
x4=x.*(w4.');
x5=x.*(w5.');
y1=fft(x1,N);
y2=fft(x2,N);
y3=fft(x3,N);
y4=fft(x4,N);
y5=fft(x5,N);
mag1=abs(y1);
mag2=abs(y2);
mag3=abs(y3);
mag4=abs(y4);
mag5=abs(y5);
f1=(0:
length(y1)-1)'*fs/length(y1);
f2=(0:
length(y2)-1)'*fs/length(y2);
f3=(0:
length(y3)-1)'*fs/length(y3);
f4=(0:
length(y4)-1)'*fs/length(y4);
f5=(0:
length(y5)-1)'*fs/length(y5);
figure
(1);
plot(f1,mag1/N);
holdon;
plot(f2,mag2/N,'r');
holdon;
plot(f3,mag3/N,'m');
holdon;
plot(f4,mag4/N,'g');
holdon;
plot(f5,mag5/N,'y');
这5种窗若从频率来考虑,汉宁哈明窗比较好,若从幅度来考虑矩形窗最好。
2.IIR数字滤波器设计:
掌握IIR数字滤波器的设计原理与方法;人体心电信号的主要频率范围为0.05~100Hz,分析含噪心电信号频谱,设计IIR数字滤波器,滤除心电信号中的高频及基线漂移。
clear
clc
closeall;
t1=0.001;
t=0:
t1:
0.5-t1;
x=ecg(100);
X=[xxxxx];
y=X+sin(2*50*pi*t);
figure
(1);
plot(t,y,t,X,'g');
title('心电+工频干扰前后函数图')
holdon
fs=1000;
N=length(t);
y1=fft(y)/N;
f=(0:
N-1)*fs/N;
figure
(2);
stem(f,abs(y1));
holdon
title('心电+工频干扰前后幅度谱')
n=620;
b=fir1(n,0.08,'low',hanning(n+1));
y2=filter(b,1,y);
figure
(1)
plot(t,y2,'r')
y3=fft(y2)/N;
figure
(2);
stem(f,abs(y3),'r');
figure(3);
[H,F]=freqz(b,1,512,fs);
plot(F,abs(H));
gridon;
title('滤波图')
通过拓展2对IIR有了更深的了解,IIR与FIR相比有了更低的阶数,IIR采用了递归的结构。
IIR借助成熟模拟滤波器,计算工作量小。
体会与心得
本次信号实习使我们巩固有关数字信号处理相关内容的基础上,提高了我们的实践能力。
经过这次对MATLAB的学习和对MATLAB在数字信号系统和其他方面的实训,我充分的了解了MATLAB的实用性和便捷性,对我以后在其他方面的学习大有好处。
我觉得学习MATLAB首先要把基础掌握,然后是绘图,各种画图函数,函数图形的加工,最后是编程,这是最重要的,能解决很多问题,也是后面学习的基础。
这些方面掌握后,就可以做实践锻炼了,有很多技巧在实践中可以不断地积累。
这次实习对我的帮助很多,同时加深了对课堂上学习的知识的理解。
通过这次实习使我充分理解到数字信号处理的重要性和实用性,特别是加深了对MATLAB及其操作各方面的了解和设计,对实际操作设计中所涉及的各个方面要注意问题都有所了解。
通过这次对FIR数字滤波器的设计,不仅让我将所学的知识应用到实际中,而且对知识也是一种巩固和提升充实。
在老师和同学的帮助下,及时的按要求完成了设计任务,通过这次课程设计,使我获得了很多重要的知识,同时也提高了自己的实际动手和知识的灵活运用能力。
通过这8天的学习,学到了不少的知识!
不仅纠正了课程学习过程中出现的许多错误,还在运行MATLAB时验证了自己的一些猜想。
在学习的过程中有失败,当然也有困惑,有成功,当然就有喜悦。
虽然只是课程设计,但我拿出了自己的全部精力去对待,能学到知识固然值得骄傲,能认识到自己的过错和不足不也是一件幸事吗!
做学问也是做人,在做学问的过程中体味做人的道理不也是一种收获吗?
记得古语中说:
“学,然后知不足”!
希我必将更加努力的学习它完善自己。
我想这就是我这次做课程设计最大感受吧。