1.一阶低通滤波法(摘自《单片机原理与接口技术》)
一阶低通滤波法是用软件编程方法实现模拟实现模拟系统RC低通滤波器的功能,采用本次采用值与上次滤波输出值进行加权,得到有效滤波值,使得输出对输入有反馈作用。形式为
Y
(
k
)
=
(
1
−
α
)
Y
(
k
−
1
)
+
α
X
(
k
)
Y(k)=(1-α)Y(k-1)+αX(k)
Y(k)=(1−α)Y(k−1)+αX(k)
式中,
X
(
k
)
X(k)
X(k)为本次采样值;
Y
(
k
−
1
)
Y(k-1)
Y(k−1)为上次滤波输出值;
Y
(
k
)
Y(k)
Y(k)为本次滤波输出值;
α
α
α为滤波平滑系数,C程序如下:
/**
* @param oldData:上次滤波输出
* @param newData:新采样值
* @param CONST:滤波系数
* @return 滤波输出
*/
uint16_t lowPassFilter(uint16_t oldData, uint16_t newData, uint8_t CONST)
{
return ((100-CONST)*oldData + CONST*newData)/100;
}
2.滑动窗口滤波法
#define DEEPTH 5 // 滤波深度
uint16_t data[DEEPTH];
uint16_t slideFilter(uint16_t in)
{
uint8_t i = 0;
uint32_t sum = 0;
data[DEEPTH-1] = in; // 新数据放到最后
for (i=1; i<DEEPTH; i++)
data[i-1] = data[i]; // 滑动窗口
for (i=0; i<DEEPTH; i++)
sum += data[i];
return (sum / DEEPTH);
}