Размер окна и длина данных для БПФ - PullRequest
2 голосов
/ 06 апреля 2011

Я пытаюсь сделать быстрый спектральный анализ потоковых аудиоданных для захвата гласных звуков (что-то вроде JLip-sync). Использование PyAudio для захвата голосовых данных небольшими порциями (1024) на короткие промежутки времени (0,0625 сек.). Использование numpy.fft для анализа, а также для устранения утечек с помощью окна numpy.hanning. Я использую 4096 * 4 в качестве частоты дискретизации (не 44100 или 22050, а также открыт для обсуждения; 4096 * 4 ближе всего к 22050).

Учитывая интересующие меня частоты (в диапазоне от 300 Гц до 3000 Гц), как можно рассчитать идеальный размер окна, используя длину данных и минимальные / максимальные частоты, которые я ищу?

Спасибо.

Кадир

Ответы [ 2 ]

5 голосов
/ 20 июля 2011

@ Кадир:

Цель создания оконных данных перед их обработкой с помощью дискретного преобразования Фурье (DFT или FFT) состоит в том, чтобы минимизировать спектральную утечку, которая происходит, когда вы пытаетесь преобразовать нециклические данные с преобразованием Фурье.

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

Таким образом, длина вашего окна должна соответствовать длине ваших семплов. Например, с 1024 сэмплами длина вашего окна должна быть 1024.

Если максимальная частота, которую вы хотите разрешить, составляет 3 кГц, используйте 8192 или более выборок, таких как 16384 или 32768 выборок, с различными частотами выборки.

Кроме того, попробуйте другой алгоритм FFT, другую длину выборки и разные окна, включая Hann (Hanning), но также и другие окна с лучшим ослаблением боковых лепестков, такие как серия Blackman-Harris и серия Kaiser-Bessel и т. д.

Если ваше приложение шумит, возможно, вам придется выбирать между окнами с лучшим подавлением шума и окнами с более высоким спектральным разрешением. Так что стоит попробовать разные окна, чтобы найти лучшее для вашего приложения.

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

Вы можете сделать это с Matlab: http://www.mathworks.com/help/techdoc/ref/fft.html

Или с помощью этого онлайн-анализатора спектра БПФ: http://www.sooeet.com/math/fft.php

И не забудьте опубликовать свои результаты здесь.

4 голосов
/ 06 апреля 2011

Критическим фактором является то, сколько разрешение вам нужно в частотной области, чтобы различать разные гласные.Разрешение составляет 1 / T, где T - продолжительность вашего окна FFT.Таким образом, если вы производите выборку в течение 62,5 мс, тогда ваше максимальное разрешение составляет 16 Гц (т. Е. Каждая ячейка БПФ имеет ширину 16 Гц), если размер вашего БПФ совпадает с интервалом выборки (1024 выборки).Если вы переходите к меньшему БПФ, то, очевидно, ваше разрешение будет пропорционально ухудшаться, например, БПФ с 512 точками будет иметь разрешение всего 32 Гц.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...