新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計應(yīng)用 > 10種簡單的數(shù)字濾波算法(C語言源程序)

        10種簡單的數(shù)字濾波算法(C語言源程序)

        作者: 時間:2011-03-27 來源:網(wǎng)絡(luò) 收藏

        假定從8位AD中讀取數(shù)據(jù)(如果是更高位的AD可定義數(shù)據(jù)類型為int),子程序為get_ad();
        1、限副
        /* A值可根據(jù)實際情況調(diào)整
        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值可根據(jù)實際情況調(diào)整
        排序采用冒泡法*/
        #define N 11
        char filter()
        {
        char value_buf[N];
        char count,i,j,temp;
        for ( count=0;countN;count++)
        {
        value_buf[count] = get_ad();
        delay();
        }
        for (j=0;jN-1;j++)
        {
        for (i=0;iN-j;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、算術(shù)平均濾波法
        /*
        */
        #define N 12
        char filter()
        {
        int sum = 0;
        for ( count=0;countN;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;countN,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;countN;count++)
        {
        value_buf[count] = get_ad();
        delay();
        }
        for (j=0;jN-1;j++)
        {
        for (i=0;iN-j;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;countN-1;count++)
        sum += value[count];
        return (char)(sum/(N-2));
        }
        6、限幅平均濾波法
        /*
        */
        略 參考子程序1、3
        7、一階滯后濾波法
        /* 為加快程序處理速度假定基數(shù)為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、加權(quán)遞推平均濾波法
        /* coe數(shù)組為加權(quán)系數(shù)表,存在程序存儲區(qū)。*/
        #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,countN;count++)
        {
        value_buf[count] = get_ad();
        delay();
        }
        for (count=0,countN;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、限幅消抖濾波法
        /*
        */

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

        濾波器相關(guān)文章:濾波器原理


        c語言相關(guān)文章:c語言教程


        濾波器相關(guān)文章:濾波器原理




        評論


        相關(guān)推薦

        技術(shù)專區(qū)

        關(guān)閉
        主站蜘蛛池模板: 衡山县| 桂阳县| 晋州市| 池州市| 惠水县| 敦煌市| 同仁县| 北川| 香格里拉县| 亚东县| 五指山市| 如东县| 姚安县| 虹口区| 祥云县| 沽源县| 新宁县| 新邵县| 中西区| 勃利县| 蓝田县| 江津市| 板桥市| 庄浪县| 土默特左旗| 泾阳县| 太康县| 资中县| 沙洋县| 孟州市| 潜山县| 南城县| 牡丹江市| 新宁县| 长治县| 康乐县| 通化市| 塘沽区| 长海县| 阿克陶县| 衡阳市|