![]() |
|
|
![]()
|
|
| yogin |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 23.12.2007 Репутация: нет Всего: нет |
Приветствую!
Существует такая задача: Есть данные измерения объёма топлива в баке, но от того, что жидкость почти постоянно пребывает в неспокойном состоянии(волны от качки), то данные объёма получаются очень динамичными, как показано на графике: ![]() Можно заметить что топливо постепенно убывает, а потом возрастает(заправка). Требуется сгладить график до монотонноубывающего тренда при расходе топлива исключая моменты простоя и заправки. Я пробовал уже по разному, но все обработки начинаю представлять из себя алгоритмы на частыне случаи, да ещё в результате вся обработка начинает занимать длительное время. Как это сделать? Существуют ли подходящие алгоритмы? Какую литературу стоит почитать по поводу обработки таких измерений или по обработке графиков такого типа... Это сообщение отредактировал(а) yogin - 22.3.2012, 10:53 |
|||
|
||||
| _Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Если по-уму, то нужно отфильтровывать высокочастотные шумы, наверное. Стандартная задача.
Но встает вопрос. А чем обычное усреднение по N соседним точкам не годится? ЗЫ: Судя по графику измерения проводятся раз в несколько минут. Разве такое бывает? Или там в багажнике около бензобака мужик с мерной рейкой сидит. Опустит рейку в бак, послюнявит химический карандаш и нанесет точку на график -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
| Lipetsk |
|
|||
![]() в форме ;) ![]() Профиль Группа: Участник Сообщений: 180 Регистрация: 28.1.2009 Где: Липецк Репутация: 2 Всего: 5 |
да, к бензину это вряд ли имеет отношение, т.к. не может так сильно "качать", и заправляют машину не во время простоя, на заправку ездят
|
|||
|
||||
| yogin |
|
||||||||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 23.12.2007 Репутация: нет Всего: нет |
от 4 секунд до 10 секунд интервал между точками.
да сглаживает всё в результате да и всё... грубо сглаживает
конееечно, Вам виднее)
А на заправке-то она не стоит чтоли? Кстати: это ТС(транс. средство) заправляют там, где оно встало, именно поэтому на графике перед заправкой ясно видна протяжённость простоя. Это сообщение отредактировал(а) yogin - 22.3.2012, 12:46 |
||||||||
|
|||||||||
| _Y_ |
|
|||
![]() Эксперт ![]() ![]() ![]() Профиль Группа: Завсегдатай Сообщений: 1651 Регистрация: 27.11.2006 Репутация: 8 Всего: 34 |
Если попадется где-то коллекционная Волга ГАЗ-21 или Победа - взгляните)))) На них фактически прочитать показания топливоуказателя можно было только после пары минут стояния. Но именно коллекционная чтобы датчики родные были, а не от оппеля какого современногго Я так понимаю, что на современных автомобилях эти показания сглаживаются и может даже инерционностью самого поплавка, а может и численно (так дешевле). В этом и проблема. Если время измерения миллисекунды, а интервал между измерениями секунды получается датчик случайных значений с неким куполообразным распределением. Волны с частотой 0,05ГЦ только в океане разве - точно не в баке (эту частоту я взял из соображений критерия Нилквиста - чтобы хоть как-то отобразить колебания частота измерений должна быть минимум вдвое больше частоты колебаний). Думаю, если удастся измерять чаще (не думаю, что сегодня можно найти датчик не позволяющий поднять частоту больше 0,25ГЦ), то N в окне сглаживания можно будет существенно уменьшить и, таким образом, избежать грубого сглаживания всего на свете. -------------------- Я вот в этом поучаствовал: http://sbor-nik.appspot.com/kick.jsp?id=sbor5737960678883328 (на правах саморекламы:) |
|||
|
||||
| yogin |
|
|||
![]() Шустрый ![]() Профиль Группа: Участник Сообщений: 88 Регистрация: 23.12.2007 Репутация: нет Всего: нет |
Нет, записывать измерения чаще не получится, таков прибор. Измерения записывает контроллер, у которого задача такая - не чаще чем раз в 10 секунд(но иногда бывает и чаще) и не реже(реже 10 сек точно не бывает). Отсюда кстати ещё и возможности глюков появляются. |
|||
|
||||
| Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 4 Всего: 17 |
Вообще говоря убывание бензина в баке функция монотонная. В ней возможны только участки постоянства. К тому же убывает довольно медленно. Усреднение по N очкам должно работать как часы. можно добавить немного мозгов к этому фильтру: если обнаружен участок неизменности (остановились и заглушили движок), то можно перестать сглаживать.
Я не понимаю, что означает термин "грубо" сглаживает. Поскольку точность измерения крайне низка вследствие низкой частоты измерений, то "грубый" сглаженный график вполне точно укладывается в точность измерения. Хотеть получить точность больше, чем при измерении, конечно можно, но чудес не бывает Поясните, пожалуйста, чем Вас не устраивает линейная фильтрация? -------------------- Mirkes |
|||
|
||||
| ФедосеевПавел |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 291 Регистрация: 7.2.2009 Репутация: нет Всего: 10 |
В бумажном каталоге продукции ОВЕН даётся описание двух фильтров и опционального дополнения к одному из них. Скорее всего, эти описания (на русском языке) присутствуют и в pdf к соответствующим приборам этой фирмы (наподобие, измерителей регуляторов).
Фильтры: 1. Фильтрация усреднением (скользящее среднее). Для неё задаются два параметра - время опроса датчика и глубина фильтра (N-количество точек для сглаживания). 2. Фильтр 1-го порядка. Для него задаются также два параметра - время опроса датчика и постоянная времени фильтра. Вместо постоянной времени фильтра в практических расчётах можно использовать коэффициент демпфирования (сглаживания). Выглядит формула так Vcurr:=Vprev+Kd*(VcurrIzm-Vprev), где Kd - коэффициент демпфирования, Vprev - значение измеряемой величины (сглаженное) на предыдущем измерении, VcurrIzm - текущие показания датчика, Vcurr - текущее сглаженное значение измеряемой величины. Варьируя Kd можно добиться удовлетворительного сглаживания. Ещё этот фильтр можно встретить в таком виде Vcurr:=Vprev+(VcurrIzm-Vprev)/Kd. Дополнение "полоса фильтра". Самостоятельно этот метод не используется - только в комбинации с одним из фильтров. Идея состоит в том, что для измеряемой величины задаётся "окно", в пределах которого она может измениться к следующему измерению с учётом небольших помех. Если показания датчика попадают в "окно", то они поступают дальше на фильтр. Если показания в "окно" не попали, то новое значение игнорируется и считается, что параметр не изменился. Полагаю, что стоит попробовать посчитать графики с разными настройками фильтров на экспериментальных данных в какой нибудь математической среде или в Ёкслеле. P.S. Я не думаю, что нужно увеличить частоту измерений - сам параметр изменяется довольно медленно и датчик явно успевает его отслеживать. А помеха - всё равно является стохастической величиной, вне зависимости от частоты измерений. ----------------------------- Пока я набирал, уже ответил Mirkes. Я полностью поддерживаю его точку зрения. Это сообщение отредактировал(а) ФедосеевПавел - 22.3.2012, 19:46 |
|||
|
||||
| Pavia |
|
|||
|
Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 418 Регистрация: 6.12.2008 Репутация: 11 Всего: 12 |
yogin,
1) Выделить участки без простоя, для этого можно найти участки с простоем. 2) Сгладить, можно скользящим средним. Размер ядра подобрать опытным путём. В случае выхода ядра за диапозон монотонно убывающего считать сигнал равный постоянному с этого конца. Либо если не устроит результат в 2 прохода 1 находим среднюю скорость убывания и интерполируем концы согласно этой скорости. Тем самым функция будет более резкой.
ЦОС она вся частный случаи. Одного алгоритма на все случаи жизни нет. Есть обобщающие алгоритмы, но их так много что тоже можно считать просто частными случаеми. По поводу длительного времени, это оптимизировать надо. А так вообще алгоритм сглаживание скользящим средним имеет сложность O(N), не зависит от радиуса. По поводу обобщения алгоритмов можно сделать адаптивное сглаживание. К примеру выбрав радиус размытия из сходя из дисперсии. Или после БПФ найти минимум после горки(на графике хорошо будет видно частоту среза). Правда в данном случае я бы просто взял радиус фильтера скользящего среднего по больше раз в 10 и всё. |
|||
|
||||
| maxim1000 |
|
|||
|
Эксперт ![]() ![]() ![]() ![]() Профиль Группа: Участник Сообщений: 3334 Регистрация: 11.1.2003 Где: Киев Репутация: 33 Всего: 110 |
я бы ещё попробовал медианный фильтр - он меньше страдает от случайных выбросов
-------------------- qqq |
|||
|
||||
| Mirkes |
|
|||
![]() Опытный ![]() ![]() Профиль Группа: Участник Сообщений: 586 Регистрация: 18.8.2011 Где: Красноярск Репутация: 4 Всего: 17 |
Если не жалко, скиньте какой-нибудь файл исходных сигналов. Я попробую поиграть с ним и посмотреть что получится.
-------------------- Mirkes |
|||
|
||||
![]()
|
| Правила форума "Алгоритмы" | |
|
|
Форум "Алгоритмы" предназначен для обсуждения вопросов, связанных только с алгоритмами и структурами данных, без привязки к конкретному языку программирования и/или программному продукту.
Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, maxim1000. |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Алгоритмы | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |