📄 speechenhance.m
字号:
N=100000;
w=hamming(256);
k=0;
daopuc=0.1;
silencetime=100;
noisea=0.85;
dturn=1;
frequencyambe(1:256)=0;
for i=1:10
daofreaverage(i)=0;
end;
speech(1:100000)=0;
[speech]=wmvread('origin.wmv');
while 1
noisejudge=0;
if N<128
break;
end;
if k==780
break;
end;
%if mod(k,10)==0
% display(k);
%end;
% if k==0
% for i=1:256
% windowdata(i)=w(i)*voice(i);
% end;
% k=k+1;
%else
for i=1:256
windowdata(i)=w(i)*voice(128*k+i);
end;
k=k+1;
% end;
N=N-128;
%VAD
frequency=fft(windowdata);
frequencyam=abs(frequency);
frequencyphase=phase(frequency);
frequencyamlog=log(frequencyam);
daofrequency=real(ifft(frequencyamlog));
if k<silencetime
noise=1;
noisejudge=1;
if k==1
for i=1:10
daofreaverage(i)=daofrequency(i);
end;
else
if(dturn==101)
dturn=1;
end;
d(dturn)=0;
for i=1:10
d(dturn)=d(dturn)+power((daofreaverage(i)-daofrequency(i)),2);
end;
d(dturn)=power(d(dturn),0.5);
dturn=dturn+1; %?
thr=mean(d)+2*std(d); %?
for i=1:10
daofreaverage(i)=daofreaverage(i)*(1-daopuc)+daofrequency(i)*daopuc;
end;
end;
else
distance=0;
for i=1:10
distance=distance+power((daofreaverage(i)-daofrequency(i)),2);
end;
distance=power(distance,0.5);
if distance<thr
noise=1;
if distance<0.5*thr
noisejudge=1;
end;
if(dturn==101)
dturn=1;
%display('dturn=');
end;
d(dturn)=distance;
dturn=dturn+1;
thr=mean(d)+2*std(d);
for i=1:10
daofreaverage(i)=daofreaverage(i)*(1-daopuc)+daofrequency(i)*daopuc;
end;
else
noise=0;
end;
%display(noise);
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
if k==1;
noisefre=frequencyam;
else
if noise==1
noisefre=noisefre*noisea+frequencyam*(1-noisea);
end;
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
noisefre=noisefre;
for i=1:256
%if(frequencyam(i)<max(noisefre))
% frequencyam(i)=min(frequencyam(i),frequencyambe(i));
%end;
if frequencyam(i)-2.2*noisefre(i)<0.1*noisefre(i)
frequencyam(i)=0.1*noisefre(i);
else
frequencyam(i)=frequencyam(i)-2.2*noisefre(i);
end;
% if noisejudge==1
% frequencyam(i)=0;
% end;
frequency(i)=complex(frequencyam(i)*cos(frequencyphase(i)),frequencyam(i)*sin(frequencyphase(i)));
end;
%frequencyambe=frequencyam;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
speechthis=real(ifft(frequency));
for i=(1+128*(k-1)):128*(k+1)
speech(i)=speechthis(i-128*k+128)+speech(i);
end;
end;
wmvwrite(speech,'enhanced.wmv');
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -