新聞中心

        EEPW首頁 > 嵌入式系統 > 設計應用 > 單片機數字濾波程序

        單片機數字濾波程序

        作者: 時間:2016-11-17 來源:網絡 收藏
        假定從8位AD中讀取數據(如果是更高位的AD可定義數據類型為int),子程序為get_ad();
        1、限副濾波
        /*A值可根據實際情況調整
        value為有效值,new_value為當前采樣值
        濾波程序返回有效的實際值*/
        #defineA10
        charvalue;
        charfilter()
        {
        charnew_value;
        new_value=get_ad();
        if((new_value-value>A)||(value-new_value>A)
        returnvalue;
        returnnew_value;
        }
        2、中位值濾波法
        /*N值可根據實際情況調整
        排序采用冒泡法*/
        #defineN11
        charfilter()
        {
        charvalue_buf[N];
        charcount,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;
        }
        }
        }
        returnvalue_buf[(N-1)/2];
        }
        3、算術平均濾波法
        /*
        */
        #defineN12
        charfilter()
        {
        intsum=0;
        for(count=0;count{
        sum+=get_ad();
        delay();
        }
        return(char)(sum/N);
        }
        4、遞推平均濾波法(又稱滑動平均濾波法)
        /*
        */
        #defineN12
        charvalue_buf[N];
        chari=0;
        charfilter()
        {
        charcount;
        intsum=0;
        value_buf[i++]=get_ad();
        if(i==N)i=0;
        for(count=0;countsum=value_buf[count];
        return(char)(sum/N);
        }
        5、中位值平均濾波法(又稱防脈沖干擾平均濾波法)
        /*
        */
        #defineN12
        charfilter()
        {
        charcount,i,j;
        charvalue_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、一階滯后濾波法
        /*為加快程序處理速度假定基數為100,a=0~100*/
        #definea50
        charvalue;
        charfilter()
        {
        charnew_value;
        new_value=get_ad();
        return(100-a)*value+a*new_value;
        }
        8、加權遞推平均濾波法
        /*coe數組為加權系數表,存在程序存儲區。*/
        #defineN12
        charcodecoe[N]={1,2,3,4,5,6,7,8,9,10,11,12};
        charcodesum_coe=1+2+3+4+5+6+7+8+9+10+11+12;
        charfilter()
        {
        charcount;
        charvalue_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、消抖濾波法
        #defineN12
        charfilter()
        {
        charcount=0;
        charnew_value;
        new_value=get_ad();
        while(value!=new_value);
        {
        count++;
        if(count>=N)returnnew_value;
        delay();
        new_value=get_ad();
        }
        returnvalue;
        }
        10、限幅消抖濾波法
        /*
        */
        略參考子程序1、9


        關鍵詞: 單片機數字濾

        評論


        技術專區

        關閉
        主站蜘蛛池模板: 岐山县| 潼关县| 静海县| 高州市| 平远县| 石景山区| 清丰县| 湟中县| 汽车| 天长市| 赤峰市| 于都县| 高唐县| 亚东县| 和静县| 奇台县| 色达县| 渝中区| 开阳县| 南召县| 九台市| 阳城县| 凤翔县| 中牟县| 芷江| 江陵县| 科尔| 鱼台县| 军事| 龙山县| 晋州市| 保康县| 蓝田县| 肇源县| 梁河县| 马边| 兰溪市| 巴林右旗| 吴江市| 商水县| 利津县|