Czytanie danych
temperatura = czytaj_historie("dane.csv");
Funkcja czytaj_histore()
utworzona została na podstawie kodu przygotowanego przez Import Tool.
Teraz zrobimy FFT
- Liczba pomiarów
L
(Co robi funkcjasize()
)
L = size(temperatura, 1)
L = 743
Z różnych względów lepsza byłaby parzysta (Czemu?) liczba pomiarów; więc zrobimy tak:
temperatura(end,:) = [];
L = size(temperatura, 1)
L = 742
Częstotliwość próbkowania.
Musimy odejść od herców, bo to trochę bez sensu, ale możemy powiedzieć, że próbki były pobierane co godzinę, więc na jednostkę czasu (dobę) pobrano ich 24.
Poniższe zmienne są bardzo istotne, bo używając ich będziemy skalowali Transformatę Fouriera. Można używać innych nazw, ale konsekwentnie.
Fs = 24; % Częstotliwosć próbkowania
Nasz sygnał wygląda tak:
plot(temperatura.last_changed, temperatura.state)
Teraz transformata Fouriera.
Funkcja fftshift()
tak przeorganizowuje dane, że częstotliwość zero jest w środku.
Y = fft(temperatura.state);
plot(abs(fftshift(Y)))
Teraz normalizacja i częstotliwości
P2 = abs(Y/L);
P1 = P2(1:L/2+1);
P1(2:end-1) = 2*P1(2:end-1);
f = Fs*(0:(L/2))/L;
I wreszcie wykres
figure
stem(f(f<3),P1(f<3),'r')
title("Współczynniki Fouriera")
ylabel("Amplituda")
xlabel("razy na dobę")