Android 2.3 Visualizer - Problemas para entender getFft ()

Primera vez aquí, lo siento de antemano por cualquier formato de masacre.

Así que soy completamente nuevo en DSP, así que solo tengo una comprensión muy general de la Transformada de Fourier. Estoy tratando de crear una aplicación de visualización para Android SDK 9, que incluye una clase de visualizador en android.media.audiofx.Visualizerhttp://developer.android.com/reference/android/media/audiofx/Visualizer.html

El javadoc para el método getFft (), que es lo que estoy usando, dice:

"Devuelve una captura de frecuencia del contenido de audio que se está reproduciendo actualmente. La captura es una FFT de magnitud de 8 bits. Tenga en cuenta que el tamaño de la FFT es la mitad del tamaño de captura especificado, pero ambos lados del espectro se devuelven dando un número de bytes igual al tamaño de captura ".

En primer lugar, ¿qué significa "ambos lados del espectro"? ¿Cómo difiere esta salida de una FFT estándar?

Aquí hay algunos resultados de muestra de la matriz de bytes, getFft () recibió 124 puntos para mantenerlo simple y tomé los primeros 31 contenedores. Aquí están las magnitudes de los primeros 31 contenedores:

{123, -2, -23, -3, 6, -16, 15, -10, -8, -12, 9, -9, 17, -6, -18, -22, -8, 4, -5, -2, 10, -3, -11, 3, -4, -11, -8, 15, 16, 11, -12, 1,2}

Cualquier ayuda o explicación sería muy apreciada!

Editar: Entonces, después de mirar un montón de gráficos, parece que parte de mi problema es que Google no especifica qué unidad se está utilizando. Casi todas las demás mediciones se realizan en mHz, ¿sería justo suponer que la salida FTT también está en mHz? ¿Hay algún lugar donde pueda ver el código fuente de la clase Visualizer para que pueda descubrir qué demonios está pasando realmente bajo el capó?

Seguí adelante y agarré toda la salida de getFft ()

93, -2, -28, -16, -21, 19, 44, -16, 3, 16, -9, -4, 0, -2, 21, 16, -3, 1, 2, 4, -3, 5, 5, 10, 6, 4, -9, 7, -2, -1, 2, 11, -1, 5, -8, -2, -1, 4, -5, 5, 1, 3, -6, -1, -5, 0, 0, 0, -3, 5, -4, -6, -2, -2, -1, 2, -3, 0, 1, -3, -4, -3, 1, 1, 0, -2, -1, -1, 0, -5, 0, 4, -1, 1, 1, -1, 1, -1, -3, 2, 1, 2, -2, 1, 0, -1, -2, 2, -3, 4, -2, -2, 0, 1, -4, 0, -4, 2, -1, 0, -3, -1, -1, -1, -5, 2, -2, -2, 0, -3, -2, 1, -5, -2, 0, 0, 0, -2, -2, -1, -1, -1, -2, 0, 3, -3, -1, 0

Entonces, si entiendo esto correctamente, mi salida aquí debería ser de -N a 0 a N. -N a 0 debería verse como 0 a N. Pero cuando miro estas amplitudes, no veo ningún dato reflejado. Google parece indicar que la salida debería ser de 0 a N en ambos lados del espectro. Entonces debería poder tomar los datos de (output.length-1) / 2 a output.length-1. Las amplitudes negativas se mueven más rápido que la frecuencia de muestreo y las amplitudes positivas se mueven más lentamente que la frecuencia de muestreo. ¿Entendí esto correctamente?

Respuestas a la pregunta(2)

Su respuesta a la pregunta