测量,信号处理中的精度分析 误差传播理论

可以说几乎任何加工都有误差,任何测量都有误差!我们测量得到的信号通常是叠加了噪声在里面,也就是说信号具有了一定的波动,或者说信号测量结果具有一定的不确定性,而对信号进行某些处理后,信号的波动会变成什么样呢?这通常可以用误差传播理论来解决:对于y=f(x),已知x的精度/波动大小,求y的精度/波动大小。比如采集N张照片取平均,能够把信噪比提升多少倍;拍多张照片合成提高图像质量,机器学习同时训练多种模型综合进行判断提高准确度。它一方面基于y与x的导数,另一方面,利用了:对同一个信号多次采样,信号本身是线性相关的,可以直接累加或相减,而噪声是相互独立正交的,因此总的噪声需要用平方和开根号。此外似乎还假设了噪声是正态分布的

此外,除了x的单次测量精度和N次测量精度可以计算,基于N个测量数据的标准差和方差的精度也有人进行了研究,见文献:Standard Errors of Mean, Variance, and Standard Deviation Estimators, Sangtae Ahn and Jeffrey A. Fessler, EECS Department, The University of Michigan, July 24, 2003

      误差无处不在,尤其是对于测量和加工。比如拿一把直尺测量一个圆的直径,用一个万用表测量一个电阻、电压的大小,加工一批零件的尺寸,可能会发现多个个体、多次测量的结果有一个微小的变动。而很早老师就教导我们:多次测量求平均可以提高测量精度。那么精度到底是什么?多次平均到底能将精度提高多少倍,测量10次与测量100次平均得到的精度一样吗?测量10次求平均难道能将精度提高10倍?

    从信号的角度来讲,那个微小的波动就是一种噪声,叠加在测量的信号之上。如图1,信号处理中常常用到均值滤波等方法来抑制噪声,某种程度上就利用了多次测量求平均提高精度的原理。

图1

在讨论精度之前,首先讨论统计学上对精度(precision)和准确度(accuracy)是怎么定义的。

Precisionis about how close measurements are to one another.
Accuracy is about how close measurements are to the ‘true answer’

图2

也就是说,精度是指多次测量的结果之间的相近程度,测量的重复性大小,可以用标准差来描述,标准差越大,那么测量结果之间的偏差也就越大。而准确度是指测量结果和“真实值”的相近程度。图2形象的展示了3种精度和准确度之间的联系,图中箭射中的位置即为测量值,而靶心是“真实值”。连续几次射中的位置越集中,说明精度越高(和距离靶心的距离无关),但是准确度却决定于射中位置和靶心的距离,可以考虑用平均的中心位置与靶心的距离来度量。

因为测量总是存在误差,那么给出一个测量值的时候,往往也会给出它的误差范围:如X+Δx。比如你去买电阻,可能会有5%误差的,1%误差的,价格也就不一样。这个1%是相对误差,这是因为误差往往和测量对象的大小有关,测量值越大,往往能够容忍的误差就越大。对一个1kg和100kg的物体同样增加1g的重量,你的感知肯定是不一样的。加工一个1厘米和1米的零件,都要加工到1微米的表面精确度,难度不是一个数量级的。

但是这个误差Δx定义往往比较模糊。它可以是X测量多次的标准差,也可以是标准差的两倍,三倍等,也可以是测量中的发现最大误差。测量误差往往符合正态分布,根据正态分布的3σ原则:

数值分布在(μ-σ,μ+σ)中的概率为0.6826

数值分布在(μ-2σ,μ+2σ)中的概率c为0.9544

数值分布在(μ-3σ,μ+3σ)中的概率为0.9974

可以认为,Y 的取值几乎全部集中在(μ-3σ,μ+3σ) 区间内,超出这个范围的可能性仅占不到0.3%。因此Δx定义为3σ可能是比较恰当的。实际使用的很可能是标准差。

为了讨论的方便,这里的精度(也可以指误差、不确定性)统一指标准差,而实际的精度则可以直接乘以相应倍数即可。这相当于是对精度做了一个建模,那么接下来就可以用数学方法来对其进行运算和推导了。有一个理论叫误差传播理论(error propagation, erroranalysis),可以非常方便的对精度进行分析。

首先看一个最简单的情况,如图3所示。

A是测量对象,其精度已知(通过实验数据的标准差计算等等得来)。Z=f(A)是关于A的函数。当A有一个αA的波动(足够小)时,根据微积分的相关知识,可以得到Z的波动是

