【信号处理】基于matlab GUI生物电信号仿真【含Matlab源码 684期】

一、简介

何为生物电?
1 ECG:心电图。
心电图(electrocardiogram)心脏在每个心动周期中,由起搏点、心房、心室相继兴奋,伴随着生物电的变化,通过心电描记器从体表引出多种形式的电位变化的图形(简称ECG)。
1.1 原理:
产生心脏周围的组织和体液都能导电,因此可将人体看成为一个具有长、宽、厚三度空间的容积导体。心脏好比电源,无数心肌细胞动作电位变化的总和可以传导并反映到体表。在体表很多点之间存在着电位差,也有很多点彼此之间无电位差是等电的。
心脏电活动按力学原理可归结为一系列的瞬间心电综合向量。在每一心动周期中,作空间环形运动的轨迹构成立体心电向量环。应用 阴极射线示波器在屏幕上具体看到的额面、横面和侧面心电图向量环,则是立体向量环在相应平面上的投影。心电图上所记录的电位变化是一系列瞬间心电综合向量在不同导联轴上的反映,也就是平面向量环在有关导联轴上的再投影。投影所得电位的大小决定于瞬间心电综合向量本身的大小及其与导联轴的夹角关系。投影的方向和导联轴方向一致时得正电位,相反时为 负电位。用一定速度移行的记录纸对这些投影加以连续描记,得到的就是心电图的波形。心电图波形在基线(等电位线)上下的升降,同向量环运行的方向有关。和导联轴方向一致时,在心电图上投影得上升支,相反时得下降支。向量环上零点的投影即心电图上的等电位线,该线的延长线将向量环分成两个部分,它们分别投影为正波和负波。因此,心电图与心向量图有非常密切的关系。心电图的长处是可以从不同平面的不同角度,利用比较简单的波形、线段对复杂的立体心电向量环,就其投影加以定量和进行时程上的分析。而 心电向量图学理论上的发展又进一步丰富了心电图学的内容并使之更易理解。
导联动物机体组织和体液都能导电,将心电描记器的记录电极放在体表的任何两个非等电部位,都可记录出心电变化的图象,这种测量方法叫做双极导联,所测的电位变化是体表被测两点的电位变化的代数和,分析波形较为复杂。如果设法使两个测量电极之一,通常是和描记器负端相连的极,其电位始终保持零电位,就成为所谓的“无关电极”,而另一个 测量电极则放在体表某一测量点,作为“探查电极”,这种测量方法叫做单极导联。由于无关电极经常保持零电位不变,故所测得的电位变化就只表示探查电极所在部位的电位变化,因而对波形的解释较为单纯。目前在临床检查心电图时,单极和双极导联都在使用。常规使用的心电图导联方法有12种。
医生们只要对心电图进行分析便可以判断受检人的心跳是否规则、有否心脏肥大、有否心肌梗塞等疾病。 同样地,人类的大脑也如心脏一样能产生电流,因此医生们只要在病人头皮上安放电极描记器,并通过脑生物电活动的改变所记录下来的脑电图,便知道病人脑内是否有病。当然,由于比起心电来,脑电比较微弱,因此科学家要将脑电放大100万倍才可反映出脑组织的变化,如脑内是否长肿瘤、受检查者有否可能发生癫痫(俗称羊癫疯)等。科学家们相信,随着电生理科学以及电子学的发展,脑电图记录将更加精细,甚至有一天这类仪器还可正确地测知人们的思维活动。 电在生物体内普遍存在。生物学家认为,组成生物体的每个细胞都是一合微型发电机。细胞膜内外带有相反的电荷,膜外带正电荷,膜内带负电荷,膜内外的钾、钠离子的不均匀分布是产生细胞生物电的基础。但是,生物电的电压很低、电流很弱,要用精密仪器才能测量到,因此生物电直到1786年才由意大利生物学家伽伐尼首先发现。 人体任何一个细微的活动都与生物电有关。外界的刺激、心脏跳动、肌肉收缩、眼睛开闭、大脑思维等,都伴随着生物电的产生和变化。人体某一部位受到刺激后,感觉器官就会产生兴奋。兴奋沿着传入神经传到大脑,大脑便根据兴奋传来的信息做出反应,发出指令。然后传出神经将大脑的指令传给相关的效应器官,它会根据指令完成相应的动作。这一过程传递的信息——兴奋,就是生物电。也就是说,感官和大脑之间的“刺激反应”主要是通过生物电的传导来实现的。心脏跳动时会产生1~2 毫伏的电压,眼睛开闭产生5~6毫伏的电压,读书或思考问题时大脑产生0.2~1毫伏的电压。正常人的心脏、肌肉、视网膜、大脑等的生物电变化都是很有规律的。因此,将患者的心电图、肌电图、视网膜电图、脑电图等与健康人作比较,就可以发现疾病所在。
在其他动物中,有不少生物的电流、电压相当大。在世界一些大洋的沿岸,有一种体形较大的海鸟——军舰鸟,它有着高超的飞行技术。能在飞鱼落水前的一刹那叼住它,从不失手。美国科学家经过10多年研究,发现军舰鸟的“电细胞”非常发达,其视网膜与脑细胞组织构成了一套功能齐全的“生物电路”,它的视网膜是一种比人类现有的任何雷达都要先进百倍的“生物雷达”,脑细胞组织则是一部无与伦比的“生物电脑”,因此它们才有上述绝技。 还有一些鱼类有专门的发电器官。如广布于热带和亚热带近海的电鳐能产生100伏电压,足可以把一些小鱼击死。非洲尼罗河中的电 缩,电压有400~500伏。南美洲亚马孙河及奥里诺科河中的电级,形似泥锹、黄绍,身长两米,能产生瞬间电流2安培,电压800伏,足可以把牛马甚至人击毙在水中,难怪人们说它是江河里的“魔王”。
植物体内同样有电。为什么人的手指触及含羞草时它便“弯腰低头”害羞起来?为什么向日葵金黄色的脸庞总是朝着太阳微笑?为什么捕蝇草会像机灵的青蛙一样捕捉叶子上的昆虫?这些都是生物电的功劳。如含羞草的叶片受到刺激后,立即产生电流,电流沿着叶柄以每秒14毫米的速度传到叶片底座上的小球状器官,引起球状器官的活动,而它的活动又带动叶片活动,使得叶片闭合。不久,电流消失,叶片就恢复原状。在北美洲,有一种电竹,人畜都不敢靠近,一旦不小心碰到它,就会全身麻木,甚至被击倒。 此外,还有一些生物包括细菌、植物、动物都能把化学能转化为电能,发光而不发热。特别是海洋生物,据统计,生活在中等深度的虾类中有70%的品种和个体、鱼类中70%的品种和95%的个体,都能发光。一到夜晚,在海洋的一些区域,一盏盏生物灯大放光彩,汇合起来形成极为壮观的海洋奇景。 生物电现象是指生物机体在进行生理活动时所显示出的电现象,这种现象是普遍存在的。 细胞膜内外都存在着电位差,当某些细胞(如神经细胞、肌肉细胞)兴奋时,可以产生动作电位,并沿细胞膜传播出去。而另一些细胞(如腺细胞、巨噬细胞、纤毛细胞)的电位变化对于细胞完成种种功能也起着重要作用。
随着科学技术的日益进展,生物电的研究取得了很大的进步。在理论上,单细胞电活动的特点,神经传导功能,生物电产生原理,特别是膜离子流理论的建立都取得了一系列的突破。在医学应用上,利用器官生物电的综合测定来判断器官的功能,给某些疾病的诊断和治疗提供了科学依据。 我们的临床工作中经常遇到兴奋性、兴奋与兴奋传导这些概念,堵隔壁生物电有关。了解了生物电的现代基本理论,对于正确理解这些概念以及心电、脑电、肌电等的基本原理都有重要意义。
细胞生物电现象有以下几种
1、静息电位 组织细胞安静状态下存在于膜两侧的电位差,称为静息电位,或称为膜电位。细胞在安静状态时,正电荷位于膜外一侧(膜外电位为正),负电荷位于膜内一侧(膜内电位为负,)这种状态称为极化。如果膜内外电位差增大,即静息电位的数值向膜内负值加大的方向变化时,称为超极化。相反地,如果膜内外电位差减小,即膜内电位向负值减小的方向变化,则称为去极化或极化。一般神经纤维的静息电位如以膜外电位为零,膜内电位为-70~-90mv。静息电位是由于细胞内K+出膜,膜内带负电,膜外带正电导致的 。
2、动作电位 当细胞受刺激时,在静息电位的基础上可发生电位变化,这种电位变化称为动作电位。动作电位的波形可因记录方法不同而有所差异以微电极置于细胞内,记录到快速、可逆的变化,表现为锋电位;锋电位代睛细胞兴奋过程,是兴奋产生和传导的标志。 锋电位在示波器上显示为灰锐的波形,它可分为上升支和一个下降支。上升支先是膜内的负电位迅速降低到零的过程,称为膜的去极化(除极),接着膜内电位继续上升超过膜外电位,出现膜外电位变负而膜内电位变正的状态,称为反极化。下降支是膜内电位恢复到原来的静息电位水平的过程,称为复极化。锋电位之后到完全恢复到静息电位水平之前,还有微小的连续缓慢的电变化,称为后电位。 心肌细胞的生物电现象和神经纤维、骨骼肌等细胞一样,包括安静时的静息电位和兴奋时的动作电位,但有其特点。心肌细胞安静时,膜内电位约为-90mv。心肌细胞静息电位形成的原理基本上和神经纤维相同。主要是由于安静时细胞内高农度的k+向膜外扩散而造成的。当心肌细胞接受刺激由静息状态转入兴奋时,即产生动作电位。其波形与神经纤维有较大的不同,主要特征是复极过程复杂,持续时间长。心肌细胞的某一点受刺激除极后,立即向四周扩散,直至整个心肌完全除极为止。已除极处的细胞膜外正电荷消失,未除极处的细胞膜仍带正电而形成电位差。除极与未除极部位之间的电位差,引起局部电流,由正极流向负极。复极时,最先除极的地方首先开始复极,膜外又带正电,再次形成复极处与未复极处细胞膜的电位差,又产生电流。如此依次复极,直至整个心肌细胞的同时除极也可以看成许多电偶同时在移动,不论它们的强度和方向是否相同,这个代表各部心肌除极总效果的电偶称为等效电偶。心脏的结构是一个立体,它除极时电偶的方向时刻在变化,表现在心电图上,是影响各波向上或向下的主要原因。由于各部心肌的大小、厚薄不同,心脏除极又循一定顺序,所以心脏除极中,等效电偶的强度时刻都在变化。它主要影响心电图上各波的幅度。人体是一个容积导体,心脏居人体之中,心脏产生的等效电偶,在人体各部均有它的电位分布。在心动周期中,心脏等效电偶的电力强度和方向在不断地变化着。身体各种的电位也会随之而不断变动,从身体任意两点,通过仪器(心电图机)就可以把它描记成曲线,这就是心电图。 随着分子生物学和膜的超微结构研究的进展,人们更试图从膜结构中某些特殊蛋白和其他物质的分子构型的改变,来理解膜的通透性能的改变和生物电的产生,这将把生物电现象的研究推进到一个新阶段。 [编辑本段]生物电的奥秘尚未揭开,应用须谨慎 最近,生物学家“窃听”到了人体内一些部位电活动的“声音”,并发现以电场形式存在的生物电,在诸多生理过程中起着至关重要的作用,如胚胎发育、细胞分裂、神经再生和伤口修复等。但是,对它的探索并不顺利。 对电场可能影响细胞行为的首次报道是在1920年。当时,丹麦科学家斯文·英格法发现外部电场引起了鸡神经元向一个特殊方向生长。 2002年,英国阿伯丁大学的科林·麦凯格发现了生物电在鼠角膜的修复过程中起到非同寻常的作用。在正常的角膜中,角膜上皮细胞泵出细胞内带正电荷的钠离子和钾离子,再泵出带负电荷的氯离子,由此产生了大约40毫伏的电压。处于分裂活跃期的修复伤口的细胞能够通过电场来获取重要的空间信息,将修复细胞推向伤口处。如果取消这个电场,则细胞向任意方向进行分裂;如果人为加强这个电场的强度,远离伤口的细胞也会沿着电场平面开始分裂。同样,神经元也利用角膜的电场自我重建,他们发现角膜的电场能促进神经元向伤口生长。 然而,电场是如何影响细胞行为的?目前,科学家还没有揭开其中的奥秘。科林·麦凯格认为有两个可能:一种可能是电场吸引了细胞表面带有电荷的蛋白或脂肪;另一种可能是由于电压的改变,引起细胞膜上钙离子通道的开放,导致钙离子进入细胞内,钙离子反过来激活第二种信号分子,就这样信号沿着信号链一级级传递下去,但这都尚未被验证。 现在有一些组织,推出利用生物电进行医学治疗和保健的产品,一个培训班学习几天就声称能够治疗各种疾病,发技师证,收一千多元,却没有得到国家劳动部门的许可。在没有医学院执照和教学场地的情况下,却对外称生物电医学院,这些都是值得我们警惕的,尤其是宣传生物电治疗应用于上百种各色疾病,更是违背病理学常识,这些另类的治疗技术在正规的医院都是找不到,患者应该尤其谨慎。

