En la mayoría de los ejemplos y el código FFT que he visto, la salida (magnitudes de frecuencia) de la operación DFT directa se escala en N, es decir, en lugar de darte la magnitud de cada bin de frecuencia, te da N veces la magnitud.
Operativamente, esto se debe simplemente a que el DFT se calcula tomando el producto interno de la señal con cada seno base (es decir, correlación no normalizada). Sin embargo, eso no responde a la pregunta filosófica de por qué no dividimos entre N antes de devolver la salida.
En cambio, la mayoría de los algoritmos se dividen por N cuando se vuelve a sintetizar.
Esto me parece contrario a la intuición y (a menos que me falte algo) hace que todas las explicaciones del DFT sean muy confusas.
En cada escenario que pueda imaginar, la magnitud real (no la magnitud * N) es el valor que necesito de una operación DFT, y la magnitud normalizada es el valor que quiero ingresar en una operación IDFT.
¿Por qué el DFT no se define como DFT / N, y el IDFT se define como una simple suma de sinusoides de magnitud normalizada?
fuente
Respuestas:
Si escala la salida de su DFT, hacia adelante o hacia atrás, no tiene nada que ver con la convención o con lo que es matemáticamente conveniente. Tiene todo que ver con la entrada al DFT. Permítanme mostrar algunos ejemplos en los que se requiere o no el escalado para la transformación directa e inversa.
Debe escalar una transformación directa por 1 / N.
Para empezar, debe quedar claro que para analizar una onda sinusoidal simple, la longitud de la transformación debe ser irrelevante, matemáticamente hablando. Suponga que N = 1024, Freq = 100 y su señal es:
f (n) = cos (Freq * 2 * Pi * n / N)
Si toma un DFT de 1024 puntos de f (n), encontrará que bin [100] = 512. Pero este no es un valor significativo hasta que lo escala en N. 512/1024 = 1/2 y, por supuesto, el otro 1/2 está en el espectro negativo en bin [924].
Si duplica la longitud de la DFT, N = 2048, los valores de salida serían dos veces los de la DFT de 1024 puntos, lo que nuevamente hace que los resultados no tengan sentido a menos que escalemos en 1 / N. La longitud del DFT no debe ser un factor en este tipo de análisis. Entonces, en este ejemplo, debe escalar, escalar el DFT en 1 / N.
No debe escalar una transformación hacia adelante.
Ahora suponga que tiene la respuesta de impulso de un filtro FIR de 32 tomas y quiere saber su respuesta de frecuencia. Por conveniencia, asumiremos un filtro de paso bajo con una ganancia de 1. Sabemos que para este filtro, el componente de CC del DFT debe ser 1. Y debe quedar claro que este será el caso, sin importar el tamaño del DFT porque el componente DC es simplemente la suma de los valores de entrada (es decir, la suma de los coeficientes FIR).
Por lo tanto, para esta entrada, el DFT no se escala en 1 / N para obtener una respuesta significativa. Es por eso que puede poner a cero una respuesta de impulso tanto como desee sin afectar el resultado de la transformación.
¿Cuál es la diferencia fundamental entre estos dos ejemplos?
La respuesta es simple. En el primer caso, suministramos energía para cada muestra de entrada. En otras palabras, la onda sinusoidal estaba presente para todas las 1024 muestras, por lo que necesitábamos escalar la salida del DFT en 1/1024.
En el segundo ejemplo, por definición, solo suministramos energía para 1 muestra (el impulso en n = 0). Tomó 32 muestras para que el impulso funcionara a través del filtro de 32 tomas, pero este retraso es irrelevante. Como suministramos energía para 1 muestra, escalamos la salida del DFT en 1. Si un impulso se definiera con 2 unidades de energía en lugar de 1, escalaríamos la salida en 1/2.
No debe escalar una transformación inversa.
Ahora consideremos un DFT inverso. Al igual que con el DFT directo, debemos considerar la cantidad de muestras a las que estamos suministrando energía. Por supuesto, tenemos que ser un poco más cuidadosos aquí porque debemos llenar los contenedores de frecuencia positiva y negativa de manera adecuada. Sin embargo, si colocamos un impulso (es decir, un 1) en dos contenedores apropiados, la salida resultante de la DFT inversa será una onda cosenoidal con una amplitud de 2, sin importar cuántos puntos usemos en la DFT inversa.
Por lo tanto, al igual que con el DFT directo, no escalamos la salida del DFT inverso si la entrada es un impulso.
Debe escalar una transformación inversa.
Ahora considere el caso en el que conoce la respuesta de frecuencia de un filtro de paso bajo y desea hacer un DFT inverso para obtener su respuesta de impulso. En este caso, dado que estamos suministrando energía en todos los puntos, debemos escalar la salida del DFT en 1 / N para obtener una respuesta significativa. Esto no es tan obvio porque los valores de entrada serán complejos, pero si trabaja con un ejemplo, verá que esto es cierto. Si no escala en 1 / N, tendrá valores de respuesta de impulso pico en el orden de N, que no puede ser el caso si la ganancia es 1.
Las cuatro situaciones que acabo de detallar son ejemplos de punto final donde está claro cómo escalar la salida del DFT. Sin embargo, hay mucha área gris entre los puntos finales. Así que consideremos otro ejemplo simple.
Supongamos que tenemos la siguiente señal, con N = 1024, Freq = 100:
Observe las diferencias de amplitud, frecuencia y duración para los tres componentes. Desafortunadamente, el DFT de esta señal mostrará los tres componentes al mismo nivel de potencia, aunque el segundo componente tenga 1/36 del nivel de potencia de los otros dos.
El hecho de que los tres componentes están suministrando la misma cantidad de energía es obvio, lo que explica los resultados de DFT, pero hay un punto importante que hacer aquí.
Si conocemos la duración de los diversos componentes de frecuencia, entonces podemos escalar los diferentes intervalos de frecuencia en consecuencia. En este caso, haríamos esto para escalar con precisión la salida del DFT: bin [100] / = 128; bin [200] / = 768; bin [400] / = 128;
Lo cual me lleva a mi último punto; en general, no tenemos idea de cuánto tiempo un componente de frecuencia particular está presente en la entrada de nuestro DFT, por lo que no podemos hacer este tipo de escala. Sin embargo, en general, suministramos energía para cada punto de muestra, por lo que debemos escalar el DFT directo en 1 / N cuando analizamos una señal.
Para complicar las cosas, es casi seguro que apliquemos una ventana a esta señal para mejorar la resolución espectral del DFT. Dado que los componentes de frecuencia primero y tercero están al principio y al final de la señal, se atenúan 27 dB mientras que el componente central se atenúa solo 4 dB (ventana de Hanning).
Para ser claros, la salida del DFT puede ser una representación bastante pobre de la entrada, escalada o no.
En el caso de la DFT inversa, que generalmente es un problema matemático puro, a diferencia del análisis de una señal desconocida, la entrada a la DFT está claramente definida, por lo que sabe cómo escalar la salida.
Al analizar una señal con un analizador de espectro, analógico o FFT, los problemas son similares. No conoce la potencia de la señal que se muestra a menos que también conozca su ciclo de trabajo. Pero incluso entonces, la ventana, el intervalo, las velocidades de barrido, el filtrado, el tipo de detector y otros factores funcionan para obtener el resultado.
En última instancia, debe tener mucho cuidado al moverse entre los dominios de tiempo y frecuencia. La pregunta que hizo sobre el escalado es importante, por lo que espero haber dejado en claro que debe comprender la entrada al DFT para saber cómo escalar el resultado. Si la entrada no está claramente definida, la salida del DFT debe considerarse con mucho escepticismo, ya sea que la escale o no.
fuente
Puedo pensar en varias razones que involucran problemas de precisión computacional, pero eso probablemente no haría justicia porque matemáticamente lo estamos definiendo de la misma manera sin importar qué, y las matemáticas no conocen problemas de precisión.
Aquí está mi opinión al respecto. Pensemos conceptualmente sobre lo que significa DFT en el sentido del procesamiento de la señal, no solo como una transformación. En este caso, me parece que aplicar DFT a una señal y a un sistema nos hace desear ver resultados diferentes.
Por ejemplo, apliquemos el DFT a una señal constante de valor 1. Supongamos también que esta señal tiene una longitud finita y una longitud de 16 toques. ¿Qué queremos de DFT en este caso? Obviamente, queremos que nos diga qué amplitud tiene cada componente de frecuencia de la señal. Claramente, nuestra señal tiene un solo componente de frecuencia 0 y amplitud 1. ¡Pero el DFT nos da un solo pico en el bin 0 y la altura 16! En este caso, su frustración con la definición de DFT tiene mucho sentido. Deberíamos escalar los coeficientes de análisis, no los coeficientes de síntesis.
Bien, ahora analicemos la misma matriz de números, es decir, nuestra cadena de 16 unidades, pero en este caso como un sistema. ¿Qué queremos conceptualmente que signifique la respuesta de frecuencia de un sistema? La mayoría de la gente dirá que es la amplitud de la salida en comparación con la de la entrada, es decir, la función de transferencia. En este caso, supongamos que alimentamos una señal DC de amplitud unitaria en nuestro sistema y observamos la amplitud de la respuesta de estado estacionario. Bueno, convolucione dos señales constantes de 16 tomas juntas y obtendrá una rampa transitoria seguida de una salida de estado estable que es una señal DC de amplitud (¡compruebe esto!) 16! En este caso, nuestra definición de transformación de análisis sin escala tiene más sentido que lo contrario.
Al final del día, se trata de lo que estás tratando de representar. Hay muchas razones para considerar esta definición de DFT centrada en el sistema.
fuente
En realidad, 3 formas diferentes de poner los factores de escala son comunes en diversas y diferentes implementaciones de FFT / IFFT: 1.0 adelante y 1.0 / N hacia atrás, 1.0 / N hacia adelante y 1.0 hacia atrás, y 1.0 / sqrt (N) hacia adelante y hacia atrás.
Estas 3 variaciones de escala permiten que un IFFT (FFT (x)) viaje de ida y vuelta, utilizando funciones trigonométricas sin escala genéricas sin () y cos () para los factores twiddle, sea una transformación de identidad.
Tenga en cuenta que preservar la magnitud sinusoidal en la FFT hacia adelante no conserva la energía total (como en el teorema de Parseval). Elige el que prefieras.
fuente