单片机嵌入式滤波算法库

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);
    }
}
相关推荐
luoqice几秒前
linux下找到指定目录下最新日期log文件
linux·算法
楽码19 分钟前
底层技术SwissTable的实现对比
数据结构·后端·算法
fffcccc111227 分钟前
初级背包问题,层层剖析为什么这样做。最好需要自己推演一遍。
算法
瓦特what?1 小时前
关于C++的#include的超超超详细讲解
java·开发语言·数据结构·c++·算法·信息可视化·数据挖掘
楽码2 小时前
自动修复GoVet:语言实现对比
后端·算法·编程语言
杰克尼2 小时前
415. 字符串相加
算法
lifallen2 小时前
JCTools 无锁并发队列基础:ConcurrentCircularArrayQueue
java·开发语言·数据结构·算法
globbo3 小时前
【嵌入式STM32】I2C总结
单片机·嵌入式硬件
来自天蝎座的孙孙4 小时前
洛谷P1595讲解(加强版)+错排讲解
python·算法
GawynKing4 小时前
图论(5)最小生成树算法
算法·图论·最小生成树