Вычисление среднего арифметического с данных которые приходят раз в 10 сек.

OrDer
Offline
Зарегистрирован: 15.10.2017

не проще ли по энкодеру и на флюгер (направление) и на анемометр (чашечный) поставить и не заморачиваться?

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

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

FAI4
Offline
Зарегистрирован: 23.09.2016

Pyotr пишет:
Для моего случая думаю достаточно определить откуда дует ветер с погрешностью скажем +-10 градусов.

А если складывать в массив типа uint16_t, то получится ещё большее "усреднение". А поддерживая пики гистограммы на каком то уровне (больше-меньше данных), можно управлять "периодом усреднения".

- опять не совсем точная постановка задачи.

Давайте доберемся до сути процессов

Для чего вам нужно знать направление и силу ветра?:

 - используете ветреные генераторы

 - используете ветер для конвекции (охлаждения)

 - защишаете ваше пространство от потока воздуха

...

 В каждом из этих случаев совершенно разные будут алгоритмы действий

 

Уточните как вы далее "используете" поток воздуха?

ivanchekalov
Offline
Зарегистрирован: 25.08.2016

Думаю это поможет с расчётами, а не могли бы вы поподробнее рассказать про устройство вашего анемометра

AndryGladky
Offline
Зарегистрирован: 09.10.2014

Logik пишет:

Мало того, они еще и от раза к разу будут сильно скакать если ветер с порывами. Прийдется усреднять на большем промежутке времени, а значить изменения ситуации, например поднялся ветер т.к. начинается гроза, будут определены с большим запаздыванием. Так что верно, именно ОТСТОЙ. Хотя для помойки народного мониторинга сойдет ;) AndryGladky, а подумайте, нужен ли на той помойке еще и ваш вклад? Напомню, измерения, в т.ч. метеорологические, должны выполнятся по установленной методике на повереном оборудовании  иначе им грош цена. Скорость сквозняков и нагрев термометра на солнце хрен кому нужны.

По поводу нагрева датчика я эту проблему устранил, засунул датчик в трубу высотой в метр, датчик внизу трубы посредине труба на уровне роста человека, и мелкий сквозняк полностью справляется с погрешностью от солнца. А метеостанция так для себя, скорость ветра тоже, тем более в моем поселке много людей которые интересуются сколько градусов было ночью или как изменилось давление. Усреднять данные за пять минут, принцыпе даже с порывами, как раз примерное среднее значение, для чего и максимум что бы передавать тоже порывы, а для точности, у меня есть мажордомо который ведет лог всего, и не раз в пять минут, а пишет все данные. Там можно посмотреь с точностью, так вот что примерно вычисляеться среднее то примерно и прослеживается на графике. И делается ето с интереса, думаю лучше заниматся таким, чем то что мои сверстники тратят время на непонятно что. Насчет повереного оборудования я думаю DS18B20 не владеет особой погрешностью, а вычисление ветра с разрешонностью 4 импульса на оборот, ето тоже думаю нормально.

AndryGladky
Offline
Зарегистрирован: 09.10.2014

ivanchekalov пишет:

Думаю это поможет с расчётами, а не могли бы вы поподробнее рассказать про устройство вашего анемометра

Про устройство могу рассказать, я взял обычный крановый анемометр, нашол на олх два за ценой 70 грн. Со второго планирую сделать флюгер.

Анемометр крановый М-95М-2

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

Pyotr
Offline
Зарегистрирован: 12.03.2014

FAI4 пишет:

Pyotr пишет:
Для моего случая думаю достаточно определить откуда дует ветер с погрешностью скажем +-10 градусов.

А если складывать в массив типа uint16_t, то получится ещё большее "усреднение". А поддерживая пики гистограммы на каком то уровне (больше-меньше данных), можно управлять "периодом усреднения".

- опять не совсем точная постановка задачи.

Давайте доберемся до сути процессов

Для чего вам нужно знать направление и силу ветра?:

 - используете ветреные генераторы

 - используете ветер для конвекции (охлаждения)

 - защишаете ваше пространство от потока воздуха

...

 В каждом из этих случаев совершенно разные будут алгоритмы действий

 

Уточните как вы далее "используете" поток воздуха?

О своей задаче я писал http://arduino.ru/forum/programmirovanie/vychislenie-srednego-arifmeticheskogo-s-dannykh-kotorye-prikhodyat-raz-v-10-s#comment-318595

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

Флюгер и анемометр у меня есть и работают http://arduino.ru/forum/ishchu-ispolnitelya/upravlenie-mikroklimatom-teplitsy#comment-127818

Коллеги, кому интересна тема про управление фрамугами с учетом ветра, кто хочет помочь или разоьраться, прошу в мою​​​​​​​ тему. Здесь переплетаются разные вопросы и сложно понимать кто к кому обращается.

FAI4
Offline
Зарегистрирован: 23.09.2016

