Используете библиотеку jTransforms для файла WAV?
Я пытаюсь провести спектральный анализ файла WAV с помощью библиотеки jTransforms: официальный сайт
Но у меня есть проблемы с тем, как преобразовать файл WAV в приемлемый вход для FFT, используя jTransforms, и как я могу отобразить частотный спектр после FFT? Я искал вокруг Google и обнаружил, что мне нужно каким-то образом преобразовать файл WAV в double[]
или же Complex[]
и после этого, как я должен интерпретировать вывод?
Извините, я очень плохо знаком с FFT, поэтому этот вопрос может показаться очень глупым. Большое спасибо!
1 ответ
Я не знаю вашу библиотеку, но я думаю, что у них есть обширная документация о том, как применить преобразования.
Что касается интерпретации, если вы используете сложное преобразование, вы можете интерпретировать действительную часть как энергию для соответствующей корзины частот, а мнимую - как фазу синусоиды. Спектральная плотность мощности (PSD) может быть вычислена как
real(fftData)*conj(fftData)
который равен
abs(fftData^2)
(так что умножьте действительные части на их комплексное сопряжение).
Одна вещь, которую вы, возможно, должны учитывать, это изменение масштаба вашего FFT. Некоторые алгоритмы масштабируют вывод пропорционально fftSize. Таким образом, вам придется умножить вывод на 1 / fftSize.
И последнее, что в случае, если вы не знаете, вам нужно взять только половину выходного БПФ, поскольку спектр симметричен. Средний бин (fftSize / 2) обычно является зеркальной основной частотой и равен fftData [0]. Это отмечает частоту Найквиста, которая является самой высокой частотой, которую вы можете анализировать с данным значением fftSize. Поэтому, если вы хотите отображать частоты до 22 кГц, убедитесь, что ваш fftSize составляет не менее 44 кГц.
Есть много подводных камней с БПФ, поэтому не забудьте прочитать некоторые части и понять, что вы там делаете. Математика сама по себе не так важна, если вы просто хотите ее использовать, так что вы можете их пропустить.
РЕДАКТИРОВАТЬ: есть даже больше. Подумайте о том, чтобы взвесить ваши входные данные с помощью конусного окна (гауссово, хемминга, Хеннинга...), чтобы избежать неприятных краевых эффектов, если вы не вводите весь wav-файл в качестве входных данных. В противном случае вы получите искусственные высокие частоты на выходе БПФ, которых просто нет в оригинале.