• 大小: 2KB
    文件类型: .rar
    金币: 2
    下载: 0 次
    发布日期: 2024-01-25
  • 语言: Matlab
  • 标签: 子空间  

资源简介

基于人耳听觉掩蔽的维纳滤波子空间算法结合了维纳滤波与子空间语音增强各种的优点,达到了很好的语音增强效果

资源截图

代码片段和文件信息

function mypklt(noisy_fileoutfilecleanfile)
if nargin<3
   fprintf(‘Usage: mypklt(noisy_fileoutfilecleanfile) \n\n‘);
   return;
end
%-------------------------读入语音文件---------------------------
[noisy_speech Srate NBITS]= wavread( noisy_file);
[clean_speech]= wavread(cleanfile);

%----------------------------参数定义----------------------------
subframe_dur= 4;                                  %子帧长度 4 ms
len= floor( Srate* subframe_dur/ 1000);    
P= len; 
frame_dur= 32;
N= frame_dur* Srate/ 1000; 
Nover2= N/ 2;                                      %窗口交叠50%
K= N;
frame_window= hamming( N);                         %汉明窗
subframe_window= hamming( P); 
eta_v= 0.08;  

n_start= 1;
nFFT=2*len;
Nframes= floor( length( noisy_speech)/ (N/ 2))- 1; % 帧数  
x_overlap= zeros( Nover2 1);

%============================开始处理===========================
for n=1:Nframes
    
% ----------------------带噪语音协方差矩阵 ----------------------
    noisy= noisy_speech( n_start: n_start+ N- 1);     
    noisy_autoc= xcorr( noisy len- 1 ‘biased‘);
    Ry= toeplitz( noisy_autoc( len: 2* len- 1));    
    
% --------------------估计/更新噪声(最小值跟踪)----------------
     insign=frame_window.*noisy_speech(n_start:n_start+N-1);      
     spec=fft(insignnFFT);                        %每帧傅立叶变换
     ns_ps=abs(spec).^2.*15;                       %功率谱
      
   if   n == 1    
        len_val = length(ns_ps);
        parameters = struct(‘n‘2‘len‘len_val‘alpha‘0.7‘beta‘0.96‘gamma‘0.998‘noise_ps‘ns_ps‘pxk_old‘ns_ps...
           ‘pxk‘ns_ps‘pnk_old‘ns_ps‘pnk‘ns_ps);  
   else
        parameters = doblinger_estimation(ns_psparameters);
   end 
     noise_psd= parameters.noise_ps;
     noise_t=sqrt(noise_psd); 
     noise=ifft(noise_t);  
     noise_autoc= xcorr( noise len- 1 ‘biased‘);  
     Rn= toeplitz( noise_autoc( len: end));
     bartlett_win= bartlett( 2* len- 1);
     n_autoc_win= noise_autoc.* bartlett_win; 
      for k= 0: N- 1
         Phi_w( k+ 1)= n_autoc_win( P: 2*P-1)‘ * 2* ...
          cos( 2* pi* k* (0: P- 1)‘/ N)- n_autoc_win( P); 
       end
   if n==1
     Phi_w=Phi_w‘;
   end
   
    Rx= Ry- Rn; 
    [U D]= eig( Rx);
    dD= diag( D);                                    %对角元素
    dD_Q= find( dD> 0); 
    Lambda= dD( dD_Q); 
    U1= U( : dD_Q);  
    
    U1_fft= fft( U1 N); 
    V= abs( U1_fft).^ 2;     
    Phi_B= V* Lambda/ P;    
%--------------------------计算掩蔽阀值-----------------------------
    Phi_mask= mask( Phi_B( 1: N/ 2+ 1) N Srate NBITS);
    Phi_mask= [Phi_mask; flipud( Phi_mask( 2: N/ 2))]; 
    Theta= V‘* Phi_mask/ K; 
    Ksi= V‘* Phi_w/ K; 
          
    gain_vals= exp( -eta_v* Ksi./ min( Lambda Theta));    
    G= diag( gain_vals);
    H= U1* G* U1‘;
    
%-----------------------------子帧分析------------------------------   
      sub_start= 1; 
      sub_overlap= zeros( P/2 1);
  for m= 1: (2*N/P- 1)
      sub_noisy= noisy( sub_start: sub_start+ P- 1

 属性            大小     日期    时间   名称
----------- ---------  ---------- -----  ----

     文件       4179  2015-06-02 20:13  语音增强算法—matlab\mypklt.m

     文件        102  2015-07-22 09:43  语音增强算法—matlab\基于人耳听觉掩蔽的维纳滤波子空间算法.txt

     目录          0  2015-07-22 09:43  语音增强算法—matlab

----------- ---------  ---------- -----  ----

                 4281                    3


评论

共有 条评论