新聞中心

        EEPW首頁 > 嵌入式系統(tǒng) > 設(shè)計(jì)應(yīng)用 > 單片機(jī)10種軟件濾波程序

        單片機(jī)10種軟件濾波程序

        作者: 時(shí)間:2016-11-27 來源:網(wǎng)絡(luò) 收藏
        假定從8位AD中讀取數(shù)據(jù)(如果是更高位的AD可定義數(shù)據(jù)類型為int),子程序?yàn)間et_ad();

        1、限副濾波

        #define A 10

        char value;

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

        }

        2、中位值濾波法

        #define N11

        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>value_buf[i+1] )
        {
        temp = value_buf;
        value_buf = value_buf[i+1];
        value_buf[i+1] = temp;
        }
        }
        }
        return value_buf[(N-1)/2];
        }

        3、算術(shù)平均濾波法


        #define N 12

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

        4、遞推平均濾波法(又稱滑動(dòng)平均濾波法)

        #define N 12

        char value_buf[N];
        char i=0;

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

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

        #define N 12

        char filter()
        {
        char count,i,j;
        char value_buf[N];
        intsum=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;countsum += value[count];
        return (char)(sum/(N-2));
        }

        6、限幅平均濾波法

        略 參考子程序1、3

        7、一階滯后濾波法


        #define a 50

        char value;

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

        8、加權(quán)遞推平均濾波法


        #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];
        intsum=0;
        for (count=0,count{
        value_buf[count] = get_ad();
        delay();
        }
        for (count=0,countsum += 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、限幅消抖濾波法

        略 參考子程序1、9

        11、IIR濾波例子

        intBandpassFilter4(int InputAD4)
        {
        intReturnValue;
        intii;
        RESLO=0;
        RESHI=0;
        MACS=*PdelIn;
        OP2=1068; //FilterCoeff4[4];
        MACS=*(PdelIn+1);
        OP2=8;//FilterCoeff4[3];
        MACS=*(PdelIn+2);
        OP2=-2001;//FilterCoeff4[2];
        MACS=*(PdelIn+3);
        OP2=8;//FilterCoeff4[1];
        MACS=InputAD4;
        OP2=1068; //FilterCoeff4[0];
        MACS=*PdelOu;
        OP2=-7190;//FilterCoeff4[8];
        MACS=*(PdelOu+1);
        OP2=-1973; //FilterCoeff4[7];
        MACS=*(PdelOu+2);
        OP2=-19578;//FilterCoeff4[6];
        MACS=*(PdelOu+3);
        OP2=-3047; //FilterCoeff4[5];
        *p=RESLO;
        *(p+1)=RESHI;
        mytestmul<<=2;
        ReturnValue=*(p+1);
        for(ii=0;ii<3;ii++)
        {
        DelayInput[ii]=DelayInput[ii+1];
        DelayOutput[ii]=DelayOutput[ii+1];
        }
        DelayInput[3]=InputAD4;
        DelayOutput[3]=ReturnValue;


        return ReturnValue;
        }


        關(guān)鍵詞: 單片機(jī)軟件濾

        評(píng)論


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

        關(guān)閉
        主站蜘蛛池模板: 苍南县| 通州市| 佛冈县| 开鲁县| 上饶市| 林口县| 墨脱县| 招远市| 神农架林区| 丹江口市| 孝感市| 纳雍县| 丽江市| 聂荣县| 亚东县| 景谷| 屏东市| 麻阳| 永仁县| 雅安市| 东安县| 深州市| 留坝县| 深圳市| 本溪市| 华亭县| 汝阳县| 长宁区| 蓬安县| 崇仁县| 炉霍县| 阿鲁科尔沁旗| 安新县| 乐昌市| 那曲县| 长白| 平陆县| 金湖县| 鄂州市| 义马市| 凤庆县|