БИХ-фильтр
Фильтр с бесконечной импульсной характеристикой (БИХ, IIR) вычисляет новый выход из входного отсчёта и своих прошлых выходов. Простейший вариант — экспоненциальное сглаживание — встроен в датчики давления Bosch и легко пишется в прошивке.
Обновлено Редакция GAW
БИХ-фильтр (фильтр с бесконечной импульсной характеристикой, infinite impulse response, IIR) — цифровой фильтр, у которого новый выход зависит не только от входных отсчётов, но и от предыдущих выходов. Из-за этой обратной связи отклик на одиночный импульс теоретически длится бесконечно, отсюда название.
Самый распространённый БИХ-фильтр — первого порядка, или экспоненциальное сглаживание. В таком виде он встроен в барометры Bosch BMP280 и BME280:
где xn — новый отсчёт АЦП, yn−1 — прошлый выход фильтра, c — коэффициент. Чем он больше, тем сильнее сглаживание и тем медленнее отклик. Bosch приводит, за сколько отсчётов выход проходит 75 % скачка:
| Коэффициент c | Отсчётов до 75 % скачка |
|---|---|
| 1 (фильтр выключен) | 1 |
| 2 | 2 |
| 4 | 5 |
| 8 | 11 |
| 16 | 22 |
Фильтр подавляет кратковременные возмущения — Bosch приводит в пример хлопок двери или порыв ветра, — не требуя от микроконтроллера ни вычислений, ни лишних чтений по шине. По сути это цифровой аналог RC-фильтра нижних частот: коэффициент играет роль постоянной времени, выраженной в отсчётах. Вместе с передискретизацией он снижает шум измерения; как сочетать настройки в датчиках давления — в статье «Датчики давления BMP280, BME280 и BMP390».
Частые вопросы
Чем БИХ-фильтр отличается от скользящего среднего?
Скользящее среднее — фильтр с конечной импульсной характеристикой: он усредняет последние N отсчётов, и для этого их нужно хранить. БИХ-фильтр хранит только прошлый выход и учитывает всю историю с экспоненциально убывающими весами — поэтому он экономен по памяти и вычислениям, но его отклик на скачок никогда формально не заканчивается.
Как выбрать коэффициент фильтра?
Компромиссом между шумом и скоростью. По таблице Bosch для BMP280 с коэффициентом 4 выход проходит 75 % скачка за 5 отсчётов, с 16 — за 22. Шум давления в режиме ultra high resolution падает при этом с 1,3 Па без фильтра до 0,5 и 0,2 Па. Для высотомера нужен быстрый отклик, для метеостанции — сильное сглаживание.
Как написать такой фильтр в прошивке?
Одной строкой: y = y + (x − y) / c, где x — новый отсчёт, y — выход, c — коэффициент. Это та же формула Bosch, переписанная иначе. Если c — степень двойки, деление в целочисленной арифметике заменяют сдвигом; при первом отсчёте выход инициализируют входом, чтобы не ждать разгона от нуля.
Источники
- Bosch Sensortec. BMP280 Digital Pressure Sensor: Data sheet (BST-BMP280-DS001-26, revision 1.26, October 2021) — разд. 3.3.3: data_filtered = (data_filtered_old · (c − 1) + data_ADC) / c; табл. 6 — число отсчётов до 75 % скачка: 1, 2, 5, 11, 22 при c = 1, 2, 4, 8, 16; табл. 8 — шум давления с фильтром
- Bosch Sensortec. BME280 Combined humidity and pressure sensor: Data sheet (BST-BME280-DS001-24, February 2024) — тот же фильтр для давления и температуры; сценарии с выбором коэффициента
Нашли ошибку?
Смотрите также
- Датчики давления BMP280, BME280, BMP390Точность, подключение по I²C и SPI, режимы, фильтр, компенсация, высота по давлению
- ПередискретизацияOversampling: дополнительные биты АЦП усреднением
- RC-фильтр и постоянная времениЧастота среза, подбор R и C, время заряда
- Постоянная времениτ = RC: скорость заряда конденсатора и частота среза