Как использовать БПФ для больших порций данных для построения амплитудно-частотной характеристики? - PullRequest
1 голос
/ 15 апреля 2011

Я программист, а не хороший математик, поэтому FFT для меня как черный ящик, я хотел бы добавить некоторые данные в некоторую библиотеку FFT и получить выводимые на график данные AFR (амплитудно-частотная характеристика), как некоторые программыкак и в случае с Rightmark audio:

http://www.ixbt.com/proaudio/behringer/3031a/fr-hf.png

Теперь у меня есть система, которая воспроизводит логарифмический скользящий синус (с короткими переходами / исчезновениями, чтобы избежать резких краев) и записываетответ от аудиосистемы.

Насколько я понимаю, мне нужно заполнить ввод нулями до 2 ^ n, использовать аудиосэмплы как вещественную часть комплексных чисел, установить мнимое = 0, и яЯ вернусь из БПФ к массиву частотных бинов с половиной длины входных данных.

Но если мне не нужно такое большое разрешение по частоте, как дает мне аудиобуфер в несколько секунд, то как правильно сделатьДопустим, окно FFT размером 1024, подает фрагменты аудио и возвращает 512 частотных точек, которые учитывают все данные, которые я передал?Или, может быть, это невозможно, и мне нужно подать сразу весь развернутый синус, чтобы получить все необходимые данные AFR?

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

Я программист на C ++ / C #.Я был бы признателен за любые примеры, которые показывают, как обрабатывать куски развернутого синуса и получить данные AFR.Пока я нашел только примеры, которые обрабатывают данные небольшими порциями в реальном времени, и это не то, что мне нужно.

1 Ответ

1 голос
/ 08 июля 2012

Функция окна должна помочь вам уменьшить шум

Все, что вам нужно сделать, это умножить ваши входные данные на w (n):

enter image description here

...