Как извлечь частоту информации от образцов из Portaudio, используя FFTW в C

StackOverflow https://stackoverflow.com/questions/3058236

Вопрос

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

Из некоторых исследований я сделал, я знаю, что мне нужно сделать FFT. Поэтому я протянул библиотеку, чтобы сделать это, в C, и нашел FFTW.

Однако теперь я немного потерян. Что именно я должен делать с образцами, которые я записал, чтобы извлечь из них некоторую частоту? Какой вид FFT я должен использовать (я предполагаю, что мне нужен реальные данные 1d?)?

И однажды я сделаю FFT, как мне получить частоту информацию от данных, которые она дает мне?

Редактировать: Теперь я нашел также алгоритм автокорреляции. Это лучше? Проще?

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

Это было полезно?

Решение

Чтобы преобразовать образцы звука в спектр мощности:

  • Если ваши аудиоданные данные являются целыми данными, преобразуйте его в плавающую точку
  • Выберите размер FFT (например, n = 1024)
  • Применить А. Функция окна к N образцам ваших данных (например, Hanning)
  • Используйте реальный сложный FFT размер n для генерации данных домена частоты
  • Рассчитайте величину ваших сложных данных частоты домена (magnitude = sqrt(re^2 + im^2))
  • необязательно преобразовать величину в масштаб журнала (дБ) (magnitude_dB = 20*log10(magnitude))
Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top