FIR滤波器的设计报告.docx
《FIR滤波器的设计报告.docx》由会员分享,可在线阅读,更多相关《FIR滤波器的设计报告.docx(15页珍藏版)》请在冰豆网上搜索。
FIR滤波器的设计报告
《数字信号处理课程设计》
课程设计报告
专业:
电子信息工程
班级:
xxxx
学号:
xxxxx
姓名:
xx
指导教师:
xxxxxxxx
2011年6月28日
1、课程设计目的
通过对课程设计任务的完成,使学生进一步巩固数字信号处理的基本概念、理论、分析方法和实现方法;使学生掌握的基本理论和分析方法方面的知识得到进一步扩展;使学生能有效地将理论和实际紧密结合;增强学生软件编程实现能力和解决实际问题的能力。
要求学生能够熟练地用Matlab语言编程实现IIR数字滤波器和FIR数字滤波器,进一步明确数字信号处理的工程应用。
2、课程设计题目描述和要求
2.1题目描述
FIR数字滤波器:
FIR数字滤波器的冲激响应
的Z变换为:
其中滤波器最重要的两个特性为线性相位特性和幅度特性。
本次课程设计要求录制一段自己的语音信号后,格式为WAV。
在MATLAB软件中采集语音信号、回放语音信号。
画出语音信号的时域波形和频谱图,对所采集的信号加入干扰噪声,对加入噪声进行播放,并进行时域和频谱分析;对比早前后的时域图和频谱图即对比加噪声音信号和通过低通滤波器处理的音频信号不同的时域和频域波形。
2.2设计要求
理解课题教学的理论内容→掌握和熟悉matlab软件的编程方法和仿真过程→编写课程设计所需的程序→对程序进行仿真测试,并进行分析→写出课程设计报告
3、课程设计报告内容
3.1总体设计
3.1.1采集声音信号
利用PC机上的声卡和WINDOWS操作系统自带的录音机,来进行声音的采集,将录的音以文件名“a”保存在F:
\中,文件存储的后缀默认为.wav。
3.1.2声音信号的时域与频谱分析
在MATLAB软件平台下,利用MATLAB中的“wavread”命令来读入(采集)语音信号,将它赋值给某一向量。
再对其进行采样,记住采样频率和采样点数。
通过使用wavread函数,可以深入理解采样频率、采样位数等概念,下面介绍Wavread函数几种调用格式。
(1)y=wavread(file);读取file所规定的wav文件,返回采样值放在向量y中。
(2)[y,fs,nbits]=wavread(file);采样值放在向量y中,fs表示采样频率(hz),nbits表示采样位数。
(3)y=wavread(file,N);读取钱N点的采样值放在向量y中。
(4)y=wavread(file,[N1,N2]);读取从N1到N2点的采样值放在向量y中。
接下来,对语音信号a.wav进行采样,采样程序如下:
[y,fs,nbits]=wavread('F\a');即把语音信号加载在Matlab仿真软件平台上。
然后,画出语音信号的时域波形,再对语音信号进行频谱分析。
MATLAB提供了快速傅里叶变换算法FFT计算DFT的函数fft,其调用格式如下:
Xk=fft(xn,N)
参数xn为被变换的时域序列向量,N是DFT变换区间长度,当N大于xn的长度时,fft函数自动在xn后面补零。
,当N小于xn的长度时,fft函数计算xn的前N个元素,忽略其后面的元素。
在本次设计中,我们利用fft对语音信号进行快速傅里叶变换,就可以得到信号的频谱特性。
截图如下:
3.1.3对声音信号加噪
先对噪声信号进行设置,将噪声信号和原信号进行叠加。
然后对叠加后的信号进行时域与频域的仿真及分析。
如下:
3.1.4滤波器设计
用汉明窗(hamming)函数对滤波器进行设计,选择合适的参数,然后分析其幅频特性。
如下:
3.1.5加噪信号的滤波与回放
对叠加后的信号进行滤波,观察滤波前后波形在时域与频域的变化:
3.2软件仿真调试结果分析
3.2.1原始信号的读取与分析
对3.1.2中的程序进行仿真,所采集的信号的时域及频谱图形如下:
3.2.2加噪信号的时域与频域分析
叠加信号和原信号的时域波形仿真如下:
叠加信号和原信号的频域特性如下:
3.2.3滤波器的设计及分析
由频谱图可以看出信号能量集中在低频部分,为了减少无用的高频分量我设计了以下的FIR低通滤波器将其滤除。
该设计采用窗函数法(汉明窗)来完成以下指标的低通滤波器。
通带截频fp=3000Hz,阻带截频fs=3500Hz,通带最大衰减0.3dB,阻带最小衰减-50dB,采样频率fs为信号源采样频率22050Hz。
分析:
在仿真图上可以看出来所设计的滤波器的技术指标:
通带截止频率fp、阻带截止频率fs、通带最大衰减0.3db、阻带最小衰减-50db、采样频率为22050hz。
3.2.4加噪信号的滤波与图形分析
三种信号的时域比较:
分析:
从仿真的结果上可以看出来,原信号与经过滤波后的加噪信号在时域波形产生了变化,但总体上还是与原信号近似;原因是所设计的滤波器比较简单,没有充分考虑所有的因素,从而造成两个信号的差异性。
结果证明:
加噪及简单的滤波器的设计良好。
三种信号的频域比较:
3.3设计中出现的问题与解决方案
在设计的过程中,刚开始的时候对于用MATLAB编写的程序的具体意思还是不太明白,经过熟悉以及向老师及同学询问后,才渐渐的明白每一个语句的具体含义。
4、设计总结
在本次课程设计中,由于对matlab不是很熟悉,用着很生疏,只能通过查询相关资料自己学习,最后还是克服了这个难题,能过正确运用matlab的基本操作,通过这次课程设计使我懂得了理论与实际相结合是很重要的,只有理论知识是远远不够的,只有把所学的理论知识与实践相结合起来,从理论中得出结论,才能提高自己的实际动手能力和独立思考的能力。
同时在设计的过程中发现了自己的不足之处,对以前所学过的知识理解得不够深刻,掌握得不够牢固。
参考文献
[1]陈后金,《DSP技术及应用》,机械工业出版社,2004年
[2]《基于matlab7.X的系统分析与设计》.楼顺天.西安电子科技大学出版社
附录:
(源程序代码)
1、原始信号的时域及频域分析的源代码如下:
[y,fs,nbits]=wavread('F:
\a');
sound(y,fs,nbits);%回放语音信号
N=length(y);%求出语音信号的长度
Y=fft(y,N);%傅里叶变换
subplot(2,1,1);
plot(y);title('原始信号波形');
subplot(2,1,2);
plot(abs(Y));
title('原始信号频谱')
2、声音加噪后的时域及频域的分析代码如下:
[y,Fs,bits]=wavread('F:
\a');%读出信号,采样率和采样位数。
y=y(:
1);%取单声道作分析
yl=length(y)%求语音信号长度
yy=fft(y,yl);%傅里叶变换
t=[0:
1/8000:
4zeros(1,yl-32001)]';
m=0.07*sin(10000*pi*t);%产生噪声
n=y+m;%加入噪声
nl=length(n)%求语音信号长度
nn=fft(n,nl);%傅里叶变换
figure
(1);
subplot(2,1,1);plot(n);title('噪声信号波形')
subplot(2,1,2);plot(y);title('原信号波形')
figure
(2);
subplot(2,1,1);plot(abs(nn));title('噪声信号频谱');
subplot(2,1,2);plot(abs(yy));title('原信号频谱');
sound(n,fs)
3、滤波器的幅频特性分析代码如下:
Wp=3000*2*pi;Ws=3500*2*pi;Ap=0.3;As=50;fs=22050;
wp=Wp/fs;ws=Ws/fs;%归一化通带截频,阻带截频
wdelta=ws-wp;%过渡带宽
%由阻带最小衰减指标确定选用汉明窗,并确定其阶数
N=ceil(6.6*pi/wdelta)
Nw=N;
n=0:
N-1;
alpha=(N-1)/2;
m=n-alpha+eps;%理想滤波器脉冲响应
wc=(wp+ws)/2;%理想截频
hd=sin(wc*m)./(pi*m);%采用汉明窗设计
win=hamming(Nw);
h=hd.*win';
b=h;
[H,f]=freqz(b,1,512,fs);%绘制滤波器的幅频响应图
plot(f,20*log10(abs(H)))
xlabel('频率');ylabel('幅度');
title(’滤波器幅频特性’);gridon;
4:
滤波器的设计代码如下:
[y,Fs,bits]=wavread('F:
\a');%读出信号,采样率和采样位数。
y=y(:
1);%取单声道作分析
yl=length(y);%求语音信号长度
yy=fft(y,yl);%傅里叶变换
t=[0:
1/8000:
4zeros(1,yl-32001)];
m=0.07*sin(10000*pi*t);%产生噪声
k=y+m;%加入噪声
kl=length(k);%求语音信号长度
K=fft(k,kl);%傅里叶变换
fb=800;fc=1000;As=100;Ap=1;fs=44000;
wc=2*fc/fs;wb=2*fb/fs;
[n,wn]=ellipord(wc,wb,Ap,As);
[b,a]=ellip(n,Ap,As,wn);
x=filter(b,a,k);
s1=length(x);%求语音信号长度
X=fft(x,s1);
Figure
(1);freqz(b,a,1000,8000);title('滤波器幅频相频图');
figure
(2);subplot(3,1,1);plot(y);title('原信号波形')
figure
(2);subplot(3,1,2);plot(k);title('噪声信号波形')
figure
(2);subplot(3,1,3);plot(x);title('滤波后信号波形')
figure(3);subplot(3,1,1);plot(abs(yy));title('原信号频谱');
figure(3);subplot(3,1,2);plot(abs(K));title('噪声信号频谱');
figure(3);subplot(3,1,3);plot(abs(X));title('滤波后信号频谱');
sound(x,Fs);