Miller Smith Puckette's

Phase-locked Vocoder


Phasenvocoder

Der Phasen-Vocoder als Werkzeug zur zeitlichen Dehnung bzw. Stauchung eines Signals, ohne dabei dessen spektrale Zusammensetzung zu ändern, wurde zum ersten Mal von Flanagan in den sechziger Jahren des zwanzigsten Jahrhunderts vorgeschlagen.

Dabei wird angenommen, dass jeder Klang aus Sinuskomponenenten mit relativ konstanter Frequenz und Amplitude zusammengesetzt ist. Sind diese Komponenten bekannt, so ist es ein Leichtes, die zeitliche Abfolge dieser Komponenten zu modifizieren, ohne die spektrale Struktur zu verändern. Ebenso einfach ist es, Eingriffe in das Spektrum zu tätigen, ohne die Zeitachse zu berühren.

Zur Analyse eines beliebigen Eingangssignals kann man die DiskreteFourierTransformation
FFT{x[n]}[k] = sum_{n=0..N-1}{x[n]*e^(-2pi*i*n*k/N)} (1)
verwenden.

Wird das Signal gefenstert, so erhält man
X[s,k] = FFT{ω[n]*x[n-s]}[k] (2)

Wenn man annimmt, dass sich in jedem Kanal k der DFT nur eine Sinuskomponente befindet, so erhält man als Ergebnis ein komplexes Spektrum und somit Betrag und Phase der Komponenten in den einzelnen Kanälen bzw. bins. Nimmt man weiters an, dass sich die Frequenz einer Komponente nicht ändert, so erhält man diese als Änderung der Phase mit der Zeit, also ω = (δφ) / (\delta;t).

Δφ erhält man durch Berechnung zweier Spektren, die zeitlich um die Hopsize H = Δt getrennt sind. Da die Phase nur Werte zwischen und annehmen kann, ist Δφ bis auf ein Vielfaches von bestimmt.
ω[k]=(arg X[t,k] - arg X[s,k] + 2πp)/H;  H=t-s (3)

Um bei der Resynthese eine kontinuierlichen Phasenänderung einer Sinuskomponente zwischen zwei Zeitpunkten u(i-1) und u(i) zu erhalten, errechnet sich die Resynthese-Phase aus:
arg Y[u(i),k] = arg Y[u(i-1),k] + (u(i)-u(i-1))ω[k] (4)

Der Betrag einer Sinuskomponente ist bei Analyse und Resynthese gleich:
abs(Y[u(i),k]) = abs(X[t(i),k]) (5)

horizontale Phasenkohärenz

Phasiness ist ein Effekt, der durch die nicht eindeutige Bestimmung von Δφ um den Term 2πp auftritt. Er erscheint nur, wenn durch einen nicht-ganzzahliger Zeitdehnungsfaktor α dieser Term bei der Resynthese zu einem nicht-ganzzahligen Vielfachen von wird.

Die Wahl von t(i) und s(i) ist frei, weshalb beim traditionellen Phasen-Vocoder s(i+1) = t(i) gewählt wird, um sich die Berechnung von einer der zwei DFTs zu ersparen.

Wählt man nun aber
t(i)-s(i)=u(i)-u(i-1) (6)
so bleibt der nicht-determinierte Anteil der Phase immer ein ganzzahliges Vielfaches von , dies allerdings auf Kosten einer zweiten DFT :

Y[u(i),k] = X[t(i),k]*(Y[u(i-1),k]/X[s(i),k])/abs(Y[u(i-1),k]/X[s(i),k]) (7)
Da sich gleichzeitig die umständliche Berechnung aller Phasen-Argumente durch die arctan-Funktion vermeiden läßt, ist dieser Ansatz trotz der zusätzlichen DFT recheneffizienter.

phase-locking

Aufgrund der Eigenschaften der gefensterten DFT ist jede Sinuskomponente eines Signals nicht nur im zugehörigen Kanal sichtbar, sondern, in Abhängigkeit vom verwendeten Fenster, auch in anderen Kanälen. Verwendet man, zum Beispiel, ein nicht-nullphasiges Hanning-Fenster, so ist die Hauptkeule der DFT im Allgemeinen 4 bins breit. Liegt die analysierte Sinuskomponente genau zwischen zwei Kanälen, so wird die Amplitude in diesen beiden Kanälen fünfmal so groß sein, wie in den beiden Außenkanälen. Liegt die Komponente jedoch genau in der Mitte eines Kanals, so ist die Hauptkeule nur 3 bins breit, wobei die Amplitude des mittleren Kanals doppelt so groß ist, wie die der beiden Nachbarkanäle.

Bei der Resynthese tragen nun alle Kanäle, in denen Anteile ≠ 0 vorhanden sind, zu einer Komponente bei. Da im Allgemeinen die Resynthese-Phasen in den Kanälen nicht übereinstimmen, kommt es zu Phasenüberlagerungen und Auslöschungen.

Ändert sich nun die Frequenz mit der Zeit, so ändert sich auch der so entstehende Fehler. Dadurch kommt es zu Amplitudenmodulationen, die sich in der für den Phasen-Vocoder typischen Reverberance, also einer gewissen Halligkeit, äußern. Es empfiehlt sich daher, die Phasen von benachbarten Kanälen einander anzugleichen, also phase locking einzusetzen. Puckette schlägt hierfür eine sehr einfache und dennoch effektive Vorgehensweise vor: Anstatt die Resynthese-Phase nur durch Betrachtung des zugehörigen Kanales zu errechnen, läßt er auch die Phasen der Nachbarkanäle einfließen, und zwar durch simple gewichtete Addition. Da die Nachbarkanäle im Idealfall genau gegenphasig sind, werden deren Negative verwendet.
Z[u(i-1),k]=Y[u(i-1),k] - μY[u(i-1),k-1] - μY[u(i-1),k+1] (8)

Die Phase einer Summe von komplexen Zahlen wird größtenteils vom Summanden mit dem größten Betrag bestimmt. Da der Kanal, in dem die Sinuskomponente "wirklich" liegt, immer den größten Betrag aufweist, gleichen die Nachbarkanäle ihre Phasen derjenigen der Hauptkomponente an.

Damit ist das Resynthese-Signal im k-ten Kanal :
Y[u(i),k] = X[t(i),k]*(Z[u(i-1),k]/X[s(i),k])/abs(Z[u(i-1),k]/X[s(i),k]) (9)

In der Praxis ergibt sich interessanterweise für μ > 1 kein allzu großer Einfluß dieses Gewichtes μ auf das hörbare Ergebnis.

Whether using phase locking between adjacent channels of the phase vocoder is truly the best solution to the problems cited here cannot be answered yet. We lack an effective measure of the quality of the resynthesized sound. However, at least the question of fidelity of resynthesis has now been raised, and it has been established here that the phase vocoder is built upon assumptions whose ramifications are not completely understood. If we can put the phase vocoder on a steadier foundation, we might have more control over what comes out of it.


Literatur


this document was generated on 13 January 2000 using the texi2html translator version 1.54.
dies Dokument wurde in HTML 4.0 geschrieben, der Browser sollte das unterstützen

es existiert auch ein PostScript-File
es existiert auch ein pd-patch als Implementation des Phase-locked Vocoders