4682|17

1193

帖子

0

TA的资源

纯净的硅(高级)

楼主
 

算法问题求解:环形变量如何求平均值 [复制链接]

本帖最后由 qiushenghua 于 2014-9-9 18:04 编辑

在工程中遇到了这么个问题:
传感器传递过来的数据误差比较大,为了提高测量精度,需要对传值求平均值。
初步计划对连续采得的5个数求平均值并认为其是这个变量的近似值。
但是,尴尬的问题来了:
需要计算的变量是一个角度量,取值范围在0-359之间,在0度附近的时候,获得的数据可能是0-5到355-359之间的任意一个数。
举个栗子:采样的数据是1,2,359,358,0,比较容易的可以看出,正确的平均值应该是0才对,可是,按照(1+2+359+358+0)/5计算,结果是144,与正确值0相差甚远。有没有什么好的算法可以对这样的环形值域变量求取平均值?

最新回复

你可以在359的时候设置一个标志,表示如果这个时候到0说明是转过了360度,传感器的值应该加一个360  详情 回复 发表于 2014-9-11 15:33
 
点赞 关注

回复
举报

1658

帖子

1

TA的资源

纯净的硅(高级)

沙发
 
先预处理然后再进一步处理

具体可以先判断如果data接近于满量程,先减去一个周期值,再继续下一步

实现大致如下

if(data>=(MAX-MAX_ERR)) //(MAX定义为周期满量程360,MAX_ERR可以定义为10)
data-=MAX;
  

点评

治标不治本啊! 这么一来,350,349,351,352,348的平均值又不对了  详情 回复 发表于 2014-9-9 19:52
 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

板凳
 
tianshuihu 发表于 2014-9-9 18:54
先预处理然后再进一步处理

具体可以先判断如果data接近于满量程,先减去一个周期值,再继续下一步

治标不治本啊!
这么一来,350,349,351,352,348的平均值又不对了
 
 
 

回复

1658

帖子

1

TA的资源

纯净的硅(高级)

4
 
是有点麻烦,没考虑周全。。。

再提供一种思路

可以考虑以第一个数据为基准,如果两数差值大于 MAX/2,可以判断数据存在跨周期情况,那么修正后在处理




 
 
 

回复

1658

帖子

1

TA的资源

纯净的硅(高级)

5
 
本帖最后由 tianshuihu 于 2014-9-9 20:59 编辑

伪代码

sum=0;
temp=*P;
p++;

for(; ;)
{
    if( *P - temp > 半周期) sum += (*P - 周期);
    else if( *P-temp < -半周期) sum+=(*P +周期);   
    else  sum += *P;
}
...







点评

是个办法,最后还要再加一句:average%=360; 不然平均值有可能超出0-359的范围  详情 回复 发表于 2014-9-9 22:55
 
 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

6
 

是个办法,最后还要再加一句:average%=360;
不然平均值有可能超出0-359的范围
 
 
 

回复

1658

帖子

1

TA的资源

纯净的硅(高级)

7
 
哈哈,是的,是的。。。

不过最好先加上360再对360取余,因为有可能出现负值
 
 
 

回复

1800

帖子

0

TA的资源

五彩晶圆(初级)

8
 
提个问题,难道在测量359°附近时不会出现0、1、2之类的数值

点评

当然会啊,提出的问题就是解决这个的平均值是359和0相差不大,都可以认为是准确值,但是如果直接算的话,平均值可能偏差得很离谱。  详情 回复 发表于 2014-9-10 09:45
 
 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

9
 
sint27 发表于 2014-9-10 08:27
提个问题,难道在测量359°附近时不会出现0、1、2之类的数值

当然会啊,提出的问题就是解决这个的。
平均值是359和0相差不大,都可以认为是准确值,但是如果直接算的话,平均值可能偏差得很离谱。



点评

我以为0和359是区别很大的,那样的话以第一个数据为基准的话就不太合理了 既然0和359对于你来说没有太大区别,那是我多虑了  详情 回复 发表于 2014-9-10 10:51
 
 
 

回复

1800

帖子

0

TA的资源

五彩晶圆(初级)

10
 
qiushenghua 发表于 2014-9-10 09:45
当然会啊,提出的问题就是解决这个的。
平均值是359和0相差不大,都可以认为是准确值,但是如果直接算的 ...

我以为0和359是区别很大的,那样的话以第一个数据为基准的话就不太合理了
既然0和359对于你来说没有太大区别,那是我多虑了

点评

为什么说"以第一个数据为基准的话就不太合理了" 对于下面两个等效序列,分别以第一个数据为基准进行变换 思路如下 原始数据 ——> 预处理 —— > 求平均值 —— >周期变换 358 1  详情 回复 发表于 2014-9-10 11:54
 
 
 

回复

1658

帖子

1

TA的资源

纯净的硅(高级)

11
 
sint27 发表于 2014-9-10 10:51
我以为0和359是区别很大的,那样的话以第一个数据为基准的话就不太合理了
既然0和359对于你来说没有太大 ...

