2010-08-19 17 views
6

Poszukuję prostego (pseudo) kodu odwracającego spektrum próbkowanego sygnału audio. Idealnie C++Odwrócenie spektrum próbkowanego sygnału audio

Kod powinien obsługiwać różne częstotliwości próbkowania (16/32/48KHz).

+1

Co to jest "inwersja spektrum"? Zabawne jest to, że Google jako pierwsze trafienie ujawniło twoje pytanie. Chcesz odwrotności fazy i amplitudy dla każdej częstotliwości? A może po prostu potrzebujesz MFF? Czy coś zupełnie innego? – zerm

+0

Przepraszamy za nieprofesjonalne słownictwo: chcę, aby niskie częstotliwości stały się wysokimi i na odwrót (przesunięcie DC stanie się sinusem z połową częstotliwości próbkowania). –

+1

Teraz jestem bardzo ciekawa, jak to brzmi ... – PeterAllenWebb

Odpowiedz

6

Miksowanie sygnału przez Fs/2 zamieni wysokie częstotliwości i niskie częstotliwości - pomyśl o obróceniu spektrum wokół koła jednostki o pół obrotu. Ten obrót można osiągnąć, mnożąc co drugą próbkę przez -1.

Mieszanie przez Fs/2 jest równoznaczne z mieszaniem przez exp(j*pi*n). Jeśli x jest y wejście i wyjście,

y[n] = x[n] * exp(j*pi*n) = x[n] * [cos(pi*n) + j*sin(pi*n)] 

Upraszcza to łatwo, ponieważ sin(pi*n) oznacza 0, i cos(pi*n) jest zmienny 1 -1.

+0

Tak prosty ... Niewiarygodny –

+2

Ta sztuczka często pojawia się w DSP. Na przykład, jeśli chcesz zaprojektować filtr górnoprzepustowy, zwykle łatwiej jest zaprojektować filtr dolnoprzepustowy z pożądaną wartością odcięcia, a następnie obrócić go wokół okręgu jednostki, aby górny przebiegał. – mtrw

1

Aby uzyskać coś, co ma ten sam typ struktury czasowej jak oryginał, trzeba

  • Tworzenie spektrogram (z jakiegoś rozmiaru okna)
  • Wybierz jakieś górne i dolne granice częstotliwości, które będziesz klapki
  • klapki intensywności w Spektrogram w ciągu tych granicach
  • Resynthesize sygnał dźwiękowy zgodny z tymi częstotliwościami

Ponieważ jest to sygnał dźwiękowy, nie ma znaczenia, że ​​wszystkie fazy zostaną zawiedione. Zasadniczo nie można ich usłyszeć. Z wyjątkiem części odwracającej, ARSS tworzy spektrogram i wykonuje resyntezę dźwięku.

W przeciwnym razie wystarczy wziąć FFT, odwrócić amplitudy komponentów i przyjąć odwrotną FFT. Będzie to jednak zasadniczo bezsensowne, ponieważ całkowicie pobudzi strukturę czasową dźwięku, a także strukturę częstotliwości.

+0

Dziękuję, ARSS używa banku filtrów częstotliwości, więc jedyne, co mogę zrobić, to odwrócić beczki częstotliwości.Zastanawiam się, czy istnieją pewne matematyczne manipulacje, które odwracają częstotliwości "płynnie" (bez dzielenia ich na przedziały). –

+0

Można używać falek, które nie są jawnie binned, ale w twoim przypadku, które nie ma znaczenia. Dźwięki o niskiej częstotliwości zmieniają się znacznie wolniej niż dźwięki o wysokiej częstotliwości, tak więc i tak zmiana będzie łagodzić. –

0

nie ma sensu używać cosinusów. dla sygnału cyfrowego nie jest konieczne, aby uruchomić prawdziwy ringmod tutaj, w nyquist konsola jest kwadrat i tak.

, więc wystarczy pomnożyć co drugą próbkę przez * -1 i gotowe.

bez opóźnień, bez aliasingu, bez niczego.

+0

Tak brzmi przyjęta odpowiedź. –