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

📄 solute.m

📁 提供了集中语音去噪的matlab代码
💻 M
字号:
%Spectral Subtraction Algorithm
winsize=128;                          % 窗长
n=0.04;                               % 噪声水平
[speech,fs,nbits]=wavread('speech_clean.wav');         % 读入数据 
size=length(speech);
numofwin=floor(size/winsize);             % 帧数 
 
%加窗
ham=hamming(winsize)';              %Generates Hamming Window
hamwin=zeros(1,size);                %Vector for window gain
enhanced=zeros(1,size);               %Vector for enhanced speech

%产生带噪信号
x=speech'+ n*randn(1,size);          %Contaminates signal with white noise

%噪声估计
noisy=n*randn(1,winsize);           %Sample of noise
N = fft(noisy);
nmag= abs(N);                       %Estimated noise magnitude spectrum

for q=1:2*numofwin-1
   frame=x(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2);  %50 percent overlap
hamwin(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)=hamwin(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)+ham; %Window gain

    %对带噪语音进行DFT 
    y=fft(frame.*ham);
    mag = abs(y);			%Magnitude Spectrum 
    phase = angle(y);		%Phase Spectrum
    %幅度谱减
    for i=1:winsize
	    if  mag(i)-nmag(i)>0
            clean(i)= mag(i)-nmag(i);
        else
            clean(i)=0;
	    end
    end
    %在频域中重新合成语音 
    spectral= clean.*exp(j*phase);
%IDFT并重叠相加
    enhanced(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)=enhanced(1+(q-1)*winsize/2:winsize+(q-1)*winsize/2)+real(ifft(spectral));    
end
% 除去Hamming窗引起的增益
for i=1:size
    if hamwin(i)==0
        enhanced(i)=0;
    else
        enhanced(i)=enhanced(i)/hamwin(i);
    end
end 

SNR1 = 10*log10(var(speech')/var(noisy));               %加噪语音信噪比
SNR2 = 10*log10(var(speech')/var(enhanced-speech'));     %增强语音信噪比
wavwrite(x,fs,nbits,'noisy.wav');                %输出带噪信号
wavwrite(enhanced,fs,nbits,'enhanced.wav');         %输出增强语音
figure(1),subplot(3,1,1);plot(speech');                 %原始语音波形
title(['Original Voice   (n=',num2str(n),')' ]);
figure(2),specgram(speech');                     %原始语音语谱
title(['Original Voice   (n=',num2str(n),')' ]);
figure(1),subplot(3,1,2); plot(x);                       
title(['Noise Added (SNR=',num2str(SNR1),'dB)']);
figure(3),specgram(x);                                %加噪语音语谱
title(['Noise Added (SNR=',num2str(SNR1),'dB)']);
figure(1),subplot(3,1,3);plot(enhanced);                 
title(['Improved Voice (SNR=',num2str(SNR2),'dB SNR=',num2str(SNR2-SNR1),'dB)']);
figure(4),specgram(enhanced);                         
title(['Improved Voice (SNR=',num2str(SNR2),'dB ¤SNR=',num2str(SNR2-SNR1),'dB)']);

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -