单片机嵌入式滤波算法库

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);
    }
}
相关推荐
拾忆-eleven19 分钟前
C++算法(19):整数类型极值,从INT_MIN原理到跨平台开发实战
数据结构·c++·算法
芯岭技术22 分钟前
普冉MS32C001单片机,国产32位单片机,芯片特性和功能介绍
单片机·嵌入式硬件
JK0x0738 分钟前
代码随想录算法训练营 Day39 动态规划Ⅶ 打家劫舍
算法·动态规划
blammmp1 小时前
算法专题四:前缀和
java·开发语言·算法
望未来无悔2 小时前
系统学习算法:动态规划(斐波那契+路径问题)
java·算法
明月看潮生2 小时前
青少年编程与数学 02-018 C++数据结构与算法 25课题、图像处理算法
c++·图像处理·算法·青少年编程·编程与数学
我是一只鱼02232 小时前
LeetCode算法题 (反转链表)Day17!!!C/C++
数据结构·c++·算法·leetcode·链表
吃货界的硬件攻城狮2 小时前
【STM32 学习笔记】ADC数模转换器
笔记·stm32·单片机·学习
LuckyLay2 小时前
LeetCode算法题(Go语言实现)_62
算法·leetcode·职场和发展
元亓亓亓2 小时前
LeetCode热题100--54.螺旋矩阵--中等
算法·leetcode·矩阵