В таком случае знать направление ветра это не совсем правильная цель.

Вам нужно знать направление максимально воздействия ветра = скорость ветра × Время с этого направлния.

Например слабый ветер постоянно дует с одного направления а сильные порывы всегда приходят с другого.

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

Pyotr
Offline
Зарегистрирован: 12.03.2014

FAI4 пишет:
В таком случае знать направление ветра это не совсем правильная цель. Вам нужно знать направление максимально воздействия ветра = скорость ветра × Время с этого направлния. Например слабый ветер постоянно дует с одного направления а сильные порывы всегда приходят с другого. В таком случае вы должны бояться направления откуда приходят порывы а не откуда дует слабый ветер

Спасибо. Примерно так сейчас происходит. Аппаратно.

Выше писал:

....При каждом обороте анемометра читаю показания флюгера, значение 0-15 (при тихой погоде направление не учитывается).....

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

Осталось правильно проанализировать данные. Мне сейчас не до этого. 

dima744
dima744 аватар
Offline
Зарегистрирован: 27.09.2018

Доброго времени суток!

Буду очень признателен если сомжете ответить на пару моих вопросов.

Петр скажите, а из чего у Вас теплица построена? И какие расходы на отопление (в киловатах имею ввиду), насколько я понял площадь у Вас 200 квадратов....

Насколько я понял трубы отопления у Вас в земле зарыты?

Используете ли Вы подсветку? Правильно ли я понял, что первый что в Марте у Вас уже свои огурцы? Почесу от привода фрамуг на основе двигателя от стеклоочистителей Вы отказались и купили актуатор?

 

Pyotr
Offline
Зарегистрирован: 12.03.2014

dima744 пишет:

Доброго времени суток!

Буду очень признателен если сомжете ответить на пару моих вопросов.

Петр скажите, а из чего у Вас теплица построена? И какие расходы на отопление (в киловатах имею ввиду), насколько я понял площадь у Вас 200 квадратов....

Насколько я понял трубы отопления у Вас в земле зарыты?

Используете ли Вы подсветку? Правильно ли я понял, что первый что в Марте у Вас уже свои огурцы? Почесу от привода фрамуг на основе двигателя от стеклоочистителей Вы отказались и купили актуатор?

 

Чтоб не засорять эту тему, ответил в соответствующей по теплицам.
 http://arduino.ru/forum/ishchu-ispolnitelya/upravlenie-mikroklimatom-teplitsy#comment-394457

Posol88
Offline
Зарегистрирован: 14.11.2019

я может конечно не прав буду сейчас, но я реализовывал усреднение так:

"среднее значение" = ("среднее значение" *2+"фактическое значение")/3

и так с каждым вновь поступившим показанием. У меня работает

b707
Offline
Зарегистрирован: 26.05.2017

Posol88 пишет:

я может конечно не прав буду сейчас, но я реализовывал усреднение так:

"среднее значение" = ("среднее значение" *2+"фактическое значение")/3

и так с каждым вновь поступившим показанием. У меня работает

а при первых значениях что подставлется в первый член этой формулы?

Posol88
Offline
Зарегистрирован: 14.11.2019

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

Kakmyc
Offline
Зарегистрирован: 15.01.2018

Posol88 пишет:

я может конечно не прав буду сейчас, но я реализовывал усреднение так:

"среднее значение" = ("среднее значение" *2+"фактическое значение")/3

и так с каждым вновь поступившим показанием. У меня работает

Такое себе решение.
Рекомендую почитать про среднее медианное и среднее скользящее.

ua6em
ua6em аватар
Offline
Зарегистрирован: 17.08.2016

осталось определиться какое же среднее будет оптимальным для измерения скорости ветра

Pablos
Pablos аватар
Offline
Зарегистрирован: 18.07.2017

Posol88 пишет:

я может конечно не прав буду сейчас, но я реализовывал усреднение так:

"среднее значение" = ("среднее значение" *2+"фактическое значение")/3

и так с каждым вновь поступившим показанием. У меня работает

Это ровно то, что я писал в начале ветки. Это т.н. фильтр. Он работает в десятки раз быстрее скользящего среднего примерно с тем же результатом. В Вашем примере Вы берете предыдущее значение K(n-1) с весом 2, и усредняете с текущим.  (2*K(n-1)+K(n))/3   если этими весами поиграть, то фильтр то больше сглаживает  (9*K(n-1)+K(n))/10  , то наоборот быстрее реагирует на изменения -  (2*K(n-1)+3*K(n))/5 

Удачи!!!

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Pablos пишет:
Это ровно то, что я писал в начале ветки. Это т.н. фильтр. Он работает в десятки раз быстрее скользящего среднего

За счет чего?

Pablos
Pablos аватар
Offline
Зарегистрирован: 18.07.2017

"За счет чего" что????  

