ЭкоСреда ecoins - Фильтры

Фильтры, исследования фильтров, быстродействие разных фильтров

Пользовательские блоки дополняющие возможности стандартных блоков из разделов Математика и Алгебра, а так-же различные цифровые фильтры
Правила форума
Рекомендации по размещению блоков:
Автор блока создает подробное описание блока, отличие от подобных(если есть на данный момент).Сложные блоки очень желательно с примерами.
При выходе новых версий редактирует/дополняет свой первый пост с указанием даты, версии, причины.
В каждой теме обсуждается только выложенный автором блок - баги, возможность (или предложение) доработки и прочие хотелки.
Свои блоки, переработанные, с другими библиотеками, протоколами и т.д.- размещаем либо сами отдельно, либо обсуждаем и дорабатываем в форуме Разработка блоков.
Пользователи улучшив блок автора и проверив его работоспособность - могут обратиться к автору или модераторам с просьбой добавить их версию блока в первое сообщение темы.
Ответить
ecoins
Полковник
Сообщения: 1807
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 315
Откуда: Шатура
Имя: Энвер

ЭкоСреда ecoins - Фильтры

#1

Сообщение ecoins » 07.09.2022{, 02:55}

======Фильтры=====
Доработаны и созданы блоки фильтров:
1.Ускоренный фильтр медианный 3-го порядка.
2.Медианный фильтр N-го порядка.
3.Фильтр бегущего среднего.
Работа фильтров обсуждалась на форуме.
Перечисленные фильтры хорошо описаны https://alexgyver.ru/lessons/filters/
4.Фильтр критических отклонений - на выходе фильтра вырабатывается событие при скачкообразном изменении входного значения.
Фильтры поддерживают форматы byte,word,long,float.
По входу EN (0->1) выполняется сброс фильтра с заполнением буфера последним значением.
Фильтры могут соединяться последовательно.
Каждый фильтр имеет выход времени работы фильтра(подключаемый). который позволяет получить объективное измерение быстродействия фильтра при разных типов переменных, размера выборки и пр.
В фильтре имеется опция, позволяющая выводить на консоль (монитор порта) протокол работы фильтра с выводом промежуточных значений и буфера.
Указанная опция помогает при отладке и также помогает лучше понять работу фильтра.
Ниже тесты фильтров с выводом результатов на lcd.
Test_ADC_filter_median3.zip
(1.18 МБ) 18 скачиваний
Test_ADC_filter_medianN.zip
(1.19 МБ) 12 скачиваний
Test_ADC_filter_ringAverage.zip
(1.17 МБ) 13 скачиваний
Test_ADC_filter_critical_ringAverage.zip
(1.46 МБ) 14 скачиваний
Быстродействие-фильтров.jpg
Основным выводом проведенных измерений является то, что фильтры можно безболезненно использовать в проектах даже с большими выборками - они работают очень быстро.
------------
По мере необходимости будут добавляться новые фильтры.

ecoins
Полковник
Сообщения: 1807
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 315
Откуда: Шатура
Имя: Энвер

ЭкоСреда ecoins - Фильтры

#2

Сообщение ecoins » 07.09.2022{, 02:58}

Тест совмещенного фильтра критических отклонений и бегущего среднего:
Test_ADC_filter_critical_ringAverage_simple.zip
(1.38 МБ) 12 скачиваний
СпойлерПоказать
Проект critical_ringAverage.jpg
Результаты выводятся на lcd и плоттер Arduino IDE.

Аватара пользователя
Rovki
Полковник
Сообщения: 4491
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 237
Откуда: Чехов
Имя: Анатолий
Контактная информация:

ЭкоСреда ecoins - Фильтры

#3

Сообщение Rovki » 07.09.2022{, 08:50}

А на esp8266 ,будет работать? что то в таблице не увидел
Электронщик до мозга костей и не только

ecoins
Полковник
Сообщения: 1807
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 315
Откуда: Шатура
Имя: Энвер

ЭкоСреда ecoins - Фильтры

#4

Сообщение ecoins » 07.09.2022{, 09:06}

Rovki писал(а):
07.09.2022{, 08:50}
А на esp8266 ,будет работать? что то в таблице не увидел
Да, будет. Просто на испытаниях разложил пять стендов, а ESP8266 не использовал.
Отчасти внутренне продвигая мысль о полном отказе от ESP8266. Сейчас третьей волной возвращаюсь к тестированию ESP32-C3 - получил много разных плат м модулей на этой основе.
Можете проверить самостоятельно (тесты выложены) - в силу особенности архитектуры ESP8266 должен показать лучшие результаты по быстродействию, чем ESP32S.
Повторюсь, что результаты исследований меня удивили, если не поразили - фильтры можно и нужно использовать широко, там где это надо, в том числе и с большми выборками - 25, 50, 100,200. Выше заложены ограничения в блоках, но можно и изменить.

