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 + -
显示快捷键?