资源描述:
《语音信号处理与FIR IIR滤波器.doc》由会员上传分享,免费在线阅读,更多相关内容在教育资源-天天文库。
1、数字信号处理课程设计10电子信息科学与技术赵祎10380051一、实验目的1.学会MATLAB的使用,掌握MATLAB的程序设计方法;2.掌握在Windows环境下语音信号采集的方法;3.掌握数字信号处理的基本概念、基本理论和基本方法;4.掌握MATLAB设计FIR和IIR数字滤波器的方法;5.学会用MATLAB对信号进行分析和处理。二、实验原理参考《数字信号处理》教材,MATLAB的signalprocessingtoolbox.三、主要实验仪器及材料微型计算机、Matlab软件。四、实验内容(一).语音信号的采集及频谱分析使用windows的录音功能或其他软件录制一段话音,
2、时间控制在5秒左右。然后在MATLAB软件平台下,利用函数wavread对语音信号进行采样,记住采样频率和采样点数。通过wavread函数的使用,要求理解采样频率、采样位数等概念。在录制的语音信号中加入高斯白噪声。对于无高斯白噪声影响和有高斯白噪声影响的语音信号:画出语音信号的时域波形;然后对语音信号进行频谱分析,在MATLAB中,可以利用函数FFT对信号进行快速傅里叶变换,得到信号的频谱特性。(二)设计FIR和IIR数字滤波器并滤波基于FIR(滤波器窗函数法,包括Hamming窗、Kaiser窗)和IIR(双线性变换法设计巴特沃兹滤波器、切比雪夫滤波器I型滤波器)的设计方法,
3、分别设计以下三种数字滤波器,根据语音信号的特点给出有关滤波器的性能指标:1)低通滤波器性能指标,fp=1000Hz,fc=1200Hz,As=100dB,Ap=1dB;2)高通滤波器性能指标,fc=2800Hz,fp=3000HzAs=100dB,Ap=1dB;3)带通滤波器性能指标,fp1=1200Hz,fp2=3000Hz,fc1=1000Hz,fc2=3200Hz,As=100dB,Ap=1dB。利用MATLAB软件工具,设计上面要求的三种滤波器:第一步、设计出各数字滤波器并画出滤波器的频率特性曲线;第二步、比较FIR和IIR两种滤波器的性能,在FIR滤波器和IIR滤波器
4、中分别选择性能好的一项,然后用各滤波器分别对采集的语音信号进行滤波。第三步、比较滤波前后语音信号的波形及频谱,并回放语音信号。[y,fs,bits]=wavread('E:ringsmiao.wav');五、实验代码1.语音信号的采集与噪声的加入代码如下:%打开语音信号并绘制波形和频谱(见右图)[y,fs,bits]=wavread('E:ringsmiao.wav');sound(y,fs,bits);n=length(y);Y=fft(y,n);subplot(2,1,1);plot(y);title('语音信号波形');subplot(2,1,2);plot(ab
5、s(Y));title('语音信号频谱');%在原语音信号中加入加性噪声并画出含噪信号波形和频谱(见右图)z=awgn(y,10);Y2=fft(z,n);Y3=fftshift(Y2);f=0:fs/n:fs*(n-1)/n;subplot(2,1,1);plot(z);title('含噪信号波形');subplot(2,1,2);plot(f,abs(Y3));title('含噪信号频谱');sound(z,fs,bits);wavwrite(z,'E:miao2.wav');2.滤波器的设计(1)低通滤波器①FIR低通(凯撒窗)%FIR凯撒窗口低通滤波器%参数Ft=80
6、00;Fp=1000;Fc=1200;wp=2*Fp/Ft;wc=2*Fc/Ft;p=1-10.^(-1/20);s=10.^(-100/20);%凯撒窗滤波fpts=[wpwc];mag=[10];dev=[ps];[n21,wc21,beta,ftype]=kaiserord(fpts,mag,dev);b21=fir1(n21,wc21,kaiser(n21+1,beta));[h,w]=freqz(b21,1);%画图plot(w*8000*0.5/pi,abs(h));title('FIR低通滤波器(凯撒窗口)');xlabel('Hz');ylabel('幅度');
7、grid;②FIR低通(hamming窗)%FIRhamming窗口低通滤波器%参数Ft=8000;Fp=1000;Fs=1200;wp=2*pi*Fp/Ft;ws=2*pi*Fs/Ft;wc=(wp+ws)/2;B=ws-wp;%hamming窗滤波N=ceil(6.6*pi/B)+1;n=[0:1:N-1];hd=ideal_lp(wc,N);w_ham=(hamming(N))';hn=hd.*w_ham;[hw,w]=freqz(hn,1);%画图plot(w*8000*0.5/pi