реклама на сайте
подробности

 
 
> Малоресурсный алгоритм измерения температуры
ARV
сообщение Jun 9 2009, 05:03
Сообщение #1


Профессионал
*****

Группа: Свой
Сообщений: 1 143
Регистрация: 30-09-08
Из: Новочеркасск
Пользователь №: 40 581



прошу помощи в плане общего алгоритма... лучшей темы для своего вопроса не нашел...

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

что сделано сейчас и что не удовлетворяет (псевдо-Си-код)
t2 = 0;
do{
t1 = t2;
pause_1s();
t2 = get_temperature();
} while (t1 != t2);

это дает отличный результат при измерении температуры воды (большая теплоемкость, контакт с датчиком идеальный, быстро его нагревает) - за 15 секунд получается верный результат. для тела человека как правило цикл завершается за 0,3-0,6°С до реальной температуры, что не устраивает. кроме того, процесс длится не менее 30 секунд...

какие будут советы?


--------------------
Я бы взял частями... но мне надо сразу.
Go to the top of the page
 
+Quote Post
 
Start new topic
Ответов
=AK=
сообщение Jul 6 2009, 05:36
Сообщение #2


pontificator
******

Группа: Свой
Сообщений: 3 055
Регистрация: 8-02-05
Из: страны Оз
Пользователь №: 2 483



Цитата(ARV @ Jun 9 2009, 14:33) *
прошу помощи в плане общего алгоритма... лучшей темы для своего вопроса не нашел...

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


Что-то вроде упрощенного фильтра Калмана. Рекурсивное усреднение (это займет минимум памяти) со скользящим весом (это даст максимально быстрое нахождение результата). Например, так.

Номер слева указывает порядковый номер измерения, res - 32-битное целое:

1: res = (meas << 16);
2,3: res = res - (res >> 1) + (meas << 15); // вес очередного измерения meas равен 1/2
4...7: res = res - (res >> 2) + (meas << 14); // вес измерения равен 1/4
8...15: res = res - (res >> 3) + (meas << 13); // вес измерения равен 1/8
... и т.д., однако далее некого предела вес уменьшать нельзя

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

Процедуру можно усовершенствовать, если переход на следующий шаг (с уменьшенным весом) тоже будет происходить в результате проверки, обнаруживающей, что результат стал изменяться сравнительно мало. Конечно, при этом доверительный интервал тоже должен уменьшаться на каждом шаге.
Go to the top of the page
 
+Quote Post



Reply to this topicStart new topic
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 


RSS Текстовая версия Сейчас: 13th August 2025 - 19:10
Рейтинг@Mail.ru


Страница сгенерированна за 0.01373 секунд с 7
ELECTRONIX ©2004-2016