s_det3a.m

来自「这是一个用于语音信号处理的工具箱」· M 代码 · 共 146 行

M
146
字号
disp(' ');
disp('SCRIPT:   s_det3a.m ***********************************************');
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% 	jmw 
%	11/22/93
% 	Weinstein, et al., algorithm for parsing based
% 	upon RMS values of BP filters
% 	gain calculated from sqrt of res NRG
% 
% 	this script calculates volume function
% 	and segments silent segments
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
	PLT = 1;		% flag to plot results
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

file_string = sprintf('temp/%s.mat', name);
s=sprintf('loading ./%s from hard disk ...',file_string);
disp(s);
s=sprintf('load %s', file_string);
eval(s);
signal = eval(name);

file_string = sprintf('temp/%s_Data.mat', name);
s=sprintf('loading ./%s from hard disk ...',file_string);
disp(s);
s=sprintf('load %s', file_string);
eval(s);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% determine level and variance of background noise (1st 100 ms)
p = 10*log10(power);
mean_sil = mean(p(1:20));  % first twenty frames should be silence
                           % and classified as unvoiced by Hu's program
std_sil = std(p(1:20));

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% compute freq response from 300 - 5000 Hz
disp('calculating volume function: 300 - 5000 Hz ...');

N=256;
start = 17;
stop = N;
[m,n]=size(cofa);
r = zeros(m,1);

for i=1:m-1,
	a = range(i,1);
	b = range(i,2);
	
	res_nrg = residue(a:b) * residue(a:b)' ;
	gain(i) =	sqrt(res_nrg); 
	
	[h,w]=freqz(gain(i),cofa(i,:),N);
	mag=abs(h);
	r(i)=sqrt(mag(start:stop)' * mag(start:stop));
	r(i) = r(i) / (b-a+1);
	r(i) = 20*log10(r(i) + eps);	
end;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% declare new variable
VUS_voicetype = voicetype;

% convert 'T' to 'v'
disp('converting all T frames to v frames ...');
for i=1:m,
	if ( VUS_voicetype(i) == 'T' )
		VUS_voicetype(i) = 'v';
	end;
end;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% find  silent segments

k_s = 2.0;	% s threshold scale factor

% set s threshold to k_s sigma above mean
THRESH_S = mean_sil + ( k_s * std_sil);

s=sprintf('silence threshold set at %d times ', k_s);
s1=sprintf('std. dev. of background noise power');
s = [ s s1];
disp(s);

for i=1:m,
	if ( voicetype(i) == 'v' ) 
		% voiced, do nothing
		;
	elseif (voicetype(i) == 'u')
		% unvoiced, now check level with s threshold
		if ( r(i) < THRESH_S )
			VUS_voicetype(i) = 's';
		end;
	end;
end;

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% save results to _Data file

s=sprintf('saving ./%s_Data.mat to disk ...',name); 
disp(s);

s=sprintf('save temp/%s_Data cofa power range residue voicetype VUS_voicetype',...
        name);
eval(s);

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% clean up time
clear N                   k_s                 residue             
clear THRESH_S            m                   s                   
clear VUS_voicetype       mag                 s1                  
clear a                   mean_sil            signal              
clear b                   n                   start               
clear bond_CH                                 std_sil             
clear cofa                p                   stop                
clear file_string         power               voicetype           
clear gain                r                   w                   
clear h                   range               
clear i                   res_nrg 

s=sprintf('clear %s',name);
eval(s);
clear s

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% display results, if desired

if (PLT)
	clear PLT
	seg3_3;			% call plotting program
end;

clear PLT

⌨️ 快捷键说明

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