By using this website, you agree to the use of cookies. We use them to optimize functionality and convenience of the site for our clients.
Elemyo | 22 апреля 2020

Цифровой полосовой фильтр.

В данном обзоре мы разберем цифровые полосовые фильтры Чебышева I рода и Баттерворта, реализованные в библиотеке ELEMYO для Arduino.

Библиотеку Elemyo для работы с Arduino можно найти здесь.
Библиотека для Arduino:
перейти по ссылке
Содержание обзора:
1
Теория
Подробнее
2
Реализация
Подробнее
3
Пример работы фильтра
Подробнее

1
Теория
Полосовой фильтр Чебышева I рода обладает крутым спадом амплитудно-частотных характеристик (АЧХ) [ссылка], что позволяет эффективно подавлять сигналы вне полосы пропускания, но при этом он имеет выраженные пульсации в области пропускания. В некоторых задачах данные пульсации существенны. Фильтр Баттерворта, напротив, имеет гладкую характеристику в области пропускания, но при этом спад АЧХ менее крутой, что значительно уменьшает качество подавления в области частоты среза [ссылка]. На рис. 1 приведены АЧХ Фильтра Баттерворта 4 порядка и Чебышева I рода 4 порядка с уровнем пульсаций 0.5 dB и 1 dB. Видно, что характеристика фильтра Баттерворта значительно менее крутая. Наиболее крутой характеристикой обладает фильтр Чебышева I рода с пульсациями на уровне 1 dB.
Пример ЭМГ сигнала при плохом контакте датчика с кожей. Миограмма с помехой 50 Гц
Рис. 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. Функция для фильтрации является методом класса ELEMYO и имеет следующий вид:

int ELEMYO::BandPass (int sensorValue, float fl, float fh, int type) 

Здесь sensorValue – текущее значение фильтруемого сигнала, fl – нижняя частота среза в Гц, fh – верхняя частота среза в Гц, type тип фильтра: 0 – фильтр Баттерворта 4-го порядка, 1 – фильтр Чебышева I рода 4-го порядка с пульсациями на уровне 0.5 dB, 2 – фильтр Чебышева I рода 4-го порядка с пульсациями на уровне 1 dB. На выходе функция выдает отфильтрованное значение.
Важные особенности функции BandPass():

1. Частота дискретизации сигнала должна быть примерно в 2 раза выше частоты среза. В противном случае метод не будет работать. При задании низкой частоты дискретизации фильтр автоматически выдаст ошибку.

2. Не следует указывать нижнюю частоту среза ниже 30 Гц. На низких частотах численная реализация метода на Arduino не устойчива, и сигнал может содержать пульсации, уровень которых будет зависеть от частоты дискретизации сигнала.

3. Не следует стоит ставить полосу пропускания меньше 10 Гц (fhfl < 10Гц), это может привести к неустойчивости численной реализации метода.

4. Один вызов функции BandPass() на Arduino Uno в среднем занимает 2040 мкс.

3
Пример работы
На рис. 2 приведен ЭМГ сигнал, отфильтрованный режекторным фильтром на 50 Гц и зашумленный высокочастотной помехой. Также сигнал имеет низкочастотные колебания вследствие движения электродов во время мышечного сокращения. На рис. 3 приведен ЭМГ сигнал, отфильтрованный описанной выше функцией в режиме реального времени. Применялся фильтр Чебышева I рода 4 порядка с полосой пропускания 30-80Гц. Среднее значение отфильтрованного сигнала равно 0.
Пример ЭМГ сигнала при плохом контакте датчика с кожей. Миограмма с помехой 50 Гц
Рис. 2: Сигнал, сильно зашумленный наводкой 100 Гц.
Пример ЭМГ сигнала при плохом контакте датчика с кожей. Миограмма с помехой 50 Гц
Рис. 3: Результат фильтрации сигнала, приведенного на рис. 2.
Пример ЭМГ сигнала при плохом контакте датчика с кожей. Миограмма с помехой 50 Гц
Рис. 4: Сырой и отфильтрованный сигналы, получаемые в режиме реального времени.
Пример ЭМГ сигнала при плохом контакте датчика с кожей. Миограмма с помехой 50 Гц
Рис. 5: Спектр сигнала, приведенного на рис. 2.
Пример ЭМГ сигнала при плохом контакте датчика с кожей. Миограмма с помехой 50 Гц
Рис. 6: Спектр отфильтрованного сигнала (рис. 3).
Из графиков на рис. 5 и рис. 6 видно, что наводка 100 Гц полностью удалена.

Приведенный фильтр является хорошим решением для эффективного выделения требуемой полосы сигнала.
Из приведенных фильтров наиболее эффективным является фильтр Чебышева I рода 4 порядка с пульсациями на уровне 1 dB.
Спасибо за внимание!
Надеемся, что данная статья была Вам полезна. Если у Вас остались какие-либо вопросы - пишите нам на почту info@elemyo.com. Мы обязательно Вам ответим!

Автор обзора: Elemyo