Фильтр 4-го порядка: Характеристики и Реализация
В задачах обработки сигналов часто возникает необходимость фильтрации сигналов, когда сигнал разбивается на узкополосные диапазоны.
В бытовом плане мы с этим сталкиваемся при воспроизведении музыки через акустические системы, в которых каждый громкоговоритель (динамик) воспроизводит свою полосу частот, которых обычно три - низкие (НЧ), средние (СЧ) и высокие (ВЧ); для воспроизведения сверхнизких частот иногда выделяют отдельную акустическую систему под названием «сабвуфер».
Конкретные границы частот зависят от реализации и ориентировочно находятся на границах 100 Гц, 1 кГц и 5 кГц.
В данном обзоре мы разберем цифровые полосовые фильтры Чебышева I рода и Баттерворта, реализованные в библиотеке ELEMYO для Arduino.
Библиотеку Elemyo для работы с Arduino можно найти здесь.
Популярность их обусловлена простотой схемотехнической реализации и гладкой АЧХ с отсутствием пульсаций.
У всех аналоговых фильтров есть недостатки - нестабильность параметров и сложность в настройке.
Другой немаловажным недостатком является неустранимый сдвиг фаз.
Появление цифровой техники в целом и цифровых источников сигналов в частности позволило избавиться от недостатков аналоговых фильтров путём реализации их непосредственно программным образом, в цифре.
Такой подход требует «мультиампинг» - когда используется отдельный усилитель мощности для каждой полосы частот - в отличие от классического подхода, когда сначала усиливается широкополосный сигнал, который разбивается на частотные полосы (обычно) пассивными фильтрами.
Цифровой фильтр - это функция, которую можно рассматривать как во временной, так и в частотной области.
Во временной области она определяет импульсную характеристику, получаемой при реакции некоторого устройства или его мат. модели на единичный импульс (на слух воспринимаемый как щелчок).
В частотной области она определяет затухание или усиление амплитуды и сдвиг фазы на отдельно взятой частоте.
IIR (Infinite Impulse Response) - фильтры с бесконечной импульсной характеристикой.
По сути, представляют собой всё те же аналоговые фильтры, но «моделируемые» в цифре - математический аппарат в обоих случаях идентичен (в основе которого лежит преобразование Лапласа).
Их преимуществом является низкая вычислительная сложность - каждое новое значение вычисляется рекурсивно в зависимости от предыдущих.
FIR (Finite Impulse Response) - фильтры с конечной импульсной характеристикой.
Самый известный фильтр такого рода - это скользящее среднее, а сама фильтрация осуществляется посредством линейной свёртки отсчётов фильтра с отсчётами входного сигнала.
Здесь сложность уже квадратичная - однако её можно уменьшить до , если использовать алгоритм быстрой свёртки с использованием быстрого преобразования Фурье (FFT).
Конечность количества отсчётов накладывает свои ограничения на форму АЧХ, приводя к пульсациям.
Наша задача - сформировать пару фильтров, делящих полосу частот на две с перекрытием.
В данной статье рассматриваются цифровые полосовые фильтры Чебышева I рода и Баттерворта, их особенности, реализация и примеры работы.
1. Теория
Полосовой фильтр Чебышева I рода обладает крутым спадом амплитудно-частотных характеристик (АЧХ), что позволяет эффективно подавлять сигналы вне полосы пропускания, но при этом он имеет выраженные пульсации в области пропускания.
В некоторых задачах данные пульсации существенны.
Фильтр Баттерворта, напротив, имеет гладкую характеристику в области пропускания, но при этом спад АЧХ менее крутой, что значительно уменьшает качество подавления в области частоты среза.
На рис. 1 приведены АЧХ Фильтра Баттерворта 4 порядка и Чебышева I рода 4 порядка с уровнем пульсаций 0.5 dB и 1 dB.
Видно, что характеристика фильтра Баттерворта значительно менее крутая.
Наиболее крутой характеристикой обладает фильтр Чебышева I рода с пульсациями на уровне 1 dB.

Рис. 1: Амплитудно-частотная характеристика фильтров (частота дискретизации сигнала 500 Гц, полоса пропускания 30 - 100 Гц).
Принципы построения цифровых фильтров детально описаны в работе [1].
Ниже приведен пример построения фильтра нижних частот Чебышева I рода и Баттерворта.
Прототипы передаточных функций фильтров имеют следующий вид:
- Баттерворта 4 порядка:
- Чебышева 4 порядка с пульсациями на уровне 0.5 dB:
- Чебышева 4 порядка с пульсациями на уровне 1 dB:
Hp(s) можно представить в общем виде:
Преобразуем прототип передаточной функции функции Hps в передаточную функцию для полосового фильтра:
где fl - нижняя частота среза в Гц, fh - верхняя частота среза в Гц, fs - частота дискретизации сигнала в Гц.
Используя билинейное преобразование, получаем передаточную функцию для цифрового полосового фильтра:
После перемножения получаем передаточную функцию в виде:
В результате получаем разностное уравнение, описывающее рассматриваемый БИХ-фильтр:
где - x(n) последнее измерение сигнала, а x(n-1)…x(n-8) - восемь предыдущих последовательных измерений сигнала, y - y(n) текущее отфильтрованное значение сигнала, а y(n-1)…y(n-8) - восемь предыдущих последовательных значений отфильтрованного сигнала.
2. Реализация
Рассмотренный в п1. фильтр нижних частот реализован в библиотеке «ELEMYO.h» для Arduino.
Здесь sensorValue - текущее значение фильтруемого сигнала, fl - нижняя частота среза в Гц, fh - верхняя частота среза в Гц, type - тип фильтра: 0 - фильтр Баттерворта 4-го порядка, 1 - фильтр Чебышева I рода 4-го порядка с пульсациями на уровне 0.5 dB, 2 - фильтр Чебышева I рода 4-го порядка с пульсациями на уровне 1 dB.
На выходе функция выдает отфильтрованное значение.
Важные особенности функции BandPass():
- Частота дискретизации сигнала должна быть примерно в 2 раза выше частоты среза. В противном случае метод не будет работать. При задании низкой частоты дискретизации фильтр автоматически выдаст ошибку.
- Не следует указывать нижнюю частоту среза ниже 30 Гц. На низких частотах численная реализация метода на Arduino не устойчива, и сигнал может содержать пульсации, уровень которых будет зависеть от частоты дискретизации сигнала.
- Не следует стоит ставить полосу пропускания меньше 10 Гц (fh- fl < 10Гц), это может привести к неустойчивости численной реализации метода.
- Один вызов функции BandPass() на Arduino Uno в среднем занимает 2040 мкс.
3. Пример работы
На рис. 2 приведен ЭМГ сигнал, отфильтрованный режекторным фильтром на 50 Гц и зашумленный высокочастотной помехой.
Также сигнал имеет низкочастотные колебания вследствие движения электродов во время мышечного сокращения.
На рис. 3 приведен ЭМГ сигнал, отфильтрованный описанной выше функцией в режиме реального времени.
Применялся фильтр Чебышева I рода 4 порядка с полосой пропускания 30-80Гц.
Среднее значение отфильтрованного сигнала равно 0.
| Рисунок | Описание |
|---|---|
![]() | Рис. 2: Сигнал, сильно зашумленный наводкой 100 Гц. |
![]() | Рис. 3: Результат фильтрации сигнала, приведенного на рис. 2. |
![]() | Рис. 4: Сырой и отфильтрованный сигналы, получаемые в режиме реального времени. |
![]() | Рис. 5: Спектр сигнала, приведенного на рис. 2. |



