Easyelectronics.ru

Электроника для всех
Текущее время: 18 ноя 2018, 15:26

Часовой пояс: UTC + 5 часов



    • JLCPCB - Прототипы 10 PCBs всего за 2$ (100*100mm, 2-layer)
    • Как мы делаем платы, смотрите на YouTube
    • Крупнейшая китайская фабрика прототипов. 300000+ заказчиков и 10000+ заказов в день!
    • LCSC - Крупнейший китайский онлайн магазин комплектующих.

Начать новую тему Ответить на тему  [ Сообщений: 6 ] 
Автор Сообщение
 Заголовок сообщения: Как правильно усреднять значения полученные с датчика
СообщениеДобавлено: 09 май 2018, 17:09 
Заглядывает иногда

Зарегистрирован: 07 фев 2018, 15:20
Сообщения: 50
Преподаватель в институте дал решить задачку просто ради интереса,не привязанную к какому то конкретному устройству. Предположим,у нас есть датчик с которого мы считываем значения ну или выходные данные АЦП. Нам нужно отлавливать изменения этих значений и если они есть то записывать их в долгосрочную память(ну например sd карту) вместе с данными с часов реального времени,чтоб знать когда значения меняются. Вот например есть выходное значение датчика : 10 плюс минус 2,то есть диапазон 8..12.Мы и должны ловить всё что выходит за эти границы.Проблема в том,что диапазон меняется в течение дня,то есть утром это 8..12,вечером 7..11,а ночью например 6..9. Поэтому прост записать в микропроцессор ловить значения больше 12 и меньше 8 нельзя,нужен какой-то универсальный алгоритм.Сказал что делать надо через усреднение. Но я не понимаю как можно усреднять значения с датчика,если при усреднении все выходы из диапазона меняются. Вот пример моего кода просто как первоначальная идея

Код:
const    int size = 10;   //число измерений
double  arr[size];        //массив для измерений
double   sum=0;         //сумма измерений
double   average;       //среднее значение

for (int i=0;i<size;i++)     //в цикле считываем значения.Функция getvalue это просто как пример
     arr[i] = getvalue();     

for (int i=0;i<size;i++)    //потом находим сумму
     sum += arr[i];

average = sum/size;   //находим среднее знаение

for (int i=0;i<size;i++)    //и тут если значение выходит выше за среднее то мы его запоминаем
     if (arr[i]>average)
     save(arr[i]);


но это не работает вообще,потому то если,например мы имеем
12 - 11 - 10 - 8 - 9 - 12 - 11.5 - 10 - 9 - 8
то их среднее будет 10.05
а всё что больше него будет 12 - 11 - 12 - 11.5
притом что в диапазоне вообще нет значений которые следовало бы записывать.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно усреднять значения полученные с датчика
СообщениеДобавлено: 09 май 2018, 17:16 
Старожил

Зарегистрирован: 10 окт 2014, 00:48
Сообщения: 5125
Делайте среднее (сумма/N) за большой интервал (1 час) и от него ставьте границы +/-2. При этом, полученное "среднее" надо сглаживать с предыдущими "средними" - это даст огибающую изменения среднего в течении дня. При правильных к-тах сглаживания, вы получите то, как меняется величина в течении дня (у вас: 10-8-7).

Но, если делать плохо и быстро, можно всё упростить - скажем, есть отсчеты за последние 2 часа (много отсчетов). Считаете среднее, а потом всё, что выше +/-2 записываете в лог.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно усреднять значения полученные с датчика
СообщениеДобавлено: 09 май 2018, 17:22 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2474
Возможно ваш преподаватель имел в виду вот это: https://en.wikipedia.org/wiki/Moving_average
К слову, для экспоненциального варианта скользящего среднего реализация особенно проста и не требует никаких массивов.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно усреднять значения полученные с датчика
СообщениеДобавлено: 09 май 2018, 19:16 
Старожил
Аватара пользователя

Зарегистрирован: 28 дек 2011, 11:24
Сообщения: 3772
Откуда: г. Липецк
evsi писал(а):
...для экспоненциального варианта скользящего среднего реализация особенно проста и не требует никаких массивов.

Это не так, скользящее среднее расчитывается в массиве из N чисел. Массив при этом должен иметь структуру FIFO и обновляться перед расчетом.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно усреднять значения полученные с датчика
СообщениеДобавлено: 09 май 2018, 19:24 
Старожил
Аватара пользователя

Зарегистрирован: 23 сен 2012, 20:35
Сообщения: 2474
anakost писал(а):
evsi писал(а):
...для экспоненциального варианта скользящего среднего реализация особенно проста и не требует никаких массивов.

Это не так, скользящее среднее расчитывается в массиве из N чисел. Массив при этом должен иметь структуру FIFO и обновляться перед расчетом.

Я ведь написал, что речь идет об одном из подвидов - экспоненциальном скользящем среднем. При желании вы легко можете прочитать это в вики, я даже линк привел.


Вернуться к началу
 Профиль  
 
 Заголовок сообщения: Re: Как правильно усреднять значения полученные с датчика
СообщениеДобавлено: 21 май 2018, 22:06 
Заглядывает иногда

Зарегистрирован: 04 сен 2014, 12:44
Сообщения: 90
данные с датчиков адекватно усредняются методом наименьших квадратов, например МНК второго порядка будет достаточно, ну или методом сплайна, но погрешность будет больше.


Вернуться к началу
 Профиль  
 
Показать сообщения за:  Поле сортировки  
Начать новую тему Ответить на тему  [ Сообщений: 6 ] 

Часовой пояс: UTC + 5 часов


Кто сейчас на конференции

Сейчас этот форум просматривают: Eddy_Em, VladislavS


Вы не можете начинать темы
Вы не можете отвечать на сообщения
Вы не можете редактировать свои сообщения
Вы не можете удалять свои сообщения
Вы не можете добавлять вложения

Найти:
Перейти:  

Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Русская поддержка phpBB