Estoy tratando de entender si la transformada discreta de Fourier ofrece la misma representación de una curva que una regresión utilizando la base de Fourier. Por ejemplo,
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 da un número complejo, mientras que la regresión da un número real.
¿Transmiten la misma información? ¿Hay un mapa uno a uno entre los dos conjuntos de números?
(Agradecería que la respuesta se escriba desde la perspectiva del estadístico en lugar de la perspectiva del ingeniero. Muchos materiales en línea que puedo encontrar tienen jerga de ingeniería en todo el lugar, lo que los hace menos sabrosos para mí).
Respuestas:
Son lo mismo Así es cómo...
Haciendo una regresión
Digamos que se ajusta al modelo , donde t = 1 , ... , N y n = suelo ( N / 2 ) . Sin embargo, esto no es adecuado para la regresión lineal, por lo que utiliza trigonometría ( cos ( a + b ) = cost= n ∑ Ejecutando regresión lineal en todas las frecuencias de Fourier{j/N: ( a ) cos ( b ) - sin ( a ) sin ( b ) ) y se ajusta al modelo equivalente: y
y β 2,j=Σ N t = 1 ytpecado(2πt[j/N])
Hacer una transformada discreta de Fourier
Cuando ejecuta una transformación de Fourier, calcula, para :j=1,…,n
Este es un número complejo (observe la ). Para ver por qué se mantiene esa igualdad, tenga en cuenta que e i x = cos ( x ) + i sini , cos ( - x ) = cos ( x ) y sin ( - x ) = - sin ( x ) .eix=cos(x)+isin(x) cos(−x)=cos(x) sin(−x)=−sin(x)
Para cada , tomar el cuadrado del conjugado complejo te da el " periodograma :"j
I <- abs(fft(Y))^2/length(Y)
, lo cual es un poco extraño, porque tienes que escalarlo.También puede definir el " periodograma escalado "
P <- (4/length(Y))*I[(1:floor(length(Y)/2))]
La conexión entre los dos
Resulta que la conexión entre la regresión y los dos periodogramas es:
Fuente: https://www.amazon.com/Time-Analysis-Its-Applications-Statistics/dp/144197864X
fuente
R
objetos que publiqué.fft()
no escala la forma en que escribí (ya mencioné esto), que no he probado nada con las intercepciones, y esocreate.fourier.basis()
escala las funciones de la base de manera extraña.Están fuertemente relacionados. Su ejemplo no es reproducible porque no incluyó sus datos, por lo que haré uno nuevo. En primer lugar, creemos una función periódica:
N-2
aN
en el siguiente fragmento de código y vistazo a las últimas dos columnas: verá que en realidad son inútiles (y que crea problemas para el ajuste, debido a que la matriz de diseño ahora es singular )Tenga en cuenta que las frecuencias son exactamente las correctas, pero las amplitudes de los componentes distintos de cero no lo son (1,2,3,4). La razón es que las1 , pecadoω x ,cosω x ,... . No es1π√ tampoco, como habría sido para la base de Fourier ortonormal, 12 π√, el pecadoω xπ√, cosω xπ√, ... .
fda
funciones básicas de Fourier se escalan de una manera extraña: su valor máximo no es 1, como sería para la base de Fourier habitualUsted ve claramente que:
Simplemente escalar la base de Fourier dada por
fda
, para que se obtenga la base de Fourier habitual, conduce a coeficientes de regresión que tienen los valores esperados:Probemos
fft
ahora: tenga en cuenta que, dado queYper
es una secuencia periódica, el último punto realmente no agrega ninguna información (el DFT de una secuencia siempre es periódico). Por lo tanto, podemos descartar el último punto al calcular la FFT. Además, el FFT es solo un algoritmo numérico rápido para calcular el DFT, y el DFT de una secuencia de números reales o complejos es complejo . Por lo tanto, realmente queremos los módulos de los coeficientes FFT:Multiplicamos por2norte- 1 para tener la misma escala que con la base de Fourier 1 , pecadoω x ,cosω x ,... . Si no escalamos, aún recuperaríamos las frecuencias correctas, pero todas las amplitudes serían escaladas por el mismo factor con respecto a lo que encontramos antes. Tracemos ahora los coeficientes fft:
Ok: las frecuencias son correctas, pero tenga en cuenta que ahora las funciones básicas ya no son senos y cosenos (son exponenciales complejosExpn i ω x , donde con yo Denote la unidad imaginaria). Tenga en cuenta también que en lugar de un conjunto de frecuencias distintas de cero (1,2,3,4) como antes, obtuvimos un conjunto (1,2,5). La razón es que un términoXnorteExpn i ω x en este complejo coeficiente de expansión (por lo tanto Xnorte es complejo) corresponde a dos términos reales unnortes i n ( n ω x ) + bnortec o s ( n ω x ) en la expansión de la base trigonométrica, debido a la fórmula de Euler Expi x =cosx +isinX . The modulus of the complex coefficient is equal to the sum in quadrature of the two real coefficients, i.e., |xn|=a2n+b2n−−−−−−√ . As a matter of fact, 5=33+42−−−−−−√ .
fuente
daily
comes with thefda
package.