www.pudn.com > audioProcessingtoolbox.rar > frame2amdf.m


function amdf=frame2amdf(frame, maxShift, plotOpt, mode) 
% FRAME2AMDF Frame to AMDF (average of magnitude difference function) for pitch tracking 
%	Usage: amdf=amdf(frame, maxShift, plotOpt); 
%	amdf: Returned amdf vector 
 
%	Roger Jang 20020404 
 
if nargin<1, selfdemo; return; end 
if nargin<2, maxShift=floor(length(frame)/2); end 
if nargin<3, plotOpt=0; end 
 
frameSize=length(frame); 
amdf=zeros(maxShift, 1); 
for i = 2:maxShift 
	amdf(i) = sum(abs(frame(1:frameSize-maxShift)-frame(i:frameSize-maxShift+i-1)));	% ¥­²¾ frame(1:frameSize-maxShift) 
%	amdf(i) = sum(abs(frame(1:maxShift) - frame(i:maxShift+i-1)));				% ¥­²¾ frame(1:maxShift) 
%	amdf(i) = floor(amdf(i)/(frameSize- maxShift));	% ¨D¥­§¡ 
end 
 
amdf = round(amdf/(frameSize - maxShift)); 
 
if plotOpt 
	subplot(2,1,1); 
	plot(frame, '.-'); 
	set(gca, 'xlim', [-inf inf]); 
	title('Frame'); 
	subplot(2,1,2); 
	plot(amdf, '.-'); 
	set(gca, 'xlim', [-inf inf]); 
	title('AMDF vector'); 
end 
 
 
% ====== Self demo 
function selfdemo 
waveFile='greenOil.wav'; 
[y, fs, nbits]=waveFileRead(waveFile); 
framedY=buffer2(y, 256, 0); 
frame=framedY(:, 250); 
plotOpt=1; 
feval(mfilename, frame, 128, plotOpt);