Обработка звука - фильтры:

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

   Наш тестовый сигнал - тишина, резко переходящая в простой тон ноты ля основной октавы, 440 Гц.

   Одно замечание. Резкое (неплавное) изменение характера колебаний - то место, где из тишины появляется тон  - содержит все возможные частоты сразу, то есть на сонограмме это выглядело бы яркой вертикальной линией. Слышится это место как легкий звонкий щелчок.
   Этот участок, содержащий все частоты, мы и будем пытаться фильтровать, для наглядности. Задача будет такая: оставить все частоты до примерно 600 Гц, и убрать все более высокие. В идеале мы не должны затронуть ни сам тон, ни тишину перед ним, вместе с тем сгладить переход, сделать рывок не таким резким - то есть убрать из него все высокие частоты, которые дают резкие скачки амплитуды. Пример очень искусственен, но хорошо показывает особенности разных фильтров.

   Так получилось, что я буду в основном ругать фильтры. Будет гораздо лучше, если вы поймете, что любой частотный фильтр, сильно изменяющий частотную картину - это прежде всего страшно, а уж потом - полезно. В цифровой фильтрации очень важно знать меру - слишком сильна свобода выбора как угодно жесткого фильтра, что не всегда полезно. Я даже несколько сгущаю краски - на самом деле, всё не так плохо, как могло показаться, и если я говорю 'ужасные последствия' - это еще не значит, что уши завянут сразу же, нет. Просто в обработке звука любая потеря - это всё же потеря, которая когда-нибудь скажется, и поэтому - будем стараться терять как можно меньше.

   И заодно - простая истина: цифровые фильтры всегда лучше аналоговых. В крайнем случае - они их моделируют, в лучшем случае - предлагают такие возможности, которые просто нельзя получить в аналоговой схеме.

FFT фильтр

   Самый простой в использовании, гибкий, понятный, наглядный, мощный... и  опасный из всего семейства, смертельный для звука инструмент в неумелых руках.

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

   Идея фильтра заманчива своей простотой. Но проблемы есть, и они огромны. Основная проблема - блок FFT обработки представляет собой одно целое. Определенная частота - результат FFT - при обратном синтезе пронизывает весь блок, и её нельзя просто так, без последствий, выкинуть или усилить... От слов - к делу:


Исходный сигнал


Фильтрация с FFT = 8192


Фильтрация с FFT = 1024

   Как видно, результат - как минимум странный. Обратите внимание на следующие искажения:

   В общем, в пределах одного FFT блока возможны серьезные искажения временных и амплитудных параметров. Из этого вывод: нужно делать блок как можно меньше.
   Минусы этого подхода: При уменьшении сетки частот ощутимо затрагиваются уже все частоты - и фильтрованные, и нет. Это происходит из-за того, что частот, не попадающих в FFT сетку, становится больше. Это плохо. При уменьшении FFT уменьшается разрешение по частотам - это тоже плохо. Если мы, например, хотим работать с басом и нам есть разница между 100 и 110 Гц - мы вынуждены использовать блоки с размером как минимум 4096, что уже достаточно для появления неприятных эффектов.
   Не рекомендуется делать блоки меньше 1024 - разрешение по частоте настолько падает, что смысл применения именно этого фильтра вообще теряется. Зато из-за малого разрешения по частоте появляется некая шершавость обработки, особенно на стыках блоков - будут появляться артефакты.

   Для разнообразия - еще одна картинка. Убираем на этот раз все частоты меньше 600 Гц - то есть наш основной тон должен уйти.


FFT = 1024

   Мы выделили сам щелчок. Видно, что даже с таким маленьким размером FFT имеет место эхо с двух сторон. Оно сильно возрастает при переходе на большие размеры FFT.

   Уже вполне можно спросить - а зачем он вообще такой нужен? Дело в том, что и этот фильтр бывает нужен, безопасен, более того - незаменим. Но вы должны абсолютно точно понимать, что вы делаете. Например, вполне безопасны такие операции:

   Чего ни в коем случае не нужно делать:

   Для чего он нужен:

   В любом случае: проверяйте и тщательно анализируйте результат. На что обращать внимание - в основном, смотрите на временные параметры - например, на фронты резких колебаний.

IIR фильтры

   От Infinite Impulse Response - что-то вроде 'бесконечная отдача импульса'. В теории, влияние этих фильтров не прекращается никогда, лишь затихая во времени. На практике оно, конечно, прекращается, но всё равно - эти фильтры оставляют наибольший шлейф последствий. Не обязательно плохих, просто - изменения сигнала идут всегда, вне зависимости от того, есть что фильтровать или нечего в данный конкретный момент фильтрации. Это проще будет посмотреть на примерах.

   На IIR фильтрах в программах обычно построены такие функции, как:

   А вообще - лучше посмотреть в справке к конкретной программе, какие именно фильтры используются в той или иной обработке. Возможно, что программа, которую вы используете, применяет другие фильтры для реализации диалогов фильтрации того типа, как я описал.
   Прежде всего, хотелось бы вас послать к любой серьезной книжкой по цифровой обработке звука - вопросы IIR фильтров там освещаются очень подробно. Я же предлагаю вам выжатое описание эффектов фильтрации и советы в стиле кухонного рецепта по практическому использованию (или не использованию) этих фильтров...

   Начнем с того, что эти фильтры также опасны. Не так сильно, однако, как FFT, но всё же. Один IIR фильтр - это фильтр, который воздействует на какой-то диапазон частот: или только частоты ниже определенной границы, или только выше, либо между двумя заданными частотами. У IIR  фильтра есть такой параметр, как порядок. Чем он больше, тем сильнее граница по частоте между тем, на что влияет фильтр, и тем, на что он не влияет. Иногда можно задавать параметр напрямую (CoolEdit - научные фильтры), иногда он автоматическим образом зависит от желаемой резкости перехода (SoundForge, parametric EQ). Вместе с тем, чем выше порядок фильтра, тем сильнее проявляются искажения фазы, которые резко нарастают вблизи границ фильтрации. Разные типы фильтров (Chebushev, Bessel, ...) обладают разными свойствами на границах перехода, но в этом обзоре - только общие тенденции.
   К примерам. Напоминаю - убираем все частоты выше 600 Гц.


