新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機軟件濾波方法

        單片機軟件濾波方法

        作者: 時間:2016-12-01 來源:網絡 收藏
        10種軟件濾波方法的示例程序

        假定從8位AD中讀取數據(如果是更高位的AD可定義數據類型為int), AD采的返回給 get_ad();函數.

        本文引用地址:http://www.104case.com/article/201612/324119.htm

        1、限副濾波
        /* A值可根據實際情況調整
        value為有效值,new_value為當前采樣值
        濾波程序返回有效的實際值 */
        #define A 10

        char value;

        char filter()
        {
        char new_value;
        new_value = get_ad();
        if ( ( new_value - value > A ) || ( value - new_value > A )
        return value;
        return new_value;

        }

        2、中位值濾波法
        /* N值可根據實際情況調整
        排序采用冒泡法*/
        #define N 11

        char filter()
        {
        char value_buf[N];
        char count,i,j,temp;
        for ( count=0;count {
        value_buf[count] = get_ad();
        delay();
        }
        for (j=0;j {
        for (i=0;i {
        if ( value_buf[i]>value_buf[i+1] )
        {
        temp = value_buf[i];
        value_buf[i] = value_buf[i+1];
        value_buf[i+1] = temp;
        }
        }
        }
        return value_buf[(N-1)/2];
        }

        3、算術平均濾波法

        #define N 12

        char filter()
        {
        int sum = 0;
        for ( count=0;count {
        sum + = get_ad();
        delay();
        }
        return (char)(sum/N);
        }

        4、遞推平均濾波法(又稱滑動平均濾波法)
        #define N 12

        char value_buf[N];
        char i=0;

        char filter()
        {
        char count;
        int sum=0;
        value_buf[i++] = get_ad();
        if ( i == N ) i = 0;
        for ( count=0;count sum = value_buf[count];
        return (char)(sum/N);
        }

        5、中位值平均濾波法(又稱防脈沖干擾平均濾波法)
        #define N 12

        char filter()
        {
        char count,i,j;
        char value_buf[N];
        int sum=0;
        for (count=0;count {
        value_buf[count] = get_ad();
        delay();
        }
        for (j=0;j {
        for (i=0;i {
        if ( value_buf[i]>value_buf[i+1] )
        {
        temp = value_buf[i];
        value_buf[i] = value_buf[i+1];
        value_buf[i+1] = temp;
        }
        }
        }
        for(count=1;count sum += value[count];
        return (char)(sum/(N-2));
        }

        6、限幅平均濾波法
        /*
        */
        略 參考子程序1、3

        7、一階滯后濾波法
        /* 為加快程序處理速度假定基數為100,a=0~100 */

        #define a 50

        char value;

        char filter()
        {
        char new_value;
        new_value = get_ad();
        return (100-a)*value + a*new_value;
        }

        8、加權遞推平均濾波法
        /* coe數組為加權系數表,存在程序存儲區。*/

        #define N 12

        char code coe[N] = {1,2,3,4,5,6,7,8,9,10,11,12};
        char code sum_coe = 1+2+3+4+5+6+7+8+9+10+11+12;

        char filter()
        {
        char count;
        char value_buf[N];
        int sum=0;
        for (count=0,count {
        value_buf[count] = get_ad();
        delay();
        }
        for (count=0,count sum += value_buf[count]*coe[count];
        return (char)(sum/sum_coe);
        }

        9、消抖濾波法

        #define N 12

        char filter()
        {
        char count=0;
        char new_value;
        new_value = get_ad();
        while (value !=new_value);
        {
        count++;
        if (count>=N) return new_value;
        delay();
        new_value = get_ad();
        }
        return value;
        }

        10、限幅消抖濾波法
        /*
        */



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 楚雄市| 郓城县| 凭祥市| 左贡县| 连云港市| 台北县| 盱眙县| 吉首市| 祥云县| 馆陶县| 苍山县| 九龙县| 仁布县| 天峨县| 谷城县| 南汇区| 迁西县| 贡山| 田阳县| 广州市| 南城县| 宁河县| 云龙县| 成武县| 阿拉尔市| 五华县| 涟水县| 山西省| 宁远县| 宁蒗| 郯城县| 祁连县| 侯马市| 杭州市| 宜城市| 广水市| 江门市| 新安县| 南昌县| 扬州市| 泰州市|