Visualizador do Android 2.3 - Problemas para entender o getFft ()

Primeira vez aqui, desculpe-me antecipadamente por qualquer formatação massacrada.

Portanto, sou completamente novo no DSP, portanto, tenho apenas um entendimento muito geral da Transformada de Fourier. Estou tentando criar um aplicativo visualizador para o Android SDK 9, que inclui uma classe Visualizer em android.media.audiofx.Visualizerhttp://developer.android.com/reference/android/media/audiofx/Visualizer.html

O javadoc para o método getFft (), que é o que eu estou usando, afirma:

"Retorna uma captura de frequência do conteúdo de áudio atualmente sendo reproduzido. A captura é uma FFT de magnitude de 8 bits. Observe que o tamanho da FFT é metade do tamanho especificado, mas ambos os lados do espectro são retornados com um número de bytes igual a para o tamanho da captura ".

Primeiro de tudo, o que "ambos os lados do espectro" significam? Como essa saída difere de uma FFT padrão?

Aqui está um exemplo de saída da matriz de bytes: getFft () recebeu 124 pontos para mantê-lo simples e eu peguei os 31 primeiros compartimentos. Aqui estão as magnitudes dos primeiros 31 compartimentos:

{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}

Qualquer ajuda ou explicação seria muito apreciada!

Editar: Então, depois de olhar para vários gráficos, parece que parte do meu problema é que o Google não especifica qual unidade está sendo usada. Quase todas as outras medições são feitas em mHz, seria justo supor que a saída do FTT também esteja em mHz? Existe um lugar onde eu possa ver o código-fonte da classe Visualizer para que talvez eu possa descobrir o que diabos está realmente acontecendo sob o capô?

Fui em frente e peguei toda a saída 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

Portanto, se eu entendi isso corretamente, minha saída aqui deve ser de -N a 0 a N. -N a 0 deve se parecer com 0 a N. Mas, quando observo essas amplitudes, não vejo dados espelhados. O Google parece indicar que a saída deve ser de 0 a N apenas nos dois lados do espectro. Portanto, eu devo poder pegar os dados de (output.length-1) / 2 para output.length-1. As amplitudes negativas estão se movendo mais rápido que a taxa de amostragem e as amplitudes positivas estão se movendo mais lentamente que a taxa de amostragem. Eu entendi isso corretamente?

questionAnswers(2)

yourAnswerToTheQuestion