单片机嵌入式滤波算法库

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);
    }
}
相关推荐
coder!mq25 分钟前
说几个常见的语法糖?
java·开发语言·算法
振南的单片机世界40 分钟前
PVD掉电中断——让单片机“咽气前”写完遗书
arm开发·stm32·单片机·嵌入式硬件
不爱学英文的码字机器1 小时前
推荐算法梳理,六种主流模型与九步训练流程
算法·机器学习·推荐算法
白狐_7982 小时前
408数据结构第5章:树与二叉树②——遍历、线索树、森林与哈夫曼
数据结构·算法·深度优先
续写烂尾3 小时前
SD NAND存储实测:正点原子STM32精英板SDIO读写验证全流程
stm32·单片机·嵌入式硬件
致Great5 小时前
科研人的 AI,不该只回答问题:我用字节TraeWork 跑了一遍真实研究任务
算法
zlinear数据采集卡5 小时前
USB HS 480M高速传输与SRAM记录仪:DABM-D223数据存储系统全解析
arm开发·嵌入式硬件·fpga开发·开源
纵有疾風起5 小时前
线性表的定义与基本操作 — 从逻辑结构到 ADT 接口
数据结构·算法·408·线性表·adt
wuyk5556 小时前
1.栈:后进先出的线性数据结构
c语言·数据结构·stm32·单片机
测试_AI_一辰6 小时前
AI Agent 评测最隐蔽的坑-记忆
人工智能·算法·ai·自动化·ai编程