Быстрое преобразование Фурье (БПФ) вход и выход для анализа частоты аудиофайлов в Java? - PullRequest
9 голосов
/ 08 июля 2011

Я должен использовать БПФ для анализа частоты аудиофайла. Но я не знаю, что такое ввод и вывод.

Нужно ли использовать одномерный, двухмерный или трехмерный массив, если я хочу нарисовать аудиофайл спектра? А может кто-нибудь предложить мне библиотеку для БПФ на J2ME?

Ответы [ 3 ]

28 голосов
/ 21 июля 2011

@ thongcaoloi,

Простой ответ, касающийся размерности ваших входных данных: вам нужны одномерные данные.Теперь я объясню, что это значит.

Поскольку вы хотите анализировать аудиоданные, ваш вход в дискретное преобразование Фурье (DFT или FFT) представляет собой одномерную последовательность действительных чисел, которая представляет изменениенапряжение аудиосигнала с течением времени, и ваш аудиофайл является цифровым представлением об этом изменяющемся напряжении с течением времени.

Ваш аудиофайл был создан путем дискретизации напряжения непрерывного аудиосигнала с фиксированной частотой дискретизации (также известной как частота дискретизации), обычно 44,1 КГц для звука с качеством CD.

Но ваш файл данных мог быть выбран с гораздо меньшей частотой, поэтому попробуйте выяснить частоту выборки ваших данных, прежде чем делать БПФ для этих данных.

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

Если ваш файл стереофонический или любой другой многоканальный аудиоформат, например 5.1 или 7.1, вы можете использовать БПФ для каждого канала отдельно илиобъедините любое количество каналов вместе, используя сложение напряжения.Это зависит от вас, и зависит от того, что вы пытаетесь сделать с результатами FFT.

Вывод DFT или FFT представляет собой последовательность комплексных чисел.Каждое комплексное число представляет собой пару, состоящую из действительной части и мнимой части, обычно показанную в виде пары (re, im).

Если вы хотите построить график спектральной плотности мощности вашего аудиофайла, которыйэто то, что большинство людей хотят от БПФ, вы построите график 20 * log10 (sqrt (re ^ 2 + im ^ 2)), используя первые N / 2 комплексных чисел вывода FFT, где N - количество входных выборокв БПФ.

Вы можете попытаться создать свою собственную программу анализа спектра, но я предлагаю использовать что-то, что уже создано и протестировано.

Эти два анализатора спектра БПФ дают результаты мгновенно и имеютвстроенный синтез IFFT, означающий, что вы можете использовать обратное преобразование Фурье спектральных данных частотной области для восстановления исходного сигнала во временной области.

http://www.mathworks.com/help/techdoc/ref/fft.html

http://www.sooeet.com/math/fft.php

В этой теме и в целом по теме цифровой обработки сигналов есть еще много всего, но это краткое введение должно помочь вам начать работу.

3 голосов
/ 08 июля 2011

В теоретическом смысле БПФ отображает комплекс [N] => комплекс [N].Однако, если ваши данные - это просто аудиофайл, то ваши данные будут просто сложными числами без мнимой составляющей.Таким образом, вы отобразите реальный [N] => комплекс [N].Однако, немного поработав, вы увидите, что формат вывода всегда будет выводиться [i] == complex_conjugate (output [Ni]).Таким образом, вам действительно нужно смотреть только на первые N / 2 + 1 сэмплов.Кроме того, комплексный вывод FFT дает вам информацию как по фазе, так и по величине.Если все, что вас волнует, это как большая часть определенной частоты в вашем аудио, вам нужно только посмотреть на величину, которую можно рассчитать как square_root (мнимое ^ 2 + действительное ^ 2) для каждогоэлемент вывода.

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

1 голос
/ 08 июля 2011

Поскольку я помню, что алгоритм БПФ не так сложен, я использовал для написания тезиса класс вычисления БПФ.В это время вход представляет собой одномерный массив значений, которые считываются из файлов * .WAV.Но до БПФ проводилась фильтрация и нормализация.

...