2 EMG:肌电图
EMG,应用电子学仪器记录肌肉静止或收缩时的电活动,及应用电刺激检查神经、肌肉兴奋及传导功能的方法。英文简称EMG。通过此检查可以确定周围神经、神经元、神经肌肉接头及肌肉本身的功能状态。
通过测定运动单位电位的时限、波幅,安静情况下有无自发的电活动,以及肌肉大力收缩的波型及波幅,可区别神经原性损害和肌原性损害,诊断脊髓前角急、慢性损害(如脊髓前灰质炎、运动神经元疾病),神经根及周围神经病变(例如肌电图检查可以协助确定神经损伤的部位、程度、范围和预后)。另外对神经嵌压性病变、神经炎、遗传代谢障碍神经病、各种肌肉病也有诊断价值。此外,肌电图还用于在各种疾病的治疗过程中追踪疾病的恢复过程及疗效。
利用计算机技术,可作肌电图的自动分析,如解析肌电图、单纤维肌电图以及巨肌电图等,提高诊断的阳性率。
肌电图检查多用针电极及应用电刺激技术,检查过程中有一定的痛苦及损伤 ,因此除非必要 ,不可滥用此项检查。另外,检查时要求肌肉能完全放松或作不同程度的用力,因而要求受检者充分合作。对于某些检查,检查前要停药,如新斯地明类药物应于检查前16小时停用
记录肌肉动作电位的曲线(电描记图)称为肌电图。缩写为EMG。实际使用的描记方法有两种:一种是表面导出法,即把电极贴附在皮肤上导出电位的方法;另一种是针电极法,即把针电极刺入肌肉导出局部电位的方法。用后一种方法能分别记录肌肉每次的动作电位,而根据从每秒数次到二、三十次的肌肉动作电位情况,发现频率的异常。应用肌电图还可以诊断运动机能失常的原因。平常所用的针电极称为同心电极,它是把细针状电极穿过注射针的中心,两者绝缘固定制成的。