Аватара пользователя
Dryundel
Полковник
Сообщения: 2061
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 628
Откуда: Ярославль
Имя: Андрей
Контактная информация:

ЭкоСреда ecoins - Фильтры

#5

Сообщение Dryundel » 07.09.2022{, 09:16}

О! Супер! Даже говорить ничего не буду. Критика не уместна.
Только спрошу.
Rovki, как результат? Хорошо фильтрует? Разобрался что к чему? Удалось интегрировать в Ваш проект?

Отдельная благодарность ecoins за создание отдельной профильной темы для группы блоков!
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

Аватара пользователя
Rovki
Полковник
Сообщения: 4491
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 237
Откуда: Чехов
Имя: Анатолий
Контактная информация:

ЭкоСреда ecoins - Фильтры

#6

Сообщение Rovki » 07.09.2022{, 09:20}

Это вы ранние птички , а мне надо принять кофффе, ваннну..., найти место на столе, снова собрать стенд :D . Как сделаю ,доложу
Электронщик до мозга костей и не только

Аватара пользователя
Dryundel
Полковник
Сообщения: 2061
Зарегистрирован: 22.05.2017{, 23:15}
Репутация: 628
Откуда: Ярославль
Имя: Андрей
Контактная информация:

ЭкоСреда ecoins - Фильтры

#7

Сообщение Dryundel » 07.09.2022{, 10:30}

Rovki писал(а):
07.09.2022{, 09:20}
Как сделаю ,доложу
Ок. Ждем с нетерпением.
PS
Речь идет не о тесте тестового примера, а о понимании что к чему и интеграции в Ваш проект.
Пользовательские блоки на сайте FLPROG - BLOCK
Выразить благодарность

Аватара пользователя
Rovki
Полковник
Сообщения: 4491
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 237
Откуда: Чехов
Имя: Анатолий
Контактная информация:

ЭкоСреда ecoins - Фильтры

#8

Сообщение Rovki » 07.09.2022{, 10:59}

Dryundel писал(а):
07.09.2022{, 10:30}
Rovki писал(а):
07.09.2022{, 09:20}
Как сделаю ,доложу
Ок. Ждем с нетерпением.
PS
Речь идет не о тесте тестового примера, а о понимании что к чему и интеграции в Ваш проект.
естественнно :smile225:
Электронщик до мозга костей и не только

ecoins
Полковник
Сообщения: 1807
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 315
Откуда: Шатура
Имя: Энвер

ЭкоСреда ecoins - Фильтры

#9

Сообщение ecoins » 07.09.2022{, 11:01}

Спасибо Rovki, выявлена ошибка при работе c ESP8266(правили систему ввода-вывода для новой библиотеки 1-Wire и вновь всплыли особенности архитектуры и используемого компилятора. Похоже поддержка ESP8266 от производителя чипов отстает, возможно просто утрачен интерес к разработке, которую они объявили устаревшей).
Новую версию библиотеки нужно скачать заново - там исправлена (скорее применена "затычка", но работает и в т.ч. 1-Wire) для ESP8266.
Заодно не помешает скачать новые блоки - там исправления по сенсору HC-SR04 в части работы со встроенным фильтром медианным.
-----
Проверил ESP8266 на фильтре ringAverage - действительно быстрее. Это имеет больше исследовательский интерес, поскольку все показатели в пределах нескольких микросекунд.

ecoins
Полковник
Сообщения: 1807
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 315
Откуда: Шатура
Имя: Энвер

ЭкоСреда ecoins - Фильтры

#10

Сообщение ecoins » 07.09.2022{, 12:44}

B еще проверил на ESP32-C3(тестирую)
ringAverage(выборка 32) int16_t <3; float <3;

ecoins
Полковник
Сообщения: 1807
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 315
Откуда: Шатура
Имя: Энвер

ЭкоСреда ecoins - Фильтры

#11

Сообщение ecoins » 08.09.2022{, 17:13}

Тест для ESP8266
с "упором" на стандартные блоки (по запросу на тестирование)
Блоки ecoins - фильтры.
Блоки ecoins - вывод на консоль и lcd HD44780 i2c(адрес 39): платы 3,4 не обязательны и могут быть убраны.
Test_ADC_filter_ringAverage.zip
(1.17 МБ) 4 скачивания
Проект_Test_ESP8266_filter_cric_ring_v01.png

ecoins
Полковник
Сообщения: 1807
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 315
Откуда: Шатура
Имя: Энвер

ЭкоСреда ecoins - Фильтры

#12

Сообщение ecoins » 09.09.2022{, 01:30}

