資源簡介
譜減法語音增強 用Matlab是實現譜減法語音增強達到消噪
代碼片段和文件信息
%基本譜減法
clear;
%[xxfs]=wavread(‘E:\mywhisper\shu.wav‘);
%[xxfs]=wavread(‘E:\speech\x\w1xun_01.wav‘);
%[xxfs]=wavread(‘E:\speech\耳語音切割\b\w1ba_5‘);
[xxfs]=wavread(‘MIC0.wav‘);%?讀取音頻文件yuan.wav,并返回采樣數據給變量xx及采樣率Fs
[teamrow]=size(xx);%將數組xx的行數賦給team列數賦給row
if?row==2
????x=(xx(:1)+xx(:2))/2;
????yy=x;
%如果語音信號xx為2列,即信號為雙聲道,則將其轉換成單聲道信號,即取兩列的平均值賦給x,并將x的值賦給yy?
else
????x=xx;
????yy=x;
%若語音信號xx為單聲道,則將xx的值賦給x,并將x的值賦給yy
end
x=x-mean(x)+0.1*rand(length(x)1);
N=length(x);%將語音信號長度賦給變量N
n=220;%對語音信號進行分幀,幀長為220
n1=160;%幀移為160
frame=floor((N-n)/(n-n1));%將分幀數賦給變量frame
%frame=floor(N/n);
for?i=1:frame
????y1=x((i-1)*(n-n1)+1:(i-1)*(n-n1)+n).*hamming(n);
%對每段分幀進行加窗處理
????fy=fft(y1n);
????nen(i:)=abs(fy).^2;%?將頻域信號功率賦給矩陣變量nen
????ang(i:)=angle(fy);%將頻域信號的相位角賦給矩陣變量ang
end
yuzhi=sum(sum(nen(2:5:)))/(4*n);
for?i=1:frame
????nen(i:)=nen(i:)-yuzhi;
????nen(ifind(nen(i:)<0))=0;
????%chuli=nen(i1:n/2);
????%chuli=chuli-yuzhi;
????%chuli(find(chuli<0))=0;
????%nen(i:)=[chulifliplr(chuli)];????
????%?nen(i:)=filter(1[0.5?0.5]nen(i:));
???%?nen(ifind(nen(i:)<0))=0;
end
for?i=1:frame
????nen(i:)=sqr
評論
共有 條評論