基于matlab的语音信号处理 下载本文

附 录

14.FIR窗函数低通滤波

[y,fs,nbits]= wavread('E:\\yuanyinpin.wav'); n = length (y) Noise=0.03*randn(n,2); s=y+Noise; S=fft(s); Ft=10000; Fp=700; Fs=1400; wp=2*Fp/Ft; ws=2*Fs/Ft; rp=1; rs=50;

p=1-10.^(-rp/20); q=10.^(-rs/20); fpts=[wp ws]; mag=[1 0]; dev=[p q];

[n21,wn21,beta,ftype]=kaiserord(fpts,mag,dev); b21=fir1(n21,wn21,kaiser(n21+1,beta)); z21=fftfilt(b21,s); sound(z21,fs); m21=fft(z21);

11

附 录

figure(4);

subplot(2,2,1); plot(abs(S),'g');

title('滤波前的信号频谱','fontweight','bold'); axis([0 15000 0 1000]); grid;

subplot(2,2,2); plot(abs(m21),'r');

title('滤波后的信号频谱','fontweight','bold'); axis([0 15000 0 1000]); grid;

subplot(2,2,3); plot(s);

title('滤波前的信号波形','fontweight','bold'); axis([67000 87000 -0.5 0.5]); grid;

subplot(2,2,4); plot(z21);

title('滤波后的信号波形','fontweight','bold'); axis([67000 87000 -0.5 0.5]); grid;

程序结果如下图:

12

附 录

5.FIR窗函数带通滤波

[y,fs,nbits]= wavread('E:\\yuanyinpin.wav'); n = length (y) Noise=0.03*randn(n,2);

s=y+Noise; S=fft(s); Fp1=1200; Fp2=3000; Fs1=1000; Fs2=3200; Ft=2200;

wp1=tan(pi*Fp1/Ft); wp2=tan(pi*Fp2/Ft); ws1=tan(pi*Fs1/Ft); ws2=tan(pi*Fs2/Ft); w=wp1*wp2/ws2; bw=wp2-wp1; wp=1;

ws=(wp*wp2-w.^2)/(bw*w);

[n22,wn22]=buttord(wp,ws,1,50,'s'); [b22,a22]=butter(n22,wn22,'s'); z22=fftfilt(b22,s); sound(z22,fs);

m22=fft(z22); figure;

subplot(2,2,1); plot(abs(S),'g');

title('滤波前的信号频谱','fontweight','bold'); axis([0 15000 0 1000]); grid;

subplot(2,2,2); plot(abs(m22),'r');

title('滤波后的信号频谱','fontweight','bold'); axis([0 15000 0 1000]); grid;

subplot(2,2,3); plot(s);

title('滤波前的信号波形','fontweight','bold'); axis([67000 87000 -0.5 0.5]); grid;

subplot(2,2,4); plot(z22);

title('滤波后的信号波形','fontweight','bold'); axis([67000 87000 -0.5 0.5]);

13

附 录

grid;

程序结果如下图:

6.FIR窗函数高通滤波

[y,fs,nbits]= wavread('E:\\yuanyinpin.wav'); n = length (y) Noise=0.03*randn(n,2); s=y+Noise; S=fft(s); Ft=10000; Fp=1400; Fs=700; wp=2*Fp/Ft; ws=2*Fs/Ft; rp=1; rs=50;

p=1-10.^(-rp/20); q=10.^(-rs/20); fpts=[ws wp]; mag=[0 1]; dev=[p q];

[n23,wn23,beta,ftype]=kaiserord(fpts,mag,dev);

b23=fir1(n23,wn23,'high',kaiser(n23+1,beta)); z23=fftfilt(b23,s);

14

附 录

sound(z23,fs);

m23=fft(z23); figure;

subplot(2,2,1); plot(abs(S),'g');

title('滤波前的信号频谱','fontweight','bold'); axis([0 15000 0 1000]); grid;

subplot(2,2,2); plot(abs(m23),'r');

title('滤波后的信号频谱','fontweight','bold'); axis([0 15000 0 1000]); grid;

subplot(2,2,3); plot(s);

title('滤波前的信号波形','fontweight','bold'); axis([67000 87000 -0.5 0.5]); grid;

subplot(2,2,4); plot(z23);

title('滤波后的信号波形','fontweight','bold'); axis([67000 87000 -0.5 0.5]); grid;

程序结果如下图:

15