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 | 12 марта 2020

Цифровой режекторный
(полосно-заграждающий) фильтр фона 50/60 Гц.

Основной причиной, приводящей к уменьшению точности измерений параметров низкочастотных сигналов (в том числе ЭМГ/ЭКГ/ЭЭГ сигналов) в лабораторных, производственных и натурных условиях является сетевая помеха 50/60 ГЦ.

Датчики Elemyo обладают максимально высоким коэффициентом подавления синфазной помехи, что позволяет использовать датчики в условиях с очень сильным фоном 50/60 Гц. К сожалению, в некоторых ситуациях помеха все же появляется в сигнале. Примеры таких ситуаций: касание корпуса электрооборудования, силовых проводов, работа в помещении с очень сильной сетевой нагрузкой, индивидуальные параметры кожи, влияющие на контакт датчика. Для подавления помехи в таких случаях предлагается использовать режекторный фильтр на 50/60 Гц. Ниже представлено математическое описание фильтра, а также пример его реализации в Arduino IDE.

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

1
Теория
Рассматриваемый ниже пример режекторного фильтра взят из книги Digital Signal Processing (Third Edition). Authors: LizheTan, JeanJiang. (2019).

Передаточная функция фильтра:
Сигнал с ЭМГ датчика. ЭМГ сигнал, регистрируемый при активности мышц предплечья. Форма сигнала при единичном мышечном сокращении
Масштабный коэффициент для настройки полосового фильтра на единичное усиление полосы пропускания определяется как:
Сигнал с ЭМГ датчика. ЭМГ сигнал, регистрируемый при активности мышц предплечья. Форма сигнала при единичном мышечном сокращении
Разностное уравнение, описывающее рассматриваемый БИХ-фильтр, имеет следующий вид:
Сигнал с ЭМГ датчика. ЭМГ сигнал, регистрируемый при активности мышц предплечья. Форма сигнала при единичном мышечном сокращении
где x(n) – последнее измерение сигнала, а x(n-1) и x(n-2) – два предыдущих измерения, y(n) – текущее отфильтрованное значение сигнала, а y(n-1) и y(n-2) – два предыдущих значения отфильтрованного сигнала.
Пример ЭМГ сигнала при плохом контакте датчика с кожей. Миограмма с помехой 50 Гц
Рис. 1: Амплитудно-частотная характеристика фильтра
(частота дискретизации сигнала 500 Гц, частота режекции 50 Гц, окно режекции 46-54 Гц).

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

int ELEMYO::BandStop (int sensorValue, int f, int BW)
{
	//Вычисление времени с момента предыдущего обращения
         short DT = micros()-T;

        //Новый отсчет времени
 	 T = micros();
            
	//-----Вычисление коэффициентов фильтра-------------------
   	float r = 1 - 0.00000314*BW*DT;
  	float b1 = -2*cos(0.000006283*f*DT);
        float a1 = r*b1; 
 	float K = (1+a1+r*r)/(2+b1);
	//------------------------------------------------------------------------
   	
	 //Новое значение сигнала после фильтрации
 	 Y[2]=K*(sensorValue+b1*X[1]+X[0])-a1*Y[1]-r*r*Y[0];

	 //----Сохранение значений x(n-1), x(n-2), y(n-1), y(n-2) 
 	 Y[0]=Y[1];
 	 Y[1]=Y[2];
 	 X[0]=X[1];
         X[1]=sensorValue;
  	//--------------------------------------------------------------------

  	return (int) Y[2];
}
Здесь sensorValue – текущее значение фильтруемого сигнала, f –частота фильтра (для 50 Гц f = 50; для 60 Гц f = 60), BW – окно режекции фильтра. На выходе функция выдает отфильтрованное значение.

В теле функции происходит автоматический расчет частоты чтения сигнала fs. Чтобы функция работала корректно, важно, чтобы после чтения сигнал сразу подставлялся в данную функцию. Можно производить чтение сигнала с автоматической фильтрацией при помощи команды BandStop (analogRead(…), 50, 4).
Как устроена функция:
1. При вызове функции первым шагом происходит вычисление промежутка времени в мкс, прошедшего с момента предыдущего вызова, и определяющего fs.

2. Вторым шагом происходит вычисление коэффициентов, согласно формулам п1.

3. Вычисляется текущее отфильтрованное значение сигнала y .

4. Сохраняются значения x(n-1), x(n-2), y(n-1), y(n-2), которые будут использованы при следующем вызове функции.

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

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

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