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

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

4 часа назад, AlexandrY сказал:

Это подход не предполагающий оракула.
Здесь же все говорят об оракулах или предсказателях. От самых примитивных типа адаптивного гистерезиса, до более продвинутых.  

Предложите алгоритм работы с гистерезисом без потери точности.
Одноразрядный АЦП вблизи значения 0.5 будет мерцать. С гистерезисом в 0.1  мелькать не будет, но единицу покажет аж при 0.6 и будет показывать 1 до 0.4 от Uвх.
Годится? Или есть другие алгоритмы?

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


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

8 minutes ago, Егоров said:

Предложите алгоритм работы с гистерезисом без потери точности.
Одноразрядный АЦП вблизи значения 0.5 будет мерцать. С гистерезисом в 0.1  мелькать не будет, но единицу покажет аж при 0.6 и будет показывать 1 до 0.4 от Uвх.
Годится? Или есть другие алгоритмы?

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

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


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

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

Видите ли, оракул видит будущее.

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

Если известны все истинные значения измеряемой величины, то это уже прошлое. Предсказывать через некий оракул  прошлое вроде и нет смысла.
 Впрочем, если кем-то  решено построить вечный двигатель, то он его будет строить, несмотря на все предупреждения и доводы.
 16 страниц разборки явления, которое не сложнее закона Ома, тому подтверждение.

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


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

11 hours ago, Егоров said:

несмотря на все предупреждения и доводы.

Просто мы обсуждаем вкус и цвет условно говоря.
Но это не значит что это обсуждать не имеет смысла. 
Че точно не имеет смысла сюда приплетать (ИМХО , конесно) так это метрологическую ошибку. 

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


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

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

Точно не имеет смысла сюда приплетать (ИМХО , конесно) так это метрологическую ошибку. 

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

соответствует истинному значению. С чем не согласны?

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


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

12 часов назад, Егоров сказал:

Предложите алгоритм работы с гистерезисом без потери точности.
Одноразрядный АЦП вблизи значения 0.5 будет мерцать. С гистерезисом в 0.1  мелькать не будет, но единицу покажет аж при 0.6 и будет показывать 1 до 0.4 от Uвх.
Годится? Или есть другие алгоритмы?

Конечно если использовать голый гистерезис - так и будет: дополнительная погрешность (я ещё в начале писал).

Но если к этому гистерезису добавить таймер задержки, то получится (имхо) вполне качественно. Алгоритм например такой:

Дано: частота обновления показаний == f0; приемлемая частота изменений на индикаторе <= f1. f1 - использовать при "малых" изменениях сигнала (та самая "болтанка"; "малых" - меньше величины гистерезиса); при "больших" изменениях - частота должна быть == f0. Примем f0 > f1.

Также имеем таймер t0. В исходном состоянии - не запущен.

Решение:

Каждый такт f0 из входных данных вычисляем значение y1 (значение величины честно округлённое по необходимому числу разрядов) и y2 (значение округлённое с учётом гистерезиса). А также помним значение которое сейчас показывается на индикаторе: y0.

Если y0 != y2 то: y0 = y1; y2 = y1. Т.е. - произошло "большое изменение" сигнала.

Если выдержка t0 истекла, то: y0 = y1.

Если значение y0 на этом шаге изменилось, то отобразим новое y0 и остановим таймер t0.

Если не изменилось и y0 != y1 и таймер t0 выключен, то запустим таймер на время 1/f1.

Всё - такт закончен, в следующем такте всё повторим.

Примерно так.

В качестве дополнительной рюшечки можно как-нить индицировать тот факт, что в настоящий момент y0 != y1, например - отображать значение немного другим цветом.

 

Таким образом - при больших изменениях сигнала (больше гистерезиса), значение на индикаторе будет изменяться с частотой <=f0, при малых: с частотой <=f1.

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


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

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

Конечно если использовать голый гистерезис - так и будет: дополнительная погрешность (я ещё в начале писал).

Но если к этому гистерезису добавить таймер задержки, то получится (имхо) вполне качественно. Алгоритм например такой:

Третий раз привожу реальный исходник:

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

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

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


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

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

Третий раз привожу реальный исходник:

И что в этом исходнике?

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


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

Только что, jcxz сказал:

И что в этом исходнике?

Если переменная не вылетает из зоны нечувствительности, то изменения показаний происходят раз в 10 секунд вместе с корректировкой центра зоны нечувствительности.

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

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


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

23 minutes ago, adnega said:

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

соответствует истинному значению. С чем не согласны?

Ну какое может быть истинное значение у динамического сигнала? 
Вот вы смотрите на индикатор показывающий синусоидально изменяющийся сигнал  и  прям ментально фиксируете каждые 0.25 сек показания  и вероятность их истинности. :laugh1:
Нормальный чел просто хочет увидеть что сигнал плавно меняется и больше ничего. 
Ваш гистерезис сделает из плавности черт знает что. 

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


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

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

Если переменная не вылетает из зоны нечувствительности, то изменения показаний происходят раз в 10 секунд вместе с корректировкой центра зоны нечувствительности.

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

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

Если предположить что: i - только что измеренное значение, а adc_press_value - отображаемое. И предположить, что измерения происходят с частотой 10Гц, то при плавном изменении сигнала (когда за каждый такт 10Гц значение изменяется <2lsb) у Вас ошибка показаний будет не <2 lsb (как Вы утверждаете), а во много раз больше.

Посмотрите лучше мой алгоритм.  :wink:

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


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

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

Ну какое может быть истинное значение у динамического сигнала? 
Вот вы смотрите на индикатор показывающий синусоидально изменяющийся сигнал  и  прям ментально фиксируете каждые 0.25 сек показания  и вероятность их истинности. :laugh1:
Нормальный чел просто хочет увидеть что сигнал плавно меняется и больше ничего. 
Ваш гистерезис сделает из плавности черт знает что. 

Динамический сигнал принято смотреть осциллографом.

Мы обсуждаем телепание цифрового индикатора. Например, медленное изменение температуры на 1C за 1 час.

4 минуты назад, jcxz сказал:

И предположить, что измерения происходят с частотой 10Гц,

Частота изменения крайне низкая. Конкретно этот исходник - для датчика атмосферного давления.

Для быстрых измерений нужен осциллограф.

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


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

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

Если переменная не вылетает из зоны нечувствительности, то изменения показаний происходят раз в 10 секунд вместе с корректировкой центра зоны нечувствительности.

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

Да, и ещё: у Вас ошибка гистерезиса будет всегда (даже если вх.сигнал абсолютно стабилен), а в моём алгоритме при стабильных значениях вх.сигнала ошибка в конце концов станет ==0 через время 1/f1.

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

Частота изменения крайне низкая. Конкретно этот исходник - для датчика атмосферного давления.

Для быстрых измерений нужен осциллограф.

Быстрые не быстрые - Вы нигде не указали частоту изменения вх. данных. При том что указали минимальную частоту изменения выходных данных (0.1Гц). Что такое "быстрые"? Для одного "быстро" - это 10мсек, для другого - 1сек. И как тогда можно понять Ваш алгоритм на который вы всё время ссылаетесь???

 

И осциллограф не нужен там, где нужно только числовое значение сигнала. Скорость его изменения тут совершенно не при чём. Мой алгоритм будет качественно показывать и быстрые изменения и медленные. Без осциллографов. Конечно при больших изменениях сигнала значение будет быстро меняться. Но ведь эту величину (f0) можно настроить как надо.

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


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

8 minutes ago, adnega said:

Мы обсуждаем телепание цифрового индикатора. Например, медленное изменение температуры на 1C за 1 час.

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

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


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

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

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

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

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

Например: датчик оборотов двигателя. Который может крутиться и 4000 об/мин и 100 об/мин и стоять на месте.

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


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

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

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

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

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

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

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

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

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

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