3 EEG:脑电图
脑电波(Electroencephalogram,EEG)是大脑在活动时,大量神经元同步发生的突触后电位经总和后形成的。它记录大脑活动时的电波变化,是脑神经细胞的电生理活动在大脑皮层或头皮表面的总体反映。
脑电波来源于锥体细胞顶端树突的突触后电位。脑电波同步节律的形成还与皮层丘脑非特异性投射系统的活动有关。
脑电波是脑科学的基础理论研究,脑电波监测广泛运用于其临床实践应用中。
生物电现象是生命活动的基本特征之一,各种生物均有电活动的表现,大到鲸鱼,小到细菌,都有或强或弱的生物电。其实,英文 细胞(cell)一词也有电池的含义,无数的细胞就相当于一节节微型的小电池,是生物电的源泉。
人脑中有许多的神经细胞在活动着,而成电器性的变动。也就是说,有电器性的摆动存在。而这种摆动呈现在科学仪器上,看起来就像波动一样。脑中的电器性震动我们称之为脑波。用一句话来说明脑波的话,或许可以说它是由脑细胞所产生的生物能源,或者是脑细胞活动的节奏。

二、源代码

function varargout = Task1(varargin)
% TASK1 MATLAB code for Task1.fig
%      TASK1, by itself, creates a new TASK1 or raises the existing
%      singleton*.
%
%      H = TASK1 returns the handle to a new TASK1 or the handle to
%      the existing singleton*.
%
%      TASK1('CALLBACK',hObject,eventData,handles,...) calls the local
%      function named CALLBACK in TASK1.M with the given input arguments.
%
%      TASK1('Property','Value',...) creates a new TASK1 or raises the
%      existing singleton*.  Starting from the left, property value pairs are
%      applied to the GUI before Task1_OpeningFcn gets called.  An
%      unrecognized property name or invalid value makes property application
%      stop.  All inputs are passed to Task1_OpeningFcn via varargin.
%
%      *See GUI Options on GUIDE's Tools menu.  Choose "GUI allows only one
%      instance to run (singleton)".
%
% See also: GUIDE, GUIDATA, GUIHANDLES

