循环数据的均值滤波方法

江枫思渺然 提交于 2019-12-05 17:04:00

        对于角度传感器的输出值进行均值滤波时,在角度的循环点处因数据值的非连续性,如果不对原始数据进行处理做会出现错误数据,如(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;

        }

 

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!