1. 程式人生 > 其它 >【生物電訊號】基於matlab GUI生物電訊號模擬【含Matlab原始碼 684期】

【生物電訊號】基於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

三、執行結果




四、備註

版本:2014a
完整程式碼或代寫加1564658423