von archre » 13.12.2009 (22:34)
Spannendes Thema.
Interessant ist ja mal darüber nachzudenken, welche DSP-Transformationen invertrierbar sind.
Fangen wir doch mal einfach an und nehmen nen simplen Bandpass-Filter an:
y[n] = gain * (x[n] - r * x[n-2]) + c1 * y[n-1] + c2 * y[n-2])
Da wir hier eine lineare Funktion vorliegen haben wird die Umkehrung schnell klar:
x[n] = 1/gain * (y[n] - c1 * y[n-1] - c2 * y[n-2]) + r * x[n-2]
Ergo können wir - mit bekannten Filterparametern - aus einem Bandpass-gefiltertem Signal das Originalsignal rekonstruieren - theoretisch.
Das Problem das jedoch auftreten wird ist ein numerisches, die transformierten Samples müssten unendliche Genauigkeit besitzen, um das Signal eindeutig zu rekonstruieren.
Weiteres Beispiel: Fouriertransformation.
Da wir lediglich einen diskreten Bereich berechnen können kommt es zwangsläufig zu Aliasing und Seitenbändern aufgrund der Fensterung, sofern das exakte Ausgangsmaterial nicht bekannt ist, ist es daher praktisch unmöglich das Signal exakt zu rekonstruieren. Dazu kommt die Unschärfe-Relation der DFT: Eine höhere Zeitauflösung geht automatisch mit einer schlechten Frequenzauflösung einher (und umgekehrt). Das sieht man wenn man in einem Audio-Editor seiner Wahl die sog. FFT-Size/Window-Size erhöht, erhöht sich zwar die Genauigkeit der Frequenzdarstellung, aber die Zeitdauer bis sich diese Darstellung ändert ist grösser (nein, das liegt nicht an der Geschwindigkeit des Rechners!).
Das angesprochene Pitchen ist ebenfalls ein Problem. Hier kommt es darauf an, was für ein Algorithmus verwendet wird. Mit Granularsynthese (Time-Stretching ohne die Tonhöhe zu verändern) haben wir aufgrund der Fensterung (ähnlich wie bei der DFT) Seitenbänder. Zusätzlich variieren die meisten Granularsynthese-Algorithmen noch verschiedene Parameter zufällig (in Ableton Live heisst das z.B. "Flux") um die Fensterung zu "verwischen", das ist dann eindeutig irreversibel.
Bei einem herkömmlichen Pitching muss man unterscheiden, ob nach oben oder nach unten gepitcht wird. Wird nach oben gepitcht wird Information verworfen - die selbe "Strecke" an Samples wird in kürzerer Zeit und somit mit weniger Samples pro Zeit (bei gleicher Samplerate) durchlaufen. Die verworfenen Samples sind natürlich verloren und können höchstens per Interpolation "geraten" werden.
Wenn man hingegen nach unten pitcht sieht die Sache anders aus, in dem Fall kommt Information hinzu, per Interpolation (ich verwende hierbei am liebsten kubische Splines) werden aus den vorhandenen Samples die fehlenden, dazwischenliegenden Samples geraten. Sofern der Algorithmus der das heruntergepitchte Material also wieder nach oben pitcht die selben Samples verwirft, die er per Interpolation hinzugefügt hat kann das Signal - theoretisch - wieder rekonstruiert werden. Theoretisch aufgrund der numerischen Ungenauigkeit, die ich bereits erwähnt habe.
Man kann sich diesen Sachverhalt leicht klar machen, wenn man eine simple Sinuswelle bei sagen wir 20000Hz erzeugt und diese auf 50Hz herunterpitcht. Je nachdem wie gut der verwendete Interpolationsalgorithmus ist (kubische Splines funktionieren imho ganz gut bei nem Sinus) werden entsprechend viele anharmonische Seitenbänder erzeugt.
Cheers und haltet euch mit Gegenbeweisen nicht zurück, evtl habe ich jetzt auf die Schnelle auch was übersehen.