为什么说"以第一个数据为基准的话就不太合理了"

对于下面两个等效序列,分别以第一个数据为基准进行变换
思路如下
原始数据         ——> 预处理                     —— > 求平均值 —— >周期变换
358 1 357 0 2  ——> 358 361 357 360 362 —— > 359.6     ——> 359.6
1 357 0 2 358  ——> 1 -3 0 2 -2                —— > -0.4        ——> 359.6

效果是一样的啊

点评

就像你举的两个例子,结果都是359,但是由于单次误差的情况,是不是有可能实际上是0°或者1°然后你计算出来是359°呢 但是楼主一旦说对于项目来说0°和359°没什么区别,那你的方法就可行了  详情 回复 发表于 2014-9-10 13:40
原始数据 ——> 预处理 —— > 求平均值 —— >周期变换 358 2 2 2 2 ——> 358 362 362 362 362 —— > 361.2 ——> 1.2  详情 回复 发表于 2014-9-10 13:37
 
 
 

回复

1800

帖子

0

TA的资源

五彩晶圆(初级)

12
 
本帖最后由 sint27 于 2014-9-10 13:41 编辑

见楼下
 
 
 

回复

1800

帖子

0

TA的资源

五彩晶圆(初级)

13
 
本帖最后由 sint27 于 2014-9-10 13:47 编辑
tianshuihu 发表于 2014-9-10 11:54
为什么说"以第一个数据为基准的话就不太合理了"

对于下面两个等效序列,分别以第一个数据为基准进行变 ...

就像你举的两个例子,结果都是359,是不是有可能实际上角度是0°或者1°然后通过测量计算出来是359°呢
这在数值上差别非常大,但是楼主一旦说对于项目应用来说0°和359°没什么区别,那你的方法就可行了

点评

这完全可能是由于采样误差造成的。 注意标题本来就是说“环形变量”,用“周期变量”描述可能会更准确一些。 既然5次连续采样,既有接近360的值,又有接近0的值,那就说明结果落在0附近或者360附近都是合理  详情 回复 发表于 2014-9-10 14:52
 
 
 

回复

1193

帖子

0

TA的资源

纯净的硅(高级)

14
 
sint27 发表于 2014-9-10 13:40
就像你举的两个例子,结果都是359,是不是有可能实际上角度是0°或者1°然后通过测量计算出来是359°呢
...

这完全可能是由于采样误差造成的。


注意标题本来就是说“环形变量”,用“周期变量”描述可能会更准确一些。

既然5次连续采样,既有接近360的值,又有接近0的值,那就说明结果落在0附近或者360附近都是合理的。

但是按照一般平均值的计算方法,结果可能会落在距离0或者360都很远的位置上。这给我们提了个醒:很多时候采样求平均能提高测量精度,但是在某些特定情况下求平均可能会直接造成测量结果出错,需要仔细甄别。

点评

明白你要表达的意思了 说到这个想起了前一段时间用到的陀螺仪 它的数据输出在±180°附近会有跳变,不过在这个点附近是等效的;但是旋转360°和720°又是截然不同的概念,这个就要另外区分了  详情 回复 发表于 2014-9-10 20:31
 
 
 

回复

1658

帖子

1

TA的资源

纯净的硅(高级)

15
 
qiushenghua 发表于 2014-9-10 14:52
这完全可能是由于采样误差造成的。



明白你要表达的意思了

说到这个想起了前一段时间用到的陀螺仪
它的数据输出在±180°附近会有跳变,不过在这个点附近是等效的;但是旋转360°和720°又是截然不同的概念,这个就要另外区分了
 
 
 

回复

112

帖子

0

TA的资源

一粒金砂(中级)

16
 
把数据处理到±180度再求平均值,然后再处理回360
 
 
 

回复

128

帖子

0

TA的资源

一粒金砂(中级)

17
 
LZ是在做定点高精度定位的仰角估算吗?
 
个人签名where there is wade,there is a way...
 
 

回复

2

帖子

0

TA的资源

一粒金砂(初级)

18
 
你可以在359的时候设置一个标志,表示如果这个时候到0说明是转过了360度,传感器的值应该加一个360
 
 
 

回复
您需要登录后才可以回帖 登录 | 注册

随便看看
查找数据手册?

EEWorld Datasheet 技术支持

相关文章 更多>>
关闭
站长推荐上一条 1/6 下一条

 
EEWorld订阅号

 
EEWorld服务号

 
汽车开发圈

About Us 关于我们 客户服务 联系方式 器件索引 网站地图 最新更新 手机版

站点相关: 国产芯 安防电子 汽车电子 手机便携 工业控制 家用电子 医疗电子 测试测量 网络通信 物联网

北京市海淀区中关村大街18号B座15层1530室 电话:(010)82350740 邮编:100190

电子工程世界版权所有 京B2-20211791 京ICP备10001474号-1 电信业务审批[2006]字第258号函 京公网安备 11010802033920号 Copyright © 2005-2025 EEWORLD.com.cn, Inc. All rights reserved
快速回复 返回顶部 返回列表