资源描述:
《谱减法的Matlab程序.doc》由会员上传分享,免费在线阅读,更多相关内容在行业资料-天天文库。
1、谱减法的Matlab程序:-----------------------------------------------------------------------------------------------------clear;[xx,fs]=wavread('I:aa a.wav');%读语音信号[team,row]=size(xx);ifrow==2x=(xx(:,1)+xx(:,2))/2;%将多通道求平均值yy=x;elsex=xx;yy=x;endx=x-mean(x)+0.
2、1*rand(length(x),1);%去直流分量并加噪N=length(x);n=220;%每一帧长n1=160;%每两帧重合的长度frame=floor((N-n)/(n-n1));%帧数fori=1:framey1=x((i-1)*(n-n1)+1:(i-1)*(n-n1)+n).*hamming(n);%每一帧对应的语音信号fy=fft(y1,n);%求fftnen(i,:)=abs(fy).^2;%求能量ang(i,:)=angle(fy);%求角度endyuzhi=sum(sum(nen
3、(2:5,:)))/(4*n);%求阈值,信号开始阶段的能量平均值fori=1:framenen(i,:)=nen(i,:)-yuzhi;%减谱nen(i,find(nen(i,:)<0))=0;%将小于0的部分赋值为0endfori=1:framenen(i,:)=sqrt(nen(i,:));jie=nen(i,:).*exp(j*ang(i,:));%求频域函数out(i,:)=real(ifft(jie))./hamming(n)';%求逆fftendzong=out(1,:)';%对out求
4、导,以便于原信号比较jiewei=n;fori=2:frame%将一系列的帧组合还原zong(jiewei-n1+1:jiewei)=(zong(jiewei-n1+1:jiewei)+out(i,1:n1)')/2;jiewei=jiewei+n-n1;zong=[zong;out(i,n1+1:end)'];endfigure(1);subplot(211);plot(x);%画加噪的原始语音信号axis([1,(n-n1)*frame+n,min(x),max(x)]);subplot(212)
5、;specgram(x,fs,1024,n,n1);%对应的鱼谱图figure(2);subplot(211);plot(zong);%画增强的语音信号axis([1,(n-n1)*frame+n,min(zong),max(zong)]);subplot(212);specgram(zong,fs,1024,n,n1);wavplay(x,fs);%输出音频wavplay(zong,fs);