一.一阶滞后滤波
公式:f(x)=(1-a)*x+a*f(x-1)
f(x):滤波后得到的值
f(x-1):上一次的结果
a:越小越灵敏,越大曲线越光滑
带入值:a=0.3 f(0)=0
x | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 | 10 |
f(x) | 7 | 9.1 | 9.73 | 9.919 | 9.9757 | 9.99271 | 9.9978 | 9.99934 | 9.99999 |
可以发现,每次采集都会逼近,采集次数无限,则会无限逼近。如果中间有个干扰出现,那么他会震荡一下,然后再次逼近,可以根据数据的采集频率来适当的选取a的值。
数据跳变一下:
10 | 10 | 10 | 10 | 15 | 10 | 10 | 10 | 10 |
7 | 9.1 | 9.73 | 9.919 | 13.5 | 11.05 | 10.315 | 10.094 | 10.02 |
总结:可以按照实时性和数据干扰的跳变范围来选取合适的a值。在温度采集中,一秒可以采集上千次,然后将上千次数据处理,得到这一秒比较可靠的温度值。
二.卡尔曼滤波
f(x):估计值
x:测量值
k:卡尔曼增益
e_m:测量误差,一般固定,
e_est :估计误差,每次计算都会更新
公式: k=e_est/(e_est+e_m) 计算卡尔曼增益
f(x)=f(x-1)-k(f(x-1)-x) 计算估计值
e_est=(1-k)*e_est 更新估计误差
推导的话涉及的数学基础比较高,涉及到状态矩阵,正态分布等相关知识。
总结:测量值不准确,估计值也不准确,然后卡尔曼滤波将测量值和估计值相融合,按照测量误差和估计误差的协方差来进行多次迭代逼近真实值。
三.FIR滤波
f(x)=a/(a+b+c)*f(x)+b/(a+b+c)*f(x-1)+c/(a+b+c)*f(x-2)
a+b+c=1
f(x):当前采集的值
f(x-1):上一次采集的值
f(x-2):上上次采集的值
a,b,c:每一次采集的权重系数
这是三次采集计算,可以根据噪声来决定要不要采集更早的数据来决定当前的值。