单片机嵌入式滤波算法库

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);
    }
}
相关推荐
倒头就睡的小比特13 小时前
算法竞赛C++常用的STL
c++·算法
不悔哥14 小时前
开源OV-Watch:怎么做一个智能手表
单片机·开源·嵌入式
小羊没烦恼!14 小时前
初探性能优化——2个月到4小时的性能提升
java·开发语言·windows·算法·c#
XiHongShi201614 小时前
STM32F407 RTC定时器例程,建议保存
stm32·单片机·学习
猎头南楼15 小时前
知识社区推荐系统实践:新用户冷启动与长短期兴趣建模的挑战 资深推荐算法工程师
人工智能·深度学习·算法·机器学习
深圳老胡16 小时前
STM32F407 控制 L6470 步进电机驱动 —— 控制过程简介
笔记·stm32·单片机·嵌入式硬件·代码规范
旖旎夜光16 小时前
力控面试题 01.01: 判定字符是否唯一(位运算) —— 题解
c++·学习·算法·leetcode·力控
wzdark16 小时前
大规模并行计算中的负载均衡算法研究4
算法
Because_of_Her116 小时前
并查集-听课笔记
笔记·算法·并查集
码流子16 小时前
高速公路安全监测实践:碰撞监测预警+物联网底座,从感知到处置的闭环
大数据·人工智能·物联网·算法·架构