yading@10: function f0 = f0detection(mX, fs, ploc, pmag, ef0max, minf0, maxf0) yading@10: % Fundamental frequency detection function yading@10: % mX: magnitude spectrum, fs: sampling rate, ploc, pmag: peak loc and mag, yading@10: % ef0max: maximim error allowed, minf0: minimum f0, maxf0: maximum f0 yading@10: % f0: fundamental frequency detected yading@10: N = length(mX)*2; % size of complex spectrum yading@10: nPeaks = length(ploc); % number of peaks yading@10: f0 = 0; % initialize output yading@10: if(nPeaks>3) % at least 3 peaks in spectrum for trying to find f0 yading@10: nf0peaks = min(50,nPeaks); % use a maximum of 50 peaks yading@10: [f0,f0error] = TWM(ploc(1:nf0peaks),pmag(1:nf0peaks),N,fs,minf0,maxf0); yading@10: if (f0>0 && f0error>ef0max) % limit the possible error by ethreshold yading@10: f0 = 0; yading@10: end yading@10: end;