matlab读取心电txt数据画图,图解MIT-BIH数据库心电数据下载和Matlab读取程序

开源数据网站PhysioNet(https://physionet.org/)提供了诸如MIMIC、MIT-BIH等丰富的生理信号数据库,这些数据库对于人体生理信号的分析、数据挖掘有着非常大的作用。MIT-BIH是由美国麻省理工学院提供用于研究心率失常的数据库,是目前国际上公认的可作为标准的心电数据库之一,近年来MIT-BIH数据库应用比较广泛。下面以MIT-BIH数据库为例,介绍在PhysioNet下载生理数据的方法:

一、      手动下载

使用提供的PhysioBank ATM (https://physionet.org/cgi-bin/atm/ATM),可以在线地显示选定的数据,并将数据保存为txt或其他的形式。在Database下拉框中选择MIT-BIH Arrhythmia Database:

0818b9ca8b590ca3270a3433284dd417.png

默认的数据显示长度为10s,用户也可以选择1min、1hour显示。在Toolbox中选择plot waveforms:

0818b9ca8b590ca3270a3433284dd417.png

在显示的过程中可以点击下面的进度条,选择显示的区间。10s的心电数据显示如下:

0818b9ca8b590ca3270a3433284dd417.png

在Toolbox中选择Show samples as test可以将显示的波形数据显示为txt格式,最后下载该txt文档即可。注意下面的提醒:如果显示数据过长(大于100000个点),浏览器可能会出现错误。

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

二、      使用Matlab读取整个数据文件

首先利用Toolbox中将选择的Record打包,并下载:

0818b9ca8b590ca3270a3433284dd417.png

0818b9ca8b590ca3270a3433284dd417.png

下载的压缩包有四个文件,分别是.atr、.dat、.hea、.xws格式,主要用到前三个。

0818b9ca8b590ca3270a3433284dd417.png

MIT-BIH为了节省文件长度和存储空间,使用了自定义的格式。一个心电记录由三个部分组成:

(1)头文件[.hea],存储方式码。

(2)数据文件[.dat],按存储,每三个字节存储两个数,一个数12bit。

(3)注释文件[.atr],按二进制存储。

编写心电数据读取和分割matlab程序,一个记录通常有30分钟,心电采样率为360Hz,为了后续分析方便,程序中将读取出来的数据,以1min为间隔,将数据分段保存在30个txt文档中,具体代码如下(Matlab2009编译通过):

clc;

close all;

%------ SPECIFY DATA ------------------------------------------------------

PATH= 'D:\MATLAB仿真\MIT-BIH原始数据'; % 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); %字节向右移四位,即取字节的高四位

M1H= bitand(A(:,2), 15); %取字节的低四位

M( : , 1)= bitshift(M1H,8)+ A(:,1); %低四位向左移八位

M( : , 2)= bitshift(M2H,8)+ A(:,3); %高四位向左移八位

M = (M-1024)/200;

%至此两个通道的数据保存在数组中M中

%----------------------------将数据分割成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');


本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!

相关文章

立即
投稿

微信公众账号

微信扫一扫加关注

返回
顶部