单片机中常用滤波算法
时间:2025-07-14
时间:2025-07-14
部分滤波方法
单片机中常用滤波算法
限幅滤波算法:
将两次相邻的采样值相减,求出其增量的绝对值,与两次采样允许的最大差值A进行比较。A的大小由被测对象的具体情况而定,如果小于或等于允许的最大差值,则本次采样值有效;否则取上次采样值做本次采样数据的样本。(用于处理变化缓慢的数据) #define A
char data
char filter_1()
{
char data_new;
datanew = get_data(); if((datanew – data > A)||(data – datanew > A))
return data;
return datanew;
}
中值滤波算法:
对某一个参数连续采样N次(N为奇),然后排序(从小到大)再取中间值作为本次采样值。(去掉偶然因素引起的波动和采样器不稳定而引起的脉动干扰,要求变化缓慢) #define N 11
char filter_2()
{
char value_buf[N]; char count , i , j , temp;
for(count=0;count<N;count++)
{ value_buf[count] = get_data();
delay();
}
for(i=0; i<N ; i++)
for(j=0 ; j<i ; j++)
if(value_buf[i] > value_buf[j])
}
算术平均滤波算法:
连续N次取样,算术平均,适用于对具有随机干扰的信号进行滤波; char filter_3()
{
int Sum=0; { } 交换两值;
部分滤波方法
{
} Sum+=get_data(); delay();
return (char) (Sum/N) ;
}
加权平均滤波运算法:
为了协调平滑度和灵敏度之间的关系,对连续N次采样值分别乘上不同的加权系数之后再求累加和,加权系数一般先小后大,以突出后面若干采样的效果。 char code jq[N]={0,1,2,3,····12};
char code sum_jq=1+2+···+12; char filter_4() {
char count; char value_buf[N];
int sum=0;
for(count=0;count<N;count++) {
value_buf[count]=get_data();
delay(); }
for(count=0;count<0;count++)
{
sum+=value_buf[count]*jq[count];
}
return (char) (sum / sumjq); }
滑动平均滤波算法:
只采样一次,将这一次采样值和过去的若干次采样值一起求平均,得到的有效采样值一起求平均,得到的有效采样值即可投入使用;(采用环状队列结构可以方便地实现这种数据存放方式)
char value_buf[N]; char i=0;
char filter_5() {
char count ;
int sum=0;
value_buf[i++]=get_data();
if(i==N)
i=0;
for(count=0;count<N;count++)
{
sum=value_buf[count];
部分滤波方法
return (char) (sum/N); }
上一篇:可复制的领导力最新版课件讲义
下一篇:银杏树生长对环境有哪些要求