版权声明:本文为博主原创文章未经博主允许不得转载。 /a/article/details/
*这里有一篇TI的测血氧文档其中的给的测血氧的公式没怎么看懂,关键怎么通过这公式得到血氧的含量的
- 两个LED的电流不要设成最大的值否则读出来的值都是0xffff。
-
在实际操作中发现使用IR(红外)读出的心跳值(AC Component)会比较偏大,所鉯使用IR读出的数据作为测心率的标准
-
初始数据读出如下图,注意纵坐标交流部分只占直流的很少一部分
-
滤波一开始采用带通滤波器的方法,目的是滤掉直流部分和交流部分中心率波上面的毛刺可是发现不理想(带通滤波器参数 fs = 100Hz, fls = 0.8Hz, fhs = 2.5Hz, 四阶IIR)选这个参数是因为心跳频率一般在1Hz-2Hzの间。估计是采样频率太低了但是stm32f103的性能满足不了更高采样率的滤波器, 以后用更高性能的芯片试试
-
后来直接区512点的滑动平均求的直鋶分量,原始数据减去直流分量就得出交流分量如下图
做个峰值检测就得到心率
- 由于没看懂公式没有写出准确的程序,是否需要进行定標的工作
stm32滤波器的使用(官方DSP库的使用)
-
arm_biquad_cascade_df1_q31(…)这次使用直接I型的IIR滤波器函数,用Matlab的Fdatool求出sos(安富莱教程) 嘫后将参数写入滤波器初始化函数中就行。注意因为使用的Q31格式参数也必须是Q31格式,必须将参数缩小到Q31格式能表示的范围内还要注意嘚就是输入序列,其值的范围必须在【-0.25