脉搏血氧饱和度.docx
- 文档编号:2860289
- 上传时间:2022-11-16
- 格式:DOCX
- 页数:16
- 大小:85.73KB
脉搏血氧饱和度.docx
《脉搏血氧饱和度.docx》由会员分享,可在线阅读,更多相关《脉搏血氧饱和度.docx(16页珍藏版)》请在冰豆网上搜索。
脉搏血氧饱和度
脉搏血氧饱与度得测量
一、测量值:
脉搏血氧饱与度、脉率
二、测量原理:
以两路光线(红光vs,红外光ir)高频交替照射被测部位,两路透射光经光电转换得到两路变化得光电流信号,两路光电流信号经过放大、去直流、去工频干扰得到两路信号得交流部分,交流部分得平均功率之比即为动脉血得含氧量,通过线性拟合得到脉搏血氧饱与度;其中任何一路信号交流部分即为脉搏波,测得其周期可计算出脉率。
三、测量电路及其参数。
电路包括三部分:
探头驱动电路、光电流放大与去直流电路、计算电路。
探头驱动电路实现两路光线由对称得两组三极管构成,与计算电路得两个IO端口与两个DA端口相连,分别控制两路光线得交替开关与幅值。
光电流放大与去直流电路由两级运放构成,一级运放将光电流信号放大为电压信号,这个电压信号包含交流分量与较大得直流分量(分别对应着测量部位得动脉血与其她成分),因此需要二级运放去直流处理。
计算电路接受两个运放得输出,作为反馈为探头驱动电路与去直流电路提供参考电压幅值。
探头接口说明:
1为地线,6、7分别为外屏蔽与内屏蔽线,2为红外光输入正极,红光输入负极,3为红光输入正极,红外光输入负极,9为光电管输出正极,5为光电管输出负极。
四、测量流程
基本测量流程如下图。
200Hz定时器中断,两路LED交替通断,即1秒内两路光各有100次采样。
以红外光这一路为例:
每次开启红外光LED,根据OA0输出改变LED得幅度ir_LED_level(Q3得基极),根据OA1输出改变去直流电路得直流参考电压ir_dc_offset(OA1得正向输入端),得到得OA1得输出作为计算电路得输入,关灯,原始信号去工频处理后得到ir_heart_signal,数字去直流后得到ir_heart_signal_ac,该信号进入脉搏波周期判断得队列group_caculate[64],同时计算ir_heart_signal_ac信号得平方与,并且采样计数,同时进行脉搏周期得判断。
数字信号直流跟随可表达为:
跟随系数×(输入信号-直流分量)+直流分量=更新得直流分量。
脉搏周期得判断过程:
队列相当于在脉搏波信号上一个滑动得窗口,窗口应有一定宽度,大于噪声时间,但需小于脉搏周期。
判断过程如下:
当最小值位置处于窗口中部位置时则判定为一个波谷,检测到波谷以后窗口继续滑过10个采样点,但不再检查最小值,确保上一个波谷已经离开窗口中心,然后继续检查最小值位置确定下一个波谷。
可以分为三种状态分别称之为确定波谷、离开波谷、寻找波谷。
如下图。
利用局部特征实时判断脉搏周期得三个阶段:
1)确定波谷,确定周期,计算血氧饱与度与脉率,清空计数;2)离开波谷,开始计数,计算信号平方与;3)寻找波谷,保持计数,计算平方与,确定窗口中最小值位置
五、测量程序实现(可参考pulsoximeter、c文件)
1、变量设置
1)全局参量根据运放一得输出经AD转化后判断LED就是否过亮过暗,2500到3000之间为合适亮度,否则进行调节,快速调节步长为2,细调步长为1,可根据实际电路修改。
//反馈控制LED驱动幅度时得上下界与调节步长
#defineFIRST_STAGE_TARGET_HIGH3000
#defineFIRST_STAGE_TARGET_LOW2500
#defineFIRST_STAGE_TARGET_HIGH_FINE3500
#defineFIRST_STAGE_TARGET_LOW_FINE2000
#defineFIRST_STAGE_STEP2
#defineFIRST_STAGE_FINE_STEP1
2)全局变量
//脉搏血氧信号,存储脉搏血氧几个处理方法后得值
int32_tir_heart_signal;//红外光,OA1输出经过平均滤波后,等待数字去直流
int32_tvs_heart_signal;//红光,OA1输出经过平均滤波后,等待数字去直流
int32_tir_heart_signal_ac;//红外光,经过数字去直流,进入计算窗口,参加平方与得累加
int32_tvs_heart_signal_ac;//红光,经过数字去直流,进入计算窗口,参加平方与得累加
int32_tsum_ir_heart_signal_ac=0;//红外光,信号平方与累加值,一个周期计算平均功率
int32_tsum_vs_heart_signal_ac=0;//红光,信号平方与累加值,一个周期计算平均功率
//计算过程信号
intgroup_wave[512];//用于显示,循环队列,存储几个周期内得ir_heart_signal_ac信号
intoffset_wave=0;//循环队列队列头
intflag_initial=1;//初始化标志位
intsample_count=0;//采样计数,每个周期清空,重新计数
intnum_beat=0;//初始值为1,下一个脉搏后为2,计算平均功率与血氧饱与度,重新置1
intflag_jump=0;//脉搏波周期判断,就是否处于离开波谷得状态
intsample_jump=0;//离开波谷时得采样计数,到20则已离开波谷,置0,flag_jump置1
//循环队列,以滑动窗口得形式判断当前就是否为脉搏波波谷
intgroup_caculate[64];//用于脉搏周期判断得循环队列,存储64个ir_heart_signal_ac信号
intoffset_caculate=0;//队列头位置
intmin;//队列中最小值
intlocation_min;//最小值位置
intlocation_min_adjust;//最小值相对与队列头得位置,如果就是32则确认一个波谷
//最终结果
//脉率
unsignedintheart_rate=6000;//脉率最终测量结果,初始值为60、00
unsignedintgroup_heart_rate[8];//最近8秒内得脉率,循环队列,初始化为6000
intoffset_heart_rate=0;//队列头
unsignedintsample_heart_rate;//脉率当前原始结果,经过一定调整后进入group_heart_rate[8]
int32_tsum_heart_rate;//最近8秒得脉率累加值,除以8得到新得heart_rate
//脉搏血氧饱与度
unsignedintSpO2=9500;//血氧饱与度最终测量结果,初始值为95、00
unsignedintgroup_SpO2[8];//最近8秒内得血氧饱与度,循环队列,初始化为9500
intoffset_SpO2=0;//队列头
int32_tsum_SpO2;//最近8秒得血氧饱与度累加值,除以8得到新得heart_rate
//控制参数
intfresh=0;//调试使用,无意义
//反馈控幅与OA1参考电压得参数
intled_tab=0;//控制开启红光还就是红外光,每次中断切换状态
intir_LED_level;//ir驱动幅度,控制Q3基极,范围1到2500,数字越大,亮度越弱
intvs_LED_level;//vs驱动幅度,控制Q4基极,范围1到4095,数字越大,亮度越弱
intir_dc_offset=4095;//ir灯直流参考电压,开启红外LED时,控制OA1正向输入端
intvs_dc_offset=4095;///vs灯直流参考电压,开启红光LED时,控制OA1正向输入端
intir_dc_offset_second=0;//数字去直流时得直流跟随量
intvs_dc_offset_second=0;//数字去直流时得直流跟随量
//运放输出得输出
intir_sample;//ir灯,OA0得输出,根据该输出改变ir_LED_level
intvs_sample;//vs灯,OA0得输出,根据该输出改变vs_LED_level
3)子函数
unsignedlongisqrt32(registerunsignedlongh);//开方运算
int16_tir_filter_test(int16_tsample);//平均滤波器_红外
int16_tvs_filter_test(int16_tsample);//平均滤波器_红光
2、程序主体(请参照pulsoximeter、c文件)
1)晶振、电源设置
2)初始化操作:
group_heart_rate[8]初始化为6000,sum_heart_rate初始化为48000,group_SpO2[8]初始化为9500,sum_SpO2初始化为76000。
3)DAC设置,ir_LED_level初始化为2500,vs_LED_level初始化为900。
ADC设置。
定时器设置,200Hz采样中断,1600Hz用于PWM输出。
4)设置完,进入低功耗模式
5)中断处理程序,200Hz中断,中断进入后或者进入红光LED流程,或者进入红外LED流程,都要根据输入调整相应参数,进行平均滤波,去直流处理。
两种流程其她计算上有所不同:
在红光流程中主要进行两路信号平方与累加、采样计数、脉搏血氧饱与度与脉率得计算;红外流程里主要进行得就是脉搏周期得判断。
两个流程得具体操作如下。
红光流程:
关闭两路灯,设置参数,开启红光LED,读取输入,关闭红光LED,根据输入调整参数,平均滤波,去直流,循环队列更新,就是否处于找到波谷得状态(num_beat由1变为2,找到,否则未找到),未找到则计算两路平方与,采样计数累加,找到则计算脉搏血氧饱与度与脉率,平方与、采样计数置0。
红外流程:
关闭两路灯,设置参数,开启红光LED,读取输入,关闭红光LED,根据输入调整参数,平均滤波,去直流,循环队列更新,就是否处于离开波谷得状态(flag_jump==0时为寻找状态,flag_jump==0时为离开状态),寻找状态找到循环队列中最小值及位置,判断就是否波谷,不就是波谷继续寻找,就是波谷则进入离开状态,离开状态仅计数,计数满20次进入寻找状态。
中断程序代码如下所示:
//红光流程
if(led_tab==0)//led_tab==0,打开红光LED
{
led_tab=1;//切换led_tab,下一次进入红外流程
P2OUT|=BIT2;//关灯
P2OUT|=BIT3;//关灯
DAC12_0CTL&=~DAC12ENC;//开启DAC,根据vs_LED_level给出幅度
DAC12_0CTL&=~DAC12OPS;
DAC12_0CTL|=DAC12ENC;
DAC12_0DAT=vs_LED_level;//红光LED驱动幅度
DAC12_1DAT=vs_dc_offset;//红光去直流电路得参考电压,OA1正向输入
P2OUT&=~BIT3;//开灯,红光LED
ADC12CTL0&=~ENC;//开启DAC,读取OA0、OA1输出
ADC12CTL0|=ENC;
for(m=1;m<=1500;m++)//伪循环提供DAC转换时间,红光LED保持开
{
}
vs_sample=ADC12MEM0;//OA0输出结果
i=ADC12MEM1;//OA1输出结果
//OA0输出,根据全局参量控制LED得驱动幅度
if(vs_sample>=FIRST_STAGE_TARGET_HIGH||vs_sample<=FIRST_ST
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 脉搏 饱和度