kw_ucFiltering库说明
本科针对常用的滤波算法进行汇总,主要包括:
- 一阶滤波算法
- 平滑滤波
- 中位值滤波
- 限幅
- 卡尔曼滤波
截至目前(20250508)滤波算法持续更新中。
本库开源连接地址:gitee连接
一阶滤波算法实现
原理
一阶滤波算法的物理模型是一阶RC低通滤波电路,其传递函数通常表达为:
G ( s ) = 1 1 + τ s G(s)=\frac{1}{1+\tau s} G(s)=1+τs1
其中τ为时间常数。
其时域表达式通常为:
y ( k ) = ( 1 − a ) ⋅ y ( k − 1 ) + a ⋅ x ( k ) y(k) = (1-a) \cdot y(k-1) + a \cdot x(k) y(k)=(1−a)⋅y(k−1)+a⋅x(k)
其中
a = T T + τ a=\frac{T}{T+τ} a=T+τT
C库
主要变量
项目 | 变量 | 类型 | 说明 |
---|---|---|---|
1 | kw_ucAlgorTrans1_s | 结构体 | basic:基本类型 T:时间常数 a,b:惯性系数 *x:数据输入 y:滤波输出 |
主要函数
项目 | 函数 | 说明 |
---|---|---|
1 | kw_ucAlgorTrans1Init | 初始化滤波函数 |
2 | kw_ucAlgorTrans1Link | 连接滤波函数的输入 |
3 | kw_ucAlgorTrans1Run | 滤波函数周期运行 |
4 | kw_ucAlgorTrans1CFG | 滤波函数配置 |
5 | kw_ucAlgorTrans1Result | 滤波函数结果,即为滤波输出 |
测试代码
c
#include "kw_ucAlgorCFG.h"
timer_t timer;
kw_ucAlgorTrans1_s trans1;
void timerCB(void *arg)
{
kw_ucAlgorTrans1Run(&trans1);
}
void main()
{
float dataIn;
float resultOut;
kw_ucAlgorTrans1Init(&trans1, 10);
kw_ucAlgorTrans1CFG(&trans1, 1000);
kw_ucAlgorTrans1Link(&trans1, &dataIn);
timer_init(&timer, 10, timerCB, NULL);
timer_start(&timer);
while (true)
{
dataIn = randf(10);
kw_ucAlgorTrans1Result(&trans1, &resultOut);
printf("%.2f\n", resultOut);
delay(10);
}
}