新聞中心

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

        單片機常用數字濾波函數

        作者: 時間:2016-11-18 來源:網絡 收藏
        /////////////////////////////////限副濾波///////////////////

        #define A 10//A值可根據實際情況調整
        char value;//value為有效值
        char filter()
        {
        char new_value;//new value為當前采樣值
        new value="get"_ad();
        if ((new_value-value>A)‖(value-new_value> A)
        return value;
        return new_value;
        }

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

        /////////////////////////中位值濾波/////////////////////////

        #define N 11//N值可根據實際情況調整
        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];//取中間值
        }

        /////////////////////////算術平均濾波//////////////////////

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


        ///////////////////去極值平均濾波//////////////////////

        #define N 11//N值可根據實際情況調整
        int sum="0";

        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;
        }
        }
        }

        for(count=1;count<(N-1);count++)//去掉第一個和末一個數
        {
        sum+=value_buf[count];
        delay();
        }
        return (char)(sum/(N-2));
        }

        ///////////////////移動平均濾波(遞推平均濾波)///////////

        #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;countsum+=value_buf[count];
        return (char)(sum/N)

        }


        //////////////////////加權平均濾波///////////////////////
        #define N 12
        char code jq[N]={1,2,3,4,5,6,7,8,9,10,11,12};//加權系數表
        char code sum_jq=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;countsum+=value_buf[count]*jq[count];
        return (char)(sum/sum_jq);
        }


        /////////////////////////低通濾波////////////////////////

        #define a0.25
        char value;//value為已有值
        char filter()
        {
        char new_value;//new value為當前采樣值
        new_value=get_ad();
        return (a*new_value+(1-a)*value);
        }



        評論


        技術專區

        關閉
        主站蜘蛛池模板: 大庆市| 乐业县| 靖边县| 兴安县| 勐海县| 湘潭县| 石嘴山市| 瓮安县| 昆山市| 南投县| 大田县| 定安县| 商洛市| 河津市| 浪卡子县| 高碑店市| 津南区| 邯郸市| 沈阳市| 杭州市| 健康| 新龙县| 大英县| 炉霍县| 虹口区| 安新县| 罗甸县| 乌拉特前旗| 苏尼特右旗| 仁布县| 泰来县| 崇礼县| 新郑市| 西乌珠穆沁旗| 新河县| 岱山县| 武宁县| 淮滨县| 甘南县| 赣榆县| 长春市|