测量校准原理

测量校准原理

在实际测量中传感器实际测量值相比标准参考值(真实值)总是存在误差,即传感器无法准确的量化真实值,不仅如此,实际上两个相同的传感器在同一时刻测量同一个信号它们得出的结果也不同,为什么会这样?

这是因为传感器的物理特性受材料和制造工艺的限制,始终难以达到最优状态,同时也难以保证两个传感器的物理特性相同。

有没有可能让传感器在制造时达到理论物理特性,同时保证每个传感器物理特性相同,显然这是极为苛刻的,至少目前我们仅能无限的接近理论的极限,而无法直接突破理论,那是否就没有办法了呢?

1. 什么是校准

办法还是有的,除了改进制造工艺之外,我们可以通过在传感器内部对其测量到的数据进行矫正计算来补足实际测量与真实值的误差,即通过二次计算处理让测量值接近真实值,这就是校准。

值得一提的是,校准后也不能保证实际际测量值与真实值完全相同,校准只能 降低测量误差,保证实际测量值与真实值的误差最小。因为在实际中即使校准后的测量结果依旧会受到其工作环境的影响,例如温度,气压,工程就是这么的艰难,即使顶级标准设备也无法做到完全不存在误差,但标准设备距离理论确实是最近的。

下面我们一起了解一些校准方面的概念,并以万用表内部测量数据的校准为例,了解测量硬件内部将实际测量值矫正至接近实际值的方法是什么,注意这种方法适用于各种测量设备矫正。

2. 不确定度

不确定度是指真值所在的数值范围。例如,如果电压表的测量不确定度为 ± 0.1 V ±0.1V ±0.1V,那么当测量显示的电压为 10.0 V 10.0V 10.0V 时,真实电压值可能低至 9.9 V 9.9V 9.9V 或高达 10.1 V 10.1V 10.1V。如果 0.1 V 0.1V 0.1V 不确定度的覆盖率为 95 % 95\% 95%,则 10 V ± 0.1 V 10V±0.1V 10V±0.1V 范围内包含真值的置信度就为 95 % 95\% 95%。幸运的是,大多数结果都倾向于集中在可能范围的中间部分,因为随机不确定性往往遵循高斯分布或呈正态钟形曲线。

注意,使用 "不确定度"(即可能的误差量)而不是 "准确度" 来描述测量设备的准确度。在测量行业,仪器制造商使用准确度指标来表示使用仪器时可能出现的预期误差范围。然而 VIM 提出了将 "不确定度" 作为首选术语来描述仪器的测量指标的指导方针,所以不确定度才是讨论误差量时正确的描述方式。

3. 误差关系

上面说了,虽然测量设备实际测量值相比标准参考值(真实值)总是存在误差,但是大多数结果都倾向于集中在可能范围的中间部分,因为随机不确定性往往遵循高斯分布(即分布关系呈正态钟形曲线)。

所以也就是说,虽然测量总是存在误差,但是误差会呈现一定的规律(即测量值和真实值之间会遵循某种关系),这种关系只有线性和非线性两种。

线性关系 :指的是测量值和真实值的大小关系趋势在特定的数值范围内保持一致,这种关系通常可以使用一次函数 y = k x + b y=kx+b y=kx+b 来表示(其中 y y y 为实际值 x x x 为测量值)我们只要知道 k k k 和 b b b 就可以根据当前测量值 x x x 得出真实值 y y y,校准测量值非常容易。

非线性关系 :指的是测量值和真实值的大小关系趋势在特定的数值范围内会发生改变,意味着它们之间的关系更复杂,趋势时常发生改变,无法使用一次函数 y = k x + b y=kx+b y=kx+b 来表示,当然可以使用更复杂关系式去表示,例如二次,三次函数。还有一种办法是借助微分的思想,将特定数值范围划分为更小的区间,测量值与真实值的大小关系在这更小的区间内来不及改变,所以必然保持一致,此时就将非线性关系转化为了与之近似的多段线性关系,如下图。

对于非线性的关系,我们需要找出它们之间的复杂关系式是什么,这通常需要反复的取样获得足够多的样本才能进行推导,分段近似时需要划分出各个最优区间,并解出各个线性关系式,所以校准测量值非常困难。

随机关系:也叫不确定关系,实际测量值可以被校准的前提是它与真实值之间能呈现出某种规律,规律可简单或复杂规律,否则如果它们之间的关系是随机的则测量值无法被校准。

4. 线性校准

如果测量值和真实值的大小关系趋势在特定的范围内保持一致,那么说明测量值和真实值之间的关系是简单的,我们可以利用线性关系去校准测量值。

根据线性关系式 y = k x + b y=kx+b y=kx+b 可以知道,最重要的一件事是如何求出 k k k 和 b b b,其中 k k k 表示测量值与真实值之间的倍数关系, b b b 表示两者之间的偏移关系,如下图。

如果一次函数经过两点 ( x 0 , y 0 ) (x_{0},y_{0}) (x0,y0) 和 ( x 1 , y 1 ) (x_{1},y_{1}) (x1,y1) 根据一次函数性质可知:

