Впервые здесь, так что извините заранее за любое убитое форматирование.
Так что я совершенно новичок в DSP, поэтому у меня есть только очень общее представление о преобразовании Фурье.Я пытаюсь создать приложение для визуализации для Android SDK 9, которое включает в себя класс Visualizer в android.media.audiofx.Visualizer http://developer.android.com/reference/android/media/audiofx/Visualizer.html
Javadoc для метода getFft (), который я используюstates:
"Возвращает захват частоты воспроизводимого в данный момент аудиоконтента. Захват представляет собой БПФ 8-разрядной величины. Обратите внимание, что размер БПФ равен половине указанного размера захвата, но обе стороны отспектр возвращается в количестве байтов, равном размеру захвата. "
Прежде всего, что означает" обе стороны спектра "?Чем этот вывод отличается от стандартного FFT?
Вот пример вывода байтового массива, getFft () получил 124 балла, чтобы упростить его, и я взял первые 31 лоток.Вот величины первых 31 бинов:
{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, 12}
Любая помощь или объяснение будет с благодарностью!
Редактировать: Так что после того, как вы смотрите накуча графиков, похоже, это часть моей проблемы: Google не указывает, какая единица измерения используется.Почти все другие измерения выполняются в мГц, было бы справедливо предположить, что выход FTT также в мГц?Есть ли место, где я могу увидеть исходный код класса Visualizer, так что, возможно, я смогу выяснить, что, черт возьми, происходит на самом деле под капотом?
Я пошел вперед и собрал все выходные данные 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
Так что, если я правильно понимаю, мой вывод здесь должен быть от -N до 0 до N. -N к 0 должен выглядеть так же, как 0 к N. Но когда я смотрю на эти амплитуды, я не вижу зеркальных данных.Похоже, Google указывает, что вывод должен быть от 0 до N по обе стороны спектра.Так что я должен быть в состоянии взять данные из (output.length-1) / 2 в output.length-1.Отрицательные амплитуды движутся быстрее, чем частота дискретизации, а положительные амплитуды движутся медленнее, чем частота дискретизации.Я правильно понял?