Hilbert-Transformation zur Berechnung der Signalhüllkurve?


27

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).


Hast du jetzt einen funktionierenden Code? entweder mit hilberttransform oder einer anderen methode?
Basj

Antworten:


18

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.


Beide sind nicht kausal, aber ist die FFT-Methode (Halbspektrum und IFFT wegwerfen) normalerweise schneller als der FIR-Filter?
Endolith

Wie erfordert die FFT-Methode zur Berechnung der Hilbert-Transformation Nicht-Kausalität? Man braucht wahrscheinlich nur ein ziemlich großes Fenster, um nützliche Umschlagformen zu erhalten.
Mavavilj

4

Mit der Hilbert-Transformation können Sie auf folgende Weise eine Hüllkurve berechnen. (Ich werde es als MATLAB-Code schreiben):

envelope = abs(hilbert(yourTimeDomainSignal));

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 jIhrem Hilbertsignal (-cosine wave) addieren, erhalten Sie:

sin(wt) - j.*cos(wt)

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).


Hoppla! Ich habe das negative Vorzeichen vergessen - danke Dilip, jetzt behoben.
Spacey

2

Mir sind mindestens zwei verschiedene Möglichkeiten bekannt, um die Amplitudenhüllkurve aus einem Signal abzurufen.

Die Schlüsselgleichung lautet:

E(t)^2 = S(t)^2 + Q(S(t))^2

Where Q represents a π/2 phase shift (also known as quadrature signal).

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:

Analytic(f(t)) = f(t) + i.H(f(t))

where H(f(t)) represents the 'π/2 phase shift' of f(t)

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.


1
Dies sind nur verschiedene Methoden zur Berechnung derselben Sache (Größe des analytischen Signals durch eine Hilbert-Transformation). Die "fortgeschrittene" Technik besteht darin, einfach eine FFT durchzuführen, die negativen Frequenzen auf Null zu setzen und dann eine inverse FFT durchzuführen. Der Realteil ist das Originalsignal und der Imaginärteil die Hilbert-Transformation davon. Der Teufel steckt in den Details wie Rahmung, Fensterung, Überlappung und linearer vs. kreisförmiger Verarbeitung.
Hilmar

2
Es ist entmutigend zu sehen, dass einige Personen es für richtig erachtet haben, die Zeit und Energie, die ich dieser Community (über den obigen Beitrag) gegeben habe, mit einer Gegenstimme zu belohnen. Ein Beitrag, der solide Informationen enthält, die für jemanden von Nutzen sind.
P i

2
@Hilmar, Es gibt eine bessere Möglichkeit, die negativen Frequenzen zu entfernen, um die Hilbert-Transformation zu erzielen. Wie gesagt, ein Weg ohne FFT. In Anbetracht des oben Gesagten bin ich nicht besonders begeistert, es im Moment detailliert darzustellen.
P i

Schätzen Sie Ihre ausführliche Antwort auf die Hilbert-Transformation. wollte sicherstellen, dass dies gut aufgenommen wird, daher nicht entmutigt werden. Bitte ignorieren Sie die Ablehnung durch wen auch immer.

0

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.

Durch die Nutzung unserer Website bestätigen Sie, dass Sie unsere Cookie-Richtlinie und Datenschutzrichtlinie gelesen und verstanden haben.
Licensed under cc by-sa 3.0 with attribution required.