《matlab与信号系统》实验报告学院:学号:姓名:考核实验——语音信号采集与处理初步一、课题要求1.语音信号的采集2.语音信号的频谱分析3.设计数字滤波器和画出频率响应4.用滤波器对信号进行滤波5.比较滤波前后语音信号的波形及频谱6.回放和存储语音信号(第5、第6步我放到一起做了)二、语音信号的采集本段音频文件为胡夏演唱的“那些年”的前奏(采用Audition音频软件进行剪切,时长17秒)。
运行matlab软件,在当前目录中打开原音频文件所在的位置,采用wavread函数对其进行采样,并用sound函数可进行试听,程序运行之后记下采样频率和采样点。
利用函数wavread对语音信号的采集的程序如下:clear;[y,fs,bits]=wavread('music.wav'); %x:语音数据;fs:采样频率;bits:采样点数sound(y,fs,bits); %话音回放程序运行之后,在工作区间中可以看到采样频率fs=44100Hz,采样点bits=16三、语音信号的频谱分析先画出语音信号的时域波形,然后对语音号进行快速傅里叶变换,得到信号的频谱特性。
语音信号的FFT频谱分析的完整程序如下:clear;[y,fs,bits]=wavread('music.wav'); %x:语音数据;fs:采样频率;bits:采样点数sound(y,fs,bits); %话音回放n = length (y) ; %求出语音信号的长度Y=fft(y,n); %傅里叶变换subplot(2,1,1);plot(y);title('原始信号波形');subplot(2,1,2);plot(abs(Y)); title('原始信号频谱');程序结果如下图:四、设计数字滤波器和画出频率响应根据语音信号的特点给出有关滤波器的性能指标:1)低通滤波器性能指标,fp=1000Hz,fc=1200 Hz,As=100dB,Ap=1dB;2)高通滤波器性能指标,fc=4800 Hz,fp=5000 Hz As=100dB,Ap=1dB。
要求学生分别用窗函数法和双线性变换法设计上面要求的两种滤波器,在MATLAB中,可以利用函数fir1设计FIR滤波器;用函数butte设计IIR滤波器;最后,利用MATLAB中的函数freqz画出各滤波器的频率响应。
分析如下:函数fir1默认的设计滤波器的方法为窗函数法,其中可选的窗函数有Rectangular Barlrtt Hamming Hann Blackman窗,其相应的都有实现函数。
函数butter,cheby1和ellip设计IIR滤波器时都是默认的双线性变换法,所以在设计滤波器时只需要代入相应的实现函数即可。
1、IIR低通滤波器:Ft=8000;Fp=1000;Fs=1200;wp=2*pi*Fp/Ft;ws=2*pi*Fs/Ft;fp=2*Ft*tan(wp/2);fs=2*Fs*tan(wp/2);[n11,wn11]=buttord(wp,ws,1,50,'s'); %求低通滤波器的阶数和截止频率[b11,a11]=butter(n11,wn11,'s'); %求S域的频率响应的参数[num11,den11]=bilinear(b11,a11,0.5); %利用双线性变换实现频率响应S域到Z域的变换[h,w]=freqz(num11,den11); %根据参数求出频率响应plot(w*8000*0.5/pi,abs(h));title('IIR低通滤波器');legend('用butter设计');grid;Ft=8000;Fp=5000;Fs=4800;wp1=tan(pi*Fp/Ft);%高通到低通滤波器参数转换ws1=tan(pi*Fs/Ft);wp=1;ws=wp1*wp/ws1;[n13,wn13]=cheb1ord(wp,ws,1,100,'s'); %求模拟的低通滤波器阶数和截止频率[b13,a13]=cheby1(n13,1,wn13,'s'); %求S域的频率响应的参数[num,den]=lp2hp(b13,a13,wn13);%将S域低通参数转为高通的[num13,den13]=bilinear(num,den,0.5); %利用双线性变换实现频率响应S域到Z域转换[h,w]=freqz(num13,den13);plot(w*21000*0.5/pi,abs(h));title('IIR高通滤波器');legend('用cheby1设计');axis([0 12000 0 1.5]);grid;用窗函数设计低通滤波器的程序如下:Ft=8000;Fp=1000;Fs=1200;wp=2*Fp/Ft;ws=2*Fs/Ft;rp=1;rs=100;p=1-10.^(-rp/20); %通带阻带波纹s=10.^(-rs/20);fpts=[wp ws];mag=[1 0];dev=[p s];[n21,wn21,beta,ftype]=kaiserord(fpts,mag,dev);%由kaiserord求滤波器的阶数和截止频率b21=fir1(n21,wn21,Kaiser(n21+1,beta)); %由fir1设计滤波器[h,w]=freqz(b21,1); %得到频率响应plot(w/pi,abs(h));title('FIR低通滤波器');grid;高通滤波器的性能指标:fp=3500Hz,fc=4000Hz,As=50dB,Ap=1dB;(由于边界频率必须位于采样频率的中间值,此时指标略微有些改动,望老师见谅)Ft=8001;Fp=4000;Fs=3500;wp=2*Fp/Ft;ws=2*Fs/Ft;rp=1;rs=100;p=1-10.^(-rp/20); %通带阻带波纹s=10.^(-rs/20);fpts=[ws wp];mag=[0 1];dev=[p s];[n23,wn23,beta,ftype]=kaiserord(fpts,mag,dev);b23=fir1(n23,wn23,'high',Kaiser(n23+1,beta)); %由fir1设计滤波器[h,w]=freqz(b23,1); %得到频率响应plot(w*12000*0.5/pi,abs(h));title('FIR高通滤波器');axis([3000 6000 0 1.2]);grid;五、用滤波器对信号进行滤波比较两种滤波器(FIR和IIR)的性能,然后用性能好的各滤波器(低通、高通)分别对采集的信号进行滤波,在MATLAB中,FIR滤波器利用函数fftfilt 对信号进行滤波,IIR滤波器利用函数filter对信号进行滤波。
1、双线性变换法:(1)低通滤波器:z11=filter(num11,den11,s);(2)高通滤波器:z12=filter(num12,den12,s);2、窗函数法:(1)低通滤波器:z21=fftfilt(b21,s);(2)高通滤波器:z22=fftfilt(b22,s);六、比较滤波前后语音信号的波形、频谱、声音的变化要求:(1)要求在一个窗口同时画出滤波前后的波形及频谱;(2)用函数sound对声音进行回放。
感觉滤波前后声音的变化;(3)用函数wavwrite对滤波后的文件进行存储存储1、双线性变换法——低通滤波器IIR低通:clear;[y,fs,bits]=wavread('music.wav'); %x:语音数据;fs:采样频率;bits:采样点数sound(y,fs,bits); %话音回放n = length (y) ; %求出语音信号的长度Y=fft(y,n); %傅里叶变换Ft=8000;Fp=1000;Fs=1200;wp=2*pi*Fp/Ft;ws=2*pi*Fs/Ft;fp=2*Ft*tan(wp/2);fs=2*Fs*tan(wp/2);[n11,wn11]=buttord(wp,ws,1,50,'s'); %求低通滤波器的阶数和截止频率[b11,a11]=butter(n11,wn11,'s'); %求S域的频率响应的参数[num11,den11]=bilinear(b11,a11,0.5); %利用双线性变换实现频率响应S域到Z 域的变换[h,w]=freqz(num11,den11); %根据参数求出频率响应z11=filter(num11,den11,y);sound(z11);m11=fft(z11); %求滤波后的信号subplot(2,2,1);plot(abs(Y),'g');title('滤波前信号的频谱');grid;subplot(2,2,2);plot(abs(m11),'r');title('滤波后信号的频谱');grid;subplot(2,2,3);plot(y);title('滤波前信号的波形');grid;subplot(2,2,4);plot(z11);title('滤波后的信号波形');grid;wavwrite(y, 'IIR低通.wav');%滤波后的音频信号名为“IIR低通.wav”2、双线性变换法——高通滤波器IIR高通:clear;[y,fs,bits]=wavread('music.wav'); %x:语音数据;fs:采样频率;bits:采样点数sound(y,fs,bits); %话音回放n = length (y) ; %求出语音信号的长度Y=fft(y,n); %傅里叶变换Ft=8000;Fp=5000;Fs=4800;wp1=tan(pi*Fp/Ft);%高通到低通滤波器参数转换ws1=tan(pi*Fs/Ft);wp=1;ws=wp1*wp/ws1;[n12,wn12]=cheb1ord(wp,ws,1,100,'s'); %求模拟的低通滤波器阶数和截止频率[b12,a12]=cheby1(n12,1,wn12,'s'); %求S域的频率响应的参数[num,den]=lp2hp(b12,a12,wn12);%将S域低通参数转为高通的[num12,den12]=bilinear(num,den,0.5); %利用双线性变换实现频率响应S域到Z域转换[h,w]=freqz(num12,den12);z12=filter(num12,den12,y);sound(z12);m12=fft(z12); %求滤波后的信号subplot(2,2,1);plot(abs(Y),'g');title('滤波前信号的频谱');grid;subplot(2,2,2);plot(abs(m12),'r');title('滤波后信号的频谱');grid;subplot(2,2,3);plot(y);title('滤波前信号的波形');grid;subplot(2,2,4);plot(z12);title('滤波后的信号波形');grid;wavwrite(y, 'IIR高通.wav');%滤波后的音频信号名为“IIR高通.wav”高通滤波后,此时只有少许杂音,原因是低频分量被高通滤波器衰减,而人声部分正好是低频部分,所以只剩下杂音,或者发出高频杂音但人的耳朵听不到。