Егоров 0 4 июля, 2019 Опубликовано 4 июля, 2019 · Жалоба 4 часа назад, AlexandrY сказал: Это подход не предполагающий оракула. Здесь же все говорят об оракулах или предсказателях. От самых примитивных типа адаптивного гистерезиса, до более продвинутых. Предложите алгоритм работы с гистерезисом без потери точности. Одноразрядный АЦП вблизи значения 0.5 будет мерцать. С гистерезисом в 0.1 мелькать не будет, но единицу покажет аж при 0.6 и будет показывать 1 до 0.4 от Uвх. Годится? Или есть другие алгоритмы? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 4 июля, 2019 Опубликовано 4 июля, 2019 · Жалоба 8 minutes ago, Егоров said: Предложите алгоритм работы с гистерезисом без потери точности. Одноразрядный АЦП вблизи значения 0.5 будет мерцать. С гистерезисом в 0.1 мелькать не будет, но единицу покажет аж при 0.6 и будет показывать 1 до 0.4 от Uвх. Годится? Или есть другие алгоритмы? Видите ли, оракул видит будущее. Поэтому описать реализацию его поведения можно только постфактум. Из этого следует, что нарисуйте мне все жизнеописание своего сигнала до момента прекращения наблюдения и я вам скажу как действовал бы оракул. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
Егоров 0 4 июля, 2019 Опубликовано 4 июля, 2019 · Жалоба 25 минут назад, AlexandrY сказал: Видите ли, оракул видит будущее. Из этого следует, что нарисуйте мне все жизнеописание своего сигнала до момента прекращения наблюдения и я вам скажу как действовал бы оракул. Если известны все истинные значения измеряемой величины, то это уже прошлое. Предсказывать через некий оракул прошлое вроде и нет смысла. Впрочем, если кем-то решено построить вечный двигатель, то он его будет строить, несмотря на все предупреждения и доводы. 16 страниц разборки явления, которое не сложнее закона Ома, тому подтверждение. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 5 июля, 2019 Опубликовано 5 июля, 2019 · Жалоба 11 hours ago, Егоров said: несмотря на все предупреждения и доводы. Просто мы обсуждаем вкус и цвет условно говоря. Но это не значит что это обсуждать не имеет смысла. Че точно не имеет смысла сюда приплетать (ИМХО , конесно) так это метрологическую ошибку. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 5 июля, 2019 Опубликовано 5 июля, 2019 · Жалоба 43 минуты назад, AlexandrY сказал: Точно не имеет смысла сюда приплетать (ИМХО , конесно) так это метрологическую ошибку. Например, было измерение 5.00+-0.1В, а стало 4.99+-0.1В. Если и в первом и во втором случае на индикаторе будет 5.00, то это с одинаковой вероятностью соответствует истинному значению. С чем не согласны? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 5 июля, 2019 Опубликовано 5 июля, 2019 · Жалоба 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. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 5 июля, 2019 Опубликовано 5 июля, 2019 · Жалоба 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; } Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 5 июля, 2019 Опубликовано 5 июля, 2019 · Жалоба 1 минуту назад, adnega сказал: Третий раз привожу реальный исходник: И что в этом исходнике? Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 5 июля, 2019 Опубликовано 5 июля, 2019 · Жалоба Только что, jcxz сказал: И что в этом исходнике? Если переменная не вылетает из зоны нечувствительности, то изменения показаний происходят раз в 10 секунд вместе с корректировкой центра зоны нечувствительности. Если переменная выходит из зоны, то изменение и корректировка центра происходят мгновенно. Нужно только грамотно задать зону нечувствительности. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 5 июля, 2019 Опубликовано 5 июля, 2019 · Жалоба 23 minutes ago, adnega said: Например, было измерение 5.00+-0.1В, а стало 4.99+-0.1В. Если и в первом и во втором случае на индикаторе будет 5.00, то это с одинаковой вероятностью соответствует истинному значению. С чем не согласны? Ну какое может быть истинное значение у динамического сигнала? Вот вы смотрите на индикатор показывающий синусоидально изменяющийся сигнал и прям ментально фиксируете каждые 0.25 сек показания и вероятность их истинности. Нормальный чел просто хочет увидеть что сигнал плавно меняется и больше ничего. Ваш гистерезис сделает из плавности черт знает что. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 5 июля, 2019 Опубликовано 5 июля, 2019 · Жалоба 8 минут назад, adnega сказал: Если переменная не вылетает из зоны нечувствительности, то изменения показаний происходят раз в 10 секунд вместе с корректировкой центра зоны нечувствительности. Если переменная выходит из зоны, то изменение и корректировка центра происходят мгновенно. Нужно только грамотно задать зону нечувствительности. Вы внимательнее посмотрите на свой исходник: он кривой и работать будет не так как Вы описываете. Если предположить что: i - только что измеренное значение, а adc_press_value - отображаемое. И предположить, что измерения происходят с частотой 10Гц, то при плавном изменении сигнала (когда за каждый такт 10Гц значение изменяется <2lsb) у Вас ошибка показаний будет не <2 lsb (как Вы утверждаете), а во много раз больше. Посмотрите лучше мой алгоритм. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
adnega 11 5 июля, 2019 Опубликовано 5 июля, 2019 · Жалоба 7 минут назад, AlexandrY сказал: Ну какое может быть истинное значение у динамического сигнала? Вот вы смотрите на индикатор показывающий синусоидально изменяющийся сигнал и прям ментально фиксируете каждые 0.25 сек показания и вероятность их истинности. Нормальный чел просто хочет увидеть что сигнал плавно меняется и больше ничего. Ваш гистерезис сделает из плавности черт знает что. Динамический сигнал принято смотреть осциллографом. Мы обсуждаем телепание цифрового индикатора. Например, медленное изменение температуры на 1C за 1 час. 4 минуты назад, jcxz сказал: И предположить, что измерения происходят с частотой 10Гц, Частота изменения крайне низкая. Конкретно этот исходник - для датчика атмосферного давления. Для быстрых измерений нужен осциллограф. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 5 июля, 2019 Опубликовано 5 июля, 2019 · Жалоба 36 минут назад, adnega сказал: Если переменная не вылетает из зоны нечувствительности, то изменения показаний происходят раз в 10 секунд вместе с корректировкой центра зоны нечувствительности. Если переменная выходит из зоны, то изменение и корректировка центра происходят мгновенно. Нужно только грамотно задать зону нечувствительности. Да, и ещё: у Вас ошибка гистерезиса будет всегда (даже если вх.сигнал абсолютно стабилен), а в моём алгоритме при стабильных значениях вх.сигнала ошибка в конце концов станет ==0 через время 1/f1. 26 минут назад, adnega сказал: Частота изменения крайне низкая. Конкретно этот исходник - для датчика атмосферного давления. Для быстрых измерений нужен осциллограф. Быстрые не быстрые - Вы нигде не указали частоту изменения вх. данных. При том что указали минимальную частоту изменения выходных данных (0.1Гц). Что такое "быстрые"? Для одного "быстро" - это 10мсек, для другого - 1сек. И как тогда можно понять Ваш алгоритм на который вы всё время ссылаетесь??? И осциллограф не нужен там, где нужно только числовое значение сигнала. Скорость его изменения тут совершенно не при чём. Мой алгоритм будет качественно показывать и быстрые изменения и медленные. Без осциллографов. Конечно при больших изменениях сигнала значение будет быстро меняться. Но ведь эту величину (f0) можно настроить как надо. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
AlexandrY 3 5 июля, 2019 Опубликовано 5 июля, 2019 · Жалоба 8 minutes ago, adnega said: Мы обсуждаем телепание цифрового индикатора. Например, медленное изменение температуры на 1C за 1 час. Неа, мы обсуждаем и этот случай и случай с регулировкой напряжения в источнике питания и случай показаний датчиков наклона и кучу других случаев. Нет резона обсуждать слишком специальные случаи когда есть более универсальные алгоритмы. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться
jcxz 235 5 июля, 2019 Опубликовано 5 июля, 2019 · Жалоба 10 минут назад, AlexandrY сказал: Неа, мы обсуждаем и этот случай и случай с регулировкой напряжения в источнике питания и случай показаний датчиков наклона и кучу других случаев. Нет резона обсуждать слишком специальные случаи когда есть более универсальные алгоритмы. Согласен. В каких-то случаях может быть удобнее (качественнее) величину изменения сигнала измерять не в абсолютных единицах (количестве цифр младшего разряда индикатора), а в относительных - процентах от предыдущего значения. И порог для гистерезиса также вычислять в процентах. Это в тех случаях, когда измеряемое значение может изменяться в широких пределах, и величина шума в нём - зависит также от текущего уровня сигнала, а не абсолютная. Например: датчик оборотов двигателя. Который может крутиться и 4000 об/мин и 100 об/мин и стоять на месте. Цитата Поделиться сообщением Ссылка на сообщение Поделиться на другие сайты Поделиться