Dies nennen wir im Pitch-Detection-Business das " Oktavproblem ".
Zunächst würde ich die AMDF in ASDF ändern. Und ich würde die Fenstergröße nicht verringern, wenn die Verzögerung zunimmt. (Außerdem ändere ich die Notation auf das, was ich für konventioneller halte. " " ist ein zeitdiskretes Signal.)x[n]
Die Average Squared Difference Function (ASDF) von in der Nachbarschaft von Probe x [ n 0 ] ist:x[n]x[n0]
Qx[k,n0]≜1N∑n=0N−1(x[n+n0−⌊N+k2⌋] − x[n+n0−⌊N+k2⌋+k])2
ist dieFunktion und wenn k gerade ist, dann ist ⌊ k⌊⋅⌋floor()
k .⌊k2⌋=⌊k+12⌋=k2
Nun erweitert den Platz und überlegen , was die Summierungen aussehen wie (nicht , dass N ist bis ins Unendliche gehen, aber um Ihnen eine Idee zu geben , wenn N groß ist). Die ASDF steht in direktem Zusammenhang mit der Autokorrelation. Es ist im Wesentlichen die auf den Kopf gestellte Autokorrelation. Diese Schritte werde ich dir überlassen. Schauen Sie sich diese Antwort an.N→∞N N
Betrachten Sie nun diese endliche "Autokorrelation" (in der Nähe der Stichprobe ), die aus dem ASDF definiert wurde:x[n0]
Rx[k,n0]=Rx[0,n0]−12Qx[k,n0]
wo
Rx[0,n0]≜1N∑n=0N−1(x[n+n0−⌊N2⌋])2
Da und Q.Qx[0,n0]=0 für alle Verzögerungen k ist, bedeutet dies, dass R x [ k , n 0 ] ≤ R x [ 0 , n 0 ] für alle Verzögerungen ist k .Qx[k,n0]≥0kRx[k,n0]≤Rx[0,n0]k
Nehmen wir für eine Minute an, dass mit der Periode P periodisch ist (und P zufällig eine ganze Zahl ist)x[n]PP
x[n+P]=x[n]∀n
und und R x [ m P , n 0 ] = R.Qx[mP,n0]=0 für eine beliebige ganzzahlige Anzahl von Perioden ( m ist eine ganze Zahl). Sie erhalten also einen Peak bei k = 0 und bei k gleich einem anderen Vielfachen von P, wenn xRx[mP,n0]=Rx[0,n0]≥Rx[k,n0]mk=0kP ist periodisch. Wenn x [ n ] istnichtperfekt periodisch, was wir vielleicht erwarten ist der größte Peak bei k = 0 , ein weiterer Peak (aber etwas kleiner) bei k = P (die Zeitwir suchen) und zunehmend kleinere Peaks für größere Vielfache von P .x[n]x[n]k=0k=PP
Das Oktavproblem tritt also aus mehreren Gründen auf. Erstens ist nicht unbedingt eine ganze Zahl. Das ist ein Interpolationsproblem, keine große Sache. P
Der zweite Grund und das schwierigere Problem ist das der Subharmonik . Stellen Sie sich vor, Sie hören einen schönen periodischen Ton mit genau A-440 Hz und es klingt wie ein A, das 9 Halbtöne über dem mittleren C liegt. Nehmen wir nun an, jemand fügt diesem Ton eine sehr kleine Amplitude (wie etwa 60 dB) A hinzu -220? Wie wird es klingen und was ist mathematisch die "wahre" Periode?
Auswahl des "richtigen" Peaks für den Zeitraum.
Angenommen, Sie führen Ihre Notiz durch einen DC-Sperrfilter, sodass der Mittelwert von Null ist. Es stellt sich heraus, dass dies den Mittelwert der Autokorrelation R x verursachtx[n] für jedes n 0 ebenfalls Null ist (oder nahe daran liegt, wenn N groß ist). Das bedeutet, dass R x [ k , n 0 ] summieren muss (über k ), um ungefähr Null zu sein, was bedeutet, dass es so viel Fläche über Null gibt wie unter.Rx[k,n0]n0NRx[k,n0]k
Okay, repräsentiert die Potenz von x [ n ] in der Nähe um n = n 0 und muss nicht negativ sein. R x [ k , n 0 ] überschreitet niemals R x [ 0 , n 0 ] , kann jedoch so groß werden, wie es ist, wenn x [ n ] periodisch ist. R x [ P , n 0 ]Rx[0,n0]x[n]n=n0Rx[k,n0]Rx[0,n0]x[n] wenn x [ n + P ] = x [ n ] . Wenn also x [ n ] mit der Periode P periodisch istund Sie eine Reihe von Peaks haben, die durch P voneinander beabstandet sind,und Sie eine Idee haben, wie hoch diese Peaks sein sollten. Und wenn die Gleichstromkomponente von R x [ k , n 0 ] Null ist, dh zwischen den Spitzen liegt,musssie negative Werte haben.Rx[P,n0]=Rx[0,n0]x[n+P]=x[n]x[n]PPRx[k,n0]
Wenn "quasi-periodisch" war, sieht ein Zyklus von x [ n ] einem benachbarten Zyklus sehr ähnlich, aber nicht so sehr einem Zyklus von x [ n ] , der zeitlich weiter unten im Signal liegt. Das heißt, der erste Peak R x [ P , n 0 ] ist höher als der zweite bei R x [ 2 P , n 0 ] oder der dritte R x [ 3 P , n 0 ].x[n]x[n]x[n]Rx[P,n0]Rx[2P,n0]Rx[3P,n0]. Man könnte die Regel verwenden, um immer den höchsten Peak auszuwählen und zu erwarten, dass der höchste Peak immer der erste ist. Aber wegen unhörbarer Subharmonik ist das manchmal nicht der Fall. manchmal ist der zweite oder möglicherweise der dritte Peak ach so etwas höher. Da die Periode wahrscheinlich keine ganzzahlige Anzahl von Abtastwerten ist, sondern k in R x [ k , n 0 ] immer eine ganze Zahl ist, liegt der wahre Peak wahrscheinlich zwischen ganzzahligen Werten von k . Selbst wenn Sie interpolieren würden, wo der glatte Peak ist (was ich empfehle und die quadratische Interpolation gut genug ist) und wie hoch er wirklich zwischen der ganzen Zahl k liegtPkRx[k,n0]kkkönnte Ihre Interpolationsalge einen Peak etwas höher oder etwas niedriger machen als er wirklich ist. Die Auswahl des absolut höchsten Peaks kann also dazu führen, dass Sie den zweiten über den ersten Peak (oder umgekehrt) fälschlicherweise auswählen, wenn Sie den anderen wirklich wollten.
Irgendwie müssen Sie die Peaks bei zunehmendem k behindern , damit der erste Peak einen leichten Vorteil gegenüber dem zweiten und der zweite gegenüber dem vierten (die nächste Oktave nach unten) usw. hat. Wie machen Sie das?k
Sie tun dies, indem Sie multiplizieren Rx[k,n0]kk=2Pk=P
k−α Rx[k,n0]
x[n]PP
Rx[2P,n0]=Rx[P,n0]
aber
(2P)−αRx[2P,n0](2P)−αRx[P,n0]=<P−αRx[P,n0]
Der Faktor, um den die Spitze für eine Tonhöhe von einer Oktave niedriger reduziert wird, ist das Verhältnis
(2P)−αRx[2P,n0]P−αRx[P,n0]=(2P)−αP−α=2−α
Wenn Sie also Ihrem ersten Peak einen Anstieg von 1% gegenüber dem zweiten Peak geben möchten, bedeutet dies, dass Sie die Tonhöhe nicht als subharmonische Tonhöhe auswählen, es sei denn, die Autokorrelation der subharmonischen Tonhöhe ist mindestens 1% höher als die erste Peak würden Sie für lösenα
2−α=0.99
Dies ist die konsistente Methode, um den Peak, der der subharmonischen Tonhöhe eine Oktave darunter entspricht, zu gewichten, zu betonen oder zu beeinträchtigen.
α