Przekształcenie Hilberta w obwiednię sygnału?


27

Słyszałem, że transformacji Hilberta można użyć do obliczenia obwiedni sygnału. Jak to działa? A czym ta „obwiednia Hilberta” różni się od obwiedni, którą uzyskuje się po prostu prostując sygnał?

Interesuje mnie szczególnie znalezienie sposobu na obliczenie obwiedni do zastosowania w kompresji zakresu dynamicznego (tj. „Automatyczne obniżenie głośności” głośnych części sygnału audio).


czy masz teraz działający kod? za pomocą Hilberta transsform lub innej metody?
Basj

Odpowiedzi:


18

Transformacja Hilberta służy do obliczania sygnału „analitycznego”. Zobacz na przykład http://en.wikipedia.org/wiki/Analytic_signal . Jeśli twój sygnał jest falą sinusoidalną lub modulowaną falą sinusoidalną, wielkość sygnału analitycznego rzeczywiście będzie wyglądać jak obwiednia. Obliczenie transformacji Hilberta nie jest jednak trywialne. Z technicznego punktu widzenia wymaga on nie przyczynowego filtra FIR o znacznej długości, więc będzie wymagał sporej ilości MIPS, pamięci i opóźnień.

W przypadku sygnału szerokopasmowego tak naprawdę zależy to od sposobu zdefiniowania „obwiedni” dla określonej aplikacji. Do zastosowania kompresji zakresu dynamicznego potrzebujesz metryki, która jest dobrze skorelowana z postrzeganiem głośności w czasie. Transformacja Hilberta nie jest do tego odpowiednim narzędziem.

