2010-07-20 13 views
5

¿Cómo deben representarse los datos de audio estéreo (2 canales) para FFT? ¿SeCómo representar los datos de audio estéreo para FFT

A. tomar el promedio de los dos canales y la asigna a la parte real de un número y dejar el componente imaginario 0.

B. Asignar un canal al componente real y el otro canal a el componente imag.

¿Hay alguna razón para hacer una u otra? Busqué en la web pero no pude encontrar ninguna respuesta definitiva sobre esto.

Estoy haciendo un análisis de espectro simple y, sin saber nada mejor, utilicé la opción A). Esto me dio un resultado inesperado, mientras que la opción B) fue como se esperaba. Aquí hay más detalles:

Tengo un archivo WAV de un piano "medio-C". Por definición, el medio-C es 260Hz, por lo que yo esperaría que la frecuencia máxima esté a 260Hz y picos más pequeños en armónicos. Lo confirmé al ver el espectro a través de un software de edición de audio (Sound Forge). Pero cuando tomé FFT yo mismo, con la opción A), el pico estaba a 520Hz. Con la opción B), el pico estaba a 260Hz.

¿Echo de menos algo? La explicación que se me ocurrió hasta ahora es que la representación de datos estéreo usando un componente real e imag implica que los dos canales son independientes, lo cual, supongo que no es así, y por lo tanto el desorden.

Respuesta

2

Opción B no tiene sentido. La opción A, que equivale a convertir la señal en mono, está bien (si está interesado en un espectro global). Su problema (doble frecuencia) seguramente está relacionado con algún malentendido en el uso de sus rutinas de FFT.

+0

De hecho, tiene mucho sentido. Vea la respuesta a esa pregunta para más detalles: http://stackoverflow.com/questions/14477454/apply-fft-to-a-both-channels-of-a-stereo-signal-seperately –

4

No creo que esté tomando la media correctamente. :-)

C. Proceso de cada canal por separado, la asignación de la amplitud de la componente real y dejando la componente imaginaria como 0.

+0

O simplemente use un FFT real optimizado; la mayoría de los kits de herramientas ofrecen uno, y evitaría confusiones sobre componentes reales e imaginarios, al menos para la entrada;) Algunos incluso ofrecen variantes "n-dimensionales" ; Piensa en cada canal de tu entrada de sonido como una dimensión. Por supuesto, tendrías que encontrar el promedio de los resultados de FFT después. – T045T

2

Una vez que toma la FFT, necesita obtener la Magnitud del espectro de frecuencia complejo. Para obtener la magnitud, toma el valor absoluto del espectro complejo | X (w) |. Si desea ver el espectro de potencia, cuadra el espectro de magnitud, | X (w) |^2.

En términos de su cambio de frecuencia, creo que tiene que ver con el ajuste de las partes imaginarias a cero. Si imagina el complejo espectro de frecuencia como una serie de vectores complejos o vectores de posición en un espacio cartesiano. Si tomara un bin de frecuencia discreta X (w), habría un componente real que representaría su dirección en el eje real (x -dirección), y un componente imaginario en el en el eje imaginario (dirección y). Hay cuatro valores importantes sobre esta frecuencia discreta, 1. valor real, 2. valor imaginario, 3. Magnitud y, 4. fase. Si solo toma el valor real y establece el valor imaginario en 0, está configurando Magnitude = real y phase = 0deg o 90deg. De aquí en adelante ha modificado el espectro resultante y ha aplicado un sesgo a cada bin de frecuencia. Eche un vistazo a la wiki en Magnitude of a vector, también llamada la norma euclidiana de un vector para mejorar su comprensión. Leonbloy tenía razón, pero espero que sea más informativo.

+0

Creo que está confundido acerca de cuando OP está configurando la parte imaginaria a cero, concretamente en la entrada de la FFT. Esto está perfectamente bien, porque los datos de audio no tienen una parte imaginaria, mientras que los datos transformados sí lo hacen. Tan pronto como finalice la FFT, tiene razón, por supuesto. Necesitarías calcular la magnitud, en lugar de solo la parte real. Creo que el malentendido que leonbloy estaba jugando tiene que ver más con el etiquetado de los contenedores de frecuencia que con la norma :) – T045T

0

Considere la FFT como una forma de obtener información de una sola señal. Lo que estás preguntando es cuál es la mejor manera de mostrar datos de dos señales. Mi respuesta sería tratar a cada uno de forma independiente y mostrar una FFT para cada uno.

Si desea una FFT de transmisión realmente rápida, puede leer acerca de un algoritmo que escribí aquí: www.depthcharged.us/?p = 176

Cuestiones relacionadas