A list,

This chapter proposes a speech enhancement algorithm based on wiener filtering based on prior SNR estimation. The initial noise power spectrum is obtained by calculating the statistical average of silent segment, and the initial noise power spectrum and speech power spectrum with noise are smoothed to update the noise power spectrum. Finally, considering the rapid increase of noise at a certain frequency point, relevant verification is made. The algorithm can effectively suppress the noise with small or stable variation range, but the effect is not very good for the noise with wide variation range in practice.

1. Overview of voice enhancement

1.1 Related concepts of speech enhancement

Embedded in the speech system, the speech signal will inevitably be disturbed by the surrounding noise, thus affecting the quality and intelligibility of the speech.

Speech enhancement: in fact, it is to extract as pure speech as possible from noisy speech, improve speech quality and intelligibility, and improve the performance of speech communication system in noisy environment.

Noise is random and cannot be eliminated completely. The objective of speech enhancement is to reduce noise, eliminate background noise, improve speech quality, make the listener happy to accept, and improve speech intelligibility.

1.2 Relevant algorithms of speech enhancement

Because of many noise sources, the characteristics are different. The applications of speech enhancement processing systems vary widely.

Therefore, there is no speech enhancement algorithm that can be used in all kinds of noise environments. Different speech enhancement algorithms are adopted for different environments.

Speech enhancement algorithms can be divided into: speech enhancement algorithm based on periodicity, enhancement algorithm based on full pole model, enhancement algorithm based on short-time spectrum estimation, enhancement algorithm based on signal subspace and

Enhancement algorithm based on HMM.

According to the current development, short-time spectrum estimation is the most effective method. It includes spectrum subtraction, Wiener filtering, minimum mean square error short-time spectral amplitude estimation (MMSE-STSA) and minimum mean square error logarithmic spectral amplitude estimation (MMSE-LSA). In this paper, wiener filter is used to enhance speech processing.

Wiener filter speech enhancement theory based on prior SNR estimation

Prior SNR is a very important parameter in speech enhancement algorithm. Ephraim and Malah’s “direct decision” estimation is the most efficient and easiest way to calculate prior SNR.



Ii. Source code

clear all; clc; close all;

[xx, fs] = wavread('C5_3_y.wav'); % read data file xx=xx-mean(xx); % Eliminate dc component x=xx/ Max (abs(xx)); % amplitude normalization IS=0.25; % Sets the leading no-talk segment length wlen=200; % Sets the frame length to25ms
inc=80; % sets the frame shift to10ms
SNR=5; % SNR NIS=fix((IS*fs-wlen)/inc +1); % Find the number of frames alpha=0.95;

signal=awgn(x,SNR,'measured'.'db'); Output =Weina_Im(x,wlen,inc,NIS,alpha); output=output/max(abs(output));
len=min(length(output),length(x));
x=x(1:len);
signal=signal(1:len);
output=output(1:len); snr1=SNR_Calc(x,signal); % Calculate the initial SNR2 =SNR_Calc(x,output); % SNR = SNR2-SNR1 after denoising;fprintf('snr1 = % 5.4 f snr2 = % 5.4 f SNR = % 5.4 f \ n',snr1,snr2,snr); % drawing time = (0:len- 1)/fs; % Set the time subplot311; plot(time,x,'k'); grid; axis tight;
title('Pure speech waveform'); ylabel('value')
subplot 312; plot(time,signal,'k'); grid; axis tight;
title(['Voice noise ratio with noise =' num2str(SNR) 'dB']); ylabel('value') function frameout=enframe(x,win,inc) nx=length(x(:)); Nwin =length(win); % windowif (nwin == 1) % Check whether the window length is1If, for1, that is, len = win is not set; % is, frame length =winelselen = nwin; % No, frame length = window length endif (nargin < 3) % If there are only two parameters, set frame inc= frame length inc= len; end nf = fix((nx-len+inc)/inc); % FrameOut =zeros(NF,len); Indf = inc*(0:(nf- 1)). '; % Set the displacement position of each frame in x inds = (1:len); % Corresponds to each frame1:len
frameout(:) = x(indf(:,ones(1,len))+inds(ones(nf,1), :)); % Frames the dataif (nwin > 1If the argument includes a window function, multiply each frame by the window function w = win(:)'; Function frameOut = FilpFrame (x,win,inc) [NF,len]=size(x); nx=(nf-1) *inc+len; % FrameOut =zeros(nx,1); nwin=length(win); Winx =repmat(win') % if (nwin ~= 1) %,nf,1); x=x./winx; % remove windowing effect x(find(isINF (x)))=0; % removal in addition to0I get Inf endfor i=1:nf
    start=(i- 1)*inc+1;    
    xn=x(i,:)'; sig(start:start+len-1)=sig(start:start+len-1)+xn; endCopy the code

3. Operation results

Fourth, note

Version: 2014 a