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).
Odpowiedzi:
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.
źródło
Możesz użyć transformacji Hilberta do obliczenia obwiedni w następujący sposób. (Napiszę to jako kod MATLAB):
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
j
razy sygnału hilberted (fala-cosinus), otrzymasz: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).
źródło
Zdaję sobie sprawę z co najmniej dwóch oddzielnych sposobów odzyskania obwiedni amplitudy z sygnału.
Kluczowym równaniem jest:
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:
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.
źródło
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.
źródło