算法问题求解:环形变量如何求平均值

2019-03-24 10:54发布

本帖最后由 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相差甚远。有没有什么好的算法可以对这样的环形值域变量求取平均值? 此帖出自小平头技术问答
友情提示: 此问题已得到解决,问题已经关闭,关闭后问题禁止继续编辑,回答。
该问题目前已经被作者或者管理员关闭, 无法添加新回复
17条回答
tianshuihu
1楼-- · 2019-03-24 12:08
< 先预处理然后再进一步处理

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

实现大致如下

if(data>=(MAX-MAX_ERR)) //(MAX定义为周期满量程360,MAX_ERR可以定义为10)
data-=MAX;
  
qiushenghua
2楼-- · 2019-03-24 14:13
 精彩回答 2  元偷偷看……
tianshuihu
3楼-- · 2019-03-24 19:34
是有点麻烦,没考虑周全。。。

再提供一种思路

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




tianshuihu
4楼-- · 2019-03-24 20:59
本帖最后由 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;
}
...







qiushenghua
5楼-- · 2019-03-24 22:12
 精彩回答 2  元偷偷看……
tianshuihu
6楼-- · 2019-03-25 01:11
哈哈,是的,是的。。。

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

一周热门 更多>

相关问题

    相关文章