• 循环数据的均值滤波方法


            对于角度传感器的输出值进行均值滤波时,在角度的循环点处因数据值的非连续性,如果不对原始数据进行处理做会出现错误数据,如(354 + 5)/2= 179.5,正常值应为359.5。采用把角度值转化为三角函数值滤波后再通过反函数(结合象限)求值的方法较多,此外对于两个数据值的滤波可通过差值判断的方法也可以解决,对于多数据的滤波有什么更高效的方法呢?

           对落入阈值范围(360度情况下如:330-360;0-30)的数据采取标记的方法,在要平均的数据中只有在两种数据都存在的情况下对数据进行处理就可以了。

           int num = 5; //滤波值数量

            int i = 0;//输入值放入数组循环

            int m = 0;//标记

            int n = 0;//标记

            double[] data = new double[5];//将滤波值置入数组

            double temp, output;

            void Filter(double input)

            {

                data[i] = input;

                if (m > 0)

                    m--;

                if (n > 0)

                    n--;

                if (input > 330)

                    m = num;

                if (input < 30)

                    n = num;

                temp = 0;

                if (m > 0 && n > 0)

                {

                    for (int j = 0; j < num; j++)

                        if (data[j] < 30)

                            temp += 360;

                    output = (data.Sum() + temp) % 360;

                }

                else

                    output = data.Average();

                i++;

                if (i == num)

                    i = 0;

            }

  • 相关阅读:
    用例图会不会
    存储过程进阶(vb.net+SQL Server2008环境)
    众说纷纭,我也说“云”
    三层架构之抽象工厂加反射实现数据库转换
    三层架构之抽象工厂加反射&mdash;&mdash;实现数据库转换
    存储过程懂不懂
    8个对于Web设计和开发人员非常有用的在线工具
    TexturePacker的使用(图片打包再一起)
    cocos2dx游戏摇杆的实现方法
    cocos2dx 矩形碰撞检测
  • 原文地址:https://www.cnblogs.com/xrll/p/11934981.html
Copyright © 2020-2023  润新知