9.1 Elementarne FFT

FFT

Prosty przykład transformaty Fouriera

Liczba pomiarów

L  = 8;

Częstotliwość próbkowania

Fs = 8; % 8 razy na sekundę

Okres próbkowania

T  = 1/Fs;

Chwile, w których dokonujemy pomiarów:

t  = (0:L-1)*T;

Tworzę wektor wartości ze stałymi odległościami między próbkami.

Generujemy sygnał. Żeby dobrze zaobserwować „co się dzieje” można dodać stałą i składową sinus

f = 1; % częstość 1 Hz
a = 1; % amplituda sygnału
X  = a*cos(2*pi*f*t);% + a*sin(2*pi*2*f*t) + 3;

Wykres

figure
plot(t,X)
title('Przykładowy sygnał')
xlabel('t [s]')
ylabel('X(t)')

Przebieg czasowy sygnału
Przebieg czasowy sygnału

Transformata Fouriera

Y  = fft(X)
Y = 1x8 complex
  -0.0000 + 0.0000i   4.0000 - 0.0000i   0.0000 + 0.0000i  -0.0000 - 0.0000i   0.0000 + 0.0000i  -0.0000 + 0.0000i   0.0000 + 0.0000i   4.0000 + 0.0000i

W ogólnym przypadku wartości transformaty Fouriera są liczbami zespolonymi. W tym wypadku występują tylko wartości rzeczywiste, bo badana funkcja jest symetryczna (cosinus). Warto zmienić ją na sinus, żeby zobaczyć jak się wyniki zmienią. Zerowy wyraz transformaty FFT to średnia wartość sygnału.

plot(abs(Y))

Sygnał po transformacji FFT
Sygnał po transformacji FFT

Na osi X jest numer współczynnika. Widmo jest symetryczne.

Bardzo często dokonuje się odbicia widma fft funkcją fftshift()

plot(abs(fftshift(Y)))

Przesunięte częstotliwości (zero w środku przedziału)
Przesunięte częstotliwości (zero w środku przedziału)

Teraz transformatę trzeba unormować:

  1. Wartości widma dzielimy przez liczbę próbek (L)
P2 = abs(Y/L);

Interesuje nas tylko połowa FFT czyli widmo jednostronne.

P1 = P2(1:L/2+1)
P1 = 1x5
    0.0000    0.5000    0.0000    0.0000    0.0000

Dalszy ciąg normowania (jest inne dla wartości średniej, inne dla współczynników).

Wszystkie współczynniki podzieliliśmy przez liczbę próbek, teraz te poza zerowym musimy pomnożyć przez dwa.

P1(2:end-1) = 2*P1(2:end-1)
P1 = 1x5
    0.0000    1.0000    0.0000    0.0000    0.0000

Zerowy współczynnik to wartość średnia sygnału (dla pełnego okresu funkcji cosinus albo sinus, będzie zero).

Do wyliczania Szybkiej transformaty Fouriera używamy tylko wartości pomiarów nie uwzględniając zmiennej czasu, ale zakłądając, że próbkowanie było równomierne w czasie.

Teraz powinniśmy przypisać poszczególnym numerom składowych widma ich częstotliwości. Zależą one od częstotliwosci próbkowania i liczby próbek.

Generacja wartości kolejnych częstotliwości

f = Fs*(0:(L/2))/L
f = 1x5
     0     1     2     3     4

Zatem zerowa składowa to średnia wartość sygnału, wartość współczynnika dla pierwszej składowej oznacza w tym przypadku amplitudę funkcji o częstości 1 Hz. Wyższe składowe w sygnale źródłowym nie występowały. Górna częstotliwość to zgodnie z Twierdzeniem o próbkowaniu połowa częstotliwości próbkowania.

figure
stem(f,P1,'r')
title("Współczynniki Fouriera")
ylabel("Amplituda")
xlabel("Hz")

Współczynniki Fouriera
Współczynniki Fouriera

Warto pobawić się zmianami parametrów:

  • liczba pomiarów (L),
  • częstotliwość próbkowania (Fs);

oraz zmienić sygnał

  • na przebieg sinusoidalny,
  • na mieszankę sygnałów o różnych częstotliwościach,
  • dodać wartość stałą.

Podstawowa wersja notatnika MATLABa .

Poprzedni
Następny