He estado experimentando con transformadas de Fourier y me gustaría entender algunos de los resultados que estoy viendo.
He escrito un simulador que genera un flujo de datos de 1/120 segundos de duración, muestreado a intervalos de 33,92 nS. Los datos representan una onda semisinusoidal generada por un inversor. Concatené este flujo con su propio inverso negativo, para crear una sola onda sinusoidal de 60 Hz perfectamente simétrica de 491,352 muestras de largo.
Luego ejecuté una FFT de los resultados usando numpy . La mayoría de los resultados tenían sentido para mí: la FFT tenía la misma longitud que la señal original. Los resultados discretos de Fourier son simétricos con respecto a la fundamental, por lo que tengo la mitad de "contenedores" (alrededor de 246,000) para representar armónicos. El contenido de frecuencia más bajo en la señal original es de 60 Hz. Según Nyqist, la señal original no puede representar frecuencias superiores a 1/(2*33,92 nS) = 14,74 MHz, que también es el armónico de aproximadamente 246 000 de 60 Hz. Entonces, cada contenedor representa un armónico de la fundamental de 60 Hz, sin contenedores omitidos. Si traté de transformar cinco ondas sinusoidales completas en lugar de solo una, cuatro de cada cinco contenedores eran cero, lo cual tiene sentido; esos contenedores representan armónicos fraccionarios, que no tienen sentido.
Volviendo a mi FFT de onda única, cada entrada de índice par (índice desde cero) de mis resultados de FFT es cero. Cada entrada impar es distinta de cero, siendo el índice 1, con mucho, el más grande. Esto tiene sentido si 1 es el fundamental, porque los armónicos pares no aparecerán en una onda sinusoidal simétrica. Pero, ¿por qué la primera entrada en los resultados de la FFT no es la fundamental?
Después de esto, apliqué un filtro LC, iterando los resultados de FFT y multiplicando cada contenedor por la ganancia del filtro en esa frecuencia. Luego hice una FFT inversa, dándome la señal filtrada en el dominio del tiempo. El resultado tiene componentes tanto reales como imaginarios. El componente real y el componente imaginario, cuando se toman por separado, cada uno se ve como esperaba que se viera la señal en el dominio del tiempo: una onda sinusoidal de mejor aspecto que la que tenía al principio, desplazada 90 grados entre sí.
Pero la magnitud es bastante constante, en lugar de mirar todas las líneas como una onda sinusoidal. Esto no es en absoluto lo que esperaba. ¿Cuál es el significado de este resultado?
Pero, ¿por qué la primera entrada en los resultados de la FFT no es la fundamental?
Normalmente, la entrada 0 almacena el término DC. En algunos esquemas, la entrada [N/2]'th podría ser el término DC y la entrada [N/2+1]'th sería la fundamental.
Apliqué un filtro LC, iterando a través de los resultados de FFT y multiplicando cada contenedor por la ganancia del filtro en esa frecuencia. Luego hice una FFT inversa... El resultado tiene componentes tanto reales como imaginarios.
¿Consideraste el efecto de fase del filtro? Debe multiplicar por un valor complejo que tenga en cuenta tanto la magnitud como la respuesta de fase del filtro LC.
Incluso entonces, debido a problemas de precisión finita, a menudo obtendrá componentes imaginarios distintos de cero en la señal de dominio de tiempo transformada inversamente. Pero por lo general estos son muy pequeños, por ejemplo del orden de
los componentes reales. Por lo general, estos se solucionan simplemente ignorándolos (tomando solo la parte real del resultado). Algunas herramientas incluso ofrecen una función integrada (Mathematica Chop
, por ejemplo) para eliminar estos artefactos.
La primera entrada [1] en la FFT es su fundamental, ¡pero la entrada cero [0] es DC!
Una FFT estándar tendrá el mismo número de muestras de salida que de entrada y todas serán complejas.
Los resultados no son necesariamente simétricos con respecto a DC. Sin embargo en el caso especial de una única entrada real, son complejos conjugados sobre DC, que parece simétrica en todo el mundo si tomas la potencia, o no notas el signo de la parte imaginaria. La mayoría de los paquetes FFT tendrán un modo especial de 'entrada real' que ahorra tiempo de procesamiento y tamaño de matriz al producir solo la mitad + cinco de los resultados cuando se le da una entrada real.
Cuando invirtió FFT'd back, presumiblemente estaba usando solo la mitad + ve de los coeficientes de frecuencia. Esto le dará una señal analítica en el dominio del tiempo. Esto es como describe un seno y un coseno, en ángulo recto, con un módulo constante. La señal de entrada real tiene componentes de frecuencia +ve y -ve, que la FFT separa.
Si, en cambio, invierte la FFT usando todo el espectro de frecuencia, ya sea haciendo una FFT de complejo completo a complejo completo para obtener los coeficientes de frecuencia, o mediante un conjugado complejo reflejándolos a través de cero, reconstruirá su forma de onda original en tiempo real (con algunos cambios). 1e-15s dando vueltas donde debería haber ceros debido a la precisión finita). La IFFT de la mitad del espectro +ve produce el resultado que viste, la IFFT de la mitad -ve produce una señal similar con los cosenos en fase, pero los senos en fase inversa, por lo que la suma resultante es coseno puro y seno cero.
mate joven
Arsenal
el fotón
rfft(...)
supone que los datos en el dominio del tiempo tienen un valor real, por lo que no es necesario calcular ni almacenar los términos de frecuencia negativos. Sería útil saber exactamente qué rutina FFT está utilizando.Esteban Collings
Esteban Collings