Mercurial > hg > yjdafx13bpr
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 |