27 listopada 2014

Dyskretna transformata Fouriera w praktyce

Transformata jest to przekształcenie pozwalające przejść z dziedziny czasu do dziedziny częstotliwości. Inaczej, rozkłada ona dany sygnał (traktując go jako okresowy) na szereg funkcji okresowych.
Wzór ogólny transformaty Fouriera dla sygnałów ciągłych:
  F(s) = \int^{+\infty}_{-\infty} f(x) \cdot e^{-2\pi ixs}\, dx

Dyskretna transformata Fouriera

Transformata dyskretna robi to samo co ciągła, lecz działa na próbkach (samplach). Jej wzór ogólny:
  X(k) = \sum_{n=1}^{N} x_n \cdot e^{-j \frac{2 \pi k n}{N}}, k \in [0, N-1]

Weźmy przykład dla N=4:
X(0) = -2 + 1j
X(1) = 0 - 2j
X(2) = 1 + 0j
X(3) = 4 + 0j

Ze wzoru podstawiamy:
  X(0) =  (-2+1j) \cdot e^{-j\frac{2\pi \cdot 0 \cdot 0}{4}}  + (0-2j) \cdot e^{-j\frac{2\pi \cdot 0 \cdot 1}{4}}  + (1+0j) \cdot e^{-j\frac{2\pi \cdot 0 \cdot 2}{4}}  + (4+0j) \cdot e^{-j\frac{2\pi \cdot 0 \cdot 3}{4}}
  X(0) = (-2+1j)\cdot 1 + (0-2j)\cdot 1 + (1+0j)\cdot 1 + (4+0j)\cdot 1 = 3-1j

  X(1) =  (-2+1j) \cdot e^{-j\frac{2\pi \cdot 1 \cdot 0}{4}}  + (0-2j) \cdot e^{-j\frac{2\pi \cdot 1 \cdot 1}{4}}  + (1+0j) \cdot e^{-j\frac{2\pi \cdot 1 \cdot 2}{4}}  + (4+0j) \cdot e^{-j\frac{2\pi \cdot 1 \cdot 3}{4}}  = (-2+1j)\cdot 1 + (0-2j)\cdot 1 + (1+0j)\cdot 1 + (4+0j)\cdot 1 = 3-1j
  X(1) = (-2+1j)\cdot 1 + (0-2j)\cdot e^{-j\frac{\pi}{2}} + (1+0j)\cdot e^{-j\pi} + (4+0j)\cdot e^{-j\frac{3}{2}\pi}

Korzystając z wzoru Eulera: e^{jx} = cos(x)+jsin(x):
  X(1) = (-2+1j)\cdot 1 + (0-2j)\cdot (cos(\frac{\pi}{2})-jsin(\frac{\pi}{2})) + (1+0j)\cdot (cos(\pi)-jsin(\pi)) + (4+0j)\cdot (cos(\frac{3}{2}\pi)-jsin(\frac{3}{2}\pi))

W tym przypadku (dla N=4) zwykle nie pamięta się jaką wartość ma na przykład cos(\frac{pi}{2}). Wystarczy rzucić okiem na wykres:
sincos
Dla cos(\frac{pi}{2}) mamy wartość 0.

  X(1) = (-2+1j)\cdot 1 + (0-2j)\cdot (0-1j) + (1+0j)\cdot (-1-0j) + (4+0j)\cdot (0+1j)

Pamiętając o własności liczby zespolonej i^2 = -1 wynik mamy:
  X(1) = (-2+1j) + (-2+0j) + (-1+0j) + (0+4j) = -5+5j

Postępując analogicznie dla kolejnych czynników otrzymujemy:
X(2) = -5+3j
X(3) = -1-3j

Poprawność obliczeń można szybko sprawdzić kalkulatorami on-line, np.: http://calculator.vhex.net/calculator/fast-fourier-transform-calculator-fft/1d-discrete-fourier-transform.
W przypadku gdybyśmy podawali sygnał rzeczywisty na wejście funkcji DFT to w część rzeczywistą podajemy nasze wartości a w część urojoną wstawiamy zero.

Widmo

Wynik transformaty Fouriera to widmo w postaci liczb zespolonych. Można rozłożyć je na dwie części – moduł i fazę:
widmo

Reprezentacja liczby zespolonej na płaszczyźnie:

Complex_number_illustration

Reprezentacja liczby zespolonej (źródło: Wikipedia)

Wzór na moduł: |z|=\sqrt{a^2 + b^2} – czyli długość wektora.

Wzór na fazę: \mathrm{tg}\ \alpha = \frac{b}{a} , z tego: \alpha = \mathrm{arctg}\ \frac{b}{a} – czyli kąt wektora.

Przykład użycia

Wygenerowano dwie fale o 64 próbkach – sinus o częstotliwości 5Hz i amplitudzie 1, kosinus o częstotliwości 2Hz i amplitudzie 2. Następnie je zsumowano oraz obliczono DFT i widmo amplitudowe:

dft

Sama częstotliwość na osi poziomej wynika z twierdzenia Nyquista i jest połową częstotliwości próbkowania (tutaj – próbkowanie 60Hz, częstotliwość maksymalna na widmie amplitudowym – 30Hz).

TrackBack

TrackBack URL dla tej wiadomości:
https://blog.kkthx.pl/2014/11/dyskretna-transformata-fouriera-w-praktyce/trackback/

Napisz komentarz