Библиотека спектрограмм C++
-
22-09-2019 - |
Вопрос
Для моего текущего проекта на C ++ / Qt мне нужна библиотека (предпочтительнее LGPL), которая может вычислять спектрограмму по сигналу (в основном массиву удвоений ).Я уже использую Qwt для графического интерфейса.
Есть какие-нибудь предложения?Спасибо.
Решение
Было бы довольно легко составить свою собственную спектрограмму.Эти шаги заключаются в:
- функция окна (довольно тривиальная, напримерХаннинг)
- FFT (FFTW был бы хорошим выбором, но если лицензирование является проблемой, тогда выбирайте Kiss FFT или аналогичный)
- вычислить логарифмическую величину компонентов частотной области (тривиально:журнал (sqrt(re * re + im * im))
Другие советы
"Как мне создать график зависимости частоты от времени?" перечисляет несколько библиотек, каждая из которых может вычислять спектрограмму по сигналу.
Скопировано и вставлено из моего собственного ответа:
Некоторый исходный код для генерации спектрограммы / участки с водопадом из аудиоданных:
- SoX - Обмен звуками включает в себя исходный код спектрограммы
- Дерзость включает в себя исходный код спектрограммы
- глфер включает в себя исходный код отображения спектра waterfall spectrum spectrum
- исходный код, который использует fftw для вычисления спектрограмма из аудиопотока
- больше исходного кода, использующего OpenAL и fftw для вычисления спектрограмма для аудиопотока
- "Звукозаписывающий аппарат со спектрограммой на C #" автор : Джефф Мортон
- Topographica кажется, включает в себя исходный код спектрограммы
- Спектрограф для iTunes
Преобразование изображения в спектрограмму работает в обратном направлении от вышеуказанных утилит.
вы могли бы использовать fftw (fftw.org) для вычисления спектрограммы вам все равно нужно будет вывести данные на график, но это не должно быть проблемой
Вы можете использовать код FFT из здесь.Для повышения эффективности он использует метапрограммирование шаблонов C ++.Полный источник предоставлен автором здесь.
Это было предложенный включить этот код в собственный для использования шаблонного (удобного для ввода) кода.