Перейти к содержанию
    

Дребезг параметра на индикаторе, как бороться?

Для меня, единственный случай, когда не нужно выдавать результат на индикацию, это если он совпадает с предыдущим (гистерезис на 1LSB, ага). Чтобы не тратить ресурсы напрасно, особенно, на графическом ЖКИ. 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 часов назад, haker_fox сказал:

Более того, ваши показания станут недостоверными

Я правильно понимаю, что при измерении получается не одно число, а среднее с некоторым доверительным диапазоном?

Причем, если вероятность попадания истинного значения в диапазон увеличиваем, то и сам диапазон увеличивается.

Но это справедливо только для сигналов с гауссовским распределением. Или если к некоторому истинному значению добавили

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

совпадения с истинным значением.

Например, было измерение 5.00+-0.1В, а стало 4.99+-0.1В. Если и в первом и во втором случае на индикаторе будет 5.00, то это с одинаковой вероятностью

соответствует истинному значению. Может, это и есть путь избежания телепания?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 часов назад, adnega сказал:

Теперь будем знать. Я не ожидал от Forger такого, честно. 

Ну наконец-то, настало прозрение :))))

Я вам больше скажу, он до сих пор не понял, зачем вы ему привели пример с числами с плавающей точкой. У него же "шаблон на C++"! :D

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

3 часа назад, ViKo сказал:

Согласен с haker_fox-ом. А кого раздражает, что цифры на индикаторе меняются, пусть не смотрит долго.

Делал светодиодные часы с датчиками температуры/влажности/давления/радиации.

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

будет неприятное телепание. Это действительно смотрится некрасиво. Поборол гистерезисом.

Второй пример: прибор с ЖК-индикатором, малопотребляющий, всегда в спячке, графический экран обновляет редко и маленькими (1:8) прямоугольными областями.

Если возникает телепание, то там в принципе не удается что-то внятное считать. Поборол БИХ-ФНЧ + гистерезис.

Есть много задач, где с этим можно не париться, но есть задачи, где без борьбы с телепанием, ну, никак не обойтись. Видимо, у ТС одна из таких.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 минут назад, adnega сказал:

Делал светодиодные часы с датчиками температуры/влажности/давления/радиации.

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

будет неприятное телепание. Это действительно смотрится некрасиво. Поборол гистерезисом.

Как часто обновляли измерения температуры/влажности/давления/радиации на индикаторе, что они телепалися туда-сюда? Зачем так часто? :-)

13 минут назад, adnega сказал:

Поборол БИХ-ФНЧ + гистерезис

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

15 minutes ago, adnega said:

будет неприятное телепание. Это действительно смотрится некрасиво. Поборол гистерезисом.

Гистерезис у вас не что иное как инерционность. С тем же успехом вы бы могли просто реже обновлять данные на индикаторе. 
Гистерезис, как видно на графиках, не уменьшает шум. 
У TC проблема в том, что он не знает ничего ни о шуме ни о сигнале. Он уже сделал все что мог усреднив по 1000 отсчетам.
Теперь у него оставшийся шум и сигнал в одной полосе. 
И дальше непонятно то ли он глядя на индикатор хочет понять поведение сигнала выделив его из шума чисто визуально и ему мешает это сделать переключения старших разрядов, то ли он хочет замаскировать шум от наблюдателя выдав 3 разряда как значащие. 
Эт две разные задачи. 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

7 минут назад, AHTOXA сказал:

зачем вы ему привели пример с числами с плавающей точкой. У него же "шаблон на C++"! :D

Одно время работал с коллегой, который сейчас какой-то руководитель в Яндексе, а ранее в команде ВУЗа занял какое-то место на мировой олимпиаде по программированию. Он любил С++, шаблоны и задавать интересные задачки. Как-то раз задал задачку про числа с плавающей точкой. Мол, есть большой массив вещественных чисел, как будешь складывать? Я предложил в идеальном случае сначала все отсортировать, а потом сложить от маленьких чисел к большим - так ошибка будет минимальной. Вспомнилось сразу...

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

31 minutes ago, AHTOXA said:

Я вам больше скажу, он до сих пор не понял

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

Но от вас вообще не ожидал такого - за глаза закидать какашками, даже не видя кода, судить о знаниях лишь по каким-то косвенным признакам ... :fool:

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

