收藏 分享(赏)

基于MATLAB 的脉搏信号处理软件系统.doc

上传人:精品资料 文档编号:8012295 上传时间:2019-06-04 格式:DOC 页数:29 大小:1.23MB
下载 相关 举报
基于MATLAB 的脉搏信号处理软件系统.doc_第1页
第1页 / 共29页
基于MATLAB 的脉搏信号处理软件系统.doc_第2页
第2页 / 共29页
基于MATLAB 的脉搏信号处理软件系统.doc_第3页
第3页 / 共29页
基于MATLAB 的脉搏信号处理软件系统.doc_第4页
第4页 / 共29页
基于MATLAB 的脉搏信号处理软件系统.doc_第5页
第5页 / 共29页
点击查看更多>>
资源描述

1、基于 MATLAB 的脉搏信号处理软体系统1基于 MATLAB 的脉搏信号处理软件系统摘要: 本文根据在实验室里测得的脉搏数据,基于 MATLBA 设计一个脉搏信号的GUI 处理界面,并利用 MATLAB 强大数字信号处理功能还原脉搏波形,并对波形的特征信息进行提取及存储。原始信号进行了去除基线漂移、通过巴特沃斯带通滤波器以及二阶切比雪夫滤波器去除 50HZ 工频干扰,并且能计算实时的脉率并更新,显示脉率变化趋势曲线,进行频谱分析和输出文档。此软件有两个 GUI 界面,第一个为密码登陆界面,第二个为脉搏信号处理系统 GUI 界面。第二个 GUI 界面主要分为五大模块:1. 打开与退出模块包括打

2、开数据和退出系统;2.信号回放模块包括对原信号和滤波信号的回放、暂停回放、继续回放、关闭窗口;3.信号放大与缩小模块包括对信号的 X 轴和 Y 轴的放大、缩小处理;信号快进退模块包括对信号的快进、慢进、快退、慢退处理;4.脉率实时处理模块包括输出脉率曲线、暂停回放、输出脉搏信息、脉搏频谱分析、清除波形、输出文档;5. 脉率信号输出模块包括输出实时的脉率更新、以及脉搏数据的信息,诸如脉搏采样频率、采样时间、最大脉率值、最小脉率等。关键词:脉搏;脉率 ;Matlab ;GUI ;1 引言人体内部各个生理系统之间(如循环系统、呼吸系统等)是相互耦合的。反映人身体健康状态相对最重要、最全面的是心脏血液

3、循环系统,因此通过采集脉搏波进而分析心脏循环系统功能,能从一个方面较全面反映人体的健康情况。从脉搏波中提取人体的生理病理信息作为临床诊断和治疗的依据,历来都受到中外医学界的重视。几乎世界上所有的民族都用过“摸脉”作为诊断疾病的手段。脉搏波所呈现出的形态(波形)、强度( 波幅)、速率(波速) 和节律 (周期)等方 面的综合信息,在很大程度上反映出人体心血管系统中许多生理病理的血流特征,因此对脉搏波采集和处理具有很高的医学价值和应用前景。目前脉搏信息的研究已经应用于以下几个方面:(1)中医脉象信息的检测与识别;(2) 血压的临床检测;(3) 心率稳定性的一种简便估计方法;(4)心输出量的一种测量方

4、法;(5) 血管功能的一种早期、无创检测方法。MATLAB(Matrix Laboratory,矩阵实验室)是由美国 MathWorks 公司开发的一种功能强、效率高、简单易学的可视化软件,覆盖面包括控制、通讯、金融、图像处基于 MATLAB 的脉搏信号处理软体系统2理、建筑、生物学等几乎所有的行业与科学领域。除了经典的一些算法外,MATLAB 还提供了丰富的数据分析和处理功能模块,如神经网络、小波分析、信号处理、图像处理、自动控制、模糊控制、系统仿真等,因此 MATLAB 是一种高效的编程软件。本文介绍利用 MATLAB 软件作为技术平台 ,实现对统脉搏波快速、准确实时显示,而且实现方法简单

5、有效,有一定的实用性。2 软件总体界面与总体设计思路2.1 密码登陆系统图 2.1 未运行前密码登陆界面图 2.2 运行后输入错误的密码登陆界面图 2.3 运行后输入正确的密码登陆界面基于 MATLAB 的脉搏信号处理软体系统32.2 脉搏信号处理系统界面图 2.4 未运行前的脉搏信号处理系统界面基于 MATLAB 的脉搏信号处理软体系统4图 2.4 运行后的脉搏原信号与滤波信号回放图 2.6 运行后的脉率曲线回放与判断脉率正常、输出脉搏信息图 2.7 运行后的频谱分析基于 MATLAB 的脉搏信号处理软体系统52.3 软件总体设计思路包含功能包含功能包含功能包含功能包含功能暂停回放输出脉搏信

6、息判断脉率正常与否输出脉搏信号的采样频率、采样时间、最大脉率、最小脉率等输出脉率曲线文本框中脉率的更新脉率变化趋势曲线脉率峰值变化曲线继续回放X 轴缩小 X 轴放大X 轴缩小 X 轴缩小信号快进信号快退信号慢进信号慢退退出系统关闭窗口 暂停回放打开数据原始信号与滤波后的信号回放输入正确用户名和密码登陆脉搏信号处理系统运行登陆软件频谱分析清除波形 输出文档输出信号幅频谱曲线、功率谱曲线输出按当前日期和时间命名的文档,包含有脉率及各种信息基于 MATLAB 的脉搏信号处理软体系统63 信号回放模块设计3.1 脉搏波信号滤波脉搏信号是强干扰下的微弱信号,脉搏信号幅度很小,大约是微伏到毫伏的数量级范围

7、,其主要频带范围在 020Hz 之间。一般情况下为 1Hz 左右,脉搏信号可看成一个准直流信号,也可看成是一个甚低频交变信号。根据脉搏功率谱能量分析,健康人脉搏能量绝大多数分布于 0.55Hz,而病人脉搏在 1Hz 以下和较高频段(如 5Hz 以上或 10Hz 以上) 仍有相当一部分的能量分布。脉搏信号极容易引入干扰,一般情况下,由体表检测到的脉搏波主要有三种干扰:基线漂移,高频随机干扰和运动伪差噪声,还有一些干扰,比如工频干扰,等,这些干扰较之前三种干扰比较小,而且很容易去掉。1).基线漂移:这种噪声是由于被测对象的呼吸运动和身体移位而产生的,呼吸的频率分量通常在 0.8Hz 以下,每个人的

8、呼吸频率也不同;身体移位也可以用低频分量来表征,因此基线漂移基本上都是趋势分量和低频分量。2).高频随机干扰:脉搏信号的采集过程中有好多随机噪声和环境干扰的影响,这些噪声都表现为高频噪声,在 5Hz 以上。3).运动伪差噪声:由于对病人进行血氧检测时,病人手指(或脚趾)经常会发生运动,使手指(或脚趾)与传感器之间的距离发生位移,从而得到导致测量的病人脉搏波形很不稳定的一种噪声,这种噪声和信号在同一个频带范围内,是脉搏信号去噪的一个重点和难点。所以,为了对信号做准确的分析,在分析处理之前必须做一些必要的预处理。针对信号中存在噪声的特点,基线漂移和呼吸等低频干扰在 1Hz 以下,而脉搏信号主要在低

9、频范围,所以可以设计让信号先通过一个巴特沃斯带通滤波器,借以滤除基线漂移、呼吸引起的干扰(考虑到不丢失太多的其他信息,通带截止频率设置为 Wp=0.9,50,阻带截止频率设置为 Ws=0.3,140,通带波纹系数 Rp=3,阻带波纹系数 Rs=10) ,如图 3.2,然后再通过一个切比雪夫二型滤波器滤除固定的工频干扰(通带截止频率设置为 Wp=30,65,阻带截止频率 Ws=45,55,通带波纹系数 Rp=3,阻带波纹系数 Rs=60) ,如图 3.3。由于 Butterworth 滤波器通带内有最大的平滑特性,信号经过后衰减小,因此我们选用 Butterworth 带通滤波器滤除基线漂移和呼

10、吸等引起的干扰,但由于 IIR滤波器本身固有的缺点,信号通过 Butterworth 带通滤波器后相位会失真,故我基于 MATLAB 的脉搏信号处理软体系统7们可设计零相位 Butterworth 带通滤波器去噪。50Hz 固定工频在频域中是一个点,因而要求设计的带阻滤波器有好的截止特性,而切比雪夫 II 型 滤 波 器 有 较 好 的 截止 特 性 , 并 且 在 其 通 带 内 单 调 , 故 而设计零相位切比雪夫 II 型 滤 波 器 滤 除 工 频干 扰 。 流 程 图 如 下 :图 3.1 脉搏信号滤波流程图图 3.2 巴特沃斯带通滤波器 图 3.3 带阻切比雪夫 II 型滤波器3.

11、2 脉搏信号回放按钮设计思路信号回放模块设计如图 3.4,考虑到用户使用的方便性,信号回放过程中才可对信号进行放大与缩小操作,或者快进退操作,在回放过程中,退出系统按钮Load 命令读取脉搏信号 TXT 文件去除基线漂移通过 Buttord 和 butter 命令组成的巴特沃斯带通滤波器通过 cheb2ord 和 cheby 命令构成的切比雪夫二阶滤波器原信号回放 滤波信号回放基于 MATLAB 的脉搏信号处理软体系统8处于不激活状态,关闭窗口和继续回放也处于不激活状态,只有当信号暂停时,才使前面三个按钮激活,或者进行下一步,输出脉率曲线功能。图 3.4 信号回放模块设计1).信号回放:主要采

12、用了 Matlab 中的while、if、plot、axis、global 、set 、pause 命令。思路先是将信号和滤波信号用plot 命令分别在 axes1、和 axes2 上画出图形,接着用 axis 移动坐标轴,用 while进行死循环,让信号不停的回放。2).信号暂停:主要利用 if-break 语句来实现,在信号回放的控件 Callback 函数中,定义一个全局变量 flg1,初始 flg1=1,接着在 while 每次循环中,检测 flg1的值,为 1 继续循环回放,为 0 的话跳出循环,停止回放。所以,要信号暂停回放,只需要在信号暂停按钮的 Callback 函数中,定义一

13、个全局变量 flg1,并命flg1=0 即可。3).继续回放:也是利用全局变量来实现,当信号暂停回放时,记录下些时的X 轴和 Y 轴的长度大小,点击继续回放就还是用 plot 命令分别在 axes1、和 axes2上画出图形,接着用 axis 移动坐标轴,用 while 进行死循环,让信号不停的回放。只不过这里要注意的是,此时坐标轴的移动不是从 0 开始,而是从暂停时的记录下来的全局变量 X 轴的长度大小 xmin、xmax。4).关闭窗口:直接用 delete(allchild(handles.axes1); delete(allchild(handles.axes2); 语句基于 MATL

14、AB 的脉搏信号处理软体系统9图 3.5 原信号和滤波后的脉搏信号回放4 信号放大与缩小模块设计4.1 设计界面考虑到信号回放过程中每个人的脉搏的曲线都会有所不一样,两个波峰之间的时间,波峰的数值大小,为了能方便看到每个点的数据,我在信号放大与缩小模块中加了四个按钮,可沿 X 轴缩小放大和沿 Y 轴缩小放大,如图 4.1。另外,考虑到操作的方便性,设计了在信号回放或者继续回放的过程中,这四个按钮才被激活,信号暂停时,这四个按钮都处于不激活的状态。图 4.1 信号放大与缩小模块4.2 信号放大与缩小按钮设计思路1).X 轴缩小: 即将信号沿 X 轴压缩,如图 4.3,X 轴的长度变长,但是 Y

15、轴保持不变,这里,主要也是利用 axis 命令,实时的改变 X 轴长度,并且用 while 进行死循环,直到遇到 flg1=0,才跳出循环。程序流程图如下:基于 MATLAB 的脉搏信号处理软体系统10图 4.2 信号放大流程图图 4.3 X 轴缩小flg1=1flg1=0鼠标点击放大X 轴坐标的 Xmin=Xmin*0.5判断全局变量 flg1 的值Xmin=Xmin+0.1;Xmax=Xmax+0.1Plot 命令画图Axis(Xmin,Xmax,Ymin,Ymax)改变坐标轴Pause 命令延时 0.5S暂停回放基于 MATLAB 的脉搏信号处理软体系统112).X 轴放大: 即将信号沿

16、 X 轴拉伸,如图 4.4,X 轴的长度变短,但是 Y 轴保持不变,这里,主要也是利用 axis 命令,实时的改变 X 轴长度,并且用 while 进行死循环,直到遇到 flg1=0,才跳出循环。图 4.4 X 轴放大3).Y 轴缩小: 即将信号沿 Y 轴压缩,如图 4.5,Y 轴的长度变长,但是 Y 轴保持不变,这里,主要也是利用 axis 命令,实时的改变 X 轴长度,并且用 while 进行死循环,直到遇到 flg1=0,才跳出循环。图 4.5Y 轴缩小4).Y 轴放大: 即将信号沿 Y 轴拉伸,如图 4.6,Y 轴的长度变短,但是 Y 轴保基于 MATLAB 的脉搏信号处理软体系统12

17、持不变,这里,主要也是利用 axis 命令,实时的改变 X 轴长度,并且用 while 进行死循环,直到遇到 flg1=0,才跳出循环。图 4.6 Y 轴放大5 信号快进退模块设计5.1 设计界面考虑到有时信号的采样时间很长,为了能快速浏览信号的波形或者看之前的波形,我特别又设计此模块。图 5.1 信号快进退模块界面5.2 信号快进退按钮设计思路1).快进:设计全局变量 pauset=pauset*0.5,即让每次移动坐标轴的时间间隔减小,再令 Xmin=Xmin+0.1,Xmax=Xmax+0.1,移动 X 轴,这样回放的速度就会变快,按钮每按一次,回放速度加快一倍。2).慢进:设计全局变量

18、 pauset=pauset*2,即让每次移动坐标轴的时间间隔加大,再令 Xmin=Xmin+0.1,Xmax=Xmax+0.1,移动 X 轴,这样回放的速度就会变慢,按钮每按一次,回放速度减少一倍。3).快退:设计全局变量 pauset=pauset*0.5,即让每次移动坐标轴的时间间隔减小,再令 Xmin=Xmin-0.1,Xmax=Xmax-0.1,移动 X 轴,这样回放的速度就会变快,按钮基于 MATLAB 的脉搏信号处理软体系统13每按一次,回放速度加快一倍。4).慢退:设计全局变量 pauset=pauset*2,即让每次移动坐标轴的时间间隔减小,再令 Xmin=Xmin-0.1,

19、Xmax=Xmax-0.1,移动 X 轴,这样回放的速度就会变快,按钮每按一次,回放速度加快一倍。6 脉率实时处理模块设计6.1 脉搏信号峰值提取脉搏信号的特征提取是脉搏信号分析中的关键,能不能准确的提取出来脉搏信号的特征关系到能不能准确的分析脉搏信号,其时域中提取的主要特征有脉搏的峰值、周期等。而在这其中最重要的是峰值的提取,准确的提取出来峰值,可为进一步分析其周期,脉率等其他 参数打下基础,如图 6.1 显示的脉搏波,h 为脉搏波形的高度。图 6.1 脉搏波形的高度提取信号的峰值基本思想是基于阈值的方法,统计分析采集到得脉搏信号发现,虽然每个脉搏波的波峰值大小并不相同,但他们总在一个范围内

