找回密碼
 立即注冊(cè)

QQ登錄

只需一步,快速開始

搜索
查看: 2613|回復(fù): 0
打印 上一主題 下一主題
收起左側(cè)

數(shù)字濾波C程序

[復(fù)制鏈接]
跳轉(zhuǎn)到指定樓層
樓主
ID:71259 發(fā)表于 2014-12-29 02:26 | 只看該作者 回帖獎(jiǎng)勵(lì) |倒序?yàn)g覽 |閱讀模式
/*******************限幅濾波*******************/
#define A 10      //A值可根據(jù)實(shí)際情況調(diào)整
char value;       //value為有效值
char filter()
{
    char new_value;   //new value為當(dāng)前采樣值
    new value=get_ad();
    if ((new_value-value>A)‖(value-new_value> A)
    return value;
    return new_value;
}
/*******************中位值濾波*******************/
#define N 11      //N值可根據(jù)實(shí)際情況調(diào)整
char filter()
{
    char value_buf[N];
    char count,i,j,temp;
    for (count=0;count<N;count++)
    {
        value_buf[count]=get_ad();  //獲取采樣值
        delay();
    }
    for (j=0;j<N-1;j++)   //采樣值由小到大排列,排序采用冒泡法
    {
        for (i=0;i<N-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];   //取中間值
}
/*******************算術(shù)平均濾波*******************/
#define N 12
char filter()
{
    int sum=0;
    for(count=0;count<N;count++)
    {
        sum+=get_ad();
        delay();
    }
    return (char)(sum/N);
}

/*******************去極值平均濾波*******************/
#define N 11      //N值可根據(jù)實(shí)際情況調(diào)整
int sum=0;
char filter()
{
    char value_buf[N];
    char count,i,j,temp;
    for (count=0;count<N;count++)
    {
        value_buf[count]=get_ad();    //獲取采樣值
        delay();
    }
    for (j=0;j<N-1;j++)  //采樣值由小到大排列,排序采用冒泡法
    {
        for (i=0;i<N-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;count<(N-1);count++)    //去掉第一個(gè)和末一個(gè)數(shù)
    {
        sum+=value_buf[count];
        delay();
    }
    return (char)(sum/(N-2));
}
/*******************移動(dòng)平均濾波(遞推平均濾波)*******************/
#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;count<N;count++)
        sum+=value_buf[count];
    return (char)(sum/N)
}

/*******************加權(quán)平均濾波*******************/
#define N 12
char code jq[N]={1,2,3,4,5,6,7,8,9,10,11,12};//加權(quán)系數(shù)表
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<N;count++)
    {
        value_buf[count]=get_ad();    //獲取采樣值
        delay();
    }
    for (count=0;count<N;count++)
        sum+=value_buf[count]*jq[count];
    return (char)(sum/sum_jq);
}

/*******************低通濾波*******************/
#define a  0.25
char value;       //value為已有值
char filter()
{
    char new_value;   //new value為當(dāng)前采樣值
    new_value=get_ad();
    return (a*new_value+(1-a)*value);
}

分享到:  QQ好友和群QQ好友和群 QQ空間QQ空間 騰訊微博騰訊微博 騰訊朋友騰訊朋友
收藏收藏 分享淘帖 頂 踩
回復(fù)

使用道具 舉報(bào)

本版積分規(guī)則

手機(jī)版|小黑屋|51黑電子論壇 |51黑電子論壇6群 QQ 管理員QQ:125739409;技術(shù)交流QQ群281945664

Powered by 單片機(jī)教程網(wǎng)

快速回復(fù) 返回頂部 返回列表