Двухточечная калибровка

Урок про самый практичный приём: привести показания к правде по двум эталонным точкам.

Двухточечная калибровка — построение линейной зависимости «сырое значение → истинная величина» по двум известным эталонным точкам.

Каждый экземпляр датчика чуть отличается смещением нуля и наклоном. Двухточечная калибровка чинит обе беды разом: берём два эталона (например, лёд $0\,°C$ и кипяток $100\,°C$), снимаем сырые показания и строим прямую.

Формулы калибровки

По двум точкам $(x_1, y_1)$ и $(x_2, y_2)$, где $x$ — сырое показание, $y$ — истинная величина:

$$ a = \frac{y_2 - y_1}{x_2 - x_1}, \qquad b = y_1 - a\,x_1 $$

$$ y = a\,x + b $$

# Сырое напряжение -> температура.
# Эталон: 0.5 В = 0 °C, 2.5 В = 100 °C
x1, y1 = 0.5, 0.0
x2, y2 = 2.5, 100.0

a = (y2 - y1) / (x2 - x1)
b = y1 - a * x1
print("наклон a =", a, ", смещение b =", b)

def calibrate(v):
    return a * v + b

print("1.5 В ->", calibrate(1.5), "°C")

Вывод:

наклон a = 50.0 , смещение b = -25.0
1.5 В -> 50.0 °C

Коррекция нуля и масштаба

Иногда калибровку разделяют на два шага: сначала убирают смещение (offset), вычитая показание при нуле, затем масштабируют (gain), деля на чувствительность. Это удобно, когда нуль и масштаб уплывают независимо (например, от температуры).

# offset = сырое при истинном нуле
offset = 0.5
gain = (2.5 - 0.5) / (100 - 0)   # В на градус

def read(v):
    return (v - offset) / gain

for v in (0.5, 1.5, 2.5):
    print(v, "В ->", round(read(v), 1), "°C")

Вывод:

0.5 В -> 0.0 °C
1.5 В -> 50.0 °C
2.5 В -> 100.0 °C

Как работает под капотом

Двухточечная калибровка работает идеально, только если датчик действительно линеен между точками. Поэтому точки выбирают на краях рабочего диапазона — так максимум линейного участка попадает внутрь. Если характеристика изогнута, двух точек мало: середина диапазона уедет. Тогда переходят к трёх- и многоточечной калибровке или аппроксимации многочленом (следующий урок). Эталоны должны быть точнее датчика хотя бы вчетверо, иначе вы калибруете по кривому образцу.

Частые ошибки

  • Выбирать обе точки близко друг к другу — наклон посчитается с большой ошибкой.
  • Калибровать нелинейный датчик двумя точками — середина диапазона уйдёт.
  • Использовать неточный эталон — вся калибровка унаследует его погрешность.

Итог

  • Двухточечная калибровка строит прямую $y = a x + b$ по двум эталонам.
  • Наклон чинит масштаб, смещение чинит нуль.
  • Метод верен только для линейного датчика; иначе нужны больше точек.
Проверьте себя
1. Что чинит коэффициент b (смещение) в калибровке y = a·x + b?
AМасштаб показаний
BСдвиг нуля
CШум
DЧастоту дискретизации
2. Когда двухточечной калибровки недостаточно?
AКогда датчик линеен
BКогда характеристика заметно изогнута
CКогда эталоны очень точные
DВсегда достаточно