matlab读取心电txt数据画图,图解MIT-BIH数据库心电数据下载和Matlab读取程序
開源數(shù)據(jù)網(wǎng)站PhysioNet(https://physionet.org/)提供了諸如MIMIC、MIT-BIH等豐富的生理信號數(shù)據(jù)庫,這些數(shù)據(jù)庫對于人體生理信號的分析、數(shù)據(jù)挖掘有著非常大的作用。MIT-BIH是由美國麻省理工學(xué)院提供用于研究心率失常的數(shù)據(jù)庫,是目前國際上公認(rèn)的可作為標(biāo)準(zhǔn)的心電數(shù)據(jù)庫之一,近年來MIT-BIH數(shù)據(jù)庫應(yīng)用比較廣泛。下面以MIT-BIH數(shù)據(jù)庫為例,介紹在PhysioNet下載生理數(shù)據(jù)的方法:
一、????? 手動下載
使用提供的PhysioBank ATM (https://physionet.org/cgi-bin/atm/ATM),可以在線地顯示選定的數(shù)據(jù),并將數(shù)據(jù)保存為txt或其他的形式。在Database下拉框中選擇MIT-BIH Arrhythmia Database:
默認(rèn)的數(shù)據(jù)顯示長度為10s,用戶也可以選擇1min、1hour顯示。在Toolbox中選擇plot waveforms:
在顯示的過程中可以點(diǎn)擊下面的進(jìn)度條,選擇顯示的區(qū)間。10s的心電數(shù)據(jù)顯示如下:
在Toolbox中選擇Show samples as test可以將顯示的波形數(shù)據(jù)顯示為txt格式,最后下載該txt文檔即可。注意下面的提醒:如果顯示數(shù)據(jù)過長(大于100000個點(diǎn)),瀏覽器可能會出現(xiàn)錯誤。
二、????? 使用Matlab讀取整個數(shù)據(jù)文件
首先利用Toolbox中將選擇的Record打包,并下載:
下載的壓縮包有四個文件,分別是.atr、.dat、.hea、.xws格式,主要用到前三個。
MIT-BIH為了節(jié)省文件長度和存儲空間,使用了自定義的格式。一個心電記錄由三個部分組成:
(1)頭文件[.hea],存儲方式碼。
(2)數(shù)據(jù)文件[.dat],按存儲,每三個字節(jié)存儲兩個數(shù),一個數(shù)12bit。
(3)注釋文件[.atr],按二進(jìn)制存儲。
編寫心電數(shù)據(jù)讀取和分割matlab程序,一個記錄通常有30分鐘,心電采樣率為360Hz,為了后續(xù)分析方便,程序中將讀取出來的數(shù)據(jù),以1min為間隔,將數(shù)據(jù)分段保存在30個txt文檔中,具體代碼如下(Matlab2009編譯通過):
clc;
close all;
%------ SPECIFY DATA ------------------------------------------------------
PATH= 'D:\MATLAB仿真\MIT-BIH原始數(shù)據(jù)'; % path, where data are saved
HEADERFILE= '100.hea'; % header-file in text format
ATRFILE= '100.atr'; % attributes-file in binary format
DATAFILE='100.dat'; % data-file
SAMPLES2READ=660000; % number of samples to be read
% in case of more than one signal:
% 2*SAMPLES2READ samples are read
%------ LOAD HEADER DATA --------------------------------------------------
signald= fullfile(PATH, DATAFILE); % data in format 212
fid2=fopen(signald,'r');
A= fread(fid2, [3, SAMPLES2READ], 'uint8')'; % matrix with 3 rows, each 8 bits long, = 2*12bit
fclose(fid2);
%=----------------------------我的方法-----------------------------------
M2H= bitshift(A(:,2), -4); %字節(jié)向右移四位,即取字節(jié)的高四位
M1H= bitand(A(:,2), 15); %取字節(jié)的低四位
M( : , 1)= bitshift(M1H,8)+ A(:,1); %低四位向左移八位
M( : , 2)= bitshift(M2H,8)+ A(:,3); %高四位向左移八位
M = (M-1024)/200;
%至此兩個通道的數(shù)據(jù)保存在數(shù)組中M中
%----------------------------將數(shù)據(jù)分割成30份,一分鐘一份---------------------------------
for t=1:9
str=num2str(t);
name=['D:\MATLAB仿真\MIT-BTH txt格式\',str,'.txt'];
fid=fopen(name,'wt');
m1=21600*(t-1)+1;
m2=21600*t;
n=2;
for i=m1:1:m2
for j=1:1:n
if j==n
fprintf(fid,'%5.3f\n',M(i,j));
else
fprintf(fid,'%5.3f \t',M(i,j));
end
end
end
fclose(fid);
end
%----------分割最后一段
t=10;
str=num2str(t);
name=['D:\MATLAB仿真\MIT-BTH txt格式\',str,'.txt'];
fid=fopen(name,'wt');
m1=21600*(t-1)+1;
m2=length(M);
n=2;
for i=m1:1:m2
for j=1:1:n
if j==n
fprintf(fid,'%5.3f\n',M(i,j));
else
fprintf(fid,'%5.3f \t',M(i,j));
end
end
end
fclose(fid);
fprintf('完成\n');
總結(jié)
以上是生活随笔為你收集整理的matlab读取心电txt数据画图,图解MIT-BIH数据库心电数据下载和Matlab读取程序的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: java高效遍历匹配,使用cypher或
- 下一篇: mysql创建一个表用来快速查询表_my