比如A是黄金的重量,Z是黄金的价格,Z=100*A。标准品的重量10g,但是会有个别比10g略重或者略轻一点,那么实际的价格应该加上或者减去比例系数乘以波动的重量。

基于此,那么对于更加复杂的函数应该怎么算呢?

对于Z=f(x1,x2,x3,L,xn)

完整的误差传播理论如下:

注意这需要在x1,x2,x3,L,xn的误差随机并独立的情况下才成立,否则不能这样计算。也可以用下面的公式来进行一个大概判断,这不需要满足独立的条件:

    上面的误差传播公式在测量、信号、图像处理等领域中有比较广泛的应用。举个简单的例子,测量一块长方形地皮的面积,测量的长度为50米,误差为0.2米,测量的宽度为20米,误差为0.1米。假设长宽测量误差相互独立。显然,最终测量的面积为1000平方米,但该面积的测量误差是多少?

这里Z=f(x1,x2)=x1*x2。x1和x2分别为长和宽。应用误差传播理论,面积的精度(误差)为:

再回到最初的问题,假定单次测量的误差为Δx,测量N次取平均,平均之后的结果精度是多少?这里

应用误差传播理论,最终误差为:

可见,为了将精度提高一倍(误差减少为原来一半),必须至少测量4次取平均,而要将精度提高到原来的10倍,则至少需要测量100次取平均。

把M个元素分成N组,每组内求平均和标准差,那么这N个平均值和标准差的标准差就是均值和标准差的标准差,前面介绍了均值的精度也就是均值的标注差,另外标准差的标准差也是有相应公式求取的。

有些问题似乎不能简单用误差传播理论得到,例如x是0均值标准差为σ的正太分布随机数/噪声,因此x的单次测量精度为σ,那么x的平方的单次测量精度是多少?这个问题看似不能直接用这个误差传播理论计算,因为算出来是0,如果x的标准差不变,均值远离0,则还是可以使用这个公式的。这个问题应该需要更高深的数学。另外,如果不知道该用什么理论计算,可以参考另一篇博客,使用Matlab仿真一下就可以了,即用数值方法计算,而不是用符号计算。

误差传播理论的一些其他应用

1. 深度学习常用的精度比较,即比较加速器或者低精度计算结果与CPU fp32/fp64高精度结果的误差

常用公式allclose:

numpy.allclose — NumPy v1.24 Manual

判断依据是abs(actual - ref) < abs(ref) * rtol + atol

这里第一项应用了误差大小跟数值大小本身有关的经验常识(但跟根据上面所讨论的,误差跟数值大小成线性关系倒不见得成立,这说明如果要比较不同结果导致不同大小范围的输出时,也许应该采用不同的rtol (relative tolerance)),但是这一项在基准值为0时不适用,如果没有第二项,那么在某一个特定输入导致基准结果为0时,对该输入的误差容忍为0,这在实际上通常是不可能的。因为即使在基准值为0,系统也夹带了一些噪声或误差,而第二项正是为了应对这种场景。这个rtol和atol也有点像大学物理实验里面的随机误差和系统误差。

在实际使用过程中这个公司往往会遇到一些问题,即往往少数异常点导致无法allclose,导致需要增大rtol和atol,一个解决方案是可以考虑再引入一个错误率的阈值,即在指定rtol和atol下错误个数占总数的比例小于etol。

2. 如何组合多个精度不同的结果得到一个更高精度的结果?

上面多测测量直接求平均,其实是假定了每次测量的误差/精度是一样的,因此所有结果直接平均,也就是每个结果权重相同的加权平均可能得到最高精度的结果。

但是如果多次测量每次测量的误差不一样呢,例如哈勃测了一个结果,误差为100,韦伯测了一个结果,误差为10,那么如何组合这两个结果得到一个误差同时比哈勃和韦伯结果误差都小的结果呢?其实一种最简单的方法即对上面的权值相同的加权平均稍加改进:对不同测量采用不同的权重的加权平均,(显然应该对精度高的测量用大权重,精度低的测量用低权重),再基于最优化的方法得到不同测量应该使用的最佳权重。

参考文献:

《Measurements and their Uncertainties A practical guide to modern error analysis》

《An Introduction To Error Analysis The Study Of Uncertainties In Physical Measurements》

Uncertainty of Measurement: A Review of the Rules for Calculating Uncertainty Components through Functional Relationships

  Luchang Li

  2016.5.26

  • 1
    点赞
  • 20
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Luchang-Li

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值