redounas.m
来自「这是一个用于语音信号处理的工具箱」· M 代码 · 共 95 行
M
95 行
function [f]=redounasn4(f_nodup, p , a)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
%
% jmw
%
% 12/3/93
%
% function to deal with unassigned peaks in McCandless algorithm
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
VERB = 0; % level of verbosity for troubleshooting ...
f = f_nodup; % allocate mem
for j=1:4,
goodpk = find ( p(j) == f_nodup );
unassigned = isempty( goodpk );
if (unassigned)
if (VERB)
s=sprintf(' peak %d unassigned', j);
disp(s);
end;
% attempt to assign to an open formant slot
% STEP 4A ***********************
if (f_nodup(j) == 0)
% match, put avail peak in open slot
f(j) = p(j);
if (VERB)
s=sprintf(' MATCH: peak %d put in slot %d',j,j);
disp(s);
end;
else
% check mag of peak in existing slot
% STEP 4A part 2 ******************
if (VERB)
s=sprintf(' existing formant/peak is %f',...
f_nodup(j));
disp(s);
end;
p_index= find( f_nodup(j) == p );
done = 0;
if (a(j) < (0.5 *a(p_index)) ),
% throw out peak
%disp('need to throw out peak');
done = 1;
else
%disp(' peak ok');
% STEP 4B**********************
% only do for j={1,2 3}
if (j == 4)
done = 0;
else
if(f_nodup(j+1)==0)
% next highest f == 0
f(j+1) = f_nodup(j);
f(j) = p(j);
if (VERB)
disp(' SHIFT UP:');
s=sprintf(' f(%d) put in f(%d) and p(%d) put in f(%d)',j,j+1,j,j);
disp(s);
end;
done=1;
end;
end;
end;
% STEP 4C
if ( done==0),
if (j ==1)
;
else
if(f_nodup(j-1)==0)
% next lowest f == 0
f(j-1) = f_nodup(j);
f(j) = p(j);
if (VERB)
disp(' SHIFT DOWN:');
s=sprintf(' f(%d) put in f(%d) and p(%d) put in f(%d)',j,j-1,j,j);
disp(s);
end;
end;
end;
end;
end;
end;
end;
return;
⌨️ 快捷键说明
复制代码Ctrl + C
搜索代码Ctrl + F
全屏模式F11
增大字号Ctrl + =
减小字号Ctrl + -
显示快捷键?