На днях встала задача запрограммировать устройство для измерения скорости потока воздуха. В качестве измеряющего элемента — датчик не понятно какого производителя, нет ни характеристик ни каких-либо адекватных параметров. Выбора не было, пришлось снимать градуировочные характеристики и выводить передаточную функцию «отсчеты АЦП-поток».
Поскольку датчик, как и практически любое средство измерения, очень чувствителен к температуре то мне необходимо было снять семейство характеристик (минимум 3) для разных температур.
Данные можно занести в MathCad разными способами, я предпочел это сделать в виде транспонированных векторов-строк:
После этого нужно «волевым» решением задать вид аппроксимирующей функции и произвести аппроксимацию каждой градуировочной характеристики. Так, мои характеристики удачно аппроксимируются полиномом третьей степени, воспользовавшись функцией linfit, которая ищет решение в виде линейных комбинаций произвольных функций, я получил коэффициенты для трех полиномов:
Чтобы посмотреть насколько «удачно» экспериментальные данные моделируются полученным полиномом можно построить график:
Теперь, чтобы ввести поправку по температуре, нужно найти зависимость каждого из коэффициентов полинома от температуры, т.е. проделать всё вышеописанное только для коэффициентов. В роли экспериментальных данных теперь будут сами коэффициенты и значения температуры. Мне очень хотелось, что зависимость от температуры была линейной, возможно использование функции linfit излишне для линейной апроксимации, но все же:
Наконец желаемая зависимость предстает в следующем виде:
Комментируя результат, отмечу, что получилось не очень удачно, говоря откровенно отвратительно. Характеристики были изначально плохо сняты, сказалось отсутствие нормального стенда. Да и вообще задача калибровки далеко не дилетантская, «на коленке» ее не сделаешь. Но мне хотелось рассказать про подход.
Автор: yanvasilij