《数字信号处理》课程设计报告题目:语音信号处理与滤波专业:计算机学院学号:姓名:指导教师:周坚和成绩:二〇一〇年一月八日一、课程设计目的综合运用数字信号处理的理论知识进行频谱分析和滤波器设计,通过理论推导得出相应结论,再利用MATLAB作为编程工具进行计算机实现,从而加深对所学知识的理解。二、课程设计基本要求及分组1、对知识点的掌握要求:(1)熟悉离散信号和系统的时域特性。(2)掌握序列快速傅里叶变换FFT方法。(3)学会MATLAB的使用,掌握MATLAB的程序设计方法。(4)利用MATLAB对语音信号进行频谱分析。(5)掌握MATLAB设计FIR和IIR数字滤波器的方法。2、分组情况:组长:张凤组员:张凤、张志广、李云、黄生涯、曾胜、沈呈洁分工情况:张凤:设计全过程的监督及协助、部分源程序代码的编写和整个源程序代码的整理。张志广:语音信号的录制以及对语音信号的采样,FIR低通滤波器的设计。李云:FIR高通滤波器、FIR带通滤波器的设计以及用此两种滤波器对语音信号进行滤波。黄生涯:IIR低通滤波器、IIR高通滤波器的设计。曾胜:IIR带通滤波器的设计和用此滤波器对语音信号进行滤波。沈呈洁:系统界面设置和用FIR低通滤波器对语音信号进行滤波。三、详细设计过程1、问题描述:录制一段自己的语音信号,取不同的数据点对语音信号进行频谱分析;对所有数据进行插值和抽取处理,改变抽样率再对信号进行频谱分析;设计FIR和IIR数字滤波器,并对被抽样后的语音信号进行滤波,分析滤波后信号的时域和频域特征,回放语音信号。2、详细操作步骤和部分运行结果(1)采集语音信号:利用Windows下的录音机,录制一段自己的话音,时间控制在1s左右;然后在MATLAB软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。通过使用wavread函数,理解采样频率、采样位数等概念。wavread函数调用格式如下:y=wavread(file),读取file所规定的wav文件,返回采样值放在向量y中。[y,fs,nbits]=wavread(file),采样值放在向量y中,fs表示采样频率(Hz),nbits表示采样位数。y=wavread(file,N),读取前N点的采样值放在向量y中。y=wavread(file,[N1,N2]),读取从N1点到N2点的采样值放在向量y中。采集语音的程序代码:[x1,fs,nbits]=wavread(‘e:\yy.wav’);sound(x1,fs,bits);y=fft(x1,1024);subplot(2,1,1);plot(x1);title(‘原始采样后时域信号’);原始语音采样后的的时域信号波形图:(2)对语音信号进行频谱分析:在MATLAB中,利用函数fft对信号进行快速傅里叶变换,得到信号的频谱特性。首先画出语音信号的时域波形,然后对语音信号进行频谱分析。程序代码:[x1,fs,bits]=wavread(‘D:\yy.wav’);y1=fft(x1,1024);f=fs*(0:511)/1024;figure(1)subplot(2,1,1);plot(f,abs(1:512)));title(’原始语音信号频谱’);xlabel('频率/Hz');ylabel('幅值');subplot(2,1,2);plot(abs(y1(1:1024)));title(‘原始语音信号FFT频谱’);xlabel('点数N');ylabel('幅值');原始语音信号的频率响应图:原始语音信号频谱和FFT转换后的频谱图(3)设计数字滤波器和画出频率响应:根据语音信号的特点给出有关滤波器的性能指标:①低通滤波器性能指标:fp=1000Hz,fc=1200Hz,As=100dB,Ap=1dB;②高通滤波器性能指标:fc=4800Hz,fp=5000Hz,As=100dB,Ap=1dB;③带通滤波器性能指标:fp1=1200Hz,fp2=3000Hz,fc1=1000Hz,fc2=3200Hz,As=100dB,Ap=1dB。首先用窗函数法(矩形窗(Rectangularwindow)、三角窗(Triangularwindow)、汉宁窗(Hanningwindow)、海明窗(Hammingwindow)、布拉克曼窗(Blackmanwindow)、切比雪夫窗(Chebyshevwindow)、巴特里特窗(Bartlettwindow)及凯塞窗(Kaiserwindow)。)设计上面要求的三种滤波器。在MATLAB中,利用函数fir1设计FIR滤波器;然后再用双线性变换法设计上面要求的三种滤波器,利用函数butte、cheby1和ellip设计IIR滤波器;最后,利用MATLAB中的函数freqz画出各种滤波器的频率响应。(4)低通滤波器的设计过程用窗函数法设计低通滤波器:程序代码:fp=1000;fc=1200;As=100;Ap=1;fs=22050;wc=2*fc/fs;wp=2*fp/fs;N=ceil((As-7.95)/(14.36*(wc-wp)/2))+1;beta=0.1102*(As-8.7);Win=Kaiser(N+1,beta);b=fir1(N,wc,Win);freqz(b,1,512,fs);运行结果如下图:用双线性变换法设计的低通滤波器:程序代码:fp=1000;fc=1200;As=100;Ap=1;fs=22050;wc=2*fc/fs;wp=2*fp/fs;[n,wn]=ellipord(wp,wc,Ap,As);[b,a]=ellip(n,Ap,As,wn);freqz(b,a,512,fs);程序运行结果如下图:(5)高通滤波器的设计过程程序代码:fp=5000;fc=4800;As=100;Ap=1;fs=22050;wc=2*fc/fs;wp=2*fp/fs;[n,wn]=ellipord(wp,wc,Ap,As);[b,a]=ellip(n,Ap,As,wn);freqz(b,a,512,fs);程序运行结果如下图:(6)带通滤波器的设计全过程程序代码:fp1=1200;fp2=3000;fc1=1000;fc2=3200;As=100;Ap=1;fs=22050;wc=[2*fc1/fs,2*fc2/fs];wp=[2*fp1/fs,2*fp2/fs];[n,wn]=ellipord(wp,wc,Ap,As);[b,a]=ellip(n,Ap,As,wn);freqz(b,a,512,fs);程序运行结果:(7)IIR滤波器的设计IIR低通滤波器:IIR高通滤波器:IIR带通滤波器:(8)用滤波器对信号进行滤波比较两种滤波器性能,然后用性能好的滤波器对采集的信号进行滤波。在MATLAB中,FIR滤波器利用函数fftfilt对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。(9)比较滤波前后语音信号的波形及频谱,在同一个窗体中画出滤波前后的波形图:FIR低通滤波器滤波前后的波形图:FIR高通滤波器滤波前后的波形图:FIR带通滤波器滤波前后的波形图:IIR低通滤波器滤波前后的波形图:IIR高通滤波器滤波前后的波形图:IIR带通滤波器滤波前后的波形图:(10)回放语音信号在MATLAB中,函数sound可以对声音进行回放。其调用格式为sound(x,fs,bits),可以感觉滤波前后的声音有变化。(11)设计系统界面在所设计的系统界面上可以选择滤波器的类型,输入滤波器的参数,显示滤波器的频率响应,选择信号等。界面如下图所示:四、调试分析1、A.用窗函数法设计低通滤波器中,语句N=ceil(As-7.95)/(14.36*(wc-wp)/2))+1;出错,将其改为N=ceil((As-7.95)/(14.36*(wc-wp)/2))+1;即可。2、在带通滤波器的设计中程序出现如下错误:???Undefinedfunctionorvariable's'.经过调试分析,观察后发现是书写错误,将语句wp=[2*fp1/fs,2*fp2/s];改成wp=[2*fp1/fs,2*fp2/fs];即可五、结果分析1、题目要求最大衰减Ap=1dB,fp=1000Hz,由图可看出基本符合,而最小衰减As=100dB,fc=1200Hz,基本符合。2、滤波前后的频谱分析:由于所取的采样点数比较大,滤波前后的频谱比较相近,但仔细对比仍然可以看出下图的结果滤掉了高频的成分。3、题目要求最大衰减Ap=1dB,fp=5000Hz,由图可看出,基本符合,而最小衰减As=100dB,fc=4800Hz,也基本符合。4、滤波前后的频谱分析:由图明显可以看出,此滤波器将低频成分滤掉了。5、题目要求最大衰减Ap=1dB时,fp1=1000Hz,fp2=3200Hz,由图可看出,基本符合,而最小衰减As=100dB时,fc1=1000Hz,fc2=3200Hz,基本符合。6、滤波前后的频谱分析:该滤波器将低频成分和高频成分都滤掉了,只剩下通带里的频率。7、选用凯泽窗设计方法,滤波器的幅度和相位响应满足设计的指标但滤波器长度(N=708)太长,实现起来很困难,主要原因是滤波器的指标太苛刻,因此,一向不用窗函数法设计这种类型的滤波器。在双线性变换法的设计中选用椭圆函数设计,滤波器的幅度和相位均满足设计的要求。六、心得体会通过一学期的数字信号处理的学习,在这次做课程设计的过程中,真的发现自己没学到啥东西,所以导致做的过程中困难重重,拿着课本只好重头看,通过网上查资料,同学之间的相互合作,最终我们还是战胜了困难,顺利完成了此次的课程设计。我深深的体会到了知识的重要性,不管是为了应付考试还是怎么样也好,对于自身的帮助还是很大的,整整两天坐在电脑面前的功夫没有白费,我还是收获了很多,对于Matlab软件的使用也更加熟悉了。一年之计在于春,而我们一学期的学习就在于这次课程设计了,我觉得这才是真正学到知识的,也锻炼了自己的动手实践能力,耐心和毅力。学会团结,才能把事情做得更好。七、参考文献和附录[1]丁美玉,高西全数字信号处理2版。西安:西安电子科技大学出版社,2001[2]怀琛数字信号处理教程——MATLAB释疑与实现。北京:电子工业出版社,2004[3]王宏MATLAB6.5及其在信号处理中的应用。北京:清华大学出版社,2004[4]刘顺兰,吴杰数字信号处理。西安:西安电子科技大学出版社,2003附录:源程序代码:b=menu('请选择选项','原始信号采样后时域图和频谱图','FIR滤波器','IIR滤波器','退出');ifb==4b==0;endifb==1temp=menu('请选择选项','播放原始语音','原始语音时域图和频率响应图','原始语音频谱图及做FFT变换后频谱图','返回');iftemp==1voice;main;elseiftemp==2pingpu;main;elsemain;endelseifb==2temp==1FIR_LP;main;elseiftemp==2FIR_HP;main;elseiftemp==3FIR_BP;main;elsemain;endelseifb==3temp=menu('请选择选项','IIR低通滤波器','IIR高通滤波器','IIR带通滤波器','返回');iftemp==1IIR_LP;main;elseiftemp==2IIR_HP;main;elseiftemp==3IIR_BP;main;elsemain;endendfs=22050;x1=wavread('D:\yy.wav');wp1=2*pi*1200/fs;wp2=2*pi*3000/fs;ws1=2*pi*1000/fs;ws2=2*pi*3200/fs;Rp=1;Rs=100;wn=(wp1+ws1)/2;ws=(wp2+ws2)/2;wdelta=wp1-ws1;N=ceil(8*i/wdelta);wn=[wp,ws];[b,a]=firl(N