Próbuję zrozumieć, czy dyskretna transformata Fouriera daje taką samą reprezentację krzywej jak regresja z wykorzystaniem zasady Fouriera. Na przykład,
library(fda)
Y=daily$tempav[,1] ## my data
length(Y) ## =365
## create Fourier basis and estimate the coefficients
mybasis=create.fourier.basis(c(0,365),365)
basisMat=eval.basis(1:365,mybasis)
regcoef=coef(lm(Y~basisMat-1))
## using Fourier transform
fftcoef=fft(Y)
## compare
head(fftcoef)
head(regcoef)
FFT daje liczbę zespoloną, podczas gdy regresja daje liczbę rzeczywistą.
Czy przekazują te same informacje? Czy istnieje mapa jeden do jednego między dwoma zestawami liczb?
(Byłbym wdzięczny, gdyby odpowiedź została napisana z perspektywy statystyka zamiast z perspektywy inżyniera. Wiele materiałów online, które mogę znaleźć, ma żargon techniczny w całym miejscu, co czyni mnie mniej smakowitym.)
Odpowiedzi:
Oni są tacy sami. Oto jak...
Robić regresję
Załóżmy, że do modelu gdzie i . Nie jest to jednak odpowiednie dla regresji liniowej, więc zamiast tego używasz trygonometrii ( ) i dopasuj model równoważny: Uruchamianie regresji liniowej na wszystkich częstotliwościach Fouriera daje ci kilka ( ) bet: , . Dla każdego
Wykonywanie dyskretnej transformaty Fouriera
Po uruchomieniu transformacji Fouriera obliczasz dla :j = 1 , … , n
Jest to liczba zespolona (zwróć uwagę na ). Aby zobaczyć, dlaczego ta równość się utrzymuje, należy pamiętać, że , i .i eix=cos(x)+isin(x) cos(−x)=cos(x) sin(−x)=−sin(x)
Dla każdego biorąc kwadrat złożonej koniugatu daje „ periodogram :”j
I <- abs(fft(Y))^2/length(Y)
dziwne, ponieważ trzeba go skalować.Możesz także zdefiniować „ skalowany periodogram ” Wyraźnie . W R byłoby to .
P <- (4/length(Y))*I[(1:floor(length(Y)/2))]
Połączenie między dwoma
Okazuje się, że związek między regresją a dwoma periodogramami jest:
j ∑ N t =
Źródło: https://www.amazon.com/Time-Analysis-Its-Applications-Statistics/dp/144197864X
źródło
R
obiektów, które opublikowałem.fft()
nie skaluje się tak, jak napisałem (już o tym wspomniałem), że niczego nie udowodniłem za pomocą przechwytywania i żecreate.fourier.basis()
dziwnie skaluje funkcje podstawy.Są silnie powiązane. Twój przykład nie jest powtarzalny, ponieważ nie podałeś swoich danych, dlatego zrobię nowy. Po pierwsze, stwórzmy funkcję okresową:
Teraz utwórzmy podstawę Fouriera dla regresji. Zauważ, że przy tak naprawdę nie ma sensu tworzyć więcej niż funkcji bazowych, tj. niesynchroniczne sinus i cosinus, ponieważ składniki o wyższej częstotliwości są aliasowane na takiej siatce. Na przykład sinus o częstotliwości jest nie do odróżnienia od costant (sinus): rozważ przypadek , tj. . W każdym razie, jeśli chcesz dwukrotnie sprawdzić, po prostu przejdź do fragmentu kodu poniżej i spójrz na dwie ostatnie kolumny: zobaczysz, że są one faktycznie bezużyteczne (i powodują problemy z dopasowaniem, ponieważ macierz projektowa jest teraz pojedyncza ).N=2k+1 N−2 N−3=2(k−1) kω N=3 k=1
N-2
N
Zauważ, że częstotliwości są dokładnie właściwe, ale amplitudy składników niezerowych nie są (1,2,3,4). Powodem jest to, że1,sinωx,cosωx,… 1π√ 12π√,sinωxπ√,cosωxπ√,…
fda
funkcje podstawowe Fouriera są skalowane w dziwny sposób: ich maksymalna wartość nie wynosi 1, tak jak w przypadku zwykłej podstawy Fouriera . Nie jest to również , jak byłoby w przypadku ortonormalnej podstawy Fouriera, .Wyraźnie widać, że:
Proste skalowanie podanej przez Fouriera podstawy Fouriera
fda
, aby uzyskać zwykłą podstawę Fouriera, prowadzi do współczynników regresji o oczekiwanych wartościach:Spróbujmy
fft
teraz: zwróć uwagę, że ponieważYper
jest to sekwencja okresowa, ostatni punkt tak naprawdę nie dodaje żadnych informacji (DFT sekwencji jest zawsze okresowa). W ten sposób możemy odrzucić ostatni punkt przy obliczaniu FFT. Ponadto FFT to szybki algorytm numeryczny do obliczania DFT, a DFT ciągu liczb rzeczywistych lub zespolonych jest złożony . Tak więc naprawdę chcemy modułów współczynników FFT:Mnożymy przez , aby uzyskać takie samo skalowanie jak w przypadku podstawy Fouriera . Gdybyśmy nie skalowali, nadal odzyskalibyśmy prawidłowe częstotliwości, ale wszystkie amplitudy byłyby skalowane o ten sam współczynnik w stosunku do tego, co znaleźliśmy wcześniej. Teraz wykreślmy współczynniki fft:2N−1 1,sinωx,cosωx,…
Ok: częstotliwości są poprawne, ale zauważ, że teraz podstawowymi funkcjami nie są już sinus i cosinus (są złożonymi wykładnikami , gdzie oznaczam jednostkę urojoną). Zauważ też, że zamiast zestawu niezerowych częstotliwości (1,2,3,4), jak poprzednio, otrzymaliśmy zestaw (1,2,5). Powodem jest to, że termin w tym złożonym rozwinięciu współczynnika (a więc jest złożony) odpowiada dwóm rzeczywistym warunkom w trygonometryczne rozszerzenie podstawy, ze względu na formułę Eulera . Moduł współczynnika zespolonego jest równy sumie kwadratury dwóch rzeczywistych współczynników, tj.expniωx i xnexpniωx xn ansin(nωx)+bncos(nωx) expix=cosx+isinx 5=√|xn|=a2n+b2n−−−−−−√ . W rzeczywistości .5=33+42−−−−−−√
źródło
daily
dostarczane wraz zfda
pakietem.