Ich versuche zu verstehen, ob die diskrete Fourier-Transformation die gleiche Darstellung einer Kurve wie eine Regression auf Fourier-Basis liefert. Beispielsweise,
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 gibt eine komplexe Zahl an, während Regression eine reelle Zahl ergibt.
Vermitteln sie die gleichen Informationen? Gibt es eine Eins-zu-Eins-Zuordnung zwischen den beiden Zahlengruppen?
(Ich würde es begrüßen, wenn die Antwort aus Sicht des Statistikers statt aus Sicht des Ingenieurs geschrieben würde. Viele Online-Materialien, die ich finden kann, enthalten überall Fachjargon, was sie für mich weniger schmackhaft macht.)
Antworten:
Sie sind die gleichen. Hier ist wie...
Eine Regression durchführen
Angenommen, Sie passen das Modell mit t = 1 , … , N und n = Boden ( N / 2 ) an . Dies ist jedoch nicht für die lineare Regression geeignet. Verwenden Sie stattdessen eine Trigonometrie ( cos ( a + b ) = cos
Eine diskrete Fourier-Transformation durchführen
This is a complex number (notice thei ). To see why that equality holds, keep in mind that eix=cos(x)+isin(x) , cos(−x)=cos(x) and sin(−x)=−sin(x) .
For eachj , taking the square of the complex conjugate gives you the "periodogram:"
I <- abs(fft(Y))^2/length(Y)
, which is sort of weird, because you have to scale it.Also you can define the "scaled periodogram"
P <- (4/length(Y))*I[(1:floor(length(Y)/2))]
.The Connection Between the Two
It turns out the connection between the regression and the two periodograms is:
Source: https://www.amazon.com/Time-Analysis-Its-Applications-Statistics/dp/144197864X
quelle
R
objects I posted.fft()
Texte nicht skaliere (ich habe das bereits erwähnt), dass ich mit Intercepts nichts bewiesen habe und dasscreate.fourier.basis()
die Basisfunktionen komisch skaliert werden.Sie sind eng miteinander verwandt. Ihr Beispiel ist nicht reproduzierbar, weil Sie Ihre Daten nicht angegeben haben. Daher erstelle ich eine neue. Zunächst erstellen wir eine periodische Funktion:
Erstellen wir nun eine Fourier-Basis für die Regression. Beachten Sie, dass mitN= 2 k + 1 Es macht eigentlich keinen Sinn, mehr zu schaffen als N- 2 Basisfunktionen, dh N- 3 = 2 ( k - 1 ) Nicht konstante Sinus- und Cosinus-Werte, da in einem solchen Gitter höherfrequente Komponenten aliasiert sind. Zum Beispiel ein Sinus der Frequenzk ω ist nicht von einem Costant (Sinus) zu unterscheiden: Betrachten Sie den Fall von N= 3 dh k = 1 . Wie auch immer, wenn Sie überprüfen möchten, ändern , nur
N-2
umN
im Snippet unten und Blick auf den letzten zwei Spalten: Sie werden sehen , dass sie eigentlich nutzlos sind (und sie schaffen Probleme für die Passform, denn die Design - Matrix nun singulär ).Beachten Sie, dass die Frequenzen genau die richtigen sind, die Amplituden von Nicht-Null-Komponenten jedoch nicht (1,2,3,4). Der Grund ist, dass die1 , Sündeω x ,cosω x ,… . Es ist nicht1π√ entweder, wie es für die orthonormale Fourier-Basis gewesen wäre, 12 π√, sinω xπ√, cosω xπ√, … .
fda
Fourier-Basisfunktionen auf seltsame Weise skaliert sind: Ihr Maximalwert ist nicht 1, wie dies für die übliche Fourier-Basis der Fall wäreSie sehen deutlich, dass:
Das einfache Skalieren der durch gegebenen Fourier-Basis
fda
, so dass die übliche Fourier-Basis erhalten wird, führt zu Regressionskoeffizienten mit den erwarteten Werten:Versuchen wir es
fft
jetzt: Beachten Sie, dassYper
der letzte Punkt keine Informationen hinzufügt , da es sich um eine periodische Sequenz handelt (die DFT einer Sequenz ist immer periodisch). Somit können wir den letzten Punkt bei der Berechnung der FFT verwerfen. Außerdem ist die FFT nur ein schneller numerischer Algorithmus zur Berechnung der DFT, und die DFT einer Folge von reellen oder komplexen Zahlen ist komplex . Wir wollen also unbedingt die Module der FFT-Koeffizienten:Wir multiplizieren mit2N- 1 um die gleiche Skalierung wie bei der Fourier-Basis zu haben 1 , Sündeω x ,cosω x ,… . Wenn wir nicht skalieren würden, würden wir immer noch die richtigen Frequenzen wiederherstellen, aber die Amplituden würden alle um den gleichen Faktor in Bezug auf das skaliert, was wir zuvor gefunden haben. Zeichnen wir nun die fft-Koeffizienten:
Ok: Die Frequenzen sind korrekt, aber beachten Sie, dass die Basisfunktionen jetzt keine Sinus- und Cosinusfunktionen mehr sind (sie sind komplexe Exponentiale)expn i ω x wo mit ich Ich bezeichne die imaginäre Einheit. Beachten Sie auch, dass wir anstelle einer Reihe von Frequenzen ungleich Null (1,2,3,4) wie zuvor eine Reihe (1,2,5) erhalten haben. Der Grund ist, dass ein Begriffxnexpn i ω x in dieser komplexen Koeffizientenexpansion (also xn ist komplex) entspricht zwei reellen Begriffen einns i n ( n ω x ) + bnc o s ( n ω x ) in der trigonometrischen Basiserweiterung aufgrund der Euler-Formel expi x =cosx +ichsinx . Der Modul des komplexen Koeffizienten ist gleich der Quadratursumme der beiden reellen Koeffizienten, dh| xn| = a2n+ b2n------√ . In der Tat,5 = 33+ 42------√ .
quelle
daily
mit demfda
Paket.