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