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

Прототипы передаточных функций фильтров имеют следующий вид:

  • Баттерворта 6 порядка:
Сигнал с ЭМГ датчика. ЭМГ сигнал, регистрируемый при активности мышц предплечья. Форма сигнала при единичном мышечном сокращении
  • Чебышева 6 порядка с пульсациями на уровне 0.5 dB:
Сигнал с ЭМГ датчика. ЭМГ сигнал, регистрируемый при активности мышц предплечья. Форма сигнала при единичном мышечном сокращении
  • Чебышева 6 порядка с пульсациями на уровне 1 dB:
Сигнал с ЭМГ датчика. ЭМГ сигнал, регистрируемый при активности мышц предплечья. Форма сигнала при единичном мышечном сокращении
Hp(s) можно представить в общем виде:
Сигнал с ЭМГ датчика. ЭМГ сигнал, регистрируемый при активности мышц предплечья. Форма сигнала при единичном мышечном сокращении
Преобразуем прототип передаточной функции Hp(s) с учетом пропускания низких частот:
Сигнал с ЭМГ датчика. ЭМГ сигнал, регистрируемый при активности мышц предплечья. Форма сигнала при единичном мышечном сокращении
f - частота среза в Гц, fs частота дискретизации сигнала в Гц. Используя билинейное преобразование, получаем передаточную функцию фильтра:
Сигнал с ЭМГ датчика. ЭМГ сигнал, регистрируемый при активности мышц предплечья. Форма сигнала при единичном мышечном сокращении
После перемножения получаем передаточную функцию в виде:
Сигнал с ЭМГ датчика. ЭМГ сигнал, регистрируемый при активности мышц предплечья. Форма сигнала при единичном мышечном сокращении
В результате получаем разностное уравнение, описывающее рассматриваемый БИХ-фильтр:
Сигнал с ЭМГ датчика. ЭМГ сигнал, регистрируемый при активности мышц предплечья. Форма сигнала при единичном мышечном сокращении
где – x(n) последнее измерение сигнала, а x(n-1)…x(n-6) – шесть предыдущих последовательных измерений сигнала, y – y(n) текущее отфильтрованное значение сигнала, а y(n-1)…y(n-6) – шесть предыдущих последовательных значений отфильтрованного сигнала.

2
Реализация
Рассмотренный в п1. фильтр нижних частот реализован в библиотеке «ELEMYO.h» для Arduino. Функция для фильтрации является методом класса ELEMYO и имеет следующий вид:

int ELEMYO::LowPass (int sensorValue, float fh, int type)

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

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

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

3. Один вызов функции LowPass() на Arduino Uno в среднем занимает 1240 мкс.

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

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

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