Впервые здесь так жаль за любое форматирование.
Поэтому я совершенно новичок в DSP, поэтому у меня есть только очень общее представление о преобразовании Фурье. Я пытаюсь создать приложение визуализатора для Android SDK 9, которое включает класс Visualizer в android.media.audiofx.Visualizer http://developer.android.com/reference/android/media/audiofx/Visualizer.html
javadoc для метода getFft(), который я использую для состояний:
"Возвращает захват частоты в настоящее время воспроизводит аудиоконтент. захват - это БПФ с 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 to 0 должен выглядеть так же, как от 0 до N. Но когда я смотрю на эти амплитуды, я не вижу никаких зеркальных данные. Google, похоже, указывает, что выход должен быть от 0 до N только по обе стороны от спектра. Поэтому я должен уметь извлекать данные из (output.length-1)/2 в output.length-1. Отрицательные амплитуды движутся быстрее, чем частота дискретизации, и положительные амплитуды движутся медленнее, чем частота дискретизации. Я правильно понял это?