цифровая электроника
вычислительная техника
встраиваемые системы

 
» » Как очистить зашумленные данные датчика с помощью фильтра скользящего среднего



Как очистить зашумленные данные датчика с помощью фильтра скользящего среднего

Автор: Mike(admin) от 5-04-2022, 23:55

Датчики и микроконтроллеры позволяют нам превращать явления реальной жизни в простые числовые сигналы, с которыми мы можем работать. Однако необработанных выходных данных датчика может быть недостаточно для извлечения нужной информации. Реальное оборудование чувствительно к шуму и другим помехам из окружающей среды.


Как очистить зашумленные данные датчика с помощью фильтра скользящего среднего

Фильтр скользящего среднего представляет собой простой метод, который инженеры и радиолюбители могут использовать для сглаживания сигнала, устранения шума и упрощения сигнала на выходе датчика. В данном материале представлена концепция фильтра скользящего среднего и способы его использования в проектах.


Что такое фильтр скользящего среднего


Фильтр скользящего среднего – это базовый метод, который можно использовать для устранения шума (случайных помех) из сигнала. Это упрощенная форма фильтра нижних частот. Прохождение сигнала через этот фильтр удалит информацию о более высоких частотах. В то время как традиционный фильтр нижних частот можно эффективно использовать для фокусировки на желаемой частоте сигнала, фильтр скользящего среднего значения представляет собой более прямой подход к простому «сглаживанию» сигнала. Идея проста: фильтр скользящего среднего берет среднее значение последних «M» записей в сигнале и усредняет их для получения выходных данных.


Единственным реальным параметром, которым можно управлять в фильтре скользящего среднего, является размер окна, то есть количество входов предыдущих сигналов, которые можно усреднить вместе. Если окно слишком маленькое, сигнал может оказаться очень зашумленным. Однако, если окно слишком велико, важная информация в сигнале может быть потеряна. Выбор правильного размера окна – это вопрос проб и ошибок.


Код фильтра скользящего среднего для Arduino


Вот простая реализация фильтра скользящего среднего для Arduino с размером окна 5. Обратите внимание, что существует множество способов реализации фильтра скользящего среднего. Это всего лишь один из них.



#define IN_PIN A0
#define WINDOW_SIZE 5

int INDEX = 0;
int VALUE = 0;
int SUM = 0;
int READINGS[WINDOW_SIZE];
int AVERAGED = 0;

void setup() {
  pinMode(IN_PIN, INPUT);
  Serial.begin(9600);
}

void loop() {
  
  SUM = SUM - READINGS[INDEX];       // Удалить самую старую запись из суммы
  VALUE = analogRead(IN_PIN);        // Чтение следующего значения датчика
  READINGS[INDEX] = VALUE;           // Добавить новейшее значение в окно
  SUM = SUM + VALUE;                 // Добавить новейшее значение к сумме
  INDEX = (INDEX+1) % WINDOW_SIZE;   // Увеличим индекс и обернем его до 0, если он превышает размер окна.

  AVERAGED = SUM / WINDOW_SIZE;      // Разделим сумму окна на размер окна для получения результата

  Serial.print(VALUE);
  Serial.print(",");
  Serial.println(AVERAGED);
  
  delay(25); 
}

Далее приведен соответствующий график вывода в последовательном мониторе.


Как очистить зашумленные данные датчика с помощью фильтра скользящего среднего

Синий сигнал – это необработанный выходной сигнал датчика с присутствующим шумом. Когда значение датчика не меняется, присутствуют высокочастотные составляющие сигнала. Красный отфильтрованный сигнал, однако, свободен от шума.


Как работает фильтр скользящего среднего


Код отслеживает сумму пяти последних значений в переменной SUM. Пять самых последних значений находятся в массиве READINGS, так что можно получить доступ к самому старому из них и удалить его из суммы при поступлении нового.


Когда поступает новое значение, оно добавляется к сумме, а индекс (позиция в массиве) увеличивается на единицу. Оператор модуля (%) используется для возврата индекса к нулю, если индекс превышает размер окна, поскольку оператор модуля возвращает целочисленный остаток от деления одного числа на другое.


Дважды проверяйте размер окна


Обратите внимание, что в результате вычислений отфильтрованный сигнал немного отстает от необработанного входного сигнала. Если размер окна слишком велик, этот эффект может стать заметным. Отфильтрованный сигнал будет сильно отставать от необработанного сигнала, и из сигнала будет потеряно слишком много информации, как показано далее с размером окна 50.


Как очистить зашумленные данные датчика с помощью фильтра скользящего среднего

Когда размер окна слишком велик, отфильтрованный сигнал заметно отстает от необработанного сигнала, и важная информация теряется. Пики отфильтрованного сигнала намного меньше, чем пики необработанного сигнала. Даже если шум будет удален, важная информация также будет удалена.




© digitrode.ru


Теги: фильтр




Уважаемый посетитель, Вы зашли на сайт как незарегистрированный пользователь.
Мы рекомендуем Вам зарегистрироваться либо войти на сайт под своим именем.

Комментарии:

Оставить комментарий