C实现10种软件滤波方法

//文章摘抄网络,用于学习笔记

1、限幅滤波法(又称程序判断滤波法)
    A、方法:

       根据经验判断,确定两次采样允许的最大偏差值(设为A)

       每次检测到新值时判断:

       如果本次值与上次值之差<=A,则本次值有效

       如果本次值与上次值之差>A,则本次值无效,放弃本次值,用上次值代替本次值

    B、优点:

       能有效克服因偶然因素引起的脉冲干扰

    C、缺点

       无法抑制那种周期性的干扰

       平滑度差

// eg.
#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、中位值滤波法
    A、方法:

       连续采样N次(N取奇数)

       把N次采样值按大小排列

       取中间值为本次有效值

    B、优点:

       能有效克服因偶然因素引起的波动干扰

       对温度、液位的变化缓慢的被测参数有良好的滤波效果

    C、缺点:

       对流量、速度等快速变化的参数不宜

// eg.
/*   N值可根据实际情况调整
排序采用冒泡法*/
#define N   11
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;j++){
   for (i=0;i<=N-j;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、算术平均滤波法
    A、方法:

       连续取N个采样值进行算术平均运算

       N值较大时:信号平滑度较高,但灵敏度较低

       N值较小时:信号平滑度较低,但灵敏度较高

       N值的选取:一般流量,N=12࿱

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值