9 минут назад, ViKo сказал:

Как часто обновляли измерения температуры/влажности/давления/радиации на индикаторе, что они телепалися туда-сюда? Зачем так часто? :-)

100 Гц. Так устроен движок, что отрисовывает экран 100 раз в секунду. Если меньше, то бегущие строки уже бегут рывками.

9 минут назад, ViKo сказал:

если скачет больше, такие разряды и показывать незачем.

И я про это говорю. Просто у меня телепание в младших разрядах не касается старших на сколько-то lsb - т.е. гистерезис.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

6 minutes ago, adnega said:

 Вспомнилось сразу...

Специально для "потомственных танкистов": я в курсе подобных "особенностей" плавучки. Теперь дошло?

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

8 минут назад, Forger сказал:

Но от вас вообще не ожидал такого - за глаза закидать какашками, даже не видя кода, судить о знаниях лишь по каким-то косвенным признакам ...

Вы меня с кем-то путаете. Я уже давно прямо в глаза вам говорю, что вы, скажем, так себе специалист.

7 минут назад, adnega сказал:

100 Гц. Так устроен движок, что отрисовывает экран 100 раз в секунду. Если меньше, то бегущие строки уже бегут рывками.

Совершенно не обязательно частота перерисовки экрана должна быть равна частоте обновления параметра.

5 минут назад, Forger сказал:

Специально для "потомственных танкистов": я в курсе подобных "особенностей" плавучки. Теперь дошло?

Ну так расскажите нам, как ваш "шаблон на C++" для скользящего среднего работает с плавучкой, выполняя для каждого нового отсчёта "только одно сложение, одно вычитание и одно деление".

21 минуту назад, AlexandrY сказал:

Гистерезис у вас не что иное как инерционность. С тем же успехом вы бы могли просто реже обновлять данные на индикаторе. 

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

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

11 minutes ago, AHTOXA said:

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

Вот теперь в глаза.

Когда заканчиваются аргументы, в действие идут подобные грязные методы.

Но кидать какашки в ответку уже буду. Не хочу уподобляться.

 

 

 

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

12 минут назад, AHTOXA сказал:

Совершенно не обязательно частота перерисовки экрана должна быть равна частоте обновления параметра.

Именно.

Можно было гонять 1000 раз по бегущей строке один и тот же результат измерений. Это же температура, дай бог, если она она за 10 с меняется на 1LSB. А если даже и сильнее, раз в 2 с хватило бы за глаза.

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

17 минут назад, ViKo сказал:

Именно.

Можно было гонять 1000 раз по бегущей строке один и тот же результат измерений. Это же температура, дай бог, если она она за 10 с меняется на 1LSB. А если даже и сильнее, раз в 2 с хватило бы за глаза.

Так и делаю ;) Постил на третьей странице.

На входе i, на выходе adc_press_value. Таймаут adc_press_to где-то увеличивается в мс.

Итого: если переменная не изменилась больше чем на 2 lsb, то меняться будет раз в 10 секунд.

Если изменилась более чем на 2 lcb, то обновиться мгновенно.

Пользуюсь серийно - юзеры довольны.

			i = (i / 10) * 75006 / 1000000;

			if((myabs(adc_press_value - i) > 2) || (adc_press_to > 10000))
			{
				adc_press_value = i;
				adc_press_to = 0;
			}

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

49 minutes ago, adnega said:

100 Гц. Так устроен движок, что отрисовывает экран 100 раз в секунду. Если меньше, то бегущие строки уже бегут рывками.

Вот так будет если выводить 100 раз в сек -

leds.gif

Поделиться сообщением


Ссылка на сообщение
Поделиться на другие сайты

Присоединяйтесь к обсуждению

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

Гость
К сожалению, ваш контент содержит запрещённые слова. Пожалуйста, отредактируйте контент, чтобы удалить выделенные ниже слова.
Ответить в этой теме...

×   Вставлено с форматированием.   Вставить как обычный текст

  Разрешено использовать не более 75 эмодзи.

×   Ваша ссылка была автоматически встроена.   Отображать как обычную ссылку

×   Ваш предыдущий контент был восстановлен.   Очистить редактор

×   Вы не можете вставлять изображения напрямую. Загружайте или вставляйте изображения по ссылке.

×
×
  • Создать...