Главная » Программирование звука » Использование БПФ

0

Теперь,  когда  вы  умеете  вычислять  БПФ,  вы  можете  использовать  волновые формы  и  посмотреть,  что  получится.  Ha  рис.  24.8-24.11  показаны  некоторые  распространенные  волновые  формы  и  их  БПФ,  вычисленные  подпрограммой  ForwardFft, какую  мы  рассмотрели  ранее.  Ha  всех  рисунках  слева  представлена волновая  форма,  а  справа   БПФ  для  нее.  Ha  вертикальной  оси  графика  БПФ отложены  значения  в  децибелах;  нулевое  значение  в  этом  масштабе  представляет единичное значение.

Важной  особенностью  всех  преобразований  Фурье  является  то,  что  они  вычисляют  спектр  периодического  сигнала.  Они  полагают,  что  32,  512  или  1024  используемые   ими   дискреты   являются   частью   бесконечно   повторяющегося   сигнала. Этому  положению  соответствует,  например,  рис.  24.8.  Если  вы  внимательно  посмотрите на синусоиду, то увидите, что она содержит целое количество циклов.

Сделав   несколько   копий   этого   графика,   можете   соединить   их   друг   с  другом,

и куски кривой отлично совпадут.

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

БПФ  синусоиды  показывают  одно  положительное  значение  и  множество  значений  в  районе  -300  дБ  (то  есть  около  10’30).  Они  вызваны  ошибками  округления при вычислениях.

B  ситуации,  представленной  на  рис.  24.12,  алгоритм  БПФ  вычисляет  спектр в  предположении,  что  фрагмент  волны  повторяется,  как  показано  на  рис.  24.13. Резкие переходы, изображенные на этом рисунке, это, в сущности, импульсы.

Импульс  обладает  одинаковой  энергией  на  всех  частотах.  Значение  БПФ  равно 1 (0  дБ)  и совпадает  с осью  X. (Значение БПФ  выглядит одинаково вне зависимости от того, когда произошел импульс, зато фаза БПФ будет другой.)

Как  показано  на  рис.  24.10,  любые  резкие  скачки  в  сигнале   это  шум;  он  содержит  все  частоты.  Основная  проблема  слепого  применения  БПФ  к  области,  содержащей  случайные  данные,  заключается  в  том,  что  мы  также  измеряем  неявные скачки,  возникающие  при  переходе  от  конца  области  к  ее  началу.  Часто  бывает важно  уметь  сглаживать  такие  скачки  для  того,  чтобы  шум  не  перекрывал  остальную часть вашего спектра. K счастью, это несложно реализовать.

Выбор окна

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

Каждая  из  выборок  волны,  представленной  на  рис.  24.12,  была  умножена  на число  равное  0,54   0,46cos  (2?t/1,023),  где  t   номер  соответствующей  выборки (0…1023).

Ha  рис.  24.14  приведено  БПФ  для  сглаженной  синусоиды.  Заметим,  что  большинство  амплитудных  значений  лежит  ниже  -100  дБ,  что  представляет  собой  значительное  улучшение  по  сравнению  с  рис.  24.11.  Однако  все  еще  не  так  хорошо, как  у  спектра  на  рис.  24.8.  БПФ  может  измерять  только  определенные  виды  частотных  колебаний,  и  синусоида,  показанная  на  рис.  24.12,  не  является  одним  из них. Кроме того, процесс выбора окна слегка изменяет спектр.

Широко   распространены   несколько   окон.  Используемое  мною   называется  окном   Хемминга   (Hamming   window),  которое  представляет   собой  гладкую   колоколообразную  кривую.  Одной  из  тонкостей  эффективного  применения  БПФ  является выбор подходящей функции для окна.

Замечания

Как и многие другие сложные математические идеи, преобразование Фурье многогранно. Чем больше вы на него смотрите, тем больше видите:

?  тот факт, что прямое и обратное преобразования Фурье одинаковы по  своей сути, весьма важен. C чисто практической точки зрения, это  упрощает  реализацию  таких  алгоритмов,  как  БПФ,  поскольку  один  и  тот  же  программный  код  может  служить  обеим  целям.  C  теоретической  точки  зрения,  это может дать ключ к пониманию природы различных видов сигналов;

?  БПФ  быстрый  способ вычисления  некой свертки. Немного  поработав, вы

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

?  прямое  и  обратное  БПФ  работают  с  комплексными  значениями  и  выдают

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

?  обратное   БПФ   вычисляет   сумму   множества   синусоидальных   и   косинусои-

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

Глава 25. Фильтрация

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

Наложение синусоид

B  последней  главе  обсуждалась  значимость  фазы.  Один  из  способов  изменения  фазы  сигнала  заключается  в  реализации  его  задержки  во  времени.  Рассмотрим,  например,  сложение  500-герцевой  синусоиды  с  такой  же  волной,  запаздывающей  на  1/1000  секунды.  Как  показано  на  рис.  25.1,  эти  две  волны  полностью нейтрализуют друг друга.

Если  вы  оставите  ту  же  самую  1/1000  секундную  задержку,  но  будете  ис-

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

Источник: Кинтцель Т.  Руководство программиста по работе со звуком = A Programmer’s Guide to Sound: Пер. с англ. М.: ДМК Пресс, 2000. 432 с, ил. (Серия «Для программистов»).

По теме:

  • Комментарии