% Edit the above text to modify the response to help Task1

% Last Modified by GUIDE v2.5 18-Feb-2019 03:23:46

% Begin initialization code - DO NOT EDIT
gui_Singleton = 1;
gui_State = struct('gui_Name',       mfilename, ...
                   'gui_Singleton',  gui_Singleton, ...
                   'gui_OpeningFcn', @Task1_OpeningFcn, ...
                   'gui_OutputFcn',  @Task1_OutputFcn, ...
                   'gui_LayoutFcn',  [] , ...
                   'gui_Callback',   []);
if nargin && ischar(varargin{
    
    1})
    gui_State.gui_Callback = str2func(varargin{
    
    1});
end

if nargout
    [varargout{
    
    1:nargout}] = gui_mainfcn(gui_State, varargin{
    
    :});
else
    gui_mainfcn(gui_State, varargin{
    
    :});
end
% End initialization code - DO NOT EDIT


% --- Executes just before Task1 is made visible.
function Task1_OpeningFcn(hObject, eventdata, handles, varargin)
% This function has no output args, see OutputFcn.
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
% varargin   command line arguments to Task1 (see VARARGIN)

% Choose default command line output for Task1
handles.output = hObject;
%our beloved counter%
f=1;
handles.f=f;
% Update handles structure
guidata(hObject, handles);

