Pull to refresh

Comments 12

1.
Плагин Fab Filter Pro Q (скриншот в начале статьи) является параметрическим эквалайзером, позволяющим создать большое число полос, редактировать их параметры.
Параметрический эквалайзер потому и параметрический, что параметры фильтрации задаются параметром, а не амплитудой отдельно взятой полосы. Да и устроен он принципиально по другому — если полосовой эквалайзер представляет из себя набор параллельных фильтров, то параметрический — набор последовательных фильтров.

2.
По идее, вам никто не мешает делать с сигналом дискретное преобразование Фурье, обработать частоты и затем сделать обратное преобразование.
Никто так не делает, потому что это как минимум накладно.
Через БПФ делает фильтрацию посредством операции свёртки с заранее посчитанной импульсной характеристикой фильтра. Свёртку можно делать и без БПФ с абсолютно тем же результатом (применяют для небольших размеров, или же при реализации в GPU). Такие фильтры называются FIR (КИХ) — Finite Impulse Response, фильтры с конечной импульсной характеристикой.
Также существуют специальные алгоритмы, избавляющие от задержек (помимо использования прямой реализации свёртки).

3.
image
Эта картинка — не фильтр, а аппроксимация желаемого фильтра. В зависимости от реализации можно получить различную крутизну спада, амплитуду и характер пульсаций, но невозможно на практике получить фильтр с идеальной (brickwall) характеристикой.

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

Помимо этого, у IIR-фильтров есть такое понятие как устойчивость. Математически IIR-фильтры реализуются с бесконечной точностью вычислений (и на непрерывном, а не дискретном сигнале), а точность вычислений с плавающей точкой в цифре — конечна. Это приводит к накоплению погрешности, которая в свою очередь может привести к резонансу и значение фильтра улетит в бесконечность (а потом и в NaN) в силу их рекурсивной реализации. Отсюда также следует, что АЧХ такого фильтра никогда не будет соответствовать расчётной, и чем ближе к частоте Найквиста, тем сильнее.

IIR — это физически реализуемый фильтр, а FIR — нет.

5. Фильтры Баттерворта никогда не используются в синтезаторах (разве что только первого порядка, которые одинаковы вне зависимости от метода аппроксимации). Потому что задача фильтра в синтезаторе является не фильтрация частот или корректировка АЧХ, а тембральная окраска звука (в том числе и модулируемая). А используется, например, Ladder filter.
Большое спасибо за ваши комментарии. Вы тесно работаете с цифровой обработкой сигналов?

>Никто так не делает, потому что это как минимум накладно.
Я так и написал изначально.

>Эта картинка — не фильтр
Желаемый фильтр — вы имели ввиду идеальный/brickwall? Если да, то так и написано было далее.

>Фильтры Баттерворта никогда не используются в синтезаторах
Почему же тогда во всех исходниках по всему интернету именно они?
Вы тесно работаете с цифровой обработкой сигналов?
Нет, скорее просто давно. DSP для меня — также всего лишь хобби.

Я так и написал изначально.
То, что вы написали о БПФ, вообще не имеет никакого отношения к реальности. К слову, ограничение на степень двойки (которое есть только у классических Radix-2, Radix-4 и Radix-8 алгоритмов) никак не ограничивает его применение для свёртки с любым размером импульсной характеристики. Использование же БПФ с перекрытием может быть и наивно-интуитивно для фильтрации, но сложнее в реализации, и в двойне накладнее по ресурсам. Однако из этого вовсе не следует предпочтительность IIR по уже указанным причинам.

Эта картинка — не фильтр
Этот комментарий был призван устранить неточность в описании к этой картинке.

Почему же тогда во всех исходниках по всему интернету именно они?
Потому что фильтры используются не только в синтезаторах. А у фильтра Баттерворта есть и недостаток — в виде более медленно спадающей АЧХ по сравнению с другими фильтрами. На практике его используют в кроссоверах (в виде двух последовательно подключенных, известных больше как фильтр Линквица-Рейли) для разделения сигнала на низко- и высоко-частотные составляющие.
Спасибо, было бы очень интересно почитать про distortion.
это самое простое во всем синтезе. просто ограничение амплитуды сигнала до некоторого значения)
Ограничить амплитуду сигнала в цифре — просто. Получить звучание, как у аналогового лампового усилителя с ограничением — невероятно сложно. Множество VST-эффектов со словом TUBE в названии дают тёплый ламповый звук также также лишь только в названии (ну некоторые из них ещё и в дизайне). Guitar Rig близок, но его цифровая природа всё равно чувствуется.
Про ограничение я конечно в курсе, интересно посмотреть на реализацию :)

посмОтрите. но там не будет ничего, что написал Refridgerator, никакой эмуляции аналоговых педалек

Кстати, параметрический эквалайзер fabfilter (тот, что на иллюстрации) — один из самых классных, что мне довелось использовать. Великолепнейшее качество звука и быстродействие при очень высоких значениях скорости спада и/или добротности. Раз там сверху сказали, что с помощью фильтра Баттерворта такого эффекта не достичь, интересно, какие фильтры используются там.

В целом спасибо за статью, жаль C#. На C++ не доводилось делать нечто подобное?

Нет, язык C# был выбран изначально для более комфортного программирования, т.к. цель "учебная". К тому же в первой статье я рассказал про возможность писать UI на WPF.

Минусы подхода — во-первых, ДПФ принимает на вход массив из семплов, размер которого является степенью двойки.

Не всё ограничивается алгоритмом Cooley-Tukey. У этого алгоритма действительно есть такое ограничение, но существуют другие FFT с такой же асимптотикой (n log n), но без требования «степени двойки».

Спасибо большое за статью, получился очень хороший фильтр, который не глушит нужные частоты и он очень легко переносится на С\С++. Очень выручили.

Sign up to leave a comment.

Articles

Change theme settings