БПФ - Когда в окно? - PullRequest
       71

БПФ - Когда в окно?

5 голосов
/ 21 сентября 2011

Я видел различные вопросы по БПФ, но я запутался в части реализации. Вместо того, чтобы выполнять БПФ в режиме реального времени, я хочу сделать это в автономном режиме. Допустим, у меня есть необработанные данные в float[] audio. Частота дискретизации составляет 44100, поэтому audio[0] to audio[44099] будет содержать аудио в 1 секунду. Если моя функция FFT обрабатывает управление окнами (например, Ханнинг), я просто помещаю весь буфер audio в функцию за один раз? Или мне нужно разрезать аудио на куски 4096 (размер моего окна), а затем ввести его в БПФ, который затем будет выполнять функцию оконной обработки сверху?

Ответы [ 3 ]

2 голосов
/ 01 марта 2013

Выбор того, следует ли рассчитывать одно БПФ по всему набору данных (в случае ОП - 44100 выборок, представляющих 1-секундную часть данных), или делать серию БПФ по более мелким подмножествам полного набора данных, зависит по данным и по назначению БПФ.

Если данные относительно статичны спектрально по всему набору данных, то, вероятно, достаточно одного БПФ на весь набор данных.

Однако, если данные являются спектрально-динамическими по набору данных, то несколько скользящих БПФ по небольшим подмножествам данных создают более точное частотно-временное представление данных.

На графике ниже показан спектр мощности акустической гитары, играющей ноту А4. Аудиосигнал был дискретизирован с частотой 44,1 кГц, а набор данных содержит 131072 выборки, почти 3 секунды данных. Этот набор данных был предварительно умножен на оконную функцию Ханна.

Guitar spectrum, Hann window, 131072 samples

График ниже показывает спектр мощности подмножества 16384 сэмплов (от 0 до 16383), взятых из полного набора данных для акустической гитары ноты A4. Это подмножество также было предварительно умножено на оконную функцию Ханна.

Guitar spectrum, Hann window, 16384 samples

Обратите внимание, что спектральное распределение энергии подмножества значительно отличается от спектрального распределения энергии полного набора данных.

Если бы мы извлекли подмножества из полного набора данных, используя скользящий примерный кадр 16384, и вычислили спектр мощности каждого кадра, мы бы создали точную частотно-временную картину полного набора данных.

Ссылки:

Реальные данные аудиосигнала, оконная функция Ханна, графики, БПФ и спектральный анализ были выполнены здесь:

Быстрое преобразование Фурье, спектральный анализ, оконная функция Ханна, аудиоданные

2 голосов
/ 21 сентября 2011

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

Как правило, для 1 с аудио, например, речь или музыка, вы выбрали бы размер FFT, который соответствует достаточно стационарному фрагменту звука, например, 10 мс или 20 мс Таким образом, при частоте 44,1 кГц ваш размер FFT может быть, скажем, 512 или 1024. Затем вы будете генерировать последовательные спектры, продвигаясь через буфер и выполняя новое FFT в каждой начальной точке. Обратите внимание, что обычной практикой является наложение этих последовательных буферов, обычно на 50%. Таким образом, если N = 1024, то ваш первый БПФ будет для выборок 0..1023, а второй - для выборок 512..1535, затем 1024..2047 и т. Д.

1 голос
/ 22 сентября 2011

Размер порции или длина окна, которые вы выбираете, управляют разрешением по частоте и разрешением по времени для результата FFT. Вы должны определить, какой вы хотите или какой компромисс сделать.

Более длинные окна дают лучшее разрешение по частоте, но хуже по времени. Укороченные окна, наоборот. Каждый результирующий блок FFT будет содержать полосу частот примерно в 1-2 раза превышающую частоту дискретизации, деленную на длину FFT, в зависимости от формы окна (прямоугольник, фон Ганна и т. Д.), А не только на одну частоту. Если весь ваш блок данных является стационарным (частотное содержимое не изменяется), то вам может не потребоваться какое-либо временное разрешение, и вы можете использовать частотное «разрешение» от 1 до 2 Гц в течение 1 секунды данных. Усреднение нескольких коротких окон FFT также может помочь уменьшить дисперсию ваших спектральных оценок.

...