前篇帖子重点探讨了血氧饱和度的数据采集实现。但如何利用这些数据,进而得到相对精确的血氧饱和度数据就成了摆在我面前的一道难题。我是顺着这样的思路进行的:首先查找相关论文,看前辈们的思路。然后找TI血氧前端的相关资料。
在看论文的过程中,我发现大部分论文对于测量原理都有详细到令人发指的描述,而对数据的处理或语焉不详或讳莫如深,一笔带过。不过,收获还是有的:一般而言,根据朗伯比尔定律,我们可以通过计算得出红光和红外光经过人体反射后得到的信号中交直流成分;并经过一个公式R=((AC1/DC1)/(AC2/DC2))得到一个比值(式中AC1代表红光的交流成分;DC1代表红光的直流成分;以此类推),然后通过一个线性回归公式计算得到血氧饱和度。针对于脉搏波信号,其能量主要分布于0.5-5Hz。因此,存在两种提取交直流分量的算法:
一. 时域提取。这种算法首先需要通过取均值的办法得到直流分量;然后通过诸如微分阈值法的办法得到交流分量。
二. 频域提取。这种算法的核心思想是将获得的脉搏波信号进行FFT变换到频域去提取特征值。频率为0处的幅值即为PPG信号的直流分量;(w/60-0.5)-(w/60+0.5)频段内的峰值即为PPG信号的交流分量(w:心率值)。
针对于算法一,由于采样周期为100Hz,因此可取每通道100个样本,进行平均值处理,然后得到直流分量;交流分量的获取相对于直流分量来说要难得多,原因在于其叠加了很多种噪声如工频干扰、元件热噪声等,这个是不可避免的,只能通过设计滤波器予以滤除。鉴于R7F0C809及其有限的资源,我放弃了这种办法。
而算法二的实现对于没有单周期乘法指令、没有浮点运算单元、主频也不高的R7F0C809来说也是比较困难的。
因此,在现有平台下完成血氧饱和度的计算是不大可能的了。TI给出的评估平台也验证了这一点:TI的历程是采集数据完毕后,通过USB发送到PC,在PC端进行离线算法的开发。
本文来自论坛,点击查看完整帖子内容。