Используете библиотеку jTransforms для файла WAV? - PullRequest
0 голосов
/ 10 января 2012

Я пытаюсь провести спектральный анализ файла WAV с помощью библиотеки jTransforms: Официальный сайт

Но у меня возникают проблемы с преобразованием файла WAV в приемлемый вход для FFTиспользуя jTransforms, и как я могу отобразить частотный спектр после FFT?Я искал в Google и обнаружил, что мне нужно каким-то образом преобразовать WAV-файл в double[] или Complex[], и после этого как мне следует интерпретировать вывод?

Извините, я очень новичок в FFT, поэтому этот вопросможет звучать очень глупо.Большое спасибо!

1 Ответ

2 голосов
/ 16 января 2012

Я не знаю вашу библиотеку, но, думаю, у них есть обширная документация по применению преобразований.

Что касается интерпретации, если вы используете сложное преобразование, вы можете интерпретировать действительную часть как энергию для соответствующей корзины частот, а мнимую - как фазу синусоиды. Спектральная плотность мощности (PSD) может быть вычислена как

real(fftData)*conj(fftData) 

, что равно

abs(fftData^2)

(умножьте действительные части на их комплексное сопряжение).

Одна вещь, которую вы, возможно, должны учитывать, это масштабирование выходного FFT. Некоторые алгоритмы масштабируют вывод пропорционально fftSize. Поэтому вам придется умножить вывод на 1 / fftSize.

И последнее, если вы не в курсе, вам нужно взять только половину выходного БПФ, поскольку спектр симметричен. Средний бин (fftSize / 2) обычно является зеркальной основной частотой и равен fftData [0]. Это отмечает частоту Найквиста, которая является самой высокой частотой, которую вы можете анализировать с заданным значением fftSize. Поэтому, если вы хотите отображать частоты до 22 кГц, убедитесь, что ваш fftSize составляет не менее 44 кГц.

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

РЕДАКТИРОВАТЬ: Есть даже больше. Подумайте о том, чтобы взвесить ваши входные данные с помощью конусного окна (гауссово, хемминга, Хеннинга ...), чтобы избежать неприятных краевых эффектов, если вы не вводите весь wav-файл в качестве входных данных. В противном случае вы получите искусственные высокие частоты на выходе БПФ, которых просто нет в оригинале.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...