En MATLAB, los resultados de las funciones fft
y / o a ifft
menudo requieren un procesamiento adicional antes de ser considerados para el análisis.
He escuchado muchas opiniones diferentes sobre lo que es correcto:
Escalada
Mathworks afirma que
fft
y lasifft
funciones se basan en las siguientes ecuaciones:Escalado por longitud de señal
Mis compañeros suelen escalar los datos en inmediatamente después del procesamiento de la
fft
.
(No consideramos losfft
datos enbrutoantes de escalar).%% Realizar fft
X_f = fft (x, n_sample, 1) / n_sample; % fft debe normalizarse por el número de muestras en los datos. % Esta convención fue establecida por el desarrollador de software (Mathworks).¿Es esto correcto?
- Si es así, ¿por qué la
ifft
función MATLAB espera que no hayamos escalado en ? - ¿Existe una
ifft
función o opción de función MATLAB que no se escala automáticamente en ?
Alternativamente, ¿hay una convención mejor que deberíamos usar para colocar el ? Por ejemplo, colocando 1 / N en lugar de , o colocando 1 / √
fft
ifft
en ambas ecuaciones, en lugar de un1/N?- Si es así, ¿por qué la
Escalado por período de muestreo
He oído que las funciones
fft
yifft
suponen que el período de muestreo , y que para que las funciones sean verdaderas, lo siguiente necesitaría aplicar:
Ver enlaces:
- Enlace 1 (ver comentario a Matt Szelistowski por el Dr. Seis)
- Enlace 2 (véase la respuesta de Rick Rosson frente a la del Dr. Seis)
- Enlace 3 (ver comentario de Matt (Mensaje: 7/16) y comentario de Poorya (14/16)
- Enlace 4 (ver página 10, diapositiva [1,1])
- Enlace 5 (ver páginas 8 + 9) [parece que está usando la convención inversa para fft y ifft].
¿Es esto cierto?
Estoy particularmente molesto porque no puedo encontrar ninguna ecuación DFT o DTFT en Wikipedia que incluya el período de muestreo.
Respuestas:
La posibilidad de escalar o no la FFT directa en 1 / N depende del resultado que desee para un análisis posterior: energía (preservar la identidad de Parseval) o amplitud (medición de altura o voltios, etc.).
Si desea medir o analizar energía, no escale 1 / N, y una sinusoide más larga de la misma amplitud producirá un resultado FFT mayor, proporcional a la mayor energía de una señal más larga.
Un poco más común, si desea medir o analizar amplitudes, para obtener una sinusoide más larga (por lo tanto, con más energía total en la misma amplitud exacta) para producir aproximadamente el mismo resultado FFT como una señal más corta, deberá reducir la escala Suma de FFT por una proporción proporcional a la longitud. La relación podría ser reference_length / N, que a veces es 1 / N si la ganancia de entrada del sistema es 1.0 para cualquier dimensión o unidad, incluidas las dimensiones del intervalo de tiempo, que elija utilizar en su análisis posterior. Debe reducir la escala proporcionalmente porque un DFT es una suma: cuanto más sume elementos similares, mayor será el resultado.
Entonces. Energía o amplitud. ¿Cuál quieres?
Ahora, si reduce la FFT hacia adelante, entonces no debe escalar la inversa de modo que IFFT (FFT (x)) == x. O hacer al revés.
El 1 / sqrt (N) para el escalado me parece ser cuando se necesita una simetría formal para alguna prueba, o cuando se construye algún tipo de tubería de hardware donde la latencia y / o el número de unidades / puertas aritméticas para el DFT y para el IDFT debe ser idéntico. Pero no se obtiene una buena medición directa de energía o amplitud para ningún tipo típico de análisis de ingeniería.
fuente
El comentario
Está Mal. Nadie dice que debe normalizar el resultado de la FFT. Si quieres, eres libre de hacerlo.
fuente
particularmente dado que se trata de una convención, no reforzaré la convención ridícula de MATLAB y responderé solo con la convención o convenciones correctas y apropiadas . es decir, la indexación de MATLAB para el DFT no es correcta ni adecuada, pero soy bastante agnóstico acerca de cuál de las tres convenciones de escalado comunes.
entonces, la única ventaja de una convención sobre la otra (suponiendo que ambas convenciones sean válidas) puede ser la simplicidad de expresión de algunos de los teoremas.
La convención de escalado más común para el DFT:
tiene la ventaja de la simplicidad con respecto a la convolución circular en el "dominio del tiempo"
pero hay un factor de escala del que debe preocuparse si se involucra en el "dominio de frecuencia" :
El teorema de Parseval también tiene que preocuparse por un factor de escala.
y el teorema de la dualidad:
La otra convención de escala común para el DFT:
También tiene más simplicidad con respecto a la convolución circular en el dominio de frecuencia
pero hay un factor de escala del que debe preocuparse si participa en el dominio del tiempo :
El teorema de Parseval también tiene que preocuparse por un factor de escala.
y el teorema de la dualidad:
La convención de escala unitaria para el DFT es idéntica en escala con su inversa y conserva la energía a través de la transformación o transformación inversa:
la convolución en el dominio del tiempo o del dominio de la frecuencia tiene que preocuparse por el mismo factor de escala:
pero el teorema de Parseval no tiene que preocuparse por el factor de escala.
ni el teorema de dualidad:
fuente
max(abs(X))
función para encontrar dónde está un pico espectral y olvidas restar1
del índice devuelto y vas a hacer cálculos matemáticos sobre él. Es un problema. y triste por eso. el origen de indexación tiene tanto que ver con la " definición de DFT" como la escala. tiene que ver con qué contabilidad se requiere o no.