Использование коэффициентов при настройках топливного датчика

Материал из wiki.truck-control.info
Перейти к: навигация, поиск

Содержание

Резюме

Для тех, кто не утруждает себя чтением длинных статей (по собственному опыту знаю, что Homo Internetus читает все по-диагонали) приведу описание коэффициентов, определяющих работу топливных фильтров. Из можно изменить в настройках трекера (Настройки - Системные переменные).

Итак:

FilterType=X - тип фильтра для сглаживания топлива (X = 1 - простое среднее, 2 - Калмана, 3 - Медианный);
MedianeFilterType=Y - разновидность медианного фильтра при сглаживании (Y=0 - классический медианный; 1 - с усреднением медианного окна);
FuelDataAVGStages=zzz - количество ступеней фильтрации для фильтра "простое среднее";
Kalman_Q=0.5 - коэффициент Q для фильтра Калмана;
Kalman_R=15 - коэффициент R для фильтра Калмана;
Kalman_F=1 - коэффициент F для фильтра Калмана;
Kalman_H=1 - коэффициент H для фильтра Калмана;
MedianeWindowSize=3 - размер окна для медианных фильтров;
KFillIn=2 - в случае, если текущий мгновенный приход топлива (увеличение его уровня) превышает в KFillIn раз (по умолчанию - в два раза) среднее значение прихода топлива, то в этом месте мы фиксируем заправку;
KFillOut=2 - в случае, если текущий мгновенный расход превышает в KFillOut раз (по умолчанию - в два раза) среднее значение расхода топлива, то в этом месте мы фиксируем слив;
FuelSpeedFilterLimit=5 - если скорость движения ТС превышает это значение, то анализ данных на этом участке не производим;
FuelVolumeFilterLimit=20 - минимальная заправка или слив топлива, которые заносятся в отчет;
FuelVolumeFilterLimit1=20 - максимальный разброс между парами с противоположным знаком, когда они взаимоуничтожаются;

По последним данным, наилучшими настройками для ТС, которые двигаются по разбитым дорогам являются следующие:

FuelDataAVGStages=50
FuelSpeedFilterLimit=200
FuelVolumeFilterLimit=15
FuelVolumeFilterLimit1=15
FilterType=3
Kalman_Q=0.5
Kalman_R=15
Kalman_F=1
Kalman_H=1
MedianeWindowSize=50
MedianeFilterType=0
KFillIn=0.2
KFillOut=100

Предлагаю проголосовать за то, что бы сделать эти значения в системе по-умолчанию

Использование коэффициентов при настройках топливного датчика

Не секрет, что обработка данных с датчика уровня топлива (ДУТ) является непростой задачей. Необходимо учитывать такие факторы, как колебания уровня топлива в связи с движением автомобиля, в связи с расширением топливного бака при нагреве и охлаждении, а также, собственное расширение топлива при нагреве и охлаждении. Кроме того, нужно помнить, что автомобиль на стоянке может встать под углом, мобильный подъемный кран может встать на упоры, а трактор в поле будет просто неимоверно колбаситься при движении.

Проблем добавляют и плоские баки, у которых отношение высоты к площади основания бака является небольшой величиной.

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

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

Процесс обработки данных с топливного датчика выглядит следующим образом:

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

2. Далее, мы измеряем средние коэффициенты - отдельно для расхода топлива (уровень топлива понижается) и для "прихода топлива", когда уровень топлива в баке повышается;

3. Далее, мы сравниваем мгновенный расход топлива на каждом из участке измерения с полученными коэффициентами и смотрим - на каком из них мгновенный расход топлива значительно (в несколько раз) отличается от средних значений. Там где уровень топлива уменьшается предварительно фиксируем "слив" топлива, там где он увеличивается - фиксируем заправку

4. На четвертом этапе мы последовательно производит несколько итераций свертка - фильтрация. Смысл свертки состоит в том, что несколько последовательных значений с одинаковым знаком суммируются друг с другом для того, что бы в результирующем отчете они были представлены в виде одной строки. Смысл фильтрации заключается во введении некоторых допущений. Одно из этих допущений заключается в том, что ни слив ни заправка не могут быть произведены на движущемся транспортном средстве. Т.е. все "сливы" и "заправки", которые произведены на скорости выше пороговой отбрасываются. Далее, если подряд идут значения одинаковые по модулю (с определенной погрешностью, разумеется), но противоположные по значению записи, то они взаимоуничтожаются, т.к. подобные записи с высокой вероятностью вызваны колебаниями уровня топлива в баке, например, такими, как стоянка под углом. Заправиться под углом автомобиль не может, т.к., как правило, все заправки имеют более-менее ровные площадки.

Какие настройки доступны для каждого из этих этапов? Рассмотрим их подробно.



Этап 1. Фильтрация (сглаживание) данных

За тип фильтрации данных отвечают две переменные в настройках топливного фильтра:

FilterType=X MedianeFilterType=Y

Значение X для переменной FilterType может принимать следующие значения:

FilterType=1 - для фильтрации используется усреднение нескольких последующих значений данных с топливного датчика. Это простой и эффективный фильтр, однако он существенно сглаживает перегибы графика (т.е. моменты заправок или сливов топлива), из-за чего точность анализа данных после обработки этим фильтром оказывается низкой. Но при этом мы получаем визуально очень красивый график, который может оказаться важен для клиента ;) Кроме того, такой способ фильтрации смещает результат в будущее из-за чего может быть нарушена работа фильтров, производящих фильтрацию данных по скорости перемещений ТС. При большом количестве ступеней фильтрации рекомендуется отключать фильтры по скорость перемещения ТС.

Количество ступеней, которые используются для усреднения данных ТД определяется переменной

FuelDataAVGStages=zzz

Где zzz - количество шагов округления данных.

FilterType=2 - Для фильтрации используется т.н. адаптивный фильтр Калмана. Фильтр Калмана использует динамическую модель системы (например, физический закон движения), известные управляющие воздействия и множество последовательных измерений для формирования оптимальной оценки состояния. Алгоритм состоит из двух повторяющихся фаз: предсказание и корректировка. На первом рассчитывается предсказание состояния в следующий момент времени (с учетом неточности их измерения). На втором, новая информация с датчика корректирует предсказанное значение (также с учетом неточности и зашумленности этой информации).

Для настройки фильтра Калмана используется несколько коэффициентов:

Kalman_Q
Kalman_R
Kalman_F
Kalman_H

Kalman_F — переменная описывающая динамику системы, в случае с топливом — это может быть коэффициент определяющий расход топлива на холостых оборотах за время дискретизации (время между шагами алгоритма). Однако помимо расхода топлива, существуют ещё и заправки… поэтому для простоты примем эту переменную равную 1 (то есть мы указываем, что предсказываемое значение будет равно предыдущему состоянию).

Kalman_R — ошибка измерения может быть определена испытанием измерительных приборов и определением погрешности их измерения.

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

Kalman_H — матрица определяющая отношение между измерениями и состоянием системы, пока без объяснений примем эту переменную также равную 1.

Для изменения параметров сглаживания рекомендуется изменять значения переменных Q и R.

Принимаемые стартовые значения для фильтра Калмана (значения по-умолчанию):

Kalman_Q=0.5
Kalman_R=15
Kalman_F=1
Kalman_H=1

[1] - материал для фильтра Калмана цельнотянут отсюда...

FilterType=3 - медианный фильтр.

Обратимся к Википедии с целью получить определение медианного фильтра:

Медианный фильтр - один из видов цифровых фильтров, широко используемый в цифровой обработке сигналов и изображений для уменьшения уровня шума. Медианный фильтр является нелинейным КИХ-фильтром. Значения отсчётов внутри окна фильтра сортируются в порядке возрастания (убывания); и значение, находящееся в середине упорядоченного списка, поступает на выход фильтра. В случае четного числа отсчетов в окне выходное значение фильтра равно среднему значению двух отсчетов в середине упорядоченного списка. Окно перемещается вдоль фильтруемого сигнала и вычисления повторяются

[2] Источник данных

У медианного фильтра, используемого в системе есть только один параметр - размер окна фильтрации.

Он определяется переменной

MedianeWindowSize=3 - т.е. значение по-умолчанию для этого параметра - 3

Кроме того, действие медианного фильтра может быть модифицировано парметром

MedianeFilterType=0 - нулевое значение заставляет фильтр работать так, как это описано выше, т.е. классическим образом.

Установка MedianeFilterType=1 - приводит к тому, что на выходе фильтра появляется среднее арифметическое значений в окне фильтра, т.е. по своему действию он ничем не отличается от фильтра номер 1, за исключением того, что данные для фильтрации берутся симметрично относительно текущей точки измерения.


Этапы 2 и 3. Сравнение текущих данных со средними значениями.

KFillIn=2 - в случае, если текущий мгновенный приход топлива (увеличение его уровня) превышает в KFillIn раз (по умолчанию - в два раза) среднее значение прихода топлива, то в этом месте мы фиксируем заправку;

KFillOut=2 - в случае, если текущий мгновенный расход превышает в KFillOut раз (по умолчанию - в два раза) среднее значение расхода топлива, то в этом месте мы фиксируем слив топлива;


В случае использования агрессивных фильтров (с большим количеством ступеней сглаживания для простых фильтров или с большим медианным окном для медианного фильтра) рекомендуется эти коэффициенты приравнять к 1.

Изменение значений этих фильтров позволяет избавиться от ложных сливов и заправок или наоборот "показать" системе заправки там, где она их не видит.


Этапы 4. Дополнительная фильтрация данных.

Наконец, приведем значения переменных, которые определяют дополнительную фильтрацию данных

FuelSpeedFilterLimit=5 - если скорость движения ТС превышает это значение, то анализ данных на этом участке не производим

FuelVolumeFilterLimit=20 - минимальная заправка или слив топлива, которые заносятся в отчет;

FuelVolumeFilterLimit1=20 - максимальный разброс между парами с противоположным знаком, когда они взаимоуничтожаются;

Личные инструменты
Пространства имён
Варианты
Действия
Навигация
Инструменты