MAX30102脉搏血氧仪和心率传感器(二)FIR滤波器


前言

数据经过采集之后,还会包含很多噪声,和一些不必要的成分。为了方便后续处理和更加精确地计算结果,需要对采集的信号进行滤波。数字信号处理属于较难学科,博主才疏学浅,如有不足之处敬请指正。


一、修正上一章产生的错误

在上一章中,读取的PPG信号每个若干个周期会出现噪声,原因是读取时序和数据采集的时序对不上。使用中断管脚信号后错误消失。
在这里插入图片描述
在这里插入图片描述

二、FIR滤波器设计

1.对采集的信号进行频谱分析

在这里插入图片描述
可以看到PPG信号成分的频率主要集中在0.5-2Hz之间。为了消除个体差异,应该保留的频率成分0.5-3Hz(也就是心率30次/min - 180次/min)。

2.滤波器设计

为了易实现,设计一个低通滤波器。参数如下:
在这里插入图片描述

3.滤波器仿真

可以看到,保留了3Hz以下的频率成分,滤除了3Hz以上的频率成分。
在这里插入图片描述

三、ARM_MATH库实现(以STM32为例)

将ARM_MATH库移植到工程中,上文设计的滤波器参数生成头文件导入工程中。关键的两个函数如下:

	arm_fir_init_f32(&S, NUM_TAPS,(float32_t *)&firCoeffs32LP[0], &firStateF32[0], blockSize);
	arm_fir_f32(&S,&input,&output,  blockSize);

这里不多介绍,需要了解的,可以参考安富莱的DSP教程。

实际效果测试

串口实时打印输出,红色的曲线为原始信号,蓝色的曲线为滤波后的波形。
在这里插入图片描述

滤波前

在这里插入图片描述

滤波后

在这里插入图片描述

四、获取工程源码

关注公众号,回复 “MAX30102V2” 获取源码;若有疑问,请在公众号回复“交流群”,进群一起讨论分享!
在这里插入图片描述

猜你喜欢

转载自blog.csdn.net/weixin_50622833/article/details/121582101