реклама на сайте
подробности

 
 
> Определение фактов заправок по датчику уровня топлива, Определение фактов заправок
KillJoy
сообщение Nov 17 2015, 13:50
Сообщение #1


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 3-08-09
Пользователь №: 51 716



Есть сигнал с датчика уровня топлива в баке. Нужно определить все факты заправок. ( выделены зеленым на графике ). Я пробовал использовать метод скользящего среднего для сглаживания данных и интерполяцию кубическими сплайнами, но при этом пики (факты заправок) смещаются вправо. Задача в следующем - нужно игнорировать маленькие всплески (<30 литров) и при этом определять большие всплески (>30 литров).


Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов (1 - 8)
mcheb
сообщение Nov 17 2015, 14:15
Сообщение #2


Местный
***

Группа: Участник
Сообщений: 326
Регистрация: 30-05-06
Пользователь №: 17 602



Вы же сами ответили на свой вопрос
Go to the top of the page
 
+Quote Post
Santik
сообщение Nov 18 2015, 05:48
Сообщение #3


Частый гость
**

Группа: Участник
Сообщений: 87
Регистрация: 30-03-12
Из: Мирный (Якутия)
Пользователь №: 71 096



Метод скользящего среднего - это КИХ фильтр. На малых порядках имеет отвратительную АЧХ. Большие порядки приводят к существенной временной задержке сигнала, или как говорит ТС "сдвигаются вправо". Эту задержку конечно можно скомпенсировать сдвинув после фильтрации картинку влево на число отсчётов, равное порядку фильтра.
Но более грамотно - использовать антикаузальные фильтры - ведь для этой задачи фильтрация в реальном времени не стоит.
Делается просто - берется вектор данных - фильтруется (любым фильтром) - выходной вектор реверсируется во времени (первая выборка становится последней и т.д.)- снова фильтруется тем же фильтром- и выходной вектор снова реверсируется. Таким образом временной сдвиг, создаваемый фильтром компенсируется, а АЧХ возводится в квадрат. Сплошные преимущества, короче. laughing.gif
Но определённые требования к фильтру всё же есть. Он должен иметь коэффициент передачи в полосе пропускания - как можно ближе к 1. (иначе 0.9*0.9=0.81 - АЧХ фильтра в полосе пропускания из-за возведения в квадрат может здорово испортится.
Наиболее подходящими фильтрами для антикаузальной фильтрации является фильтр Баттерворта и фильтр Чебышева 2-го рода.
Естественно, можно фильтровать и с помощью преобразования Фурье (это тоже антикаузальный фильтр получится).
Главное для данной задачи - правильно определить частоту среза ФНЧ , иначе ступеньки сигнала, соответствующие заправкам - будут сглаживаться.
Ну а далее надо продифференцировать отфильтрованные данные по времени.

Прикрепленное изображение

Прикрепленное изображение

Go to the top of the page
 
+Quote Post
Serg76
сообщение Nov 18 2015, 06:22
Сообщение #4


Профессионал
*****

Группа: Участник
Сообщений: 1 050
Регистрация: 4-04-07
Пользователь №: 26 775



Достаточно хорошо различные выбросы и всплески обрабатываются медианными фильтрами, надо просто подобрать нужную апертуру, кроме того, отсутствует задержка на выходе.
Go to the top of the page
 
+Quote Post
x736C
сообщение Nov 18 2015, 08:57
Сообщение #5


Профессионал
*****

Группа: Участник
Сообщений: 1 273
Регистрация: 3-03-06
Пользователь №: 14 942



Нельзя ли тут обойтись без фильтра?
Что-то типа 30 < x(n) – x(n-1)


UPD: Хотя заправка с включенным регистратором растянется более, чем на один шаг.

Сообщение отредактировал x736C - Nov 18 2015, 09:01
Go to the top of the page
 
+Quote Post
MrYuran
сообщение Nov 18 2015, 09:17
Сообщение #6


Беспросветный оптимист
******

Группа: Свой
Сообщений: 4 640
Регистрация: 26-12-07
Из: Н.Новгород
Пользователь №: 33 646



Обычно наоборот, скачки вниз ловят sm.gif


--------------------
Программирование делится на системное и бессистемное. ©Моё :)
— а для кого-то БГ — это Bill Gilbert =)
Go to the top of the page
 
+Quote Post
Santik
сообщение Nov 18 2015, 11:02
Сообщение #7


Частый гость
**

Группа: Участник
Сообщений: 87
Регистрация: 30-03-12
Из: Мирный (Якутия)
Пользователь №: 71 096



Цитата(MrYuran @ Nov 18 2015, 12:17) *
Обычно наоборот, скачки вниз ловят sm.gif

Ну для этого отрицательные значения dV/dt просто надо умножить на 10 :-)
И вообще, если иметь профиль высот по трассе,то, вероятно, по изменению расхода топлива возможно определить где в какой момент машина находилась.
Хотя для этих целей проще наравне с датчиком уровня топлива записывать датчик уклона.

Сообщение отредактировал Santik - Nov 18 2015, 11:07
Go to the top of the page
 
+Quote Post
MSP430F
сообщение Nov 18 2015, 17:02
Сообщение #8


Частый гость
**

Группа: Участник
Сообщений: 85
Регистрация: 20-05-13
Пользователь №: 76 911



Судя по приведенному Вами графику, логика определения факта заправки совершенно прозрачна. Применение какого-либо сложного цифрового фильтра мне не кажется целесообразным. Логики if ((X[i] - X[i - 1]) > 30 ) вполне достаточно. Вот только мне непонятен выброс на Вашем рисунке левее первой заправки. Его надо отфильтровать. Надо бы разобраться с природой его возникновения. Что-то мне подсказывает, что он - это скорее помеха или какой-то глюк датчика уровня. Или, допустим, это резкое движение кузова вверх-вниз на лежачем полицейском или на яме на дороге. Тогда не проще ли делать измерения чаще, например раз в 10 секунд, а затем просто усреднить серию измерений за 1-5 минут. Тогда факт заправки можно будет определить с точность 1-5 минут. Вам же не нужна точность до 1 секунды ? wink.gif
При этом проверять скачок на 30 литров надо будет усредненные значения, не соседние, а отстоящие друг от друга на 1 период усреднения, чтобы избежать попадания на саму заправку.

Сообщение отредактировал MSP430F - Nov 18 2015, 17:14
Go to the top of the page
 
+Quote Post
KillJoy
сообщение Nov 19 2015, 20:56
Сообщение #9


Участник
*

Группа: Участник
Сообщений: 15
Регистрация: 3-08-09
Пользователь №: 51 716



Цитата(MSP430F @ Nov 18 2015, 20:02) *
Судя по приведенному Вами графику, логика определения факта заправки совершенно прозрачна. Применение какого-либо сложного цифрового фильтра мне не кажется целесообразным. Логики if ((X[i] - X[i - 1]) > 30 ) вполне достаточно. Вот только мне непонятен выброс на Вашем рисунке левее первой заправки. Его надо отфильтровать. Надо бы разобраться с природой его возникновения. Что-то мне подсказывает, что он - это скорее помеха или какой-то глюк датчика уровня. Или, допустим, это резкое движение кузова вверх-вниз на лежачем полицейском или на яме на дороге. Тогда не проще ли делать измерения чаще, например раз в 10 секунд, а затем просто усреднить серию измерений за 1-5 минут. Тогда факт заправки можно будет определить с точность 1-5 минут. Вам же не нужна точность до 1 секунды ? wink.gif
При этом проверять скачок на 30 литров надо будет усредненные значения, не соседние, а отстоящие друг от друга на 1 период усреднения, чтобы избежать попадания на саму заправку.

Данные с датчика снимаются раз в 5 минут. На приведенном выше графике данные за 5 суток. Вот еще пример данных за 1 сутки.

Сообщение отредактировал KillJoy - Nov 19 2015, 20:57
Эскизы прикрепленных изображений
Прикрепленное изображение
 
Go to the top of the page
 
+Quote Post

Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 20th July 2025 - 20:40
Рейтинг@Mail.ru


Страница сгенерированна за 0.01421 секунд с 7
ELECTRONIX ©2004-2016