Lepszym rozwiązaniem byłoby zastosowanie filtra A-ważonego ( http://en.wikipedia.org/wiki/A-weighting ), a następnie wykonanie detektora strat szczytowych lub stratnych RMS. Będzie to dość dobrze korelowało z postrzeganą głośnością w czasie i jest stosunkowo tanie.


Oba nie mają związku przyczynowego, ale czy metoda FFT (wyrzucanie połowy widma i IFFT) jest zwykle szybsza niż filtr FIR?
endolith,

Ponadto, w jaki sposób metoda FFT do obliczania transformacji Hilberta wymaga braku związku przyczynowego? Prawdopodobnie wystarczy tylko dość duże okno, aby uzyskać użyteczne kształty kopert.
mavavilj

4

Możesz użyć transformacji Hilberta do obliczenia obwiedni w następujący sposób. (Napiszę to jako kod MATLAB):

envelope = abs(hilbert(yourTimeDomainSignal));

Nie mam teraz czasu na zapisywanie matematyki (spróbuję później), ale po prostu powiedz, że twój sygnał jest falą sinusoidalną. Transformacja sinusowa Hilberta to cosinus. (Innymi słowy, transformacja Hilberta zawsze da ci sygnał przesunięty o fazę -90 stopni - innymi słowy, kwadraturę).

Jeśli dodasz swój sygnał (falę sinusoidalną) do jrazy sygnału hilberted (fala-cosinus), otrzymasz:

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

Który również zdarza się być e ^ (j * (wt - pi / 2)).

Tak więc, kiedy weźmiesz wartość bezwzględną, otrzymujesz 1, który jest twoją kopertą. (W tym przypadku).


Ups! Zapomniałem znaku ujemnego - dzięki Dilip, naprawione teraz.
Spacey,

2

Zdaję sobie sprawę z co najmniej dwóch oddzielnych sposobów odzyskania obwiedni amplitudy z sygnału.

Kluczowym równaniem jest:

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

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

Najprostszym sposobem, w jaki jestem świadomy, aby uzyskać Q, byłoby rozłożenie S (t) na wiązkę sinusoidalnych składników za pomocą FFT, obrócenie każdego elementu o ćwierć obrotu w lewo (pamiętaj, że każdy element będzie liczbą zespoloną, więc konkretny składnik x + iy -> -y + ix), a następnie zrekombinuj.

To podejście działa całkiem dobrze, chociaż wymaga nieco dostrojenia (jeszcze nie rozumiem matematyki wystarczająco dobrze, aby wyjaśnić to w lepszy sposób)

Jest tu kilka kluczowych terminów, a mianowicie „transformacja Hilberta” i „sygnał analityczny”

Unikam używania tych terminów, ponieważ jestem prawie pewien, że widziałem znaczne niejednoznaczności w ich użyciu.

Jeden dokument opisuje (złożony) sygnał analityczny oryginalnego sygnału rzeczywistego f (t) jako:

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

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

w którym to przypadku obwiednia amplitudy jest po prostu | Analityczna (f (t)) |, co prowadzi nas z powrotem do pierwotnego równania Pitagorasa

NB: Ostatnio natknąłem się na bardziej zaawansowaną technikę obejmującą przesunięcie częstotliwości i dolnoprzepustowy filtr cyfrowy. Teoria jest taka, że ​​możemy skonstruować sygnał analityczny na różne sposoby; rozkładamy f (t) na dodatnie i ujemne składowe sinusoidalne częstotliwości, a następnie po prostu usuwamy składowe ujemne i podwajamy składowe dodatnie. możliwe jest wykonanie tego „usuwania komponentu częstotliwości ujemnej” przez połączenie przesunięcia częstotliwości i filtrowania dolnoprzepustowego. można to zrobić niezwykle szybko za pomocą filtrów cyfrowych. Nie zbadałem jeszcze tego podejścia, więc w tej chwili mogę powiedzieć tyle.


1
Są to po prostu różne sposoby obliczania tej samej rzeczy (wielkość sygnału analitycznego przez transformację Hilberta). „Zaawansowaną” techniką jest po prostu wykonanie FFT, wyzerowanie ujemnych częstotliwości, a następnie wykonanie odwrotnej FFT. Prawdziwa część to oryginalny sygnał, a część wyobrażona to jego transformacja Hilberta. Diabeł tkwi w szczegółach, takich jak kadrowanie, okienkowanie, nakładanie się i przetwarzanie liniowe vs. kołowe.
Hilmar

2
To przygnębiające, gdy widzę, że jakaś osoba uznała za stosowne nagrodzić czas i energię, które dałem tej społeczności (za pośrednictwem powyższego postu) w głosowaniu negatywnym. Post zawierający dobre, solidne informacje, które komuś się przydadzą.
P i

2
@Hilmar, Istnieje lepszy sposób na „usunięcie ujemnych częstotliwości” w celu osiągnięcia transformacji Hilberta. Jak powiedziałem, sposób, który nie wymaga FFT. W świetle powyższego nie czuję się szczególnie zachwycony szczegółami w tej chwili.
P i

Doceń swoją szczegółową odpowiedź na temat transformacji Hilberta; chciałem zapewnić, że jest to dobrze przyjęte, a zatem nie zniechęcać się. Proszę zignorować głosowanie przez kogokolwiek.

0

więc zasadniczo szukasz automatycznej kontroli wzmocnienia (AGC). Nie jestem pewien, czy musisz to zrobić, przetwarzając cyfrowo, ale istnieją bardzo dobre układy scalone, które mogą wykonać to zadanie bardzo dobrze, zwykle AGC jest zintegrowane z wieloma innymi funkcjami, ale niektóre cyrkulacje można utworzyć za pomocą tranzystorów JFET i niektóre diody.

Ale bardzo łatwo zrozumiałym sposobem na zrobienie tego z cyfrowym przetwarzaniem byłoby zaprojektowanie adaptacyjnego estymatora wariancji, takiego jak pobranie okna czasowego wystarczającego do reprezentacji 5 lub 10 ms, i zastosowanie współczynnika zapominania alfa ^ n (alfa <1), więc każda nowa próbka, która przychodzi, jest brana pod uwagę bardziej niż poprzednie próbki. następnie na podstawie tego oszacowania wariancji projektujesz według własnego uznania, funkcję, która odwzorowuje wariancję na wzmocnienie, które zastosujesz do każdej próbki audio. może to być trudna decyzja, podczas gdy jeśli wariancja przekroczy pewien próg, zmniejszysz wzmocnienie o jakiś czynnik.

Lub może być bardziej miękką granicą decyzyjną, w której tworzysz nieliniową transformację od wariancji do wzmocnienia i stosujesz transformację do każdej próbki na podstawie ostatniego oszacowania wariancji.

To są bardziej heurystyczne metody, ale przynajmniej ratują cię od ciężkiej matematyki.

Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.