Развитие теста для ESP8266
После обсуждения с Rovki пришли к выводу развести функции разрешения работы блока и сброс фильтра(заполнение буфера фильтра) ringAverage() через раздельные входы.
Теперь блок имеет раздельные подключаемые входы EN и reset.
Соответственно доработан блок.
Test_ESP8266_filter_cric_ring_v02.zip
(613.11 КБ) 5 скачиваний
Проект critical_ringAverage_v02.png
Новый блок можно брать из теста.
Возможны будут новые решения, возможно комбинированный блок из трех тестов.
Для ESP8266: блок из FLProg ограничивает частоту опроса ADC периодом 500мс. Подробности в надписи в тесте.

Gordon0007
Сержант
Сообщения: 137
Зарегистрирован: 19.04.2018{, 13:37}
Репутация: 13
Имя: Павел

ЭкоСреда ecoins - Фильтры

#13

Сообщение Gordon0007 » 09.09.2022{, 09:43}

Доброго дня, появился вопрос. Если я правильно понимаю то все это сделано на основе сбора данных?
Если это так и у меня буфер на 50 значений и опрос происходит раз в 10 секунд, то я получу более менее корректные значения спустя 500 секунд? Или я чего то не понимаю?

Аватара пользователя
Rovki
Полковник
Сообщения: 4491
Зарегистрирован: 22.04.2016{, 17:25}
Репутация: 237
Откуда: Чехов
Имя: Анатолий
Контактная информация:

ЭкоСреда ecoins - Фильтры

#14

Сообщение Rovki » 09.09.2022{, 09:47}

Провел визуальные испытания фильтров для цифрового индикатора от двух авторов ecoins, Dryundel,
Оба показали себя замечательно . Фильтры проверял при одинаковых частотах тактирования и глубине стека (32). У ecoins, это фильтр скользящее среднее ,у Dryundel, экспоненциальный . + медианный фильтр последовательно, в начале
Особое требование к фильтрам- "мгновенный" вывод входного напряжения на выход фильтра при старте обеспечен в обоих фильтрах , Замечательно.
В фильтре от ecoins, удобно и широко представлены настройки фильтра ,возможность работы с разными типа данных и задание глубины стека в широком диапазоне. Во втором фильтре настроек меньше (задача такая не ставилась) . Dryundel, как автор сам выложит свои фильтры, если посчитает нужным.
Совместными усилиями созданы новые фильтры с новыми возможностями(свойствами) для своих областей применения. Всем СПАСИБО!

Отправлено спустя 7 минут 51 секунду:
PS Сами фильтрующие свойства фильтров и их сравнение, а так же код не исследовал, на предмет оптимальности. :smile427:

Отправлено спустя 5 минут 50 секунд:
В принципе, для такого фильтра можно не делать отдельный вход заполнения , а сделать внутри- при старте всегда заполнение буфера значением со входа :smile37: тем самым компенсировать задержку фильтра при включении автоматически
Электронщик до мозга костей и не только

ecoins
Полковник
Сообщения: 1807
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 315
Откуда: Шатура
Имя: Энвер

ЭкоСреда ecoins - Фильтры

#15

Сообщение ecoins » 09.09.2022{, 10:36}

Gordon0007 писал(а):
09.09.2022{, 09:43}
Доброго дня, появился вопрос. Если я правильно понимаю то все это сделано на основе сбора данных?
Если это так и у меня буфер на 50 значений и опрос происходит раз в 10 секунд, то я получу более менее корректные значения спустя 500 секунд? Или я чего то не понимаю?
Не так.
Медианные фильтры не усредняют, а выбирают средний результат.
Бегущего среднего при первом включении заполняет входным значением, а потом только усредняет. И делает это быстро - в каждом цикле все элементы буфера не складываются. При необходимости по переднему фронту reset (подключаемый вход) можно повторно заполнить буфер входным значением. Можно реализовать любую логику средствами FLprog. Можно и использовать предложенный фильтр критических отклонений.
-----------
Почти всегда полезен медианный фильтр 3-го порядка - быстрый и отбрасывает выбросы.
Затем может быть полезен фильтр медианный N- го порядка - тоже быстрый.
И для окончательного сглаживания (если это надо) - фильтр бегущего среднего с небольшим размером буфера.
Так мне кажется.

Kot
Рядовой
Сообщения: 32
Зарегистрирован: 09.10.2021{, 11:54}
Репутация: 1
Имя: Дима

ЭкоСреда ecoins - Фильтры

#16

Сообщение Kot » 22.09.2022{, 12:31}

там какая то библиотека нужна ?
2022-09-22_162943.png

ecoins
Полковник
Сообщения: 1807
Зарегистрирован: 12.02.2016{, 11:40}
Репутация: 315
Откуда: Шатура
Имя: Энвер

ЭкоСреда ecoins - Фильтры

#17

Сообщение ecoins » 22.09.2022{, 12:46}

Kot писал(а):
22.09.2022{, 12:31}
там какая то библиотека нужна ?
#include "RT_HW_BASE.h"
Ниже скетч из проекта с одним блоком фильтра - компилируется:
Scketch_Median3.PNG

Ответить

Вернуться в «Блоки для рассчетов и цифровые фильтры»