Алгоритм БПФ: что входит IN / OUT?(ре: обнаружение основного тона в реальном времени) - PullRequest
4 голосов
/ 01 ноября 2010

Я пытаюсь извлечь данные основного тона из аудиопотока.Из того, что я вижу, похоже, что FFT - лучший алгоритм для использования.

Вместо того, чтобы копаться прямо в математике, кто-то может помочь мне понять, что делает этот алгоритм FFT?

Пожалуйстане говорите ничего очевидного, например: «БПФ извлекает частотные данные из необработанного сигнала».Мне нужен следующий уровень детализации.

Что я передаю и что я получаю?

Как только я ясно понимаю интерфейс, это поможет мне понять реализацию.

Я полагаю, мне нужно передать в аудио-буфер, мне нужно указать, сколько байтов использовать для каждого вычисления (скажем, самые последние 1024 байта из этого буфера).и, возможно, мне нужно указать диапазон высот, которые я хочу обнаружить.Теперь это пройдет назад, что?Массив частотных бинов?Что это?

(Правка :) Я нашел алгоритм C ++ для использования (если я могу только понять его)

Performous извлекает высоту звука из микрофона.Также код с открытым исходным кодом.Вот описание того, что делает алгоритм, от парня, который его кодировал.

  • PCM-вход (с буферизацией)
  • FFT (1024 семпла за раз, удалите 200 семплов изпотом перед буфером)
  • Метод переназначения (по сравнению с предыдущим БПФ, который был 200 сэмплами ранее)
  • Фильтрация пиков (эту часть можно было бы сделать намного лучше или даже пропустить)
  • Объединение пиков в наборы гармоник (мы называем комбинацию тоном)
  • Временная фильтрация тонов (обновление набора тонов, обнаруженных ранее, вместо простого использования вновь обнаруженных)
  • Выберите лучший вокальный тон (частотные ограничения, взвешивание, также можно использовать гармонический массив, но я не думаю, что мы используем)

Но кто-то может помочь мне понять, как это работает?Что отправляется из БПФ в метод переназначения?

Ответы [ 3 ]

3 голосов
/ 01 ноября 2010

БПФ - это всего лишь один строительный блок в процессе, и он может быть не лучшим подходом для обнаружения основного тона.Читайте об обнаружении высоты звука и решите, какой алгоритм вы хотите использовать первым (это будет зависеть от того, что именно вы пытаетесь измерить, - речь, отдельный музыкальный инструмент, другие типы звука и т. Д. Получите это право, прежде чем переходить на низкий уровень).детали уровня, такие как FFT (некоторые, но не все алгоритмы обнаружения основного тона используют FFT для внутреннего использования).

Уже существует множество похожих вопросов по SO, например, Обнаружение основного тона в реальном времени с использованием FFT и Обнаружение высоты тона, используя FFT для трубы , и есть хороший обзорный материал в Википедии и т. д. - прочитайте их и затем решите, хотите ли вы по-прежнему использовать собственное решение на основе FFT или, возможно, использоватьсуществующая библиотека, которая подходит для вашего конкретного приложения.

2 голосов
/ 01 ноября 2010

Здесь есть элемент выбора.Наиболее простым для реализации является выполнение (2 ^ n выборок) комплексных чисел и 2 ^ n комплексных чисел, так что, возможно, вам следует начать с этого.

В особом случае DCT (дискретное косинусное преобразование) обычно используется 2 ^ n выборок (часто с плавающей запятой), а из выходных 2 ^ n значений также часто с плавающей запятой.DCT - это БПФ, но он принимает только реальные значения и анализирует функцию в терминах косинусов.

Разумно (но обычно пропускается) определять структуру для обработки сложных значений.Традиционно БПФ выполняются на месте, но если вы этого не сделаете, это нормально работает.

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

1 голос
/ 16 декабря 2010

В идет N образцов PCM (чисто вещественные комплексные числа).Out приходит N бинов в частотной области (каждый бин соответствует 1 / N среза частоты дискретизации).Каждая корзина представляет собой комплексное число.Вместо реальных и мнимых частей, эти значения обычно должны обрабатываться в полярном формате (абсолютное значение и аргумент).Абсолютное значение указывает количество звука вблизи центральной частоты бина, а аргумент - фазу (в каком положении движется синусоида).

Чаще всего кодеры используют только величину (абсолютное значение) и выбрасываютфазовый угол (аргумент).

...