首页 > 编程语言 >stm32 adc采样滤波算法

stm32 adc采样滤波算法

时间:2023-06-07 11:35:20浏览次数:55  
标签:采样 Filter Arr float 滤波 stm32 算法 adc

 

1、简单移动平均滤波算法(SMA):采样数据作为滤波器的输入,输出为移动平均值,即取最近一段采样值的平均值作为输出。简单移动平均滤波算法实现简单,计算速度快,但只适用于信号变化缓慢的场合。

// 简单移动平均滤波算法
#define N 10 // 采样点数
float Filter_Arr[N]; // 保存过去N个采样值
float SMA_Filter(float Input)
{
    int i;
    float output = 0;
    for (i = 0; i < N - 1; i++)
    {
        Filter_Arr[i] = Filter_Arr[i + 1];
        output += Filter_Arr[i];
    }
    Filter_Arr[N - 1] = Input;
    output += Input;
    output /= N;
    return output;
}

 

时间复杂度:O(N),N为采样点数,遍历整个滤波器数组虚N-1次,加上一次采样值的计算,总计算次数为N

空间复杂度:O(N),需要保存过去N个采样值

 

 

2、指数移动平均滤波算法(EMA):与简单移动平均滤波算法类似,但在计算滤波值时,除了最近的采样点外,还考虑了历史上的采样值,采用加权平均法计算滤波值,权重随时间指数减小。指数移动平均滤波算法适用于采样信号随时间发生改变的场合。

// 指数移动平均滤波算法
#define Alpha 0.8  // 滤波系数
float EMA_Filter(float Input)
{
    static float output = 0;
    output = Alpha * Input + (1 - Alpha) * output;
    return output;
}

时间复杂度:O(1),只有一次加法、一次乘法和一次减法运算。

空间复杂度O(1),只需要保存上一次的输出值

 

3、中值滤波算法(MedFilter):对连续采样的数据进行排序,取中间值作为滤波结果,中值滤波算法适用于信号中存在突发性噪声的场合

// 中值滤波算法
#define N 10 // 采样点数
float Filter_Arr[N]; // 保存过去N个采样值
float MedFilter(float Input)
{
    int i, j;
    float temp;
    // 将新采样值插入有序序列
    for (i = 0; i < N - 1; i++)
    {
        if (Input < Filter_Arr[i])
        {
            temp = Input;
            Input = Filter_Arr[i];
            Filter_Arr[i] = temp;
        }
    }
    Filter_Arr[N - 1] = Input;
    // 取中间值作为滤波结果
    if (N % 2 == 0)
    {
        return (Filter_Arr[N / 2] + Filter_Arr[N / 2 - 1]) / 2;
    }
    else
    {
        return Filter_Arr[N / 2];
    }
}

时间复杂度:O(N^2),其中N是采样点数,需要对采样值进行N-1个排序,每次排序需要O(N)的时间复杂度

空间复杂度:O(N),需要保存过去N个采样值。

====================================================================================

 

4、卡尔曼滤波算法(暂时不考虑)

采用概率论和线性系统理论对系统进行建模,通过系统状态及其不确定性的迭代推算,对测量值进行滤波。卡尔曼滤波算法适用于包含随机噪声及测量误差的系统。

 

 

 

 

 

====================================================================================

5、无限脉冲响应滤波算法(IIR)(暂时不考虑):仅滤波器输出和滤波器输入的线性组合作为输出,具有简单快速、灵敏度高等特点,但容易出现不稳定性。

 

6、有限脉冲响应滤波算法(FIR)(暂时不考虑):仅使用当前和有限长度的历史输入,不需要反馈,具有稳定性、可控性好、满足线性相位等特点,但计算复杂度较大,常用于数字信号处理。

 

7、小波变换滤波算法(Wavelet Transformation)(暂时不考虑):采用小波分析方法对信号进行变换,在滤波和降采样后,可提取出信号的高频部分和低频部分,可用于多尺度分析、信号处理及数据压缩等领域。

 

标签:采样,Filter,Arr,float,滤波,stm32,算法,adc
From: https://www.cnblogs.com/Bingley-Z/p/17462858.html

相关文章

  • STM32F429 Discovery开发板应用:实现SPI-SD Card文件写入(搭载FatFS文件系统)
    MCU:STM32F429ZIT6开发环境:STM32CubeMX+MDK5 外购了一个SPI接口的SDCard模块,想要实现SD卡存储数据的功能。首先需要打开STM32CubeMX工具。输入开发板MCU对应型号,找到开发板对应封装的MCU型号,双击打开(图中第三)。 此时,双击完后会关闭此界面,然后打开一个新界面。 ......
  • STM32CubeIDE 使用Ymodem协议通过串口在线更新程序IAP
    一:单片机的BootLoaderBootloader部分移植ST官网的例程,官网例程的IAP有多个文件,为了移植方便我把多个文件合成了一个ymodem.c文件和ymodem.h文件 /**ymodem.c**Createdon:Jun6,2023*Author:MingYi-LZQ*/#include"main.h"#include"ymodem.h"/*......
  • 野火STM32第35章 SDIO读写测试 实验过程犯的错误:卡在while(SD_GetStatus() != SD_TRAN
    看完书,我自己重新写了一遍代码。写代码过程中,对DMA以下标绿的部分很不以为意。1voidSD_DMA_TxConfig(uint32_t*DMA_Tx_Buf,uint32_tBufferSize)2{3DMA_InitTypeDefDMA_InitStruct;45/*ClockEnable-----InGPIOConfig*/67/*Flag......
  • 明解STM32—GPIO应用设计篇之IO外部中断EXTI原理及使用方法
    一、前言        在之前针对STM32的GPIO相关API函数及配置使用进行了详细的介绍,GPIO作为输入引脚时,调用相关读信号引脚函数接口就可以在程序的循环中,轮询的对输入信号进行读取检测操作,除了轮询的方式访问输入引脚,还可以通过另外一种叫做外部中断的方式来对引脚的输入信号进......
  • STM32F429 Discovery开发板应用:实现USB虚拟串口(VPC)
    MCU:STM32F429ZIT6开发环境:STM32CubeMX+MDK5 实现USB的虚拟串口不需要去理解USB的底层驱动,只需要STM32CubeMX去配置生成工程即可。首先需要打开STM32CubeMX工具。输入开发板MCU对应型号,找到开发板对应封装的MCU型号,双击打开(图中第三)。 此时,双击完后会关闭此界面,然后打......
  • 野火指南者(STM32F103VET6)应用:实现USB虚拟串口(CDC_VPC)
    MCU:STM32F103VET6开发环境:STM32CubeMX+MDK5 实现USB的虚拟串口不需要去理解USB的底层驱动,只需要STM32CubeMX去配置生成工程即可。在野火的指南者中,是没有这一类的视频和示例的,博主使用这款开发板实现USB虚拟串口。首先需要打开STM32CubeMX工具。输入开发板MCU对应型号,找到......
  • stm32开发环境搭建 mdk5 keil 【未完成】
    百度网盘:https://pan.baidu.com/s/1WH3l3_ICLf1w5FMhKeAWaA提取码:7pxa带stm32f4和stm32f1的支持包 破解安装支持包更换汉化包,打开文件所在位置-替换uv4文件更换global——def文件替换主题风格安装astle格式化工具  打开注册机 软件安装——Keil的安装与配置......
  • 手把手实践丨基于STM32+NBIOT+华为云IOT设计智能井盖
    摘要:本文介绍基于STM32微控制器、BC26NBIOT模组和华为云IOT平台,实现了一款智能井盖系统。本文分享自华为云社区《基于STM32+NBIOT+华为云IOT设计的智能井盖》,作者:DS小龙哥。一、概述智能井盖是一种通过物联网技术实现对井盖状态监测和管理的设备。当前介绍基于STM32微控制器,B......
  • 【滤波跟踪】基于matlab实现GPS+IMU数据融合
    ✅作者简介:热爱科研的Matlab仿真开发者,修心和技术同步精进,matlab项目合作可私信。......
  • stm32空工程结构目录(仅供参考)
    寄存器版本在寄存器版本中,需要导入的外部文件只有stm32的启动文件,也就是一个以.s结尾的汇编文件可以手动为链接文件和目标文件创建文件夹,在配置中设置保存的目录即可在寄存器版本中,需要实现systeminit函数,为空即可故:寄存器版本对项目结构的依赖性较低库函数版本项目结构方面......