k = ( y 1 − y 0 ) / ( x 1 − x 0 ) , b = y − k x k=(y_{1}-y_{0})/(x_{1}-x_{0}),b=y-kx k=(y1−y0)/(x1−x0),b=y−kx

其中 b b b 可以取两点坐标 ( x 0 , y 0 ) (x_{0},y_{0}) (x0,y0) 或 ( x 1 , y 1 ) (x_{1},y_{1}) (x1,y1) 中的 x , y x,y x,y 值来进行计算。

(1) 有了上面的分析之后,所以现在要做的是如何构造出两点坐标,根据上图(一次函数图像)可以知道 x x x 轴对应的是测量值, y y y 轴对应的是真实值,所以获取两个测量值和两个真实值即可构造两点。

(2) 为了关系式满足整个数值范围,构造两点时通常要在数值范围最小与最大处取对应测量值和真实值,对于测量来说在没有信号输入时自然可以取得最小测量值,此时对应的真实值必然为 0 0 0(是否为 0 视具体特性决定)。在输入最大信号时自然可以取得最大测量值,而对应的真实值必然为你输入的信号值。

什么是零偏?

对于测量来说在没有信号输入时因该可以取得为 0 的最小测量值,但是事实上并不是这样,但在实际中由于测量电路受到外部环境的影响即使没有信号输入也可以取得一个微弱且随机变化的非零值,这就是零偏。

每次设备校准前总要求自校正或自检操作,并且要求断开输入信号的连接,没错所谓自校其实就是为了构造两点坐标而获取和存储最小测量值(零偏)的过程。

(3) 对于取得最小的测量值和真实值 0,只要不输入信号即可,那最大处的测量值和真实值如何获取,答案是使用校准器,此时你需要一台校准器。校准器的本质是输出纯净的参考信号,并且信号可以由你定义,该参考信号作为 "真实值" 输入待校准的测量设备,并且被程序获取用于参数计算。

(4) 现在我们就可以根据前面分析的校准原理,以及一次函数 k k k 与 b b b 的计算公式,写出 k k k 与 b b b 的计算程序,如下:

c 复制代码
/**
 * In fact, it only needs one observation and one training data 
 * to know the proportional relationship between observation and training.
 * _T_bias, _T_meas, Training dataset; Training Data.
 */
uint8_t _gain_Kp_bias(float bias, float meas, float _T_bias, 
    float _T_meas, float * Kp, float * b)
{
    float _Kp = 1.0f, _Kz = 0.0f;
    uint8_t ret = 0;

    if (meas != bias) _Kp = (_T_meas - _T_bias) / (meas - bias);

    if ((_Kp > 0.1f) && (_Kp < 10.0f)) {
        _Kz = _T_meas - (meas * _Kp);
        *Kp = _Kp;
        *b = _Kz;
        ret = 1;
    }

    /*info("Y_bias: %e _T_bias: %e Y_meas: %e _T_meas: %e _Kp: %f _Kz: %e", 
        Y_bias, _T_bias, Y_meas, _T_meas, _Kp, _Kz);*/

    return ret;
}

其中 bias 表示没有输入信号时最小信号测量值,_T_bias 表示没有输入信号时最小信号真实值,该值为 0。meas 表示输入最大信号时最大信号测量值,_T_meas 表示输入最大信号时最大信号真实值,该值就是校准器输出值。Kpb 就是最终计算得到的一次函数需的 k k k 与 b b b。

(5) 最后就可以根据实际测量值和计算得到的 Kpb 以及 y = k x + b y=kx+b y=kx+b 来计算出实际测量值对应的真实值。

5. 非线性校准

等待内容整理,后续继续更新。。。

相关推荐
汉克老师1 小时前
GESP2024年3月认证C++六级( 第三部分编程题(1)游戏)
c++·学习·算法·游戏·动态规划·gesp6级
闻缺陷则喜何志丹1 小时前
【C++图论】2685. 统计完全连通分量的数量|1769
c++·算法·力扣·图论·数量·完全·连通分量
利刃大大1 小时前
【二叉树深搜】二叉搜索树中第K小的元素 && 二叉树的所有路径
c++·算法·二叉树·深度优先·dfs
CaptainDrake1 小时前
力扣 Hot 100 题解 (js版)更新ing
javascript·算法·leetcode
一缕叶2 小时前
洛谷P9420 [蓝桥杯 2023 国 B] 子 2023 / 双子数
算法·蓝桥杯
甜甜向上呀2 小时前
【数据结构】空间复杂度
数据结构·算法
Great Bruce Young2 小时前
GPS信号生成:C/A码序列生成【MATLAB实现】
算法·matlab·自动驾驶·信息与通信·信号处理
Mryan20052 小时前
LeetCode | 不同路径
数据结构·c++·算法·leetcode
qy发大财3 小时前
验证二叉搜索树(力扣98)
数据结构·算法·leetcode·职场和发展
人类群星闪耀时3 小时前
用深度学习优化供应链管理:让算法成为商业决策的引擎
人工智能·深度学习·算法