Как рассчитать фильтр баттерворта
Онлайн расчёт активных фильтров на ОУ и транзисторах.
И начнём мы с активных фильтров нижних частот (ФНЧ) и фильтров верхних частот (ФВЧ) 2-го и 3-го порядков имени товарищей Бесселя, Баттерворта и Пафнутия нашего Чебышева.
Эко нас понесло! Почему бы не удовлетвориться одним учёным мужем? К примеру, привычный с детства Баттерворт совсем не плох, к тому же широко известен в узких кругах.
Фильтры построим на основе повторителей, они просты в расчётах, к тому же легко могут быть реализованы не только на операционных усилителях, но и на транзисторах.
Рис.1
На Рис.1 приведены схемы активных фильтров нижних частот (ФНЧ) 2-го и 3-го порядка на ОУ и, для примера, реализация фильтра на биполярном транзисторе, отличающаяся от схем на операционниках только наличием двух резисторов, задающих необходимое напряжение смещения на базе.
Критерии выбора величины сопротивления R, такие же, как и в пассивных фильтрах, она должна быть на порядок больше выходного импеданса предыдущего каскада и на порядок меньше входного сопротивления ОУ или ЭП (на практике 1-100 кОм).
РИСУЕМ ТАБЛИЦУ ДЛЯ АКТИВНЫХ ФНЧ БЕССЕЛЯ, БАТТЕРВОРТА И ЧЕБЫШЕВА
Плавно переходим к активным фильтрам верхних частот (ФВЧ) 2-го и 3-го порядка на ОУ (Рис.2). В транзисторной реализации резисторы, задающие напряжение смещения на базе, уже участвуют в формировании необходимой АЧХ фильтра, поэтому значение Rб1 ll Rб2 должно равняться значению резистора R2 в ФВЧ 2-го порядка, либо R3 в ФВЧ 3-го порядка.
Рис.2
Номиналы элементов рассчитываются исходя из следующих формул:
R1=К R1 /(2π*F*C) R2=К R2 /(2π*F*C) R3=К R3 /(2π*F*C) R rб1 llR rб2 =R2 для фильтров 2-го порядка, либо R rб1 llR rб2 =R3 для 3-го.
Для фильтров Баттерворта 2-го порядка К R1 =0,707, К R2 =1,414, а для фильтров Баттерворта 3-го порядка К R1 =0,717, К R2 =0,282, К R3 =4,950.
И опять же, изначально надо определиться с номиналом R1, исходя из принципов, описанных в предыдущих схемах.
ТАБЛИЦА ДЛЯ РАСЧЁТА АКТИВНЫХ ФВЧ БЕССЕЛЯ, БАТТЕРВОРТА И ЧЕБЫШЕВА
И наконец, мы подобрались к схеме полосового активного фильтра.
Здесь всё несколько сложнее, поскольку, при расчёте фильтра, помимо значения центральной частоты, нам не стоит забывать и про такие немаловажные вещи, как коэффициент передачи фильтра в полосе пропускания, да и собственно ширину самой полосы пропускания.
Формулы, для расчёта элементов:
C1=C2=C
R1=Q/(2πF*Kп*C)
R2=Q/((2πF*C*(2Q²-Kп))
R3=2Q/(2πF*C)
Q=F/Bпр, где
В фильтре, приведённом на рисунке, не стоит слишком усердствовать с высокими значениями добротности и коэффициента передачи. Как показывает практика, и тот и другой параметр следует ограничить сверху на уровне 5-6 единиц.
Как всегда, начинаем с выбора номинала резистора R1, который как минимум в 10 раз должен быть выше выходного импеданса предыдущего каскада.
РИСУЕМ ТАБЛИЦУ ДЛЯ АКТИВНОГО ПЛОСОВОГО ФИЛЬТРА 2-го ПОРЯДКА
Полюсы и нули фильтра Баттерворта
В данной статье рассматривается фильтр нижних частот Баттерворта, также известный как фильтр с максимально плоской характеристикой, с точки зрения его диаграммы нулей и полюсов.
Многие люди слышали термин «фильтр Баттерворта» и использовали фильтры такого типа в своих схемах. Вам, конечно, не обязательно быть экспертом в теории фильтров, чтобы успешно включать схемы фильтров в свои проекты. Однако в некоторых случаях полезно понимать некоторые вещи более подробно. Во времена SPICE, гугления и калькуляторов фильтров нам иногда нужно сделать шаг назад и подумать о теоретической и концептуальной основе, на которой строится рабочая схема.
Моя цель в данной статье – дать представление о фильтре Баттерворта, представив и обсудив аспекты его диаграммы полюсов и нулей.
Полюсы и нули
Ранее я написал статью о полюсах и нулях в теории фильтров, посмотрите ее на случай, если вам понадобится более обширная информация по этой теме. Полюсы представляют частоты, которые приводят к тому, что знаменатель передаточной функции равен нулю, и они вызывают уменьшение наклона амплитудно-частотной характеристики системы. Нули представляют частоты, которые приводят к тому, что числитель передаточной функции равен нулю, и они вызывают увеличение наклона амплитудно-частотной характеристики системы.
В данной статье мы сосредоточимся на фильтре нижних частот Баттерворта, который имеет, как минимум, два полюса и не имеет нулей. (Все фильтры нижних частот имеют, по крайней, мере один ноль при ω = бесконечность, но он не появляется на диаграмме полюсов и нулей и обычно может игнорироваться.)
Диаграмма полюсов и нулей
Информация о полюсах и нулях системы может передаваться визуально с помощью отметки их расположения в комплексной плоскости. Если вы читали мои статьи о диаграмме Найквиста или о комплексно-сопряженных полюсах, или статью доктора Серхио Франко о расщеплении полюсов, вы знакомы с концепцией диаграммы полюсов и нулей.
Следующий рисунок демонстрирует ее структуру.
Рисунок 1 – Комплексная плоскость
Расположение полюса или нуля определяется его действительной частью, которая откладывается по горизонтали, и его мнимой частью, которая откладывается по вертикали. Полюсы обозначаются крестиком (✕), а нули – кружком (◯). В приведенном выше примере два полюса представляют собой комплексно-сопряженную пару, поскольку их действительные части равны, а мнимые части равны по величине, но противоположны по знаку.
Диаграмма полюсов и нулей – это удобное и эффективное средство передачи важной информации о системе фильтра. Как вы можете видеть на диаграмме ниже, она показывает как частоту полюсов/нулей, так и добротность (Q):
Рисунок 2 – Добротность фильтра на диаграмме полюсов и нулей
Фильтр Баттерворта
Я использую здесь слово «фильтр», чтобы подчеркнуть тот факт, что «фильтр» Баттерворта на самом деле является классом цепей, имеющих одинаковые основные характеристики.
Как и в случае с большинством других вещей в жизни, у вас не может быть одной системы, устройства или материала, которые лучше всех остальных. Вместо этого у нас есть компромиссы: производительность против стоимости, прочность против веса, свободное время против баланса на банковском счете, и так далее.
Приоритетом фильтра Баттерворта является гладкость АЧХ в полосе пропускания, и именно это объединяет различные варианты фильтров Баттерворта: они сводят к минимуму величину изменений на амплитудно-частотной характеристике, которые происходят до частоты среза. Это контрастирует с фильтром Чебышева, который для повышения крутизны перехода от полосы пропускания к полосе задерживания допускает «пульсации» АЧХ в полосе пропускания.
Гладкость в полосе пропускания можно увидеть на следующем графике, который представляет собой амплитудно-частотную характеристику фильтра Баттерворта четвертого порядка.
Рисунок 3 – Логарифмическая амплитудно-частотная характеристика фильтра Баттерворта четвертого порядка
Диаграмма полюсов и нулей фильтра Баттерворта
Чтобы получить фильтр Баттерворта, пропускающий нижние частоты, нам нужно создать передаточную функцию, полюсы которой расположены следующим образом:
Рисунок 4 – Этот конкретный фильтр имеет четыре полюса. Дополнительные полюсы должны следовать этому же шаблону.
Извлечь информацию из этой диаграммы вам помогут следующие ключевые моменты:
Заключение
Диаграмма полюсов и нулей, которую мы рассмотрели в данной статье, – это не просто способ описания фильтра нижних частот. Скорее, конфигурация полюсов является теоретической основой для создания фильтра Баттерворта. Учитывая требуемую частоту среза и порядок фильтра, мы бы выбрали компоненты так, чтобы расположение полюсов соответствовало схеме Баттерворта.
Переход от диаграммы полюсов и нулей к значениям номиналов компонентов не особенно прост; еще до появления удобных программных инструментов использовались предварительно рассчитанные таблицы, и я предполагаю, что вам никогда не придется выполнять этот процесс вручную. Тем не менее, хорошо хотя бы что-то знать о базовых концепциях, и я надеюсь, что вам был интересен этот теоретический обзор ФНЧ Баттерворта.
Расчет аналогового нормированного фильтра нижних частот Баттерворта
DSPL-2.0 — свободная библиотека алгоритмов цифровой обработки сигналов
Распространяется под лицензией LGPL v3
Аппроксимация квадрата АЧХ нормированного ФНЧ Баттерворта представляется в виде (смотри рисунок 1):
Порядок фильтра Баттерворта рассчитывается из уравнения:
Прологарифмируем правую и левую части уравнения и получим:
На рисунке 1 приведены соотношения параметров АЧХ нормированного ФНЧ, которые используются как исходные данных для синтеза фильтра.
Для расчета передаточной характеристики мы должны получить выражения для нулей и полюсов квадрата модуля передаточной характеристики нормированного ФНЧ Баттерворта.
Для расчета нулей и полюсов подставим в выражение квадрата АЧХ (1), тогда:
Очевидно, что ни при каких конечных комплексных выражение (4) не равно нулю, квадрат модуля передаточной характеристики нормированного ФНЧ Баттерворта не имеет конечных нулей.
Для расчета полюсов нормированного ФНЧ Баттерворта приравняем знаменатель (4) к нулю:
Тогда можно представить передаточную функцию нормированного ФНЧ Баттерворта при помощи биквадратной формы. Для четного :
Форма записи (27) передаточной функции нормированного ФНЧ Баттерворта получила широкое распространение ввиду того, что не требуется нормировка. Однако выражение (26) позволяет регулировать коэффициент передачи фильтра на частоте среза и является более общей.
Рассчитаем нормированный ФНЧ Баттерворта при следующих параметрах квадрата АЧХ (смотри рисунок 1):
Комплексный коэффициент передачи полученного фильтра равен:
Обратите внимание, что по оси абсцисс частота представлена в логарифмическом масштабе.
Таким образом, в данном разделе мы рассмотрели порядок расчета передаточной функции аналогового нормированного ФНЧ Баттерворта и привели пример расчета фильтра по заданным параметрам АЧХ.
Программирование&Музыка: Частотный фильтр Баттервота. Часть 3
Всем привет! Вы читаете третью часть статьи про создание VST-синтезатора на С#. В предыдущих частях был рассмотрен SDK и библиотеки для создания VST плагинов, рассмотрено программирование осциллятора и ADSR-огибающей для управления амплитудой сигнала.
В этой части я расскажу, как рассчитать и закодить фильтр частот, без которого не обходится ни один синтезатор. А без эквалайзера немыслима обработка звука.
Внимание — будет много матана — будем рассчитывать формулы для коэффициентов фильтра.
Скриншот VST плагина-эквалайзера Fab Filter Pro Q
Цикл статей
Оглавление
Эквалайзер
Часто при обработке звука мы хотим изменить его характер/окраску/тембр. Сделать звук более басовым, убрать верхние частоты, или наоборот, сделать звук «прозрачным», оставив лишь середину и верха. Уверен, многие люди, не работавшие с обработкой звука, знают что такое эквалайзер — они есть акустических колонках, музыкальных центрах, магнитофонах, плеерах, и т.д. Эквалайзер — это набор фильтров, каждый из которых изменяет амплитуду сигнала в его выбранной полосе частот. На бытовых колонках это, обычно, 2-3 крутилки — низкие частоты, средние и верха, с фиксированными полосами частот.
В Winamp’овском эквалайзере уже есть 10 заранее определенных полос.
Скриншот эквалайзера в плеере Winamp
В мире обработки звука существует множество плагинов-эквалайзеров, на любой вкус и цвет. Плагин Fab Filter Pro Q (скриншот в начале статьи) — это графический эквалайзер, позволяющий создавать большое число полос и редактировать их параметры.
Каждая полоса в эквалайзере — это, по сути, фильтр частот. Фильтры частот изменяют тембральные/частотные характеристики сигнала. В электронике существуют много типов и классификаций фильтров, с соответствующими характеристиками и параметрами — смотрим википедию.
Мы рассмотрим и запрограммируем самые простые фильтры: НЧ, ВЧ и полосовой фильтры.
Фильтрация через преобразование Фурье
По идее, вам никто не мешает делать с сигналом дискретное преобразование Фурье, обработать частоты и затем сделать обратное преобразование.
Если не думать над реализацией ДПФ, то такой подход я бы назвал достаточно интуитивным и простым в программировании (опять же, если взять ДПФ из какой-нибудь либы и не кодить самому).
Минусы подхода — во-первых, ДПФ принимает на вход массив из семплов, размер которого является степенью двойки. Это значит, что выходной сигнал уже будет с задержкой. Во вторых, каждый 512-й семпл мы будем производить данный алгоритм: ДПФ, обработка частот сигнала, обратное ДФП. Это не малые вычисления. В-третьих, есть еще минусы и тонкости, которые знают адепты цифровой обработки сигналов.
Мы не будем рассматривать применение ДПФ, а заглянем в теорию цифровых фильтров; напишем фильтр, который обрабатывает значения семплов и имеет линейную вычислительную сложность в зависимости от длины входящего массива семплов.
Цифровые фильтры
Большую часть информации и вывод формул я взял из книги Digital Signal Processing: A Practical Approach — очень рекомендую, она есть в русской версии — Цифровая обработка сигналов. Практический подход, заинтересованные найдут PDF в сети.
Хочу сделать важное замечание. Тема построения и рассчитывания фильтра действительно очень сложна, содержит массу тонкостей и нюансов, требует знания и понимания теории. В этой статье я покажу, как рассчитать формулы фильтра Баттервота, чтобы у читателя возникло понимание, откуда выводятся эти формулы. Но почему именно такие исходные формулы, почему именно такие замены — можно понять лишь погрузившись в глубокую теорию цифровой обработки сигналов.
Когда я начинал гуглить код фильтров, я сразу находил множество непонятного математического кода, и хотелось хоть чуть-чуть понять, откуда берутся такие рассчетные формулы. Осциллятор, огибающая, дилей — понимание и программирование работы этих составляющих лично мне кажется интуитивным, но только не фильтров. Этой статьей я хочу пробудить интерес к цифровой обработке сигналов) Буду рад, если возникнет желание разобраться в этой теме более основательно.
Аппроксимация АЧХ идеального фильтра (картинка из советского учебника, не нашел исходник)
Фильтр изменяет сигнал, «убирая» в нем выбранные частоты. Существующие фильтры не идеальны. Полоса пропускания — полоса частот, которую фильтр «не затрагивает» (на графике есть некоторая изменения — особенность неидеального представленного фильтра). Полоса подавления — полоса нежелательных частот. В полосе перехода происходит спад частот. Естественно, фильтр ближе к «идеальному» тем, насколько меньше он искажает полосу пропускания, насколько сильно он подавляет частоты в полосе подавления и насколько узка полоса перехода. Есть разные «приближения» фильтров — фильтр Чебышёва, Баттервота, и так далее — их вы найдете в книжках и на просторах сети.
Почему фильтр Баттервота?
Все очень просто, АЧХ фильтра Баттерворта максимально гладкая на частотах полосы пропускания — имхо, важнее всего не испортить сигнал в полосе пропускания.
Логарифмическая АЧХ для фильтров Баттерворта нижних частот разных порядков (скриншот взят с Википедии)
Вывод формулы фильтра НЧ
Передаточная функция для фильтра Баттервота на s-плоскости записывается следующими формулами:
при четных n и
при нечетных n
Чтобы получить сверточные коэффициенты, нужно получить передаточную функцию на z-плоскости в виде
Тогда свертка для фильтра будет выглядеть так:
В формуле нужно использовать денормированные частоты, т.е. произвести замену (в полосовом фильтре будут две частоты w1 и w2, определяющие полосу пропускания):
Если мы хотим рассчитывать НЧ-фильтр, то нужно сделать преобразование — произвести замену параметра s в передаточной функции:
Для рассчета других типов фильтров (ВЧ, полосового, режекторного) нужно делать другие замены. Они рассмотрены в книге Цифровая обработка сигналов. Практический подход в части 8.8.2 и далее в статье.
Далее, для перехода в z-плоскость делаем замену:
Для аналитических рассчетов я использовал пакет Mathematica.
Нужно получить числитель и знаменатель в виде полиномов от z. Приведем слагаемые знаменателя H(z) к общему знаменателю. Для этого найдем наибольший общий делитель (НОД, GCD) слагаемых знаменателя и поделим на него числитель и знаменатель исходной функции H(z).
Найдем коэффициенты при степенях у полученных полиномов, используя функцию CoefficientList:
Если все делать честно, то, по условию, a0 должен быть равен 1 — поделим на a0 все коэффициенты (для кодинга будем использовать предыдущие формулы без деления):
Вывод формулы фильтра ВЧ и полосового фильтра
Вывод формул для ВЧ-фильтра аналогичен НЧ-фильтру с другим преобразованием:
Для вывода формул полосового фильтра применяется преобразование:
Если производить замену, то степень полиномов в числителе и знаменателе H(z) удвоится (в замене есть s^2), значит порядок фильтра увеличится вдвое. Поэтому изначально используем функцию H(s) для n = 1:
Программирование фильтра Баттервота по полученным формулам
Фильтр будет иметь 2 параметра: тип фильтра (НЧ, ВЧ, полосовой) и частота среза w. Для полосового фильтра будем рассматривать частоту среза как частоту посередине полосы пропускания. Полосу пропускания же определим как отрезок частот [w — w/4, w + w/4] (можно придумать здесь более сложный и логичный здесь логарифмический закон, на ваше усмотрение).
Пусть мы определили коэффициенты b0, b1, b2, a1 и a2 (a0 по условию равен 1) по рассчитанным формулам. Алгоритм работы фильтра сводится к свертке, которая делается последовательно для каждого семпла:
y(n) — это новое значение семпла, которое нужно рассчитать. x(n) — текущее значение семпла, соответственно y(n-1) и y(n-2) — предыдущие 2 рассчитанных семпла, а x(n-1) и x(n-2) — предыдущие входные значения семплов.
Нужно организовать запоминание предыдущих семплом. Не будем мудрить с циклическими буферами, сделаем просто и понятно: два массива из трех элементов. Каждый раз будем «проталкивать» новые значения в этот массив, последовательно копируя более старые значения семплов.
Получаем простой класс:
Напишем каркасный класс для фильтра (смотри архитектуру синтезатора в первой статье). Класс BiquadConvolutionTable работает с одним сигналом, т.е. с одним каналом — моно. Поэтому нам нужны две BiquadConvolutionTable — для левого и правого каналов.
Чтобы корректно применить фильтр, нужно последовательно, для всех семплов входящей последовательности применить функцию BiquadConvolutionTable.Process и заполнить результирующий массив семплов.
Рассчетом коэффициентов для BiquadConvolutionTable будет заниматься функция CalculateCoefficients.
Функция CalculateCoefficients вызывается каждый раз в цикле — зачем? В следующей статье я расскажу про модуляцию (изменение во времени) параметров, и поэтому, частота среза может меняться, а значит, нужно перерассчитывать коэффициенты. Конечно, по-трушному, нужно подписаться на изменение частоты среза и уже в обработчике рассчитывать коэффициенты. Но в этих статьях я оптимизами заниматься не буду, цель — закодить фильтр.
Осталось закодить функцию CalculateCoefficients по рассчитаным формулам для коэффициентов.
Вспомним, что нужно использовать денормированные частоты, т.е. произвести замену:
Списываем все формулы для коэффициентов b0, b1, b2, a0, a1, a2. После рассчетов нужно поделить все коэффициенты на a0, чтобы a0 стало равно 1.
Полосовой эквалайзер в библиотеке NAudio
Она содержит пространство имен NAudio.Dsp с функционалом для фильтрации, свертки, гейта, огибающей, БПФ и других интересных штук.
Рассмотрим класс Equalizer (из примеров, пространство имен NAudioWpfDemo.EqualizationDemo), позволяющий производить эквализацию сигнала. Класс реализует ISampleProvider, который в функции Read(float[] buffer, int offset, int count) обрабатывает (изменяет) массив семплов buffer.
Конструктор принимает массив структуры EqualizerBand, которые описывают «полосы» эквалайзера:
Здесь Frequency — центральная частота полосы с параметром Q (Bandwidth, добротность фильтра), c усилением Gain dB.
Если заглянуть в реализацию, то каждой полосе EqualizerBand соответствует класс BiQuadFilter который используется как полосовой (Peaking) фильтр. Все фильтры изменяют сигнал используются последовательно.
Класс EqualizerBand является реализацией фильтра Баттервота, с большим выборов типов фильтров и параметрами. Если посмотреть реализацию, можно увидеть схожие формулы и коэффициенты.
Пример использования класса Equalizer вы найдете в проекте NAudioWpfDemo в классе EqualizationDemoViewModel.
Программы для рассчета фильтров
Прародителем цифровых фильтров были фильтры аналоговые. Теория для аналоговых схем и аналоговой обработке сигналов в дальнейшем переросла в теорию цифровой обработки сигналов.
Для рассмотренного фильтра Баттервота и рассчитанных формул для коэффициентов можно собрать аналоговую схему.
Есть много программ для рассчета и построения схем, параметров элементов для них, сверточных коэффициентов различных фильтров.
Можете погуглить по «filter calculation software».
Iowa Hills Software RF Filter Designer
В следующей статье я расскажу про эффект delay, distortion и модуляцию параметров.
Всем добра! Удачи в программировании!
Список литературы
Не забывайте смотреть списки статей и книг в предыдущих статьях.