TBH, это было какое-то время - но я думаю, что просто масштабировал его до чего-то, что выглядело хорошо, как вы предлагаете. Если вы действительно заботитесь, то, я думаю, вы могли бы просто масштабировать каждый раз, когда вы достигаете нового максимума, возможно, даже включая затухание, основанное на времени, до максимума, чтобы один громкий участок не искажал остальные

ые здесь, так что заранее извините за любое убойное форматирование.

Так что я совершенно новичок в DSP, поэтому у меня есть только общее представление о преобразовании Фурье. Я пытаюсь создать приложение визуализатора для Android SDK 9, которое включает в себя класс визуализатора в android.media.audiofx.Visualizer.http://developer.android.com/reference/android/media/audiofx/Visualizer.html

Javadoc для метода getFft (), который я использую состояния:

"Возвращает захват частоты воспроизводимого в данный момент аудиоконтента. Захват представляет собой БПФ с 8-битной величиной. Обратите внимание, что размер БПФ составляет половину указанного размера захвата, но обе стороны спектра возвращаются, давая количество байтов, равное к размеру захвата. "

Прежде всего, что означает «обе стороны спектра»? Чем этот вывод отличается от стандартного БПФ?

Вот некоторый пример вывода байтового массива, 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, 1,2}

Любая помощь или объяснение будет принята с благодарностью!

Редактировать: Так что после того, как я посмотрел на кучу графиков, похоже, что часть моей проблемы в том, что 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. Отрицательные амплитуды движутся быстрее, чем частота дискретизации, а положительные амплитуды движутся медленнее, чем частота дискретизации. Я правильно понял?

 ebolyen19 янв. 2011 г., 21:34
Да, и я использовал getCaptureSizeRange () [0], который возвращает самый низкий размер захвата в диапазоне.
 ebolyen19 янв. 2011 г., 21:01
Отредактировано оригинальное сообщение с полным набором выходных данных, данные не кажутся симметричными, даже если предполагается, что они находятся с обеих сторон спектра ...
 ebolyen19 янв. 2011 г., 20:27
Огромное спасибо за всю эту информацию, я чувствую себя плохо, что ничего не могу поделать, кроме как поднять ваши комментарии.
 ebolyen19 янв. 2011 г., 21:40
Это, вероятно, имело бы смысл, если бы они предполагали, что я мог бы сделать более сложные вещи с данными. Я опробую вышесказанное и посмотрю, работает ли он лучше.
 ebolyen19 янв. 2011 г., 21:57
Вот выходные данные: 11, 0, 0, 0, 6, 6, 1, 4, 0, 1, 0, 4, 0, 0, 2, 0, 1, 3, 2, 0, 1, 2, 0 , 2, 0, 0, 0, 0, 0, 0, 2, 0, 1, 1, 0, 0, 0, 2, 1, 0, 0, 0, 0, 0, 1, 0, 1, 2 , 0, 1, 0, 1, 1, 0, 0, 0, 1, 1, 1, 1, 0, 0, 0, 1

Ответы на вопрос(2)

если это кому-нибудь поможет, я создал Visualizer, который берет вывод из MediaPlayer и отображает визуализацию. Он работает как с нормальным сигналом, так и с данными БПФ:

https://github.com/felixpalmer/android-visualizer

Он включает в себя код для преобразования вывода getFft () во что-то визуально значимое.

 pheelicks11 окт. 2012 г., 05:21
TBH, это было какое-то время - но я думаю, что просто масштабировал его до чего-то, что выглядело хорошо, как вы предлагаете. Если вы действительно заботитесь, то, я думаю, вы могли бы просто масштабировать каждый раз, когда вы достигаете нового максимума, возможно, даже включая затухание, основанное на времени, до максимума, чтобы один громкий участок не искажал остальные
 Tenfour0409 окт. 2012 г., 00:43
Спасибо, что поделились этим, очень помогли! О том, как вы обрабатываете БПФ ... Есть ли какая-то рифма или причина, по которой вы рассчитываете значение дБ, или вы просто произвольно масштабировали его до чего-то, что выглядело хорошо? Я видел учебник по БПФ, который говорит, что нужно нормализовать каждую частоту на основе максимальной измеренной амплитуды, но мне кажется, что это выглядело бы так, как будто высокие ноты вспыхивают. Возможно, эти значения дБ можно масштабировать на основе A-взвешивания, чтобы получить реалистичный масштаб на каждой частоте.
Решение Вопроса

Fk = k * Fs / N,    k = 0,1,...,N-1 

где

Fs частота дискретизации входа временного рядаN это количество образцов, используемых для вычисления БПФ

Две стороны спектра относятся к положительным и отрицательным частотам на выходе БПФ. БПФ заставляет выходную частоту бытьпериодический с периодом Fs, Если вы посмотрите на выход FFT, он охватывает частоты от 0 до Fs. Часто выгодно просматривать спектр в диапазоне от -0,5 * Fs до 0,5 * Fs, вместо этого сдвигая выход FFT с 0,5 * Fs -> Fs на -0,5 * Fs -> 0, поскольку они равны из-за периодичности.

Для реальных значений сигналов, таких как те, которые вы используете при обработке звука, вывод отрицательной частоты будет зеркальным отображением положительных частот. Из-за этого часто только одна сторона спектра используется при анализе реальных сигналов.

Другим важным моментом является значение 0,5 * Fs, которое известно какЧастота Найквиста, Сигнал может точно представлять частоты вплоть до частоты Найквиста, и все, что выше него, будет совмещено (свернуто) обратно в спектр, вызывая искажения.

Так что на самом деле все, о чем вы должны беспокоиться в целях визуализации, это выходные данные БПФ, соответствующие диапазону частот от 0 до Fs / 2, поскольку они являются значимыми выборками для реального сигнала с частотой дискретизации Fs.

 ebolyen19 янв. 2011 г., 08:44
Спасибо тебе большое за это! Супер сжатый и то, что я охотился, в течение недели!

Ваш ответ на вопрос