2012-04-24 20 views
55

Wszystkie zastosowane przez nas implementacje FFT dają złożone wartości (z częściami rzeczywistymi i urojonymi), nawet jeśli dane wejściowe do algorytmu były dyskretnym zbiorem liczb rzeczywistych (liczb całkowitych).Dlaczego FFT generuje liczby zespolone zamiast liczb rzeczywistych?

Czy nie można reprezentować domeny częstotliwości wyłącznie w liczbach rzeczywistych?

+5

Co powiesz na przeniesienie tego pytania do DSP SX: http://dsp.stackexchange.com/? – petrichor

+3

Należy wybrać jedną odpowiedź jako poprawną. – Jonathan

Odpowiedz

57

FFT jest zasadniczo zmianą podstawy. Podstawą dla której FFT zmienia pierwotny sygnał jest zestaw fal sinusoidalnych. Aby ta podstawa opisała wszystkie możliwe dane wejściowe, musi być w stanie reprezentować zarówno fazę, jak i amplitudę; faza jest reprezentowana przy użyciu liczb zespolonych.

Załóżmy na przykład, że FFT jest sygnałem zawierającym tylko pojedynczą falę sinusoidalną. W zależności od fazy możesz uzyskać całkiem prawdziwy wynik FFT. Ale jeśli przesuniesz fazę swojego wejścia o kilka stopni, jak inaczej wyjście FFT może reprezentować to wejście?

edytuj: Jest to nieco luźne wyjaśnienie, ale staram się tylko zmotywować intuicję.

+1

Pomaga dużo odpowiedzieć. Jeśli wynik FFT zawiera tylko częstotliwość i fazę, w jaki sposób rejestruje informacje o amplitudzie w próbce w domenie czasu? To znaczy, w jaki sposób odtwarza on poprawne amplitudy w iFFT? –

+4

Cóż, każda wartość w FFT odpowiada innej składowej częstotliwości. Wielkość tej wartości jest amplitudą składnika, a kąt złożony jest fazą tego komponentu. – zmccord

36

FFT zapewnia fazę amplitudy i. Amplituda jest zakodowana jako wielkość liczby zespolonej (sqrt (x^2 + y^2)), podczas gdy faza jest zakodowana jako kąt (atan2 (y, x)). Aby uzyskać ściśle rzeczywisty wynik z FFT, sygnał wejściowy musi mieć nawet symetrię (tj. X [n] = conj (x [N-n])).

Jeśli wszystko, na czym zależy, to intensywność, wielkość liczby zespolonej jest wystarczająca do analizy.

28

Tak, możliwe jest reprezentowanie wyników w domenie częstotliwości FFT z czysto rzeczywistych danych wejściowych przy użyciu tylko liczb rzeczywistych.

Te liczby zespolone w wyniku FFT to po prostu dwie liczby rzeczywiste, które są wymagane do uzyskania dwuwymiarowych współrzędnych wektora wyników, który ma zarówno długość, jak i kąt kierunku (lub magnitudo i fazę). Każda składowa częstotliwości w wyniku FFT może mieć unikalną amplitudę i unikalną fazę (względem pewnego punktu w otworze FFT).

Jedna tylko liczba rzeczywista nie może reprezentować zarówno wielkości, jak i fazy. Jeśli wyrzucisz informacje o fazie, które mogłyby łatwo zniekształcić sygnał, jeśli spróbujesz odtworzyć go za pomocą iFFT (a sygnał nie jest symetryczny). Tak więc pełny wynik FFT wymaga 2 rzeczywistych liczb na kosz FFT. Te 2 liczby rzeczywiste są grupowane w niektórych FFT w złożonym typie danych według wspólnej konwencji, ale wynik FFT może łatwo (i niektóre FFT) zrobić tylko dwa rzeczywiste wektory (jeden dla współrzędnych cosinus i jeden dla współrzędnych sinusoidalnych).

Istnieją również procedury FFT, które bezpośrednio wytwarzają magnitudę i fazę, ale działają wolniej niż FFT, które dają złożony (lub dwa rzeczywiste) wyniki wektorowe. Istnieją również procedury FFT, które obliczają tylko wielkość i po prostu wyrzucają informacje o fazie, ale zwykle działają one nie szybciej niż pozwala to zrobić samemu po bardziej ogólnych FFT. Może ratują kodera kilkoma liniami kodu kosztem braku odwracalności. Ale wiele bibliotek nie zajmuje się tymi wolniejszymi i mniej powszechnymi formami FFT, i pozwala koderowi konwertować lub ignorować to, czego potrzebuje lub czego nie potrzebuje.

Co więcej, wiele osób uważa, że ​​matematyka jest bardziej elegancka przy użyciu złożonej arytmetyki.

(Dodano :) I, jako jeszcze jedną opcję, można rozważyć dwa składniki każdego z wyników, zamiast rzeczywistych i urojonych komponentów, jako prawdziwe i nieparzyste składniki.

6
  1. dyskretnej transformaty Fouriera jest zasadniczo transformacji z wektorem liczb zespolonych w „domenie czasu” do wektora liczb zespolonych w „dziedzinie częstotliwości” (używam cudzysłowu, bo jeśli stosuje właściwą skalowanie czynniki, DFT jest jego własną odwrotnością). Jeśli twoje wejścia są prawdziwe, wtedy można wykonać dwa Fouriera naraz: Weź wejście wektory x i y i obliczenia F (x + iy). Zapominam, jak oddzielasz DFT, ale podejrzewam, że jest to coś z symetrii i złożonych koniugatów.

  2. Sort-of pozwala reprezentować "domenę częstotliwości" z realiami i jest powszechny w stratnych algorytmach kompresji (JPEG, MP3). Zaskakujące jest to, że działa, chociaż wydaje się, że odrzuca informacje o fazie, ale wydaje się, że jest to mniej użyteczne dla większości celów przetwarzania sygnału (nie jestem świadomy łatwego sposobu splatania/korelacji z DCT).

ja prawdopodobnie dostał kilka szczegółów źle;)

+0

Chciałbym znaleźć więcej informacji na temat, jak to ułożysz - oddzielając później DFT - dla przypadku transformacji F (x + i y). – CatsLoveJazz

13

Jeśli współczynnik FFT dla danej częstotliwości f jest x + i y, można spojrzeć na x jako współczynnik cosinus na tej częstotliwości, natomiast y jest współczynnikiem sinusa. Jeśli dodasz te dwie fale do określonej częstotliwości, otrzymasz przesuniętą w fazie falę o tej częstotliwości; wielkość tej fali wynosi sqrt(x*x + y*y), równą wielkości współczynnika zespolonego.

The Discrete Cosine Transform (DCT) to względna transformacja Fouriera, która daje wszystkie rzeczywiste współczynniki. Dwuwymiarowy DCT jest używany przez wiele algorytmów kompresji obrazu/wideo.

Powiązane problemy