% UIWAIT makes Task1 wait for user response (see UIRESUME)
% uiwait(handles.figure1);


% --- Outputs from this function are returned to the command line.
function varargout = Task1_OutputFcn(hObject, eventdata, handles) 
% varargout  cell array for returning output args (see VARARGOUT);
% hObject    handle to figure
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)

% Get default command line output from handles structure
varargout{
    
    1} = handles.output;


% --- Executes on slider movement.
function slider_Callback(hObject, eventdata, handles)
% hObject    handle to slider (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)
v = get(handles.slider, 'value') %V is the value of the slider at a certain poistion%
len = length(handles.var) %len is the length of the signal processed%
set(handles.slider, 'max', len) %Setting the maximum value of the slider to be like the length of the signal%
signal = handles.var; %Handing the signal to 'signal' for better coding%

%checks what type of signal is browsed to set the appropiate slider's
%minimum and maximum value%
x = 1:len;
Dx=1800; y1=min(handles.var(1,:)); y2=max(handles.var(1,:));
plot(x,signal(1,:)); axis([v v+Dx y1 y2]);drawnow
if get(handles.togglebutton, 'value')==0
    n=1:handles.step:handles.nmax;
    result = min(n(n>=get(handles.slider, 'value')))
    if result<handles.nmax | result>0
    handles.f=result
    else
        handles.f=handles.nmax
    end
end

        

 

      
% Hints: get(hObject,'Value') returns position of slider
%        get(hObject,'Min') and get(hObject,'Max') to determine range of slider


% --- Executes during object creation, after setting all properties.
function slider_CreateFcn(hObject, eventdata, handles)
% hObject    handle to slider (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    empty - handles not created until after all CreateFcns called

% Hint: slider controls usually have a light gray background.
if isequal(get(hObject,'BackgroundColor'), get(0,'defaultUicontrolBackgroundColor'))
    set(hObject,'BackgroundColor',[.9 .9 .9]);
end


% --- Executes on button press in togglebutton.
function togglebutton_Callback(hObject, eventdata, handles)
% hObject    handle to togglebutton (see GCBO)
% eventdata  reserved - to be defined in a future version of MATLAB
% handles    structure with handles and user data (see GUIDATA)


%checks if the signal is done and reset the counter f for ECG%

if get(handles.slider, 'value')~= handles.f
    n=1:handles.step:handles.nmax;
    result = min(n(n>=get(handles.slider, 'value')))
    if result<handles.nmax | result>0
        handles.f=result
    else
        handles.f=handles.nmax
    end
 
end
if handles.f >= handles.nmax | handles.browsed == 0
        handles.f = 1;
        handles.browsed = 1
end
%checks if the button is pressed and the signal is ECG%
if get(handles.togglebutton, 'value') ==1
    sig = handles.var(1,:);
    x = 1:length(handles.var);
    Dx=1800; y1=min(handles.var(1,:)); y2=max(handles.var(1,:));
%%the signal with the counter f%%
    for n=handles.f:handles.step:handles.nmax
        plot(x,sig); axis([x(n) x(n+Dx) y1 y2]);drawnow
        handles.f = handles.f+handles.step
        set(handles.slider, 'value', handles.f)
        %%checks the toggle button if it's paused during the plotting%%
        if get(handles.togglebutton, 'value') ~= 1
               break;
        end
    end
end

三、运行结果

在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

四、备注

完整代码或者代写添加QQ 1564658423

猜你喜欢

转载自blog.csdn.net/TIQCmatlab/article/details/115419847