Как найти все частоты в аудио с помощью дискретного преобразования Фурье?

Я хочу проанализировать аудио и разложить его как можно лучше на синусоидальные волны. Я никогда раньше не использовал БПФ и просто читаю немного о концепциях и доступных библиотеках, таких как FFTW и KissFFT.

Я запутался в этом вопросе ... похоже, что DFT / FFT даст вам синусоидальные амплитуды только на определенных частотах, кратных базовой частоте. Например, если у меня есть выборка звука с обычной частотой 44100 Гц, и я выбираю кусок, скажем, из 256 сэмплов, тогда этот патрон может соответствовать одному циклу 44100/256 = 172 Гц, и DFT даст мне синусоидальные амплитуды 172, 172 * 2, 172 * 3 и т. Д. Это правильно? Как же тогда найти силы на других частотах? Я хотел бы видеть спектр от 20 Гц до примерно 15 кГц с шагом примерно 1 Гц.


person Rob N    schedule 02.11.2012    source источник


Ответы (3)


Разложение Фурье позволяет вам взять любую функцию времени и описать ее как сумму синусоидальных волн, каждая из которых имеет разные амплитуды и частоты. Если, однако, вы хотите решить эту проблему с помощью ДПФ, вам необходимо убедиться, что у вас есть достаточное разрешение в частотной области, чтобы различать разные частоты. Получив это, вы можете определить, какие частоты являются доминирующими в сигнале, и создать сигнал, состоящий из кратных синусоид, соответствующих этим частотам. Вы правы, говоря, что при частоте дискретизации 44,1 кГц и просмотре только 256 отсчетов самая низкая частота, которую вы сможете обнаружить в этих 256 отсчетах, - это частота 172 Гц.

ПОЛУЧИТЕ ДОСТАТОЧНОЕ РАЗРЕШЕНИЕ В ОБЛАСТИ ЧАСТОТЫ:

Значения амплитуды для частот «только на определенных частотах, кратных базовой частоте» справедливы для разложения Фурье, НЕ для ДПФ, которое будет иметь разрешение по частоте с определенным приращением. Частотное разрешение ДПФ связано с частотой дискретизации и количеством выборок сигнала во временной области, используемого для вычисления ДПФ. Уменьшение частотного интервала даст вам лучшую способность различать две близко расположенные частоты, и это можно сделать двумя способами;

  1. Уменьшение частоты дискретизации, но это приведет к сближению периодических повторений по частоте. (Помните теорему НайКвиста здесь)
  2. Увеличьте количество выборок, которые вы используете для вычисления ДПФ. Если доступны только 256 отсчетов, можно выполнить «заполнение нулями», когда отсчеты с нулевым значением добавляются в конец данных, но есть некоторые эффекты, которые необходимо учитывать.

КАК ПОДХОДИТЬ К ЗАКЛЮЧЕНИЮ:

Если вы изобразите частотный состав различных звуковых сигналов на отдельных графиках, вы обнаружите, что амплитуды различаются немного. Это связано с тем, что отдельные сигналы не будут идентичны по звуку, и всегда есть шум, присущий любому сигналу (от окружения и самого оборудования). Следовательно, вы хотите взять среднее значение двух или более сигналов DFT, чтобы удалить шум и получить более точное представление частотного содержания. В зависимости от вашего приложения это может быть невозможно, если звук, который вы записываете, заметно меняется со временем (например, речь или музыка). Таким образом, усреднение полезно только в том случае, если все сигналы, подлежащие усреднению, в значительной степени одинаковы по звуку (отдельные отдельные записи «одного и того же»). Чтобы уточнить, например, из четырех сигналов временной области вы хотите создать четыре сигнала частотной области (используя метод DFT), а затем вычислить среднее значение четырех сигналов частотной области в один усредненный сигнал частотной области. . Это удалит шум и даст вам лучшее представление о том, какие частоты присущи вашему звуку.

АЛЬТЕРНАТИВНОЕ РЕШЕНИЕ:

