资源简介
基于人耳听觉掩蔽的维纳滤波子空间算法结合了维纳滤波与子空间语音增强各种的优点,达到了很好的语音增强效果
代码片段和文件信息
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
评论
共有 条评论