1、FIR 滤波器具有严格的相位特性,返对于诧音信号处理和数据传输是很重要的前 FIR滤波器的设计方法主要有三种:窗函数法、频率取样法和切比雪夫等波纹逼近的最优化设计方法。常用的是窗函数法和切比雪夫等波纹逼近的最优化设计法。本设计中的窗函数法比较简单,可应用现成的窗函数公式,在技术指标要丌高的时候是比较灵活方便的。 如果 FIR 滤波器的 h(n)为实数, 而且满足以下任意条件, 滤波器就具有准确的线性相位, 第一种:偶对称,h(n)=h(N-1-n), ()=-(N-1) /2 第二种:奇对称,h(n)=-h(N-1-n), ()=-(N-1) /2 +pi/2 对称中心在n=(N-1)/2处,
2、 根据以上对称条件,可以将FIR滤波器分为4种:h(n), evenly symmetric, odd N h(n), evenly symmetric, even N, 3 h(n), oddly symmetric, odd N, h(n), oddly symmetric, even N,典型的窗函数(1)矩形窗(Rectangle Window)其频率响应和幅度响应分别为:,(2)三角形窗(Bartlett Window)其频率响应为:(3)汉宁(Hanning)窗,又称升余弦窗(4)海明(Hamming)窗,又称改进的升余弦窗其幅度响应为:(6)凯泽(Kaiser)窗其中:是一个可选
3、参数,用来选择主瓣宽度和旁瓣衰减之间的交换关系,一般说来,越大,过渡带越宽,阻带越小衰减也越大。I0()是第一类修正零阶贝塞尔函数。5 种窗函数性能比较窗类型 旁瓣峰值 主瓣峰值 最小阻带衰减矩形窗13dB4/M21dB三角窗25dB8/M汉宁窗31dB44dB海明窗41dB53dB凯泽窗57dB12/M74dB用窗函数设计FIR滤波器的基本方法设计思想:从时域从发,设计逼近理想。设理想滤波器的单位脉冲响应为以低通线性相位FIR数字滤波器为例。一般是无限长的,且是非因果的,不能直接作为FIR滤波器的单位脉冲响应。要想得到一个因果的有限长的滤波器h(n),最直接的方法是截断,即截取为有限长因果序
4、列,并用合适的窗函数进行加权作为FIR滤波器的单位脉冲响应。按照线性相位滤波器的要求,h(n)必须是偶对称的。对称中心必须等于滤波器的延时常数,即用矩形窗设计的FIR低通滤波器,所设计滤波器的幅度函数在通带和阻带都呈现出振荡现象,且最大波纹大约为幅度的9%,这个现象称为吉布斯(Gibbs)效应。为了消除吉布斯效应,一般采用其他类型的窗函数。使用窗函数法设计时要满足以下两个条件:( 1) 窗谱主瓣尽可能地窄, 以获得较陡的过渡带;( 2) 尽量减少窗谱的最大旁瓣的相对幅度, 也就是使能量尽量集中于主瓣, 减小峰肩和纹波, 进而增加阻带的衰减。设计步骤a.录制一段自己的语音信号,并对录制的信号进行
5、采样。b.画出采样后语音信号的时域波形和频谱图。c.噪声的添加。d.给出滤波器的性能指标,采用窗函数法和双线性变换设计滤波器,并画出滤波器的频率响应。e.设计滤波器并对采集的信号进行滤波,画出滤波后信号的时域波形和频谱,并对滤波前后的信号进行对比,分析信号的变化。f.回放语音信号。g.设计一个GUI界面(选做)。(a)语音信号的采集利用Windows下的录音机,录制一段自己的话音,时间在2 s内。然后在Matlab软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。代码:y,fs,bits=wavread(zyb.wav,1024 63500);sound(y,fs,
6、bits);(b)语音信号的频谱分析首先画出语音信号的时域波形;然后对语音号进行快速傅里叶变换,得到信号的频谱特性。Y=fft(y,4096);figure(1);plot(y);title(语音信号的时域波形);figure(2);plot(abs(Y);语音信号的频谱特性(c)利用特定的函数产生噪声。t=0:0.2:10;y1=awgn(y,10,measuredY1=fft(y1,4096);figure(3);plot(y1);加噪语音信号的时域波形figure(4);plot(abs(Y1);加噪语音信号的频谱特性(d)设计数字滤波器和画出其频率响应给出各滤波器的性能指标:(1)低通
7、滤波器性能指标fb1 000 Hz,fc1 200 Hz,As100 dB,Ap1 dB。(2)高通滤波器性能指标fc4 800 Hz,fb5 000 Hz As100 dB,Ap1 dB。(3)带通滤波器性能指标fb11 200 Hz,fb23 000 Hz,fc11 000 Hz,fc23 200 Hz,As100 dB,Ap1 dB。利用窗函数法和双线性变换法设计其上的低通滤波器。在Matlab中,利用函数fir1设计FIR滤波器,并利用Matlab中的函数freqz画出各滤波器的频率响应。(e)用滤波器对信号进行滤波利用设计出的各滤波器分别对采集的信号进行滤波,在Matlab中,FIR
8、滤波器利用函数fftfilt对信号进行滤波。(f)比较滤波前后语音信号的波形及频谱在一个窗口同时画出滤波前后的波形及频谱。(g)回放语音信号在Matlab中,函数sound可以对声音进行回放。(h)设计系统界面(选作)为了使编制的程序操作方便,设计GUI的用户界面。设计流程图 程序代码:fs=20000;%*对外部声音的读取和处理*张源斌.wav,2048 60000);%*添加噪声*n=length(y);1/fs:(n-1)/fs;Au=0.04Noise=Au*sin(2*pi*5000*t);y1=y+Noise;Y=fft(y1,4096);sound(y1,fs,bits);%*F
9、IR滤波器设计*rp=1;rs=100;fcuts=1000 1200;d1=(10(rp/20)-1)/(10(rp/20)+1);d2=10(-rs/20);mags=1 0;devs=d1 d2;n,wn,beta,ftype=kaiserord(fcuts,mags,devs,fs);b=fir1(n,wn,ftype,kaiser(n+1,beta),noscalefigure(5);freqz(b,1,512);grid;xlabel(频率Hzylabel(频率响应幅度%*对原信号进行滤波*f1=filter(b,1,y1);sound(f1,20000); %播放滤波后的信号%*
10、比较波形滤波前后时域的图形*figure(6)subplot(2,1,1)plot(y1) %画出滤波前的时域图滤波前的时域波形times幅度subplot(2,1,2)plot(f1); %画出滤波后的时域图滤波后的时域波形%*比较波形滤波前后频域的图形*F0=fft(f1,1024);f=fs*(0:511)/1024;figure(7)y2=fft(y1,1024);subplot(2,1,1);plot(f,abs(y2(1:512); %画出滤波前的频谱图滤波前的频谱axis(0 4000 0 1.5);F1=plot(f,abs(F0(1: %画出滤波后的频谱图滤波后的频谱运行结果
11、图GUI设计screen=get(0,screensizeW=screen(3);H=screen(4);figure(color,0.85,0.75,0.35,position,0.5*H,0.5*H,0.5*W,0.5*H,.name, 张源斌图形演示界面,NumbertitleoffMenubarnonehplot=uimenu(gcf,Label&Plotuimenu(hplot,语音信号采集call,y,fs,Nbits=wavread(张源斌,.);x1,fs,nbits=wavread(,. t=length(x1)/20000;1023)/2048;Au=0.05;d=Au*c
12、os(2*pi*3800*t);x2=x1+d; plot(x2);CallX=fft(x2,4096);plot(abs(X);滤波前后信号波形和频谱x1=wavread(wang,. fp=1000;fc=1200;As=100;Ap=1;fs=8000;wc=2*pi*fc/fs;wp=2*pi*fp/fs;beta=0.112*(As-8.7);wdel=wc-wp;N=ceil(As-8)/2.285/wdel);wn= kaiser(N+1,beta);ws=(wp+wc)/2/pi;b=fir1(N,ws,wn);freqz(b,1);x=fftfilt(b,x2);X=fft(
13、x,8192);plot(x);滤波后信号波形hoption=uimenu(gcf,Optionhfigcor=uimenu(hoption,FigureColorseparatoronuimenu(hfigcor,RedAcceleratorrset(gcf,ColorBlackkBluebYellowyuimenu(gcf,QuitClose(gcf)设计心得在课程设计期间由于做考试复习,在第一周自己并没有在课程设计上下很大的功夫,只是在做课程的时间在网上找找资料,并做一些MATLAB操作,并没有深入研究。第二周考试结束后,自己把所有的经历都放在课程设计上了,由于数字信号处理这门课的知识自
14、己很长时间没有复习,基本忘得差不多了,再加上自己没有学过MATLAB,因此做起来很是吃力,还好有许多学过MATLAB的同学以及指导老师给自己相当大的帮助,从开始的声音信号采集,并分析时域和频域特性。到为声音信号添加噪声,再到滤波器的设计以及滤波后的时域和频域分析,几乎都是自己一步一步的做出来的,对程序有了很多的理解,也对MATLAB的基本操作掌握了一些,掌握了各种窗函数的一些用法,这让自己感到十分欣慰,因为自己有多掌握了许多有用的知识,同时自己也发现了自己在学习上的许多缺点及错误方法,这在以后自己要逐渐改正。现在自己已经是一名大三的学生了,即将升入大四,做这样的课程设计对自己有很大的帮助,无论将来自己是就业还是考研,加强动手能力是十分有必要的。参考文献1. 程佩青数字信号处理教程北京清华大学出版社2007年2月.2. 赵知劲、刘顺兰数字信号处理实验.浙江大学出版社.3. S.K.MitraDigital Signal Processing:A Computer-Based Approach.NewYork,NewYork:McGraw-Hill,thirded,20064. 肖伟、刘忠等 MATLAB程序设计与应用清华大学出版社、北京交通大学出版社.5. 胡良剑、孙晓君 MATLAB数学实验.高等教育出版社.6. 杨述斌、李永全数字信号处理实践教程华中科技大学出版社.
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1