版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報或認(rèn)領(lǐng)
文檔簡介
1、基于MATLAB的脈搏信號處理軟體系統(tǒng)基于MATLAB 的脈搏信號處理軟件系統(tǒng)摘要: 本文根據(jù)在實驗室里測得的脈搏數(shù)據(jù),基于MATLBA設(shè)計一個脈搏信號的GUI處理界面,并利用MATLAB強大數(shù)字信號處理功能還原脈搏波形,并對波形的特征信息進(jìn)行提取及存儲。原始信號進(jìn)行了去除基線漂移、通過巴特沃斯帶通濾波器以及二階切比雪夫濾波器去除50HZ工頻干擾,并且能計算實時的脈率并更新,顯示脈率變化趨勢曲線,進(jìn)行頻譜分析和輸出文檔。此軟件有兩個GUI界面,第一個為密碼登陸界面,第二個為脈搏信號處理系統(tǒng)GUI界面。第二個GUI界面主要分為五大模塊:1.打開與退出模塊包括打開數(shù)據(jù)和退出系統(tǒng);2.信號回放模塊包
2、括對原信號和濾波信號的回放、暫停回放、繼續(xù)回放、關(guān)閉窗口;3.信號放大與縮小模塊包括對信號的X軸和Y軸的放大、縮小處理;信號快進(jìn)退模塊包括對信號的快進(jìn)、慢進(jìn)、快退、慢退處理;4.脈率實時處理模塊包括輸出脈率曲線、暫停回放、輸出脈搏信息、脈搏頻譜分析、清除波形、輸出文檔;5.脈率信號輸出模塊包括輸出實時的脈率更新、以及脈搏數(shù)據(jù)的信息,諸如脈搏采樣頻率、采樣時間、最大脈率值、最小脈率等。關(guān)鍵詞:脈搏;脈率 ;Matlab ;GUI ;1 引言人體內(nèi)部各個生理系統(tǒng)之間(如循環(huán)系統(tǒng)、呼吸系統(tǒng)等)是相互耦合的。反映人身體健康狀態(tài)相對最重要、最全面的是心臟血液循環(huán)系統(tǒng),因此通過采集脈搏波進(jìn)而分析心臟循環(huán)系
3、統(tǒng)功能,能從一個方面較全面反映人體的健康情況。從脈搏波中提取人體的生理病理信息作為臨床診斷和治療的依據(jù),歷來都受到中外醫(yī)學(xué)界的重視。幾乎世界上所有的民族都用過“摸脈”作為診斷疾病的手段。脈搏波所呈現(xiàn)出的形態(tài)(波形)、強度(波幅)、速率(波速)和節(jié)律(周期)等方 面的綜合信息,在很大程度上反映出人體心血管系統(tǒng)中許多生理病理的血流特征,因此對脈搏波采集和處理具有很高的醫(yī)學(xué)價值和應(yīng)用前景。目前脈搏信息的研究已經(jīng)應(yīng)用于以下幾個方面:(1)中醫(yī)脈象信息的檢測與識別;(2)血壓的臨床檢測;(3)心率穩(wěn)定性的一種簡便估計方法;(4)心輸出量的一種測量方法;(5)血管功能的一種早期、無創(chuàng)檢測方法。MATLAB
4、(Matrix Laboratory,矩陣實驗室)是由美國MathWorks公司開發(fā)的一種功能強、效率高、簡單易學(xué)的可視化軟件,覆蓋面包括控制、通訊、金融、圖像處理、建筑、生物學(xué)等幾乎所有的行業(yè)與科學(xué)領(lǐng)域。除了經(jīng)典的一些算法外,MATLAB還提供了豐富的數(shù)據(jù)分析和處理功能模塊,如神經(jīng)網(wǎng)絡(luò)、小波分析、信號處理、圖像處理、自動控制、模糊控制、系統(tǒng)仿真等,因此MATLAB是一種高效的編程軟件。本文介紹利用MATLAB軟件作為技術(shù)平臺,實現(xiàn)對統(tǒng)脈搏波快速、準(zhǔn)確實時顯示,而且實現(xiàn)方法簡單有效,有一定的實用性。2 軟件總體界面與總體設(shè)計思路2.1密碼登陸系統(tǒng)圖2.1 未運行前密碼登陸界面圖2.2 運行后輸
5、入錯誤的密碼登陸界面圖2.3 運行后輸入正確的密碼登陸界面2.2 脈搏信號處理系統(tǒng)界面圖2.4 未運行前的脈搏信號處理系統(tǒng)界面圖2.4運行后的脈搏原信號與濾波信號回放圖2.6運行后的脈率曲線回放與判斷脈率正常、輸出脈搏信息圖2.7運行后的頻譜分析2.3 軟件總體設(shè)計思路包含功能包含功能包含功能包含功能包含功能暫停回放輸出脈搏信息判斷脈率正常與否輸出脈搏信號的采樣頻率、采樣時間、最大脈率、最小脈率等輸出脈率曲線文本框中脈率的更新脈率變化趨勢曲線脈率峰值變化曲線繼續(xù)回放X軸縮小X軸放大X軸縮小X軸縮小信號快進(jìn)信號快退信號慢進(jìn)信號慢退退出系統(tǒng)關(guān)閉窗口暫停回放打開數(shù)據(jù)原始信號與濾波后的信號回放輸入正確
6、用戶名和密碼登陸脈搏信號處理系統(tǒng)運行登陸軟件頻譜分析清除波形輸出文檔輸出信號幅頻譜曲線、功率譜曲線輸出按當(dāng)前日期和時間命名的文檔,包含有脈率及各種信息3 信號回放模塊設(shè)計3.1 脈搏波信號濾波脈搏信號是強干擾下的微弱信號,脈搏信號幅度很小,大約是微伏到毫伏的數(shù)量級范圍,其主要頻帶范圍在020Hz之間。一般情況下為1Hz左右,脈搏信號可看成一個準(zhǔn)直流信號,也可看成是一個甚低頻交變信號。根據(jù)脈搏功率譜能量分析,健康人脈搏能量絕大多數(shù)分布于0.55Hz,而病人脈搏在1Hz以下和較高頻段(如5Hz以上或10Hz以上)仍有相當(dāng)一部分的能量分布。脈搏信號極容易引入干擾,一般情況下,由體表檢測到的脈搏波主要
7、有三種干擾:基線漂移,高頻隨機干擾和運動偽差噪聲,還有一些干擾,比如工頻干擾,等,這些干擾較之前三種干擾比較小,而且很容易去掉。1).基線漂移:這種噪聲是由于被測對象的呼吸運動和身體移位而產(chǎn)生的,呼吸的頻率分量通常在0.8Hz以下,每個人的呼吸頻率也不同;身體移位也可以用低頻分量來表征,因此基線漂移基本上都是趨勢分量和低頻分量。2).高頻隨機干擾:脈搏信號的采集過程中有好多隨機噪聲和環(huán)境干擾的影響,這些噪聲都表現(xiàn)為高頻噪聲,在5Hz以上。3).運動偽差噪聲:由于對病人進(jìn)行血氧檢測時,病人手指(或腳趾)經(jīng)常會發(fā)生運動,使手指(或腳趾)與傳感器之間的距離發(fā)生位移,從而得到導(dǎo)致測量的病人脈搏波形很不
8、穩(wěn)定的一種噪聲,這種噪聲和信號在同一個頻帶范圍內(nèi),是脈搏信號去噪的一個重點和難點。所以,為了對信號做準(zhǔn)確的分析,在分析處理之前必須做一些必要的預(yù)處理。針對信號中存在噪聲的特點,基線漂移和呼吸等低頻干擾在1Hz 以下,而脈搏信號主要在低頻范圍,所以可以設(shè)計讓信號先通過一個巴特沃斯帶通濾波器,借以濾除基線漂移、呼吸引起的干擾(考慮到不丟失太多的其他信息,通帶截止頻率設(shè)置為Wp=0.9,50,阻帶截止頻率設(shè)置為Ws=0.3,140,通帶波紋系數(shù)Rp=3,阻帶波紋系數(shù)Rs=10),如圖3.2,然后再通過一個切比雪夫二型濾波器濾除固定的工頻干擾(通帶截止頻率設(shè)置為Wp=30,65,阻帶截止頻率Ws=45
9、,55,通帶波紋系數(shù)Rp=3,阻帶波紋系數(shù)Rs=60),如圖3.3。由于Butterworth濾波器通帶內(nèi)有最大的平滑特性,信號經(jīng)過后衰減小,因此我們選用Butterworth帶通濾波器濾除基線漂移和呼吸等引起的干擾,但由于IIR濾波器本身固有的缺點,信號通過Butterworth帶通濾波器后相位會失真,故我們可設(shè)計零相位Butterworth帶通濾波器去噪。50Hz固定工頻在頻域中是一個點,因而要求設(shè)計的帶阻濾波器有好的截止特性,而切比雪夫II型濾波器有較好的截止特性,并且在其通帶內(nèi)單調(diào),故而設(shè)計零相位切比雪夫II型濾波器濾除工頻干擾。流程圖如下:Load命令讀取脈搏信號TXT文件去除基線漂
10、移通過Buttord和butter命令組成的巴特沃斯帶通濾波器通過cheb2ord和cheby命令構(gòu)成的切比雪夫二階濾波器原信號回放濾波信號回放圖3.1 脈搏信號濾波流程圖 圖3.2 巴特沃斯帶通濾波器 圖3.3 帶阻切比雪夫II型濾波器3.2 脈搏信號回放按鈕設(shè)計思路信號回放模塊設(shè)計如圖3.4,考慮到用戶使用的方便性,信號回放過程中才可對信號進(jìn)行放大與縮小操作,或者快進(jìn)退操作,在回放過程中,退出系統(tǒng)按鈕處于不激活狀態(tài),關(guān)閉窗口和繼續(xù)回放也處于不激活狀態(tài),只有當(dāng)信號暫停時,才使前面三個按鈕激活,或者進(jìn)行下一步,輸出脈率曲線功能。圖 3.4 信號回放模塊設(shè)計1).信號回放:主要采用了Matlab
11、中的while、if、plot、axis、global、set、pause命令。思路先是將信號和濾波信號用plot命令分別在axes1、和axes2上畫出圖形,接著用axis移動坐標(biāo)軸,用while進(jìn)行死循環(huán),讓信號不停的回放。2).信號暫停:主要利用if-break語句來實現(xiàn),在信號回放的控件Callback函數(shù)中,定義一個全局變量flg1,初始flg1=1,接著在while每次循環(huán)中,檢測flg1的值,為1繼續(xù)循環(huán)回放,為0的話跳出循環(huán),停止回放。所以,要信號暫?;胤?,只需要在信號暫停按鈕的Callback函數(shù)中,定義一個全局變量flg1,并命flg1=0即可。3).繼續(xù)回放:也是利用全局
12、變量來實現(xiàn),當(dāng)信號暫停回放時,記錄下些時的X軸和Y軸的長度大小,點擊繼續(xù)回放就還是用plot命令分別在axes1、和axes2上畫出圖形,接著用axis移動坐標(biāo)軸,用while進(jìn)行死循環(huán),讓信號不停的回放。只不過這里要注意的是,此時坐標(biāo)軸的移動不是從0開始,而是從暫停時的記錄下來的全局變量X軸的長度大小xmin、xmax。4).關(guān)閉窗口:直接用delete(allchild(handles.axes1); delete(allchild(handles.axes2); 語句圖 3.5原信號和濾波后的脈搏信號回放4信號放大與縮小模塊設(shè)計4.1 設(shè)計界面考慮到信號回放過程中每個人的脈搏的曲線都會有
13、所不一樣,兩個波峰之間的時間,波峰的數(shù)值大小,為了能方便看到每個點的數(shù)據(jù),我在信號放大與縮小模塊中加了四個按鈕,可沿X軸縮小放大和沿Y軸縮小放大,如圖4.1。另外,考慮到操作的方便性,設(shè)計了在信號回放或者繼續(xù)回放的過程中,這四個按鈕才被激活,信號暫停時,這四個按鈕都處于不激活的狀態(tài)。圖4.1 信號放大與縮小模塊4.2 信號放大與縮小按鈕設(shè)計思路1).X軸縮小: 即將信號沿X軸壓縮,如圖4.3,X軸的長度變長,但是Y軸保持不變,這里,主要也是利用axis命令,實時的改變X軸長度,并且用while進(jìn)行死循環(huán),直到遇到flg1=0,才跳出循環(huán)。程序流程圖如下:flg1=1flg1=0鼠標(biāo)點擊放大X軸
14、坐標(biāo)的Xmin=Xmin*0.5判斷全局變量flg1的值Xmin=Xmin+0.1;Xmax=Xmax+0.1Plot命令畫圖Axis(Xmin,Xmax,Ymin,Ymax)改變坐標(biāo)軸Pause命令延時0.5S暫停回放 圖 4.2 信號放大流程圖圖4.3 X軸縮小2).X軸放大: 即將信號沿X軸拉伸,如圖4.4,X軸的長度變短,但是Y軸保持不變,這里,主要也是利用axis命令,實時的改變X軸長度,并且用while進(jìn)行死循環(huán),直到遇到flg1=0,才跳出循環(huán)。圖4.4 X軸放大3).Y軸縮小: 即將信號沿Y軸壓縮,如圖4.5,Y軸的長度變長,但是Y軸保持不變,這里,主要也是利用axis命令,實
15、時的改變X軸長度,并且用while進(jìn)行死循環(huán),直到遇到flg1=0,才跳出循環(huán)。圖4.5Y軸縮小4).Y軸放大: 即將信號沿Y軸拉伸,如圖4.6,Y軸的長度變短,但是Y軸保持不變,這里,主要也是利用axis命令,實時的改變X軸長度,并且用while進(jìn)行死循環(huán),直到遇到flg1=0,才跳出循環(huán)。圖4.6 Y軸放大5 信號快進(jìn)退模塊設(shè)計5.1 設(shè)計界面考慮到有時信號的采樣時間很長,為了能快速瀏覽信號的波形或者看之前的波形,我特別又設(shè)計此模塊。圖 5.1 信號快進(jìn)退模塊界面5.2信號快進(jìn)退按鈕設(shè)計思路 1).快進(jìn):設(shè)計全局變量pauset=pauset*0.5,即讓每次移動坐標(biāo)軸的時間間隔減小,再令
16、Xmin=Xmin+0.1,Xmax=Xmax+0.1,移動X軸,這樣回放的速度就會變快,按鈕每按一次,回放速度加快一倍。 2).慢進(jìn):設(shè)計全局變量pauset=pauset*2,即讓每次移動坐標(biāo)軸的時間間隔加大,再令Xmin=Xmin+0.1,Xmax=Xmax+0.1,移動X軸,這樣回放的速度就會變慢,按鈕每按一次,回放速度減少一倍。 3).快退:設(shè)計全局變量pauset=pauset*0.5,即讓每次移動坐標(biāo)軸的時間間隔減小,再令Xmin=Xmin-0.1,Xmax=Xmax-0.1,移動X軸,這樣回放的速度就會變快,按鈕每按一次,回放速度加快一倍。 4).慢退:設(shè)計全局變量pauset
17、=pauset*2,即讓每次移動坐標(biāo)軸的時間間隔減小,再令Xmin=Xmin-0.1,Xmax=Xmax-0.1,移動X軸,這樣回放的速度就會變快,按鈕每按一次,回放速度加快一倍。6 脈率實時處理模塊設(shè)計6.1 脈搏信號峰值提取脈搏信號的特征提取是脈搏信號分析中的關(guān)鍵,能不能準(zhǔn)確的提取出來脈搏信號的特征關(guān)系到能不能準(zhǔn)確的分析脈搏信號,其時域中提取的主要特征有脈搏的峰值、周期等。而在這其中最重要的是峰值的提取,準(zhǔn)確的提取出來峰值,可為進(jìn)一步分析其周期,脈率等其他 參數(shù)打下基礎(chǔ),如圖6.1 顯示的脈搏波,h為脈搏波形的高度。圖6.1 脈搏波形的高度提取信號的峰值基本思想是基于閾值的方法,統(tǒng)計分析采
18、集到得脈搏信號發(fā)現(xiàn),雖然每個脈搏波的波峰值大小并不相同,但他們總在一個范圍內(nèi)波動,波動的范圍基本上不超過最大波形高度的0.3倍,為了更為可靠的檢測波峰,以0.4倍為參考。因此可以認(rèn)為波峰點是在每個脈搏周期中波形的最大值附近,大于其鄰域內(nèi)所有點的點。由于所用數(shù)據(jù)采樣頻率為800HZ,通過對大量脈搏波測量數(shù)據(jù)分析,把鄰域長度定義為400個數(shù)據(jù)點可以準(zhǔn)確識別波峰點。 假設(shè)采集到的脈搏波為數(shù)字信號序列, 實際波峰的判別條件為:公式中, 為波峰點的位置。提取出波峰點的位置后,其他時域的特征,如周期、脈率等可相應(yīng)而出。峰值提取程序流程如下:NYNY開始取整個信號最大幅值PM設(shè)置峰值提取閾值G設(shè)置計數(shù)cnt
19、=0是否到數(shù)據(jù)最末尾PM-X(i)<G&&X(i)=max(x(i-200:i+200)儲存峰值點幅度和位置cnt=cnt+1結(jié)束圖6.1 判斷脈搏峰值程序流程圖6.2 脈率實時處理界面設(shè)計界面設(shè)計如圖6.2,脈率信號輸出窗口可輸出平均脈率、采樣頻率、采樣時長、最大脈率、最小脈率等。圖6.2 脈率實時處理模塊6.3 脈率實時處理按鈕設(shè)計思路1).輸出脈率曲線:實時動態(tài)輸出脈率變化趨勢曲線與脈率峰值變化曲線,如圖6.3同時在文本框1中實時平均脈率,這也是實時更新輸出。圖6.3 軟件實時輸出脈率趨勢曲線2).暫?;胤牛和V姑}率曲線的更新和平均脈率的更新,同時激活輸出脈搏信息按
20、鈕3).輸出脈搏信息:輸出所有脈率點的平均脈率,同時在列表中輸出采樣頻率、采樣時長、最大脈率、最小脈率,并跳出判斷脈率是否正常的信息框(如圖6.4)。之后激活頻譜分析按鈕。圖6.4 輸出脈搏信號圖6.5 輸出脈搏信息到列表和文本框圖6.6 判斷脈率是否正常4).頻譜分析:輸出濾波后信號的幅頻圖和信號功率譜圖圖6.7 頻譜分析5).清除波形:清除窗口的繪圖6).輸出文檔:輸出TXT文檔,以電腦當(dāng)前的日期和時間命名,包含有所有計算出的脈率點,以及采樣頻率、采樣時長、最大脈率、最小脈率。7 參考文獻(xiàn)1 羅志昌,張松,楊益民,脈搏波的工程分析與臨床應(yīng)用M.北京:科學(xué)出版社,2006:1-202 鄭阿奇
21、,MATLAB實用教程M.北京:電子工業(yè)出版社,20043 王炳和,羅 建, 相敬林等. 人體脈搏功率譜分析與中醫(yī)脈診機理研究J. 西北大學(xué)學(xué)報,2001,31( 1): 21-25.8 致謝 這里,首先要感謝候文生老師提供讓我設(shè)計此軟件的機會。軟件完成后,感觸頗多,覺得又學(xué)到了點了知識,很有成就感。軟件前前后后花了總共一個禮拜的時間,這星期里起床后吃飯到睡覺時都在想著怎么來編寫代碼,怎么來完善軟件功能,一整天開機就Matlab,腦子就直想著怎么寫程序。設(shè)計每個控件按鈕時,總會碰到很多問題,因為調(diào)試時各種Bug,光是界面就重畫了10來次。但我不放棄不后退,每次通過網(wǎng)上搜集資料、反復(fù)查看代碼、和
22、同學(xué)之間進(jìn)行交流總能把問題解決好,而且又想到新的功能設(shè)計。雖說軟件還不是很強大,設(shè)計也還不是很好,但還是算是自己設(shè)計的第一個軟件。最后,衷心感謝候老師安排的此次實驗,希望以后還能有更多這樣的實踐機會。附錄:(程序太多了,只附上主要部分的程序)1. 打開數(shù)據(jù)function pushbutton5_Callback(hObject, eventdata, handles)kong='' set(handles.listbox1,'string',kong); set(handles.edit1,'string',kong); axes(handle
23、s.axes1); grid on;axis(0,1,-2,4) axes(handles.axes2); grid on;axis(0,1,-2,4) global str;filename,pathname=. uigetfile('*.txt','choose');str=pathname filename;set(handles.pushbutton1,'enable','on');2.退出系統(tǒng)function pushbutton6_Callback(hObject, eventdata, handles)button1
24、=questdlg('你確定退出嗎?','退出程序','確定','取消','確定');if strcmp(button1,'確定')close(gcf);end3.原信號與濾波信號回放function pushbutton1_Callback(hObject, eventdata, handles)set(handles.pushbutton2,'enable','on');set(handles.pushbutton5,'enable','o
25、ff');set(handles.pushbutton6,'enable','off');set(handles.pushbutton10,'enable','off');set(handles.pushbutton11,'enable','off');set(handles.pushbutton15,'enable','on');set(handles.pushbutton16,'enable','on');set(handl
26、es.pushbutton17,'enable','on');set(handles.pushbutton18,'enable','on');set(handles.pushbutton19,'enable','on');set(handles.pushbutton20,'enable','on');set(handles.pushbutton21,'enable','on');set(handles.pushbutton22,'
27、;enable','on');global strglobal tglobal maiboglobal yminglobal ymaxglobal xminglobal xmaxglobal pausetpauset=0.5;data=load(str);t=data(:,1);maibo=data(:,2);ymin=min(data(:,2)-0.5;ymax=max(data(:,2)+0.5;%global s21global dtyy=data;x=yy(:,2)'dt=yy(:,1)'fs=800;%去除基線漂移k = .7; % cut-o
28、ff valuefc=0.3/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/400;Ws=0.3 140/400;n,Wn = buttord(Wp,Ws,3,10);b,a = butter(n,Wn);%cheby去除50hz工頻干擾Wp1=30 65/400;
29、Ws1=45 55/400;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);axes(handles.axes1);plot(t,maibo);title('原始脈搏信號');xlabel('時間/s');ylabel('幅值/mv');grid set(gca,'position',10 27.5 120 2
30、0);xmin=0;xmax=max(t)/10;axis(xmin,xmax,ymin,ymax)axes(handles.axes2);plot(dt,s21);grid;title('濾波去噪后脈搏信號');xlabel('時間/s');ylabel('幅值/mv');set(gca,'position',10 3 120 20);axis(xmin,xmax,ymin,ymax)%global flg1flg1=1;while 1 if (flg1=0) break; end xmin=xmin+0.1; xmax=xma
31、x+0.1; axes(handles.axes1);plot(t,maibo);title('原始脈搏信號');xlabel('時間/s');ylabel('幅值/mv');grid set(gca,'position',10 27.5 120 20); axis(xmin,xmax,ymin,ymax); %移動坐標(biāo)系 axes(handles.axes2);plot(dt,s21);grid;title('濾波去噪后脈搏信號');xlabel('時間/s');ylabel('幅值/mv
32、');set(gca,'position',10 3 120 20);axis(xmin,xmax,ymin,ymax) pause(pauset);endguidata(hObject,handles);294.x軸縮小function pushbutton17_Callback(hObject, eventdata, handles)global xminglobal xmaxglobal s21global dtglobal tglobal maiboglobal yminglobal ymaxglobal pauset xmin=1/2*xmin;global
33、flg1flg1=1;while 1 if (flg1=0) break; end xmin=xmin+0.1; xmax=xmax+0.1; axes(handles.axes1);plot(t,maibo);title('原始脈搏信號');xlabel('時間/s');ylabel('幅值/mv');grid set(gca,'position',10 27.5 120 20);axis(xmin,xmax,ymin,ymax)axes(handles.axes2);plot(dt,s21);grid;title('濾
34、波去噪后脈搏信號');xlabel('時間/s');ylabel('幅值/mv');set(gca,'position',10 3 120 20);axis(xmin,xmax,ymin,ymax) pause(pauset);endguidata(hObject,handles);5.快進(jìn)function pushbutton15_Callback(hObject, eventdata, handles)global pausetpauset=pauset*0.5;6.輸出脈率曲線function pushbutton7_Callbac
35、k(hObject, eventdata, handles)set(handles.pushbutton1,'enable','off');set(handles.pushbutton5,'enable','off');set(handles.pushbutton6,'enable','off');set(handles.pushbutton8,'enable','off');set(handles.pushbutton9,'enable','
36、off');set(handles.pushbutton2,'enable','off');set(handles.pushbutton10,'enable','off');set(handles.pushbutton11,'enable','off');set(handles.pushbutton17,'enable','off');set(handles.pushbutton18,'enable','off');set(ha
37、ndles.pushbutton19,'enable','off');set(handles.pushbutton20,'enable','off');set(handles.pushbutton15,'enable','off');set(handles.pushbutton16,'enable','off');set(handles.pushbutton21,'enable','off');set(handles.pushbutto
38、n22,'enable','off');set(handles.pushbutton23,'enable','off');set(handles.pushbutton14,'enable','on');global strglobal pausetglobal tglobal TTyy=load(str);%HH=1./yy(3:1)x=yy(:,2)'fs=1000;%去除基線漂移k = .7; % cut-off valuefc=0.3/fs;alpha = (1-k*cos(2*pi*
39、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/500;rp=3;rs=60;n1,Wn1 = cheb2o
40、rd(Wp1,Ws1,rp,rs);b1,a1 = cheby2(n1,rs,Wn1,'stop');%信號之間的對比x2=filtfilt(b,a,x1);s21=filtfilt(b1,a1,x2);%頻譜圖F=fft(s21);%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)=max(A(1:550) cnt1=0; e
41、ndfor i=201:length(A)-200 %因為周期大于600,波峰大于其左右各200個點內(nèi)的所有值if PM-A(i)<G&&A(i)=max(A(i-200:i+200) P1(cnt1+1)=A(i); t1(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;end% %求周期
42、Tj=1;for m=2:length(t1) T(j)=t1(m)-t1(m-1); j=j+1; MMT(j-1)=(1./mean(T)*1000*60;endTT=(1./T)*1000*60;TT=(1./T)*1000*60;yymin=1;yymax=2;mmax=max(P1)+2;axes(handles.axes1);plot(P1);axis(yymin yymax 0 mmax); grid on; xlabel('峰值數(shù)');ylabel('峰值');title('脈搏峰值變化曲線');set(gca,'posi
43、tion',10 27.5 120 20);axes(handles.axes2);plot(TT);axis(yymin yymax 0 100); grid on; xlabel('脈搏數(shù)');ylabel('脈率(次/min)');title('脈率變化曲線');set(gca,'position',10 3 120 20);mT=mean(TT);global maibomaibo=mT;global flg3flg3=1;global xxminglobal xxmaxi=1;while 1 if (flg3=0
44、) xxmin=yymin; xxmax=yymax; break; end if (yymax=cnt1); yymin=0; yymax=5; end mai=round(MMT(i); mai=num2str(mai); i=i+1; if (i=cnt1) i=1; end set(handles.edit1,'string',mai,'fontsize',18); yymin=yymin+1; yymax=yymax+1; axes(handles.axes1); plot(P1);axis(yymin yymax 0 mmax); grid on;
45、xlabel('峰值數(shù)');ylabel('峰值');title('脈搏峰值變化曲線');set(gca,'position',10 27.5 120 20); axes(handles.axes2);plot(TT);axis(yymin yymax 0 100); grid on; xlabel('脈搏數(shù)');ylabel('脈率(次/min)');title('脈率變化曲線');set(gca,'position',10 3 120 20); pause(pau
46、set);end7.輸出脈搏信息function pushbutton8_Callback(hObject, eventdata, handles)global maiboglobal TTglobal t str1='脈搏采樣頻率:' HH1=1./t(2); str2=num2str(HH1); str3='Hz' strr=str1 str2 str3; ktr1='脈搏采樣時長:' HH2=max(t); ktr2=num2str(HH2); ktr3='S' ktrr=ktr1 ktr2 ktr3; htr1='
47、脈率最大值:' htr2=num2str(round(max(TT); htr3='次/min' htrr=htr1 htr2 htr3; gtr1='脈率最小值:' gtr2=num2str(round(min(TT); gtr3='次/min' gtrr=gtr1 gtr2 gtr3; trrr=strvcat(strr,ktrr,htrr,gtrr); set(handles.listbox1,'string',trrr);maibo1=num2str(round(maibo);if maibo<60 msgb
48、ox('健康成人在安靜狀態(tài)下脈率為60100次/min,您的脈率過慢,建議到醫(yī)院檢查','脈率正常與否判斷');end if maibo>100 msgbox('健康成人在安靜狀態(tài)下脈率為60100次/min,您的脈率過快,建議到醫(yī)院檢查','脈率正常與否判斷'); else msgbox('健康成人在安靜狀態(tài)下脈率為60100次/min,您的脈率屬于正常范圍,請繼續(xù)保持','脈率正常與否判斷'); end set(handles.pushbutton24,'enable',&
49、#39;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',
50、9;on');global stryy=load(str);x=yy(:,2)'fs=1000;%去除基線漂移k = .7; % cut-off valuefc=0.3/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
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024學(xué)校鍋爐工環(huán)境保護與節(jié)能減排合同范本3篇
- 自動打鈴器課程設(shè)計數(shù)電
- 漢川市汽車營銷課程設(shè)計
- 自動飛行系統(tǒng)課程設(shè)計
- 2024年裝表接電工(初級工)技能鑒定理論考試復(fù)習(xí)題庫(含答案)
- 2024年美術(shù)教案課件
- 童話課程設(shè)計封面
- 立式車床主軸箱課程設(shè)計
- 小班兔子繪本課程設(shè)計
- 金融投資行業(yè)顧問工作總結(jié)
- GA 1802.2-2022生物安全領(lǐng)域反恐怖防范要求第2部分:病原微生物菌(毒)種保藏中心
- 企業(yè)EHS風(fēng)險管理基礎(chǔ)智慧樹知到答案章節(jié)測試2023年華東理工大學(xué)
- 健身俱樂部入場須知
- 井下機電安裝安全教育培訓(xùn)試題及答案
- TZJXDC 002-2022 電動摩托車和電動輕便摩托車用閥控式鉛酸蓄電池
- GB/T 4744-2013紡織品防水性能的檢測和評價靜水壓法
- GB/T 337.1-2002工業(yè)硝酸濃硝酸
- 《解放戰(zhàn)爭》(共48張PPT)
- 放射工作人員法律法規(guī)及防護知識培訓(xùn)考核試題附答案
- 勞動仲裁追加申請申請書(標(biāo)準(zhǔn)版)
- 西方法律思想史 課件
評論
0/150
提交評論