Медианная фильтрация значений ДУТ
Фильтрация позволяет сглаживать значения датчика уровня топлива для исключения выбросов данных (резких скачков топлива: роста или спада), которые могут возникать из-за разных факторов. К таким факторам относятся вибрации двигателя, неровности дороги, ускорение и торможение, подъемы и спуски, точность тарировки, форма и материал бака, примеси в топливе, засоры в баке и топливной системе, перепады температуры и т. д.
В свойствах датчика уровня топлива доступно два типа фильтрации: медианная и адаптивная медианная. Разница между ними заключается в том, что при выборе первого типа пользователю необходимо самостоятельно указать подходящую степень фильтрации. Для адаптивной медианной фильтрации степень указывать не нужно, так как она подбирается автоматически на основе данных от объекта.
Далее в статье рассматривается обычная медианная фильтрация (не адаптивная).
Степень фильтрации
Степень фильтрации определяет, какое количество сообщений должно формировать окно фильтра, то есть использоваться для вычисления сглаженного значения уровня топлива.
Чем выше степень фильтрации, тем сильнее сглаживаются данные.
Если степень фильтрации равна 0, то сглаживание проводится по трем сообщениям. В остальных случаях количество сообщений, которые формируют окно фильтра, вычисляется следующим образом:
- если в поле указано нечетное число от 1 до 255, то оно умножается на 5;
- если указано четное число от 2 до 254, то оно умножается на 5 и из результата вычитается 1.
Таким образом, чем больше степень фильтрации, тем больше данных используется для вычисления сглаженного значения.
Подбор подходящей степени фильтрации
Степень фильтрации необходимо подбирать с учетом того, как часто устройство генерирует сообщения и насколько точные данные приходят от датчика уровня топлива. Чем точнее данные, тем меньшая степень фильтрации нужна для их сглаживания.
Чтобы подобрать подходящий уровень фильтрации, сделайте следующее:
-
Создайте шаблон отчета с графиком уровня топлива. Для этого добавьте в шаблон отчета график типа Обычный и выберите для него пункты Уровень топлива и Обработанный уровень топлива.
-
Выполните этот отчет по необходимому объекту, чтобы увидеть его график уровня топлива.
-
Постепенно увеличивайте степень фильтрации, начиная с 0, и выполняйте отчет снова. Чтобы изменить степень фильтрации, не переходя на другую вкладку, используйте иконку
рядом с именем объекта для перехода к его свойствам.
При проверке результата рассматривайте интервалы за несколько суток с заправками и сливами.
Пример графика при степени фильтрации, равной 0:
Пример графика при степени фильтрации, равной 1:
-
Остановитесь на той степени фильтрации, при которой линия Обработанный уровень топлива не имеет резких скачков, но при этом не значительно отличается от средних значений линии Уровень топлива.
Пример графика при степени фильтрации, равной 2:
Используйте наименьшую степень фильтрации, которая вас устраивает. Слишком высокая степень фильтрации может исказить показания ДУТ.
Как правило, если для достижения подходящего сглаженного результата вам приходится использовать степень фильтрации более 10, это значит, что входящие показания ДУТ недостаточно точны. Поэтому даже после применения фильтрации результаты могут быть недостаточно точными. В таком случае попробуйте исключить некоторые факторы, перечисленные в начале статьи (перетарируйте бак, устраните засор, поставьте второй ДУТ и т. п.).
Алгоритм медианной фильтрации
При медианной фильтрации сглаживание данных выполняется для каждого сообщения по следующему алгоритму:
-
Определяется окно фильтра, то есть количество сообщений, которые будут использоваться для получения сглаженного значения. Это количество зависит от степени фильтрации. Например, если степень фильтрации равна 2, то ширина окна фильтра составляет 9 сообщений.
-
Окно фильтра размещается таким образом, чтобы сообщение, для которого вычисляется сглаженное значение, находилось в центре. То есть до и после него должно стоять равное количество сообщений. При этом учитываются только те сообщения, в которых содержатся валидные значения уровня топлива.
Например, на изображении ниже вы можете видеть, как размещается окно фильтра, ширина которого составляет 9 сообщений. Синим цветом выделено сообщение, для которого вычисляется сглаженное значение уровня топлива. Оно является центром окна. Зеленым цветом обозначены сообщения, которые формируют левую и правую части окна; красным — сообщение без данных об уровне топлива (не учитывается); черным — сообщения, которые не входят в окно фильтра.
-
Значения всех сообщений из окна фильтра, включая центральное, сортируются в порядке возрастания. Например, если в окно фильтра входят следующие значения:
41, 52, 49, 46, 50, 42, 42, 39, 47
то в порядке возрастания получаем:
39, 41, 42, 42, 46, 47, 49, 50, 52 -
Определяется значение в центре полученной цепочки (в примере выше — 46). Оно будет считаться сглаженным значением уровня топлива для рассматриваемого сообщения.
Сглаживание в реальном времени
При обработке данных в режиме онлайн сглаженное значение рассчитывается только тогда, когда придет необходимое количество сообщений для заполнения правой части окна фильтра. Чем большая степень фильтрации указана в свойствах ДУТ и чем реже устройство присылает данные, тем больше времени это займет.
Пример. В свойствах ДУТ указана степень фильтрации 2, устройство присылает данные раз в минуту. Так как ширина окна фильтра составляет 9 сообщений (согласно формуле 2×5-1), то слева и справа от сглаживаемого значения должно быть по 4 сообщения. Следовательно, для заполнения правой части окна фильтра и получения сглаженного значения необходимо подождать 4 минуты.
Сглаживание в отчетах
Если рассматриваемое сообщение стоит в начале интервала отчета и до него недостаточно сообщений, чтобы сформировать левую часть окна фильтра, то вместо них используется значение первого сообщения на интервале необходимое количество раз. Если рассматриваемое сообщение стоит в конце интервала и после него недостаточно сообщений, чтобы сформировать правую часть окна, то используется значение последнего сообщения необходимое количество раз.
Пример. На изображении ниже вычисляется сглаженное значение для сообщения 7.
В интервал отчета входят сообщения с 5 по 9, а для формирования окна фильтра не хватает по два сообщения в левой и правой части. В этом случае окно фильтра достраивается следующим образом: вместо сообщений 3 и 4 используется значение из сообщения 5, а вместо 10 и 11 — значение из сообщения 9.
Так как реальные значения из сообщений 3, 4, 10 и 11 отличаются от используемых в окне фильтра (сравните серую и черную линии), то итоговое сглаженное значение для сообщения 7 будет менее точным.
Таким образом, сглаженный результат будет менее точным в начале и в конце интервала, если сразу до и после этого интервала данные от ДУТ изменялись.
Если построить отчет за относительно большой интервал времени, а потом разбить этот интервал на части и по ним тоже построить отчеты, то сглаженный результат в конце и в начале малых интервалов может не совпадать со значениями в отчете за большой интервал в это же время.
Пример. Пользователь выполняет отчет за неделю с 1 по 7 января. В нем 2 января в 00:00:00 сглаженное значение ДУТ составляет 300 литров. Затем пользователь выполняет отчет только за 2 января. В нем сглаженное значение в 00:00:00 равно 299 литрам.