作者 主题: 理解【时刻点】和【时间区间】的区别和联系---关于算数平均数的Arduino应用  (阅读 3635 次)

风的孩子

  • Moderator 版主
  • Newbie
  • *****
  • 帖子: 9
我们首先从一个例子入手:

假设我们设定一个这样的条件,我们以判断一个人(假如叫做张三)的嘴里的细菌多少来断定一个人是否讲卫生。那么,我们如何公允地判断他是否“真正”地讲卫生呢?

如何减少嘴里面的细菌?-----我们用刷牙的办法
可是,每次刷牙之后,细菌会随着时间的延长而不断地滋生,直到下一次刷牙重新清理了细菌为止。

那么,既然我们要公允的判断这个人是否讲卫生,合理地做法是对一个人进行一段时间的考察,然后再根据每次检查他嘴里面的细菌数量的平均数来进行判断。

我们当然不能武断地用下面办法:
在任何时候检查他,只要发现细菌过多就宣称他是不将卫生的,而只要发现细菌很少就宣称他是讲卫生的。

因为,这会出现这样一个荒唐的局面:
A兄弟,是一个一年都不刷牙的人,被抽检到的时候,正好他良心发现,刚刚刷了牙,所以细菌几乎没有。
B兄弟,是一个每天刷5次牙的人,被抽检到的时候,而正好他准备要刷牙了(也就是距离他上次刷牙已经有一些时间了)。
比较A兄和B兄,如果以一次的状态判断出来的结果(即:B兄比A兄还更不讲卫生),显然这和我们公认的结果完全相反。

所以,这就需要我们进行所谓的“加大采样”的方法,即:我们在连续一年的时间里面多次抽检,比如说一天检查一次,连续监测某个人365天嘴里细菌的平均数量。平均值高的必然比平均值低的人更加不讲卫生。

这样,毫无疑问,我们可以立即得出一个公允的判断。

那么在Arduino的世界里面,有很多的时候,我们并不能简单地通过开关的通断,甚至不能使用AD读取到的值来判断情况的时候(如震动开关的读取,参照连接:http://www.hudo.it/index.php/topic,310.0.html)
平均值法就为我们提供了一个解决的思路。
平均值法的基本原理和我们判断一个人是否讲卫生的判断方法一致。
就是我们连续读取某个传感器的值,然后求取这个时间段的平均值,从而得到环境的当前均衡状态,而不是某一个时刻的状态。
这种方法适合于那些读值总是在0-1023之间直接跳跃,却存在倾向性的传感器状态读取上。
如光敏电阻(如我们判断当前是白天还是黑夜,我们不能因为晚上忽然闪了一下电,就认为天亮了),震动开关(我们不能认为空气流动给震动开关带来了扰动,就认为我们已经拿着开关在晃悠了)等。

而关于具体的实践案例,也请参照我前面发送的链接。

当然,平均值法也存在一个问题,当一种外界变化不是随机的,而是呈现固定的变化频率,那么平均值法就会失败。
就好像,两个同样是讲卫生的人,一个人我们每次检查他的时候,他正好要准备刷牙,而另外一个人我们每次检查他的时候,正好他刚刚刷过牙。这个时候,我们得出的结论报告就是活天冤枉了。

也即:平均值法能够消除的是随机的误差,而不是一些系统性的偏差。这一点要无比注意。

ArdyPro

  • Newbie
  • *
  • 帖子: 17
这个题目好大,这一个话题都能出好几本书才能讲完。

统计学里,有些随机误差偏离正常值太远的话,要被剔除,怎么办?如何设定那个阈值?

还有误差一正一负的情形,比如一个5V电源,测出来几个电压(4.8,5.1,4.9,5.2),一平均还就是5.0V,貌似精度很高,其实误差蛮大。

风的孩子

  • Moderator 版主
  • Newbie
  • *****
  • 帖子: 9
这个题目好大,这一个话题都能出好几本书才能讲完。

统计学里,有些随机误差偏离正常值太远的话,要被剔除,怎么办?如何设定那个阈值?

还有误差一正一负的情形,比如一个5V电源,测出来几个电压(4.8,5.1,4.9,5.2),一平均还就是5.0V,貌似精度很高,其实误差蛮大。


你的这个说法是我也赞同,的确,这个题目真的太大了。

但是,我又不得不这么提出来,因为,平均值算法可以说是统计学里面的第一种消除误差的算法,而对于测控学来说,对于外界情况的判断,平均值法也是最为基础的一种算法。

也正是因为世界的“不可知”,干扰太多,旧有的抗干扰的算法才会总是显得落后,不能满足需要,所以才会有统计学的不断发展。

如为了消除过于离谱的随机误差,又在平均值法的基础上发展出带阈值限定的平均值法(即,当我们确认读数只可能在某个范围内的时候,那么传感器读取到超过这个范围的数,我们就认为这个数是非法的,并不加入平均值计算中)。到后来,又因为时间效率及采样时效性的原因又发展出移动平均等等。。。

而你所说的一正一负的这种变动,一方面这就是所谓的振动,振动的积分除以时间,其实经常就是我们的最终目的。而为了考察得更细,所以才会有后来的均方差的概念提出来,以至于微积分的概念,以及后来扩展到PID算法,kalman算法,神经网络算法,遗传算法等等等等。

综上所述,我觉得,我们不能因为有太多的先进工具摆着,就去忽视平均值算法。
一方面,对于小白菜而言,这是最为基础的一种处理方法,第二个,也只有站在了最基础的地面上,才可以不断地对自己的知识进行升级好扩展。
不能立即平均值算法的人,是很难理解那些更加复杂的概念的。

最后,本帖子的主要目的是为了让读者有一个基本的概念:“世界的不可知,导致我们为了获得自己想要的世界某事物的状态必须能够提出一种方法,至少,粗略地解决我们的问题,达到我们的目的。”

Tags: