基于Matlab的心肺复苏术仿真模型GUI的实现

2013-11-21 10:47
韩山师范学院学报 2013年6期
关键词:外力作用参数值控件

徐 林

(韩山师范学院计算机科学与工程系,广东潮州 521041)

目前,我国每年心源性猝死超过50万例.据专家介绍,当病人出现昏迷时,及时开展心肺复苏(Cardiopulmonary Resuscitation,CPR)急救,可有效挽救生命.为此,我们利用数学建模的方法,基于Matlab中的Simulink建立了心肺复苏术仿真模型[1,2].利用仿真模型研究心肺复苏术,可以避免临床试验中因各种外在因素的影响,诸如心肺复苏实施的最佳时刻、受治患者的身体状况、临床试验样本的选取等等,而造成的不确定性结果.同时,实验者可以通过设置不同的外力作用的参数值,模拟仿真各种心肺复苏术下血流动力学效果,例如标准心肺复苏术(Standard CPR,S-CPR)、主动按压放松心肺复苏术(Active Compression Decompression CPR,ACD-CPR)等,还可仿真中山医科大学袁衡新等人提出的新型双泵复苏术(ACD-CPR coupled with Enhanced External Counter-pulsation and Inspiratory Impedance Threshold Valve,AEI-CPR).这为心肺复苏术的研究开辟了一个新的研究领域.

但是,Simulink创建的仿真模型是基于模块化的,其中各种参数的设置必须在模块内进行修改,可读性较差.因此,利用Matlab中的对象设计编辑器,创建了仿真模型的GUI界面,可使实验者较为直观地设置心肺复苏术中的各外力作用参数,并可方便地运行该模型获得仿真结果.仿真结果包括心肺复苏术下血流动学效果的几个主要的生理参数:胸主动脉压、右房压、冠脉灌注压和颈部血流量.

1 Simulink环境下建立的心肺复苏术仿真模型

Simulink是Matlab最重要的组件之一,它提供了一个动态系统建模、仿真和综合分析的集成环境.在该环境中,无需大量书写程序,而只需要通过简单直观的鼠标操作,就可构造出复杂的系统.

基于生理解剖学、血流动力学和心肺复苏术的基本原理,利用Matlab中的Simulink建立了心肺复苏术仿真模型,如图1所示.

图1 Simulink下的心肺复苏术仿真模型

图1 中左边部分为人体血液循环系统模型,用来仿真心肺复苏术下人体血流动力学的效果,其中各矩形框分别表示了人体的各生理部分,模型运行后可以通过这些子模块获得相关生理参数的动态变化值.图1中椭圆1所标识的模块为心脏模块,该模块中的具体内容如图2所示.

图1中右边部分为心肺复苏术外力作用的耦合模型,用来仿真心肺复苏术的外力作用,其中各矩形框分别表示了作用于人体不同部分(如胸部、下肢等)的外力作用效果.图1中椭圆2所标识的模块为胸部作用力模块,该模块中的具体内容如图3所示.

在Simulink中,要改变模块中的参数值如胸部按压力,必须进入对应的模块进行修改.而如图2和图3所示,心肺复苏术仿真模型非常复杂,使得对Simulink的环境不熟悉的实验人员无法快速了解该数学模型的运行机制.因此,利用Matlab的GUI功能,设计实现了可视化的模型操作界面,使只关心双泵复苏术血流动力学效果的实验人员可以很便捷地修改心肺复苏术外力作用的各个控制参数,并对该作用下所产生的血流动力学效果进行研究分析,而不需要了解该仿真模型在Simulink环境下实际的运行方式,极大地方便了课题组跨专业成员之间对相关问题的讨论.

图2 人体血液循环系统模型中心脏模块

图3 心肺复苏术外力作用耦合模型中的胸部按压力模块

3 Matlab中仿真模型GUI界面的设计与实现

3.1 Matlab中仿真模型GUI界面的设计

作为强大的科学计算软件,Matlab也提供了GUI的设计与开发功能.Matlab中的基本图形用户界面对象分为3类:用户界面控件对象(uicontrol)、下拉式菜单对象(uimenu)和内容式菜单对象(uicontextmenu).利用上述对象,进行周密的组织、设计,就可以设计出一个界面良好、操作简便、功能强大的图形用户界面[3].

在Matlab命令窗口内,选择File主菜单的New子菜单,会看到一个GUI的二级子菜单,单击它,就会显示GUI的程序设计模板,如图4所示.

Matlab为GUI设计一共准备了4种模板,根据设计的需要,选择“Blank GUI(Default)”,就会打开一个空白的对象设计编辑器,如图5所示.在图的左边,Matlab提供了设计界面所需的各种控件对象.在本界面中主要用到的控件对象有:Push Button()、Edit Text()、Static Text()和Axes坐标轴对象().

根据仿真模型的运行需求,设计的仿真模型的GUI界面如图6所示.图6中的左方是5个Axes坐标轴对象,用来显示运行仿真模型后几个主要的生理参数值的动态变化结果,包括:外作用力的按压波形、胸主动脉压、右房压、冠脉灌注压和颈部血流量.图6中的右上方是一组Static Text控件和EditText控件对,Static Text控件对象用来为用户显示提示信息,并在对应的信息后面添加EditText控件对象,用来接收用户输入的心肺复苏术外力作用的控制参数数据.用户可输入的心肺复苏术外力作用控制参数包括:按压频率、胸部按压力、胸部上提力、下肢按压力,对下肢实施序贯式加压的时刻,胸部按压与下肢按压时间的比例.图6的右下方有两个Push Button控件对象,点击“Run Module”按钮,将运行仿真模型.点击“Exit”按钮,将退出本界面程序.

3.2 Matlab中仿真模型GUI界面的代码实现

根据图6的仿真模型GUI界面的设计,当用户点击“Run Module”按钮时,系统将接受用户在EditText中输入的外作用力控制参数值,并利用这些参数值运行仿真模型,最后将运行结果显示在左方的Axes坐标轴对象中.以上这些操作,需要在“Run Module”按钮的回调函数(Callback)中完成,具体的代码实现如下.

图4 GUI设计模板界面

图5 对象设计编辑器中的Blank GUI模板界面

图6 仿真模型的GUI界面

第一步,获取用户在EditText控件对象中输入的各控制参数的数值.Matlab GUI中的所有控件使用同一个handles结构体,handles结构体中保存了图形窗口中所有对象的句柄,因此可以使用handles.ControlName获取或设置某个对象的属性.例如,若将用来输入按压频率的Edit Text控件命名为txt-Freq,则要获取该控件中用户输入的数据,可使用语句get(handles.txtFreq,'String'),其中get函数的作用是从指定的控件对象中获取相关的信息,handles.txtFreq为要获取信息的控件的名字,而参数‘String’则为指定控件的String属性,用户在该控件中输入的数据就保存在该属性中.因为从Edit Text控件中获取的数据都为字符型的,所以还需要用str2num()函数将字符型数据转换为数值型数据.获得的数据保存在指定的变量中,如“f_c=str2num(get(handles.txtFreq,’String’);”.

第二步,将获得的用户输入的控制参数值存放到Matlab的base空间中,以便Simulink仿真模型可以使用.在Matlab中,函数运行所使用的空间是与Matlab的base空间相独立的,默认情况下函数中所定义的变量为局部变量,而仿真模型运行所需要的数据都是由base空间读取的,因此,必须将读取的控制参数值由函数的运行空间存放到base空间中.例如,若将按压频率的值存放到base空间中,则使用语句“assignin('base','f_c',f_c);”.其中,第一个参数’base’指明要存放的空间的名字,第二个参数’f_c’为要在指定的base空间中保存该数据的变量的名字,第三个参数f_c则为本函数中保存按压频率的变量名.

第三步,运行Simulink仿真模型.若所建仿真模型的名字为MyCPRModule.mdl,则使用语句为“sim('MyCPRModule.mdl');”.其中sim()函数的作用就是运行指定的simulink仿真模型.

第四步,Simulink仿真模型运行结束后,将所得到的运行结果在GUI界面左方的Axes坐标轴对象中显示出来.这一步的操作主要是通过plot()函数来实现的.例如,要显示胸主动脉压可使用如下语句来完成:

%在指定的Axes对象中显示波形,横轴为time,纵轴为Pao(即胸主动脉压)

plot(handles.axePao,time,Pao) ;

%因为模型运行后得到的数据量较大,且数据是随时间循环的,所以只截取其中的一部分数据即可.Xlim()函数的作用是在Axes中显示指定范围的数据.

xlim(handles.axePao,[45,45+t_c*2]);

%grid()函数的作用是指定Axes中是否显示表格,参数'on'就表示显示

grid(handles.axePao,'on');

%ylabel()函数的作用是显示纵轴的标签

ylabel(handles.axePao,'Pao');

3 仿真模型GUI界面的运行结果

完成了上述编程任务,就可以运行GUI界面了.首先,分别在Edit Text控件中输入指定的控制参数值,然后点击“Run Module”按钮,Simulink仿真模型将在后台完成运行,运行完成后,指定的运行结果就会在Axes坐标轴对象中分别显示出来.运行结果如图7所示.

[1]WU X M,ZHANG Y R,XU L,et al.The Computer Model in View of Hemodynamic Effects of Electro Ventilation Double Pump CPR.Peng Y.,Weng X.H..APCMBE 2008[C].United States:Springer,2008:562-566.

[2]ZHANG Y R,WU X M,XU L,etal.The Hemodynamic Effects Analysis ofthe New CPR Technique-Electro Ventilation Double Pump CPR:Studies in the Computer Model.ICBBE2008[C].United States:IEEE,2008:1761-1764.

[3]阮沈勇,王永利,桑群芳.MATLAB程序设计[M].北京:电子工业出版社.2004:7.

[4]黄永安,马路,刘慧敏.MATLAB 7.0/Simulink 6.0建模仿真开发与高级工程应用[M].北京:清华大学出版社,2006:5.

图7 simulink仿真模型的GUI界面运行结果

猜你喜欢
外力作用参数值控件
例谈不等式解法常见的逆用
不等式(组)参数取值范围典例解析
外力作用对地表形态的影响
中美高中地理教材课文系统比较
2020 Roadmap on gas-involved photo- and electro- catalysis
人教版高中地理《营造地表形态的力量》课例的教学探究
关于.net控件数组的探讨
逆向思维求三角函数中的参数值
ASP.NET服务器端验证控件的使用
《机械能及其守恒定律》典题赏析