20、波动,波动的范围基本上不超过最大波形高度的 0.3 倍,为了更为可靠的检测波峰,以 0.4倍为参考。因此可以认为波峰点是在每个脉搏周期中波形的最大值附近,大于其邻域内所有点的点。由于所用数据采样频率为 800HZ,通过对大量脉搏波测量数据分析,把邻域长度定义为 400 个数据点可以准确识别波峰点。 假设采集到的脉搏波为数字信号序列 , 实际波峰 的判别条件jP,0NjP为:20,maxppp jjjPj公式中 , 为波峰点的位置。4.)min(Ppj提取出波峰点的位置后,其他时域的特征,如周期、脉率等可相应而出。峰值提取程序流程如下:基于 MATLAB 的脉搏信号处理软体系统14图 6.1 判

21、断脉搏峰值程序流程图6.2 脉率实时处理界面设计界面设计如图 6.2,脉率信号输出窗口可输出平均脉率、采样频率、采样时长、最大脉率、最小脉率等。图 6.2 脉率实时处理模块NYNY开始取整个信号最大幅值 PM设置峰值提取阈值 G设置计数 cnt=0是否到数据最末尾PM-X(i)100msgbox(健康成人在安静状态下脉率为 60 100 次/min,您的脉率过快,建议到医院检查,脉率正常与否判断);elsemsgbox(健康成人在安静状态下脉率为 60 100 次/min,您的脉率属于正常范围,请继续保持,脉率正常与否判断);endset(handles.pushbutton24,enable

22、,on);set(handles.pushbutton8,enable,off);set(handles.edit1,string,maibo1,fontsize,18);7.频谱分析function pushbutton24_Callback(hObject, eventdata, handles)set(handles.pushbutton9,enable,on);set(handles.pushbutton23,enable,on);global stryy=load(str);x=yy(:,2);fs=1000;%去除基线漂移k = .7; % cut-off valuefc=0.3/

23、fs;alpha = (1-k*cos(2*pi*fc)-sqrt(2*k*(1-cos(2*pi*fc)-k2*sin(2*pi*fc)2)/(1-k);y = zeros(size(x);for i = 1:size(x,1)y(1,:) = filtfilt(1-alpha,1 -alpha,x(1,:);end x1=x-y;%butter 带通滤波Wp=0.9 50/500;Ws=0.3 140/500;n,Wn = buttord(Wp,Ws,3,10);b,a = butter(n,Wn);%cheby 去除 50hz 工频干扰Wp1=30 65/500;Ws1=45 55/50

24、0;rp=3;rs=60;n1,Wn1 = cheb2ord(Wp1,Ws1,rp,rs);b1,a1 = cheby2(n1,rs,Wn1,stop);%信号对比x2=filtfilt(b,a,x1);s21=filtfilt(b1,a1,x2);基于 MATLAB 的脉搏信号处理软体系统28%R 波的提取A=s21;PM=max(A);MM=min(A);G=(PM-MM)*0.3; %峰值大小波动范围不超过最大波形高度的 0.3 倍if max(A(1:200)=max(A(1:550)P1(1),t1(1)=max(A(1:200); cnt1=1;elseif max(A(1:200

25、)=max(A(1:550)cnt1=0;endfor i=201:length(A)-200 %因为周期大于 600,波峰大于其左右各 200 个点内的所有值if PM-A(i)Gt1(cnt1+1)=i*1.25; cnt1=cnt1+1;endendif max(A(length(A)-199:length(A)=max(A(length(A)-550:length(A)P1(cnt1+1),t1(cnt1+1)=max(A(length(A)-199:length(A); cnt1=cnt1+1;endj=1;for m=2:length(t1)T(j)=t1(m)-t1(m-1);j

26、=j+1;end%频谱图F=fft(s21);axes(handles.axes1);fumax=max(abs(F)*2/length(s21)+0.3;plot(0:length(s21)-1/(length(s21)*(1/fs),abs(F)*2/length(s21);grid;xlabel(频率/HZ);ylabel( 幅值);title(幅频图);axis(0 100 0 fumax);set(gca,position,10 27.5 120 20);%信号的功率谱估计axes(handles.axes2);w=hanning(128);基于 MATLAB 的脉搏信号处理软体系统

27、29nfft=1024;noverlap=64;p,f=spectrum(x,nfft,noverlap,w,fs);plot(f,p);grid;xlabel(频率(Hz);ylabel(功率谱(dB);title(信号的功率谱图);axis(0 50 0 7);set(gca,position,10 3 120 20);8.输出文档function pushbutton9_Callback(hObject, eventdata, handles)global TTstr=datestr(now);str=strrep(str,:,_);str=strrep(str, ,_);str=strrep(str,-,_);filename=strcat(str,.txt);fid=fopen(filename,wt);%写入文件路径TTT=TT;m,n=size(TTT); for i=1:1:m for j=1:1:n if j=n fprintf(fid,%gn,TTT(i,j); elsefprintf(fid,%gt,TTT(i,j);endendendfclose(fid);

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 企业管理 > 管理学资料

本站链接:文库   一言   我酷   合作


客服QQ:2549714901微博号:道客多多官方知乎号:道客多多

经营许可证编号: 粤ICP备2021046453号世界地图

道客多多©版权所有2020-2025营业执照举报