Ich habe gehört, dass mit der Hilbert-Transformation die Hüllkurve eines Signals berechnet werden kann. Wie funktioniert das? Und wie unterscheidet sich diese "Hilbert-Hüllkurve" von der Hüllkurve, die man durch einfaches Gleichrichten eines Signals erhält?
Ich bin speziell daran interessiert, eine Möglichkeit zu finden, eine Hüllkurve für die Dynamikkomprimierung zu berechnen (dh die Lautstärke der lauten Teile eines Audiosignals automatisch zu verringern).
Antworten:
Die Hilbert-Transformation wird zur Berechnung des "analytischen" Signals verwendet. Siehe zum Beispiel http://en.wikipedia.org/wiki/Analytic_signal . Wenn es sich bei Ihrem Signal um eine Sinuswelle oder eine modulierte Sinuswelle handelt, sieht die Größe des analytischen Signals tatsächlich wie die Hüllkurve aus. Die Berechnung der Hilbert-Transformation ist jedoch nicht trivial. Technisch erfordert es einen nicht-kausalen FIR-Filter von beträchtlicher Länge, so dass eine angemessene Menge an MIPS, Speicher und Latenz erforderlich ist.
Für ein Breitband-Signal kommt es wirklich darauf an, wie Sie die "Hüllkurve" für Ihre spezifische Anwendung definieren. Für die Anwendung der Dynamikkomprimierung benötigen Sie eine Metrik, die gut mit der Wahrnehmung der Lautstärke über die Zeit korreliert. Die Hilbert-Transformation ist dafür nicht das richtige Werkzeug.
Eine bessere Option wäre, einen A-bewerteten Filter ( http://en.wikipedia.org/wiki/A-weighting ) anzuwenden und dann einen verlustbehafteten Peak oder einen verlustbehafteten RMS-Detektor zu erstellen . Dies korreliert ziemlich gut mit der wahrgenommenen Lautstärke im Laufe der Zeit und ist relativ billig zu machen.
quelle
Mit der Hilbert-Transformation können Sie auf folgende Weise eine Hüllkurve berechnen. (Ich werde es als MATLAB-Code schreiben):
Ich habe momentan keine Zeit, die Mathematik aufzuschreiben (ich werde es später versuchen), aber sagen Sie ganz einfach, Ihr Signal ist eine Sinuswelle. Die Hilbert-Transformation eines Sinus ist ein -cosine. (Mit anderen Worten, die Hilbert-Transformation gibt Ihnen immer ein um -90 Grad phasenverschobenes Signal - mit anderen Worten die Quadratur).
Wenn Sie Ihr Signal (die Sinuswelle) zu
j
Ihrem Hilbertsignal (-cosine wave) addieren, erhalten Sie:Das ist auch e ^ (j * (wt - pi / 2)).
Wenn Sie also den absoluten Wert davon nehmen, erhalten Sie 1, das ist Ihr Umschlag. (Für diesen Fall).
quelle
Mir sind mindestens zwei verschiedene Möglichkeiten bekannt, um die Amplitudenhüllkurve aus einem Signal abzurufen.
Die Schlüsselgleichung lautet:
Der einfachste Weg, den ich kenne, um Q zu erhalten, besteht darin, S (t) mit FFT in eine Reihe sinusförmiger Komponenten zu zerlegen, jede Komponente eine Vierteldrehung gegen den Uhrzeigersinn zu drehen (denken Sie daran, dass jede Komponente eine komplexe Zahl sein wird, also eine bestimmte Komponente x) + iy -> -y + ix) und dann neu kombinieren.
Dieser Ansatz funktioniert ziemlich gut, obwohl ein bisschen Abstimmung erforderlich ist (ich verstehe die Mathematik noch nicht gut genug, um dies besser zu erklären)
Hier gibt es einige Schlüsselbegriffe, nämlich "Hilbert-Transformation" und "analytisches Signal".
Ich vermeide es, diese Begriffe zu verwenden, da ich ziemlich sicher bin, dass ich bei ihrer Verwendung erhebliche Mehrdeutigkeiten festgestellt habe.
Ein Dokument beschreibt das (komplexe) analytische Signal eines ursprünglichen realen Signals f (t) als:
In diesem Fall ist die Amplitudenhüllkurve einfach | Analytisch (f (t)) |, was uns zur ursprünglichen pythagoreischen Gleichung zurückbringt
NB: Ich bin kürzlich auf eine fortgeschrittenere Technik gestoßen, die Frequenzverschiebung und einen digitalen Tiefpassfilter beinhaltet. Die Theorie ist, dass wir das analytische Signal mit verschiedenen Mitteln konstruieren können; Wir zerlegen f (t) in positive und negative sinusförmige Frequenzkomponenten und entfernen dann einfach die negativen Komponenten und verdoppeln die positiven Komponenten. und es ist möglich, diese "negative Frequenzkomponentenentfernung" durch eine Kombination aus Frequenzverschiebung und Tiefpassfilterung durchzuführen. Mit digitalen Filtern ist dies extrem schnell möglich. Ich habe diesen Ansatz noch nicht untersucht, so viel kann ich im Moment sagen.
quelle
Sie suchen also im Grunde nach einer automatischen Verstärkungsregelung (Automatic Gain Control, AGC). Wir sind uns nicht sicher, ob Sie dies durch digitale Verarbeitung tun müssen, aber es gibt sehr gute integrierte Schaltkreise, die diese Aufgabe sehr gut ausführen können. In der Regel ist die AGC mit vielen anderen Funktionen integriert, aber einige Schaltkreise können mit JFET-Transistoren erstellt werden und einige Dioden.
Ein sehr leicht verständlicher Weg, dies mit digitaler Verarbeitung zu tun, wäre, einen adaptiven Varianzschätzer zu entwerfen, beispielsweise ein Zeitfenster mit genügend Abtastwerten zu nehmen, um 5 oder 10 ms darzustellen, und einen Vergessensfaktor alpha ^ n (alpha <1) anzuwenden Jede neue Probe, die eingeht, wird mehr berücksichtigt als die vorherigen Proben. Basierend auf dieser Varianzschätzung entwerfen Sie dann eine Funktion, die die Varianz auf eine Verstärkung abbildet, die Sie auf jedes Audio-Sample anwenden. Dies kann eine Entscheidungsgrenze sein. Wenn die Varianz einen bestimmten Schwellenwert überschreitet, wird die Verstärkung um einen bestimmten Faktor verringert.
Oder es kann sich um eine weichere Entscheidungsgrenze handeln, bei der Sie eine nicht lineare Transformation von der Varianz zur Verstärkung erstellen und die Transformation basierend auf der letzten Varianzschätzung auf jede Stichprobe anwenden.
Dies sind heuristischere Methoden, aber zumindest erspart es Ihnen die schwere Mathematik.
quelle