annotate Sirtassa/refineScore.m @ 2:13ec2fa02a26 tip

(none)
author Yannick JACOB <y.jacob@se12.qmul.ac.uk>
date Tue, 03 Sep 2013 15:33:42 +0100
parents 2cd427e000b0
children
rev   line source
y@0 1 function [binNb, width] = refineScore(mag,binNb)
y@0 2
y@0 3 toneFactor = 2^(1/12);
y@0 4
y@0 5 firstBin = floor((binNb+1)/toneFactor)-2;
y@0 6 lastBin = ceil((binNb+1)*toneFactor)+2;
y@0 7 firstBin = max(firstBin,1);
y@0 8 width =0;
y@0 9 if (firstBin<lastBin-1)
y@0 10 %pitch refinment
y@0 11 [maxB,indMax ]= max(mag(firstBin:lastBin));
y@0 12 maxIdx = firstBin+indMax-1;
y@0 13 if (maxB <0.9)
y@0 14 binNb =0;
y@0 15 elseif (maxIdx ~= lastBin && maxIdx ~= firstBin)
y@0 16 a = log(mag(maxIdx-1));
y@0 17 b = log(mag(maxIdx));
y@0 18 c = log(mag(maxIdx+1));
y@0 19 binNb = (maxIdx + (a - c)/(2*(a-2*b+c)))-1;
y@0 20 minIdx = floor(binNb);
y@0 21 maxIdx = ceil(binNb);
y@0 22 while(minIdx>0&&mag(minIdx)>0.1*maxB)
y@0 23 minIdx = minIdx-1;
y@0 24 end
y@0 25 while(mag(maxIdx)>0.1*maxB)
y@0 26 maxIdx = maxIdx+1;
y@0 27 end
y@0 28 width = 2*min( maxIdx -binNb+1,binNb- minIdx+1);
y@0 29 width = max(width,3);
y@0 30 else
y@0 31 % plot(mag(1:maxIdx+10))
y@0 32 % close all;
y@0 33 end
y@0 34 end
y@0 35