Быстрее или сглаживает!  )))))  Изъясняйтесь яснее.

Быстрее - это очевидно. Там вообще нет цикла и нет хранения значений окна! Есть только предыдущее значение и одна (!!!Одна операция).

А сглаживание - тоже очевидно. Играя коэффициентами вы либо даете приоритет новому значению (текущему), либо предыдущему - тогда появляется инерционность. Как бы система не может резко изменить значение. См. мои посты с картинками в самом начале 3 года назад ))))

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

За счет чего быстрее?

И откуда там цикл?

Pablos
Pablos аватар
Offline
Зарегистрирован: 18.07.2017

Вот тут много формулок, но суть та же: http://we.easyelectronics.ru/Theory/chestno-prostoy-cifrovoy-filtr.html
Тут народ совсем заморочился скоростью работы и решил вообще не умножать и не делить, т.к. это "долго".
Используются коэффициенты - степени двойки и вместо умножений и делений - сдвиг битов влево и вправо ))))
Наверное у них супер летает ))))))

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Pablos пишет:

Вы с каким скользящим средним сравниваете, SMA или EMA? SMA считается быстро. EMA может дать бОльшую объективность за счет бОльшей глубины истории при тех же преимуществах, что и простой фильтр

Pablos
Pablos аватар
Offline
Зарегистрирован: 18.07.2017

Ещё раз. Про "объективность" см. мои картинки 3 года назад в этой ветке. На глаз не различимо!
"Вам шашечки или ехать?" )))))

Pablos
Pablos аватар
Offline
Зарегистрирован: 18.07.2017

Ой! Сорри! Картинки мои были в другом обсуждении ))))))  Виноват. Сейчас найду.

Pablos
Pablos аватар
Offline
Зарегистрирован: 18.07.2017

Вот!!!  Картинки сравнения скользящего среднего и фильтра тут:  http://arduino.ru/forum/programmirovanie/dozator-s-dvumya-vesami
 

 

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

Pablos, т.к. Вы отвечаете уже на пост после моего, хочу напомнить вопросы, на которые Вы не ответили?

- За счет чего быстрее?

- Откуда там цикл?

Заодно замечу, что Вы в своем посте №66 обсуждаете совсем не тот фильтр, что привел Posol88. Обратите внимание, что предыдущее значение и накопленное среднее - это совсем не одно и то же.

Далее, Вы, почему-то, утверждаете, что формула average = (K[n]*B + K[n-1]*C)/(B + C) считается в одно действие. На самом деле действий 6: два умножения, два сложения, вычитание и деление. В частном случае количество действий можно сократить до 4, но не менее.

В то же время при подсчете скользящего среднего для вычисления последнего используется две строки:

summ = summ + K[n] - K[n-m]

average = summ/m

т.е. операции изначально 4. Причем, отсутствует операция умножения, которая вычислительно сложнее сложения или вычитания.

Почему это должно работать в десятки раз медленнее?

Pablos
Pablos аватар
Offline
Зарегистрирован: 18.07.2017

Ну, никто и не говорил, что это "одно и то же". Я говорил, что результат почти не отличим, а реализация проще.
Да, можно обойтись без цикла, но, если область хранения коэффициентов конечна (кольцевой стек), то надо ещё и вычислять индексы N и N-M путём вычисления остатка от деления.
Места нужно точно больше, программа сложнее, результат почти не отличим. Посмотрите мои графики по ссылке выше. Фильтр практически повторяет среднее, но с задержкой как бы.

andriano
andriano аватар
Offline
Зарегистрирован: 20.06.2015

"Остаток от деления" - это круто. Почему-то Вы упорно предлагаете самые неэффективные алгоритмы. В случае степени двойки - это одна логическая операция (которые, как известно, проще арифметических), если же нет - операция одна - инкремент запомненного ранее значения. Т.е.  точности то же самое, что и вычисление предыдущего (т.е. [n-1]) индекса.

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

Но есть еще одно обстоятельство: скользящее среднее можно считать и в целых числах, а вот с фильтрами такое не получится. Так что на контроллере без аппаратной плавающей точки, скорее всего, фильтр в десятки, а то и сотни раз проиграет по скорости окну.

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

 

И еще: фильтр, конечно, дает задержку, но она, наоборот, меньше, чем у скользящего среднего.

Rumata
Rumata аватар
Offline
Зарегистрирован: 29.03.2019

Если не параноить скоростью расчетов, реально-интересный результат может дать анализ двух EMA с таймфреймом примерно 1:2. Это не просто усредняет результат, но и дает возможность краткосрочного прогнозирования. Индикатор называется MACD. Применял его в погодной станции 

ЕвгенийП
ЕвгенийП аватар
Offline
Зарегистрирован: 25.05.2015

Posol88 пишет:

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

Точно? Боюсь, Вы когда-нибудь сильно разочаруетесь :-(