Фильтры нижних частот (ФНЧ) – это электронные фильтры, которые позволяют отфильтровывать высокочастотные данные и оставлять низкочастотные данные. Они могут быть полезны в приложениях, где вы не беспокоитесь о шуме и наблюдаете постоянные изменения в измерениях сигнала, которые согласуются во времени. ФНЧ могут быть очень мощным методом повышения эффективности в приложениях с более низкими частотами.

К счастью, в самой базовой форме фильтр нижних частот очень просто реализовать, и в данном примере мы покажем, как запрограммировать и настроить его с нуля на Python (точнее на MicroPython, например, для Raspberry Pi Pico) и продемонстрируем, как он работает.
Для примера мы будем получать данные с акселерометра в составе датчика MPU6050. Сразу приведем код на MicroPython, а затем объясним его.
#Native libs
from machine import Pin, I2C
import math
import time
from time import sleep
from imu import MPU6050
i2c = I2C(0, sda=Pin(0), scl=Pin(1), freq=400000)
sensor = MPU6050(i2c)
filtered_ax = 0
alpha = 0.85 # must be between 0 and 1 inclusive
def low_pass_filter(prev_value, new_value):
return alpha * prev_value + (1 - alpha) * new_value
while True:
ax_new = sensor.accel.x
filtered_ax = low_pass_filter(filtered_ax, ax_new)
print("filtered_ax: ", filtered_ax, "raw ax", ax_new)
time.sleep(1/10)
Сначала мы создаем связь с объектом MPU6050, который является датчиком, с которого мы получаем данные. Во второй части кода мы инициализируем альфа-значение и создаем функцию фильтра нижних частот. Концепция проста: чем выше значение альфа, тем больше мы доверяем предыдущему значению данных, в данном случае нашему ускорению в направлении x. Это означает, что чем выше значение альфа, тем больше фильтрации мы будем выполнять и получим более плавный сигнал. Будьте осторожны, так как слишком высокое значение альфа может сделать ваше приложение слишком медленным, чтобы реагировать на изменения. Это может быть эмпирическим выбором при принятии решения о том, какое значение альфа использовать.
Наконец, мы запускаем цикл while, чтобы получить реальные значения датчиков, и подключаем их к фильтру, чтобы выдать новое отфильтрованное значение. Этот цикл повторяется каждые 1/10 секунды. Вы можете увеличить частоту измерения, если хотите. Этот код и фильтр можно применить к любому потоку данных или языку программирования, и это низкочастотная фильтрация в самом простом виде.
После запуска данного ФНЧ на наших данных ускорения мы получили график, похожий на следующий:

Здесь более резкий сигнал – это необработанный сигнал, а более гладкий сигнал – после того, как он был подан на фильтр нижних частот.
© digitrode.ru