⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 speechenhance.m

📁 MATLAB环境下对于含平稳噪声的带噪语音利用谱相减算法进行处理
💻 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 + -