• <li id="00i08"><input id="00i08"></input></li>
  • <sup id="00i08"><tbody id="00i08"></tbody></sup>
    <abbr id="00i08"></abbr>
  • 新聞中心

    EEPW首頁 > 嵌入式系統 > 設計應用 > 9種簡單的數字濾波算法(C語言源程序)

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

    作者: 時間:2012-05-12 來源:網絡 收藏

    假定從8位AD中讀取數據(如果是更高位的AD可定義數據類型為int),子程序為get_ad();
    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;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、算術平均濾波法
    /*
    */
    #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、一階滯后濾波法
    /* 為加快程序處理速度假定基數為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,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;
    }

    本文引用地址:http://www.czjhyjcfj.com/article/171455.htm


    評論


    相關推薦

    技術專區

    關閉
    主站蜘蛛池模板: 屏南县| 邢台县| 安义县| 当雄县| 彭阳县| 改则县| 贺州市| 大同县| 建平县| 潼关县| 镇安县| 亚东县| 永平县| 鹤峰县| 海丰县| 潞城市| 敦煌市| 肇庆市| 洪洞县| 望奎县| 鄂州市| 滕州市| 荃湾区| 兰州市| 玛多县| 双流县| 化州市| 稻城县| 登封市| 大洼县| 铅山县| 万全县| 巫溪县| 汉寿县| 长白| 沙田区| 阿巴嘎旗| 伊春市| 繁峙县| 青岛市| 高碑店市|