Как извлечь частоту информации от образцов из Portaudio, используя FFTW в C
Вопрос
Я хочу сделать программу, которая записывала бы аудиоданные с помощью 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)
)