STFT może być z powodzeniem stosowany do danych dźwiękowych (na przykład z plikiem dźwiękowym .wav) w celu dokonania pewnych modyfikacji w dziedzinie częstotliwości (na przykład: usuwanie szumów).
Z N=441000
(to jest 10 sekund przy szybkości próbkowania fs=44100
) windowsize=4096
, overlap=4
, STFT wytwarza approximatively w 430x4096
tablicy (I współrzędnych: czasie, drugiej współrzędnej bin częstotliwość). Można modyfikować tę tablicę, a rekonstrukcję można wykonać za pomocą funkcji overlap-add (*).
Jak można zrobić podobnie z falkami ? (DWT), tj. Uzyskać podobną tablicę kształtu a x b
z a
ramami czasowymi i b
przedziałami częstotliwości, czy wprowadzić pewne modyfikacje w tej tablicy, a na końcu odzyskać sygnał? W jaki sposób ? Co to jest odpowiednik falki do nakładania-dodawania ? Jakie byłyby tutaj funkcje Pythona (nie znalazłem łatwego przykładu modyfikacji audio za pomocą pyWavelets
...)?
(*): Oto framework STFT, którego można użyć:
signal = stft.Stft(x, 4096, 4) # x is the input
modified_signal = np.zeros(signal.shape, dtype=np.complex)
for i in xrange(signal.shape[0]): # Process each STFT frame
modified_signal[i, :] = signal[i, :] * ..... # here do something in order to
# modify the signal in frequency domain !
y = stft.OverlapAdd(modified_signal, 4) # y is the output
Celem jest znalezienie podobnej struktury z falkami.
Odpowiedzi:
Krótkotrwała transformata Fouriera jest generalnie transformacją redundantną, zwykle implementowaną z tym samym podpróbkowaniem dla każdej częstotliwości. Jeśli okno jest dobrze wybrane, jest kompletne: możesz je odwrócić i odzyskać dowolny sygnał początkowy.
Ponieważ jest zbędny i kompletny, ma wiele doskonałych odwrotności. Można to zaimplementować i zrozumieć przy użyciu bardziej ogólnych narzędzi: (nadpróbkowanych) złożonych banków filtrów. Podany typ i długość okna plus zakładka zapewnia bank filtrów analizy, dla którego można obliczyć, czy jest on odwracalny, czy nie. Jeśli tak, możesz obliczyć odwrotność naturalną i zoptymalizowane odwrotności . Nakładanie-dodawanie jest tylko jednym z wielu potencjalnych odwrotności, prawdopodobnie najbardziej powszechnym, co często ogranicza wybór okna.
Standardowe dyskretne transformaty falkowe są również bankami filtrów, z tą różnicą, że podpróbkowanie nie jest takie samo w każdym paśmie częstotliwości (lub bardziej odpowiednio skalowane). To zmienia się w nierówne długości dla każdej skali. Istnieją jednak nadmiarowe implementacje falkowe, które dają „prostokątną tablicę” współczynników, z którymi można pracować. Najbardziej znane schematy nazywane są pod różnymi nazwami: falki niezmienne lub niezmienne w czasie, falki nieokreślone, stacjonarna transformacja falkowa(SWT), a czasem wirowanie cykliczne. Jego standardowa rekonstrukcja obejmuje kroki podobne do nakładania-dodawania, z tym że są one bardziej „osadzone” ze względu na różne współczynniki próbkowania w różnych skalach. Możesz używać ich z dowolnymi dyskretnymi falkami z biblioteki, a nawet projektując własne falki. Powodem jest to, że standardowe dyskretne falki zostały zaprojektowane z myślą o braku nadmiarowości, co ogranicza wybór falek. Dzięki redundancji zwiększa się wybór falki, ponieważ ograniczenia do spełnienia są mniej rygorystyczne. „Ostateczny” awatar to ciągła transformacja falkowa, która dopuszcza „prawie” każdą falę odwrotną do syntezy. Moje ostatnie zdanie jest dość kiepskie, mam nadzieję, że rozumiesz: kiedy odwrócona matryca jest odwracalna, ma tylko jedną odwrotność. Gdy „prostokątna” matryca jest odwracalna w lewo w uogólniony sposób,
Wydaje się, że istnieje stacjonarna transformata falkowa w języku Python . Możesz znaleźć kilka referencji w 2.3.4. Tłumaczenie niezmiennych falek rozdział powiązanego dokumentu .
Jest ogólnie znacznie bardziej odporny na wykrywanie, odszumianie lub odtwarzanie w praktycznych zastosowaniach (geofizyka, badania nieniszczące, ultradźwięki, wibracje).
źródło
Powodem, dla którego potrzebujesz nakładania dodawania / zapisywania nakładania do filtrowania z krótkim czasem transformacji Fouriera, jest w zasadzie to, że funkcje podstawowe związane z otrzymanymi współczynnikami są zdefiniowane w pewnym przedziale czasowym (w przeciwieństwie do jednego punktu w czasie). Transformacja Fouriera, której używasz do obliczania współczynników rozszerzenia, implementuje również splot w domenie kołowej zdefiniowanej przez długość ramki sygnału. Oznacza to, że dwa punkty końcowe ramki są naprawdę zidentyfikowane i zamknięte w okręgu. Dlatego musisz się upewnić, że podstawowe funkcje edytowanych współczynników nigdy nie wpływają na oba końce ramki, zawijając.
Falki nie są wektorami własnymi translacji w czasie, ani nie są obliczane przy użyciu splotu kołowego. Oznacza to, że nie potrzebujesz nakładania dodawania lub zapisywania ani żadnych innych metod radzenia sobie z efektami ubocznymi splotu kołowego. Zamiast tego wektory falkowe są po prostu możliwą podstawą do opisania twojego sygnału. (Kompletna, dyskretna, być może ortogonalna) transformacja falkowa jest zatem niczym innym jak zmianą podstawy z bazy w dziedzinie czasu na bazę w dziedzinie falkowej. Podstawowe zmiany można odwrócić (stosując odwrotność macierzy zmian podstawowych, które cię tam dostarczyły) i możesz wrócić do dziedziny czasu.
Parametry podane jako rozmiar okna, nakładanie się, częstotliwość próbkowania nie mają zastosowania do transformaty falkowej. Jedyne, czego potrzebujesz, to falka matki. Jeśli chcesz porównać wyniki z wynikiem wyjściowym STFT, możesz wybrać dowolny z wektorów podstawowych STFT (tj. Okno pomnożone przez złożoną nośną wykładniczą) jako prototyp falkowy. Następnie zastosujesz szybką transformatę falkową, która rozłoży twój sygnał na drzewo sygnałów filtrowanych i zdziesiątkowanych górno i dolnoprzepustowo, które ostatecznie staną się twoimi współczynnikami. Każdy współczynnik jest powiązany z wektorem podstawowym falki i jego parametrami (skala, czas) lub (częstotliwość, czas). Możesz manipulować współczynnikami, a następnie zastosować odwrotną dyskretną transformatę falkową. Weźmie twoje współczynniki i przepuści je przez zestaw filtrów resyntezy, aby ponownie wygenerować sygnał.
Procesy te nie są trywialne i być może trudne do strawienia dla początkującego. Ale powinieneś być w stanie znaleźć biblioteki / zestawy narzędzi dla wybranej platformy, które implementują szybką transformację falkową i jej odwrotność. Jeśli jednak chcesz zrealizować własną bazę falkową, będziesz musiał uzyskać współczynniki filtrów dla banków filtrów dekompozycji i syntezy. Wymaga to głębokiej teorii i prawdopodobnie będziesz musiał ją najpierw przestudiować.
Istnieją inne smaki transformaty falkowej, a mianowicie ciągła transformata falkowa, która działa w oparciu o nadmierną liczbę podstaw. Jest zarówno znacznie wolniejszy do obliczenia, jak i trudniejszy do odwrócenia, więc obecnie nie jest to opcja dla tego, co chcesz zrobić.
źródło
Audio sound -> Wavelet transform -> (do something on the array) -> Inversion -> Audio output
. Z dużą ilością (zrób coś na tablicy), jestem pewien, że zrozumiem trochę więcej, jak działa falka.Istnieje wiele sposobów definiowania podstawy falki. Zazwyczaj falka wygląda mniej więcej tak:
Zwykle używa się dyskretnych punktów( x0, k0) ( x0, k0)
Ponieważ wymiarowość transformowanych danych przekracza wymiar sygnału, podstawa falkowa nie będzie ortonormalna. Tzn. Następujące będą fałszywe:
Innymi słowy, możesz idealnie zrekonstruować sygnał, po prostu dodając jego składowe falki.
Swoją „modyfikację” można po prostu wstawić do powyższej sumy:
Aktualizacja 19.11.2013: Dodawanie szczegółów implementacji poniżej zgodnie z życzeniem.
Widma obcięcia czasami powodują problemy z normalizacją, w zależności od dokładnego zdefiniowania FFT. Nie podejmę tutaj próby wykorzystania wszystkich możliwości. Normalizacja jest w zasadzie łatwym problemem. ;-)
źródło