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)')
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))
Na osi X jest numer współczynnika. Widmo jest symetryczne.
Bardzo często dokonuje się odbicia widma fft funkcją fftshift()
plot(abs(fftshift(Y)))
Teraz transformatę trzeba unormować:
- 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")
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łą.