Если вы знаете, что ваш сигнал должен содержать определенное количество доминирующих частот (не слишком много), и это единственные, которые вам интересны, то я бы порекомендовал вам использовать гармоническое разложение Писаренко (PHD) или классификацию множественных сигналов ( МУЗЫКА, приятное сокращение!), Чтобы найти эти частоты (и соответствующие им значения амплитуды). Это менее затратно с точки зрения вычислений, чем ДПФ. Например. если вы ЗНАЕТЕ, что сигнал содержит 3 доминирующие частоты, Писаренко вернет значения частот для этих трех, но имейте в виду, что ДПФ показывает гораздо больше информации, что позволяет вам прийти к большему количеству выводов.

person Fredrik    schedule 02.11.2012

Ваше первоначальное предположение неверно. БПФ / ДПФ не даст вам амплитуд только на определенных дискретных частотах. Эти дискретные частоты являются только центрами бинов, каждый бин представляет собой узкополосный фильтр с главным лепестком с ненулевой полосой пропускания, примерно равной ширине или двум разносам интервалов БПФ, в зависимости от окна (прямоугольное, по фон Ханну и т. Д. .) применялся до БПФ. Таким образом, амплитуда спектрального содержания между центрами бинов будет отображаться, но распределяться по множеству бинов результатов БПФ.

Если разделение ключевых сигналов достаточно велико и уровень шума достаточно низкий, то вы можете интерполировать результаты БПФ, чтобы исследовать частоты между центрами бинов. Возможно, вам потребуется использовать высококачественный интерполятор, например ядро ​​Sinc.

Если разделение сигналов меньше или уровень шума выше, вам может потребоваться более длинное окно данных для подачи более длинного БПФ для сбора достаточной информации о разрешении. Окно БПФ длиной 256 при частоте дискретизации 44,1k почти наверняка слишком мало для сбора достаточной информации о спектральном содержании ниже нескольких 100 Гц, если они входят в число частот, которые вы хотели бы видеть исследованными, поскольку их нельзя разделить чисто от смещения постоянного тока (bin 0).

person hotpaw2    schedule 02.11.2012
comment
Спасибо. Моя цель - анализировать звук акустических инструментов и других естественных звуков и использовать эту информацию при создании виртуальных / программных инструментов. Я начинаю со струнных смычков. Я смогу найти окна больше 256. Я просто использовал это в качестве примера. (Я отмечу ответ позже, когда, надеюсь, пойму лучше.) - person Rob N; 03.11.2012

К сожалению, существует некоторая неопределенность в определении частот в фиксированной выборке сигнала. Если вы используете короткое БПФ, то нет никакого способа определить разницу между частотами в довольно широком диапазоне. Если вы используете длинное БПФ для получения более высокого разрешения в частотной области, вы не сможете обнаружить изменения частоты так быстро. Это заложено в математике.

Вне моей головы: если вам нужен диапазон 15 кГц с шагом 1 Гц, вам понадобится 15000 точек БПФ, что при 44,1 кГц означает, что вы получите график частоты три раза в секунду. (Мне может здесь не хватать множителя 2, поскольку я не могу вспомнить, означает ли ограничение Найквиста, что вам действительно нужна полоса пропускания 30 кГц.)

Вас также может заинтересовать Кратковременное преобразование Фурье. Это не решает фундаментальную проблему компромисса, но на практике может дать вам то, что вы хотите.

person Jamey Sharp    schedule 02.11.2012
comment
Это более или менее правильно, но обратите внимание, что обычная практика - перекрывать БПФ, чтобы получать более частые снимки изменяющегося во времени спектра. - person Paul R; 02.11.2012
comment
@PaulR, это то, что статья в Википедии, которую я связал, называет STFT, не так ли? - person Jamey Sharp; 02.11.2012
comment
STFT не обязательно перекрывается - часть ST просто означает краткосрочную перспективу, поскольку вы применяете DFT / FFT к последовательным фрагментам данных (которые могут или не могут перекрываться), в отличие от одного большого DFT / FFT весь набор данных. Итак, вы уже более или менее описали STFT в первых двух абзацах выше. - person Paul R; 02.11.2012
comment
Спасибо @PaulR, я кое-что узнал сегодня. :-) Думаю, я думал, что анализ последовательных фрагментов был очевиден, поэтому дело должно было заключаться в возможности перекрытия, но при более внимательном чтении это определенно не говорит об этом. - person Jamey Sharp; 02.11.2012