2013-05-21 2 views
0

После прочтения №. сообщений здесь, я применил алгоритм FFT в записанном аудио (.wav) файле, чтобы преобразовать его из временной области в частотную область.Java - Поиск частоты и амплитуды аудиосигнала с использованием FFT

В результате я получил массив, содержащий несколько значений, как

magnitude[i] = sqrt(re*re+im*im); 

Теперь, как название говорит, что я должен найти частоту и амплитуду сигнала (сложный звуковой т.е. голоса), используя эту величину массива, но я не знаю, как сделать дальнейшую обработку с использованием этого массива. Размер БПФ составляет 1024, а частота дискретизации - 48000 Гц. Пожалуйста, помогите мне в дальнейшей обработке.

ответ

0

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

mag_max = magnitude[0]; 
i_max = 0; 
for (i = 1; i < N; ++i) 
{ 
    if (magnitude[i] > mag_max) 
    { 
     mag_max = magnitude[i]; 
     i_max = i; 
    } 
} 

Теперь у вас есть значение пика в mag_max и его индекс в i_max. Вы можете получить частоту, как это:

f_max = i_max * Fs/N; 

где Fs является частота дискретизации (и N является размер FFT, конечно).

Конечно, если вы ищете что-то вроде поля сложного звука (например, голоса или музыкального инструмента), то все становится много сложнее. Вы можете взглянуть на алгоритм Гармонического спектра продукта и pitch detection algorithms в целом.

+0

Спасибо за быструю помощь. Пол, и да, как вы сказали, я пытаюсь найти частоту. и амплитуда сложного звука. Итак, как я должен обрабатывать его с помощью этого массива амплитуд? – Panky90

+0

Если вы хотите сделать * pitch * detection, вам действительно нужно вернуться к чертежной доске. Это возможно с помощью методов на основе FFT, но это нетривиально (см. «Спектр гармонических продуктов»), и есть лучшие методы. Взгляните на [страницу Википедии об обнаружении высоты тона] (https://en.wikipedia.org/wiki/Pitch_detection_algorithm) в качестве отправной точки. –

+0

Ok Paul, я просмотрю эту страницу wiki. Но есть ли у вас реализация java любого из таких алгоритмов или java-библиотеки, которая может служить мне для этой цели? – Panky90

Смежные вопросы