mit数据库 matlab,MIT-BIH 心电数据库
最近在寫一篇基于小波變換的ECG信號(hào)壓縮算法的論文,遇到了怎樣獲取ECG信號(hào)測(cè)試數(shù)據(jù)的問題,在百度和專業(yè)論壇里搜索了一番,發(fā)現(xiàn)也有很多朋友為此發(fā)愁?,F(xiàn)在論文寫好了,投稿中,順便也把怎樣獲取和處理ECG信號(hào)數(shù)據(jù)的方法寫出來,供有需要的朋友參考,省卻在百度和論壇里苦苦求索的麻煩,呵呵 ^_^
一、首先,如果是對(duì)ECG心電信號(hào)進(jìn)行觀察、分析和診斷使用的話,有兩個(gè)方法:
(1)? ? 從MIT-BIH數(shù)據(jù)庫下載
請(qǐng)參考我前些天發(fā)布的文章《MIT-BIH ECG 心電數(shù)據(jù)的下載和讀取圖解》,里面有詳盡介紹。
http://blog.csdn.net/chenyusiyuan/archive/2008/01/06/2027887.aspx
(2)? ? 用專門的Matlab心電數(shù)據(jù)讀取程序
我10日在浩惠電子論壇(http://www.hheet.com/bbs/)的“醫(yī)療器械”版塊找到了讀取ECG心電數(shù)據(jù)的Matlab程序(rddata.m),如獲至寶啊!這個(gè)程序是由外國人寫的,能夠讀取MIT-BIH數(shù)據(jù)庫 .atr、.dat、.hea三種文件的數(shù)據(jù),根據(jù)這些數(shù)據(jù)計(jì)算出實(shí)際的心電信號(hào)值,并繪制出信號(hào)波形。程序不大,注釋也算齊全,不過是英文的,需要這個(gè)程序的朋友請(qǐng)按以下鏈接下載。
匿名提取文件連接 http://pickup.mofile.com/3497080791233097
或登錄Mofile,使用提取碼 3497080791233097 提取文件
PS: 關(guān)于rddata.m的下載,在打開http://pickup.mofile.com/3497080791233097 后,下載鏈接是在“文件標(biāo)簽”和“文件介紹”之后的地方,夾在兩塊廣告圖片之間,共有3個(gè)鏈接:“推薦快車(flashget)高速下載文件 下載文件(IE瀏覽器) 下載文件(非IE瀏覽器)”,非常隱蔽,一般點(diǎn)擊中間的那個(gè)鏈接“下載文件(IE瀏覽器)”就會(huì)彈出保存對(duì)話框了。
二、如果是要對(duì)ECG信號(hào)進(jìn)行壓縮、編碼等信號(hào)處理操作
上面程序獲得的數(shù)據(jù)就不便于使用了,因?yàn)槟鞘寝D(zhuǎn)換為具有實(shí)際意義的心電數(shù)據(jù),信號(hào)數(shù)據(jù)值一般在-2~2之間,單位是mV。那么,要找新的ECG讀取程序來獲取數(shù)據(jù)嗎?不用!實(shí)際上,程序rddata.m中本身就是把MIT .dat 文件中存儲(chǔ)的二值數(shù)據(jù)轉(zhuǎn)換為十進(jìn)制數(shù)據(jù),然后再進(jìn)一步處理轉(zhuǎn)換成具有實(shí)際意義的心電信號(hào)值。我們進(jìn)行信號(hào)處理時(shí),需要用到的就是從二值數(shù)據(jù)轉(zhuǎn)換來的初始十進(jìn)制數(shù)據(jù),由于 .dat文件中是三個(gè)字節(jié)存儲(chǔ)2個(gè)數(shù),即每個(gè)數(shù)12bits,轉(zhuǎn)換后得到的十進(jìn)制數(shù)范圍應(yīng)該是0~2048。我所理解的數(shù)據(jù)存儲(chǔ)方式圖示如下,不知是否正確,僅供參考:
由于rddata.m程序中的注釋是英文的,且有些地方也說明不清楚,我從程序中截取出將二值數(shù)據(jù)轉(zhuǎn)換為十進(jìn)制數(shù)據(jù)的部分代碼,將注釋轉(zhuǎn)換為中文,并根據(jù)自己的理解作一些補(bǔ)充說明,希望對(duì)大家有所幫助!
具體的程序代碼如下:
%-------------------------------------------------------------------------
% 程序Fun_ReadECGData 用于讀取ECG信號(hào)數(shù)據(jù),將原始的二值數(shù)據(jù)轉(zhuǎn)換為十進(jìn)制數(shù)
% 輸入?yún)?shù)及其示例:
% PATH= 'D:\MATLAB\R2007b\work\ECG Data'; % 指定數(shù)據(jù)的儲(chǔ)存路徑
% HEADERFILE= '117.hea';? ?? ?% .hea 格式,頭文件,可用記事本打開
% DATAFILE='117.dat';? ?? ?? ?% .dat 格式,ECG 數(shù)據(jù)
% SAMPLES2READ=2048;? ?? ?? ? % 指定需要讀入的樣本數(shù)
%? ?? ?? ?? ?? ?? ?? ?? ?? ???% 若.dat文件中存儲(chǔ)有兩個(gè)通道的信號(hào):
%? ?? ?? ?? ?? ?? ?? ?? ?? ???% 則讀入 2*SAMPLES2READ 個(gè)數(shù)據(jù)
% 輸出參數(shù):M —— 一個(gè)SAMPLES2READ行2列的數(shù)據(jù)矩陣,每列數(shù)據(jù)代表一個(gè)通道的信號(hào)值
%-------------------------------------------------------------------------
function M = Fun_ReadECGData(PATH,HEADERFILE,DATAFILE,SAMPLES2READ)
%------ LOAD HEADER DATA --------------------------------------------------
%------ 讀入頭文件數(shù)據(jù) -----------------------------------------------------
%
% 示例:用記事本打開的117.hea 文件的數(shù)據(jù)
%
%? ?? ?117 2 360 650000
%? ?? ?117.dat 212 200 11 1024 839 31170 0 MLII
%? ?? ?117.dat 212 200 11 1024 930 28083 0 V2
%? ?? ?# 69 M 950 654 x2
%? ?? ?# None
%
%-------------------------------------------------------------------------
%-------------------------------------------------------------------------
% 【注】函數(shù) fprintf 的功能將格式化的數(shù)據(jù)寫入到指定文件中。
% 表達(dá)式:count = fprintf(fid,format,A,...)
% 在字符串'format'的控制下,將矩陣A的實(shí)數(shù)數(shù)據(jù)進(jìn)行格式化,并寫入到文件對(duì)象fid中。該函數(shù)返回所寫入數(shù)據(jù)的字節(jié)數(shù) count。
% fid 是通過函數(shù) fopen 獲得的整型文件標(biāo)識(shí)符。fid=1,表示標(biāo)準(zhǔn)輸出(即輸出到屏幕顯示);fid=2,表示標(biāo)準(zhǔn)偏差。
%-------------------------------------------------------------------------
fprintf(1,'\\n$> WORKING ON %s ...\n', HEADERFILE);? ?% 在Matlab命令行窗口提示當(dāng)前工作狀態(tài)
signalh= fullfile(PATH, HEADERFILE);? ?? ?? ?? ?? ?? ?? ?? ?? ?% 通過函數(shù) fullfile 獲得頭文件的完整路徑
fid1=fopen(signalh,'r');? ?? ?? ?? ?? ?? ?? ?? ?? ? % 打開頭文件,其標(biāo)識(shí)符為 fid1 ,屬性為'r'--“只讀”
z= fgetl(fid1);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? % 讀取頭文件的第一行數(shù)據(jù),字符串格式
A= sscanf(z, '%*s %d %d %d',[1,3]);? ?? ?% 按照格式 '%*s %d %d %d' 轉(zhuǎn)換數(shù)據(jù)并存入矩陣 A 中
nosig= A(1);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???% 信號(hào)通道數(shù)目
sfreq=A(2);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? % 數(shù)據(jù)采樣頻率
clear A;? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?% 清空矩陣 A ,準(zhǔn)備獲取下一行數(shù)據(jù)
for k=1:nosig? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???% 讀取每個(gè)通道信號(hào)的數(shù)據(jù)信息
z= fgetl(fid1);
A= sscanf(z, '%*s %d %d %d %d %d',[1,5]);
dformat(k)= A(1);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???% 信號(hào)格式; 這里只允許為 212 格式
gain(k)= A(2);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? % 每 mV 包含的整數(shù)個(gè)數(shù)
bitres(k)= A(3);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?? ???% 采樣精度(位分辨率)
zerovalue(k)= A(4);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ?% ECG 信號(hào)零點(diǎn)相應(yīng)的整數(shù)值
firstvalue(k)= A(5);? ?? ?? ?? ?? ?? ?? ?? ?? ?? ? % 信號(hào)的第一個(gè)整數(shù)值 (用于偏差測(cè)試)
end;
fclose(fid1);
clear A;
總結(jié)
以上是生活随笔為你收集整理的mit数据库 matlab,MIT-BIH 心电数据库的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 错题整理:作业100题(一)
- 下一篇: 雨课堂《工程伦理》期末答案