Исходный сигнал


После фильтра порядка 2 (Butterworth)


После фильтра порядка 6 (Butterworth)


После фильтра порядка 12 (Butterworth)

   Видно, что фильтр 2-го порядка справился так себе: во первых, относительно слабо убрал высокие частоты - переход остался довольно резким, а во вторых затронул и 440 Гц. Его частотная характеристика слишком плавная для точной фильтрации. Фильтры более высокого порядка справились лучше, но сигнал заметно уплыл вправо, появилась задержка. Это - не что иное, как фазовые искажения. Сигнал 440 Гц, хоть и не изменяя своей амплитуды, приобрел фазовый сдвиг, да такой здоровый, что его уже можно называть задержкой. Проблема в том, что этот фазовый сдвиг разный для разных частот - если бы в сигнале была частота 100 Гц, она бы почти не сдвинулась во времени. Фазовые искажения - большой и почти единственный серьезный минус IIR фильтров.

   Чего ни в коем случае не нужно делать:

[примечание: в версиях, начиная с 4.0, в SoundForge в этом месте (да и практически везде) начали применяться другие фильтры - так называемые windowed-sinc фильтры - частный случай FIR фильтров, которые уже не вносят фазовых искажений (см. далее). Сейчас встретить IIR фильтры в чистом виде можно, в основном, только в программах, ориентированных на обработку звука в реальном времени - они очень быстры)]

   Для чего они нужны:

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

FIR фильтры

   От Finite Impulse Response - 'конечная отдача импульса'. Эти фильтры реализованы через процесс, называемый сверткой (convolution): есть таблица размера n, которая комбинирует (складывает) последние n точек функции в одну выходную точку, умножая каждую из них на определенное число - весовой коэффициент. Таблица свертки строится один раз в начале по требуемому частотному воздействию.
   [На самом деле влоб делать свертку очень медленно. Применяется другой процесс, для больших сверток в сотни раз более быстрый, но полностью аналогичный этому - FFT, умножение в частотном пространстве, обратный синтез].

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

   FIR фильтры - то, ради чего стоило вообще придумывать цифровую фильтрацию. Это наиболее безопасный и надежный из всех процессов, имеющий лишь одно слабое место - трудно управляемые параметры фильтрации. Сделать фильтр именно до мелочей такой, какой нам нужно, особенно в области низких частот, может оказаться излишне трудоемким, что приведет к очень медленной обработке. Для этого придется использовать слишком большие размеры свертки, а это замедлит до трудно терпимой скорости даже в сотни раз ускоренный процесс. Однако сверхсильная точность не всегда нужна, а очень хорошую точность обработки за приемлемое время он всё же обеспечивает.
   Кроме слабой управляемости к недостаткам можно отнести невысокую скорость работы фильтров с большой сверткой (более точных фильтров). В принципе, сделав огромную свертку, мы получим именно такой фильтр, как мы хотим, но фильтровать он будет почти вечно. В этом, а не в чем либо другом, кроется причина того, что эти фильтры используются лишь в эквалайзерах - там не нужна особая точность, важны лишь общие тенденции, которые неплохо соблюдаются и с маленькими свертками.


Исходный сигнал


После FIR фильтра

   Можно убедится в том, что фильтр совершенно не затронул те сигналы, которые не должен был затрагивать. Правильно сконструированный FIR фильтр не влияет на фазу. В общем можно сказать так: эти фильтры делают именно то, что должны делать, и ничего более.

   О точности FIR фильтров:

   Во многих программах есть параметр 'точность' (accuracy), иногда она даже напрямую измеряется в точках (points) - числе элементов свертки, или convolution length (size). Этот параметр влияет только на точность фильтра. Это не качество, это то, с какой точностью фильтр выполняет ваш заказ. Если вы воздействуете на глубокий бас (около 40-50 Гц) - вам потребуются большие свертки (около 4000 точек) или самое качественное значение. Если вы работаете лишь с частотами выше 5 кГц - вам хватит свертки в 500 точек, которая будет работать значительно быстрее. Если вы хотите влиять на басы и поставите свертку 200 точек - единственное, что пойдет не так - фильтр просто не будет воздействовать на басы должным образом, вот и всё. Потери качества обработки не будет, будет лишь потеря смысла.

   Для чего они нужны:

   Целесообразно действовать так: сначала с помощью любых фильтров понять, что вам нужно, а потом попытаться воплотить это с помощью FIR фильтров. Это наиболее качественная и корректная настраиваемая фильтрация из всех возможных. Именно на таких фильтрах работают качественные цифровые эквалайзеры, тогда как аналоговые - на IIR, единственных фильтрах, которые можно реализовать в аналоговой схеме.

   Единственное что - не пытайтесь применить FIR фильтры для точной фильтрации. Они могут это делать, так же идеально как и обычную обработку, но слишком медленно. Для работы с конкретными заданными частотами приходится использовать FFT или IIR фильтрацию.

Рейтинг@Mail.ru

Официальный сайт: www.djextra.ru

 

Hosted by uCoz