有噪声的语音信号分析与处理设计 - 图文 联系客服

发布时间 : 星期五 文章有噪声的语音信号分析与处理设计 - 图文更新完毕开始阅读95c91ebf960590c69ec376e2

4. 彭启琮等,DSP技术的发展与应用,第二版,高等教育出版社,2007 5. 杨述斌等,数字信号处理实践教程,第一版,华中科技大学出版社,2007 6.刘颖慧MATLABR2007基础教程[M].清华大学出版社.2008

7.王琦,徐式蕴,赵睿涛,高军峰,常春藤 MATLAB基础与应用实例集萃[M].人民邮电出版社.2007

8.张威.MATLAB基础与编程入门[M].西安电子科技大学出版社.2004 七、附录

读取语音信号

[y,fs,nbits]=wavread ('123.wav'); sound(y,fs,nbits); %回放语音信号

n = length (y) ; %求出语音信号的长度 Y=fft(y,n); %傅里叶变换

subplot(2,1,1);plot(y);title('原始信号波形'); subplot(2,1,2);plot(abs(Y));title('原始信号频谱') 加噪声

[y,fs,nbits]=wavread ('123.wav');

n = length (y) ; %求出语音信号的长度 noise=0.01*randn(n,1); %随机函数产生噪声

s=y+noise; %语音信号加入噪声 sound(s);

subplot(2,1,1);

plot(s);title('加噪语音信号的时域波形'); S=fft(s); %傅里叶变换 subplot(2,1,2);

plot(abs(S));title('加噪语音信号的频域波形') title('加噪语音信号的频域波形');

=========================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));

legend('用巴特沃斯butter设计'); grid

=========================IIR带通滤波器=======================

21

Fp1=1200; Fp2=3000; Fs1=1000; Fs2=3200; Ft=8000;

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=(wp1*wp2-w.^2)/(bw*w);

[n12,wn12]=buttord(wp,ws,1,50,'s'); %求低通滤波器阶数和截止频率 [b12,a12]=butter(n12,wn12,'s'); %求S域的频率响应参数

[num2,den2]=lp2bp(b12,a12,sqrt(wp1*wp2),bw);%将S域低通参数转为带通的 [num12,den12]=bilinear(num2,den2,0.5);%双线性变换实现S域到Z域的转换 [h,w]=freqz(num12,den12); %根据参数求出频率响应 plot(w*8000*0.5/pi,abs(h)); axis([0 4000 0 1.5]);

legend('用巴特沃斯bbutter设计'); grid;

=========================IIR高通滤波器=======================

Ft=8000; Fp=4000; Fs=3500;

wp1=tan(pi*Fp/Ft); ws1=tan(pi*Fs/Ft); wp=1;

ws=wp1*wp/ws1;

[n13,wn13]=cheb1ord(wp,ws,1,50,'s'); [b13,a13]=cheby1(n13,1,wn13,'s'); [num,den]=lp2hp(b13,a13,wn13);

[num13,den13]=bilinear(num,den,0.5); [h,w]=freqz(num13,den13); plot(w*21000*0.5/pi,abs(h)); title('IIR高通滤波器');

legend('用切比雪夫cheby1设计'); axis([0 12000 0 1.5]); grid;

========================IIRellipord滤波器=======================

Y=fft(y,5096);

fb=1000;fc=1200;As=300;Ap=1;fs=22350; wc=2*fc/fs; wb=2*fb/fs;

[N,wp]=ellipord(wp,ws,rp,rs); [B,A]=ellip(N,rp,rs,wp);

22

figure(1);

**************************FIR低通滤波器*****************************

Ft=8000; Fp=1000; Fs=1200; wp=2*Fp/Ft; ws=2*Fs/Ft; rp=1; rs=50;

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);

b21=fir1(n21,wn21,Kaiser(n21+1,beta)); %由fir1设计滤波器 [h,w]=freqz(b21,1); %得到频率响应 plot(w/pi,abs(h));

title('FIR低通滤波器'); grid;

**************************FIR带通滤波器*****************************

Fp1=1200; Fp2=3000; Fs1=1000; Fs2=3200; Ft=8000;

wp1=Fp1*2*pi/Ft; wp2=Fp2*2*pi/Ft; ws1=Fs1*2*pi/Ft; ws2=Fs2*2*pi/Ft; wc1=wp1-ws1; rp=1; rs=50;

beta=0.1102*(rs-8.7);

n22=ceil((rs-7.95)/2.286/wc1);

wn22=[(wp1+ws1)/2/pi,(wp2+ws2)/2/pi]; wn= kaiser(n22+1,beta); b22=fir1(n22,wn22,wn); [h,w]=freqz(b22,1); plot(w/pi,abs(h));

title('FIR带通滤波器by凯泽窗'); grid;

**************************FIR高通滤波器*****************************

Ft=8001; Fp=4000; Fs=3500;

23

wp=2*Fp/Ft; ws=2*Fs/Ft; rp=1;rs=50;

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)); [h,w]=freqz(b23,1);

plot(w*12000*0.5/pi,abs(h)); title('FIR高通滤波器'); axis([2000 6000 0 1.2]); grid

% ======================双线性变换法======================= %*************************低通滤波器************************

[y,fs,nbits]=wavread ('123.wav');

n = length (y) ; %求出语音信号的长度 noise=0.01*randn(n,1); %随机函数产生噪声 s=y+noise; %语音信号加入噪声 S=fft(s); %傅里叶变换 z11=filter(num11,den11,s); sound(z11);

m11=fft(z11); %求滤波后的信号 subplot(2,2,1); plot(abs(S),'g');

title('滤波前信号的频谱'); grid;

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

title('滤波后信号的频谱'); grid;

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

title('滤波前信号的波形'); grid;

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

title('滤波后的信号波形');

**********************带通滤波器*****************************

[y,fs,nbits]=wavread('123.wav');

n = length (y) ; %求出语音信号的长度 noise=0.01*randn(n,1); %随机函数产生噪声 s=y+noise; %语音信号加入噪声 S=fft(s); %傅里叶变换

24