基于MATLAB的语音信号去噪处理(修改版) 下载本文

ylabel('频率幅值'); L=length(y)

noise=0.1*randn(L,2); y_z=y+noise; sound(y_z,fs) n=length(y); y_zp=fft(y_z,n); f=fs*(0:n/2-1)/n; figure(2)

subplot(2,1,1); plot(y_z);

title('加噪语音信号时域波形'); xlabel('频率点数') ylabel('幅值A') subplot(2,1,2);

plot(f,abs(y_zp(1:n/2)));

title('加噪语音信号频谱图'); xlabel('频率Hz'); ylabel('频率幅值'); %低通加窗滤波 fs=44100;

fp=600,fc=800; wp=2*pi*fp/fs; ws=2*pi*fc/fs;

Bt=ws-wp; N0=ceil(11*pi/Bt); N=N0+mod(N0+1,2);

wc=(wp+ws)/2/pi; hn=fir1(N-1,wc,bartlett(N)); X=conv(hn,x); sound(X,fs,bits); X1=fft(X,n); figure(4);

subplot(2,1,1); plot(X);

title('滤波后的信号波形'); subplot(2,1,2);

plot(f,abs(y_p(1:n/2))); title('滤波后信号频谱'); xlabel('频率Hz'); ylabel('频率幅值'); 结果如下图:

41

%FIR-Bartlett窗高通滤波

[y,fs,bits]=wavread('wangwei.wav'); x=y(:,1); sound(y,fs) n=length(y) y_p=fft(y,n); f=fs*(0:n/2-1)/n; figure(1)

subplot(2,1,1); plot(y);

title('原始语音信号采样后的时域波形'); xlabel('点数') ylabel('幅值A') subplot(2,1,2);

plot(f,abs(y_p(1:n/2)));

title('原始语音信号采样后的频谱图'); xlabel('点数');

ylabel('频率幅值'); L=length(y)

noise=0.1*randn(L,2); y_z=y+noise; sound(y_z,fs) n=length(y); y_zp=fft(y_z,n); f=fs*(0:n/2-1)/n;

42

figure(2)

subplot(2,1,1); plot(y_z);

title('加噪语音信号时域波形'); xlabel('点数') ylabel('幅值A') subplot(2,1,2);

plot(f,abs(y_zp(1:n/2)));

title('加噪语音信号频谱图'); xlabel('点数');

ylabel('频率幅值'); %FIR高通加窗滤波

fp=3000,fc=2700; wp=2*pi*fp/fs; ws=2*pi*fc/fs;

Bt=wp-ws; N0=ceil(11*pi/Bt); N=N0+mod(N0+1,2);

wc=(wp+ws)/2/pi;

hn=fir1(N-1,wc,'high',bartlett(N)); X=conv(hn,x); sound(X,fs,bits); X1=fft(X,n); f=fs*(0:n/2-1)/n; figure(3);

subplot(2,1,1); plot(X);

title('滤波后的信号波形'); subplot(2,1,2);

plot(f,abs(X1(1:n/2))); title('滤波后信号频谱'); xlabel('点数');

ylabel('频率幅值');

运行结果如下图:

43

%IIR低通滤波

[y,fs,bits]=wavread('wangwei.wav'); sound(y,fs) n=length(y) y_p=fft(y,n); f=fs*(0:n/2-1)/n; figure(1)

subplot(2,1,1); plot(y);

title('原始语音信号采样后的时域波形'); xlabel('点数') ylabel('幅值A') subplot(2,1,2);

plot(f,abs(y_p(1:n/2)));

title('原始语音信号采样后的频谱图'); xlabel('点数');

ylabel('频率幅值'); L=length(y)

noise=0.1*randn(L,2); y_z=y+noise; sound(y_z,fs) n=length(y); y_zp=fft(y_z,n); f=fs*(0:n/2-1)/n; figure(2)

subplot(2,1,1);

44

plot(y_z);

title('加噪语音信号时域波形'); xlabel('点数') ylabel('幅值A') subplot(2,1,2);

plot(f,abs(y_zp(1:n/2)));

title('加噪语音信号频谱图'); xlabel('点数');

ylabel('频率幅值');

fp=600;fs=800;Fs=44100; rp=1;rs=10; wp=2*pi*fp/Fs; ws=2*pi*fs/Fs; Fs1=1;

wap=2*tan(wp/2); was=2*tan(ws/2);

[N,wc]=buttord(wap,was,rp,rs,'s'); [B,A]=butter(N,wc,'s'); [Bz,Az]=bilinear(B,A,Fs1); figure(3);

[h,w]=freqz(Bz,Az,512,Fs1*44100); plot(w,abs(h));

title('巴特沃斯低通滤波器');

xlabel('频率(HZ)');ylabel('耗损(dB)'); grid on;

yd=filter(Bz,Az,y_z); ydd=fft(yd,n); f=fs*(0:n/2-1)/n; figure(4);

subplot(2,1,1);plot(yd); title('滤波后信号时域波形'); xlabel('点数') ylabel('幅值A') subplot(2,1,2);

plot(f,abs(ydd(1:n/2))); title('滤波后信号频谱'); xlabel('点数');

ylabel('频率幅值'); sound(yd,Fs,bits);

运行结果如图:

45