Necesito ayuda para comprender la salida del cálculo DFT / FFT.
Soy un ingeniero de software experimentado y necesito interpretar algunas lecturas del acelerómetro de teléfonos inteligentes, como encontrar las frecuencias principales. Desafortunadamente, dormí durante la mayoría de mis clases de EE en la universidad hace quince años, pero he estado leyendo sobre DFT y FFT durante los últimos días (aparentemente con poco éxito).
Por favor, no responda "ve a tomar una clase de EE". De hecho, planeo hacerlo si mi empleador me paga. :)
Pues aqui esta mi problema:
Capturé una señal a 32 Hz. Aquí hay una muestra de 1 segundo de 32 puntos, que he trazado en Excel.
Luego obtuve un código FFT escrito en Java de la Universidad de Columbia (después de seguir las sugerencias en una publicación sobre " FFT confiable y rápido en Java ").
El resultado de este programa es el siguiente. Creo que está ejecutando una FFT en el lugar, por lo que reutiliza el mismo búfer tanto para la entrada como para la salida.
Before:
Re: [0.887 1.645 2.005 1.069 1.069 0.69 1.046 1.847 0.808 0.617 0.792 1.384 1.782 0.925 0.751 0.858 0.915 1.006 0.985 0.97 1.075 1.183 1.408 1.575 1.556 1.282 1.06 1.061 1.283 1.701 1.101 0.702 ]
Im: [0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 0.0 ]
After:
Re: [37.054 1.774 -1.075 1.451 -0.653 -0.253 -1.686 -3.602 0.226 0.374 -0.194 -0.312 -1.432 0.429 0.709 -0.085 0.0090 -0.085 0.709 0.429 -1.432 -0.312 -0.194 0.374 0.226 -3.602 -1.686 -0.253 -0.653 1.451 -1.075 1.774 ]
Im: [0.0 1.474 -0.238 -2.026 -0.22 -0.24 -5.009 -1.398 0.416 -1.251 -0.708 -0.713 0.851 1.882 0.379 0.021 0.0 -0.021 -0.379 -1.882 -0.851 0.713 0.708 1.251 -0.416 1.398 5.009 0.24 0.22 2.026 0.238 -1.474 ]
Entonces, en este punto, no puedo sacar ni cara ni cruz de la salida. Entiendo los conceptos de DFT, como que la parte real son las amplitudes de las ondas del coseno componentes y la parte imaginaria son las amplitudes de las ondas sinusoidales componentes. También puedo seguir este diagrama del gran libro " La guía del científico e ingeniero para el procesamiento de señales digitales ":
Entonces mis preguntas específicas son:
A partir de la salida de la FFT, ¿cómo encuentro las "frecuencias más frecuentes"? Esto es parte de mi análisis de los datos de mi acelerómetro. ¿Debo leer las matrices real (coseno) o imaginaria (seno)?
Tengo una entrada de 32 puntos en el dominio del tiempo. ¿No debería la salida de la FFT ser una matriz de 16 elementos para reales y una matriz de 16 elementos para imaginarios? ¿Por qué el programa me da salidas de matriz reales e imaginarias de tamaño 32?
En relación con la pregunta anterior, ¿cómo analizo los índices en las matrices de salida? Dada mi entrada de 32 muestras muestreadas a 32 Hz, tengo entendido que una salida de matriz de 16 elementos debe tener su índice distribuido uniformemente hasta la mitad de la frecuencia de muestreo (de 32 Hz), así que estoy en lo correcto al entender que cada elemento de la matriz representa (32 Hz * 1/2) / 16 = 1 Hz?
¿Por qué la salida FFT tiene valores negativos? Pensé que los valores representan amplitudes de una sinusoide. Por ejemplo, la salida de Real [3] = -1.075 debería significar una amplitud de -1.075 para una onda cosenoidal de frecuencia 3. ¿Es correcto? ¿Cómo puede ser negativa una amplitud?