MIT-BIH心电数据的绘图方法概述

更新时间:2024-01-16 05:35:01 阅读量: 教育文库 文档下载

说明:文章内容仅供预览,部分内容可能不全。下载后的文档,内容与下面显示的完全一致。下载之前请确认下面内容是否您想要的,是否完整无缺。

MIT-BIH心电数据的绘图方法概述

MIT-BIH的数据格式说明

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

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

(2)数据文件[.dat],按二进制存储,每三个字节存储两个数,一个数12bit。 (3)注释文件[.art],按二进制存储。 官方演示地址以及文件下载地址: 数据演示地址:

http://www.physionet.org/cgi-bin/atm/ATM 数据下载地址:

http://www.physionet.org/physiobank/database/mitdb/ 心电数据说明:

http://www.physionet.org/physiobank/database/html/mitdbdir/mitdbdir.htm

[.hea]为头文件

其由一行或多行ASCII码字符组成。以100.hea为例 100 2 360 650000

100.dat 212 200 11 1024 995 -22131 0 MLII 100.dat 212 200 11 1024 1011 20052 0 V5 # 69 M 1085 1629 x1 # Aldomet, Inderal

第一行从左到右分别代表文件名,导联数,采样率,数据点数;

第二行从左到右分别代表文件名,存储格式,增益,AD分辨率,ADC零值,导联1第一个值,校验数,?(不太清楚,貌似为0的话可以从任意数据块输出,即可以从中间读取任意一段),导联号 第三行代表导联2的信息,同第二行

以#开始的为注释行,一般说明患者的情况以及用药情况等

[.dat]为数据文件

MIT-BIH数据库中的数据存储格式有Format8、Format16、Format80、Format212、Format310等8种,心律失常数据库统一采用212格式进行存储。

“212”格式是针对两个信号的数据库记录,这两个信号的数据交替存储,每三个字节存储两个数据。这两个数据分别采样自信号0和信号1,信号0的采样数据取自第一字节对(16位)的最低12位,信号1的采样数据由第一字节对的剩余

4位(作为组成信号1采样数据的12位的高4位)和下一字节的8位(作为组成信号1采样数据的12位的低8位)共同组成。以100.dat为例。

按照“212”的格式,从第一字节读起,每三个字节(24 位)表示两个值,第一组为“E3 33 F3”,两个值则分别为0x3E3和0x3F3转换为十进制分别为995和1011,代表的信号幅度分别为4.975mv和5.055mv,这两个值分别是两个信号的第一采样点,后面依此类推,分别表示了两个信号的采样值。

[.art]为注释文件

记录了心电专家对相应的心电信号的诊断信息,主要有两种格式:MIT格式和AHA格式。MIT格式是一种紧凑型格式,每一注释的长度占用偶数个字节空间,多数情况下是占用两个字节,多用于在线的注释文件;而AHA格式的每一注释占用16个字节的空间,多用于交换文件的情况。这两种格式的在文件中的区分决定于前两个字节的值,若文件的第一字节不为0或第二字节等于“[”(0x5B)或“](0x5D),则该文件是以MIT格式存储的,否则是按AHA格式存储的。心律失常数据库采用的MIT格式。 MIT格式,每一注释单元的前两个字节的第一个字节为最低有效位,16位中的最高6位表示了注释类型代码(具体代码见后表),剩余的10位说明了该注释点的发生时间或辅助信息,若为发生时间,其值为该注释点到前一注释点的间隔(对于第一个注释点为从记录开始到该点的间隔),若为辅助信息则说明了附加信息的长度。以100.atr为例。

从文件中的第一字节不为0可以判断该文件是以MIT格式存储的。从第一字节开始按照MIT格式进行分析,首先读出16位值0x7012,其高6位的值为0x1C(十进制28),低10位的值为0x12,该类型代码为28,代表意义是节律变化,发生时间在0.05秒(18/360Hz);接着读出后面的16位值0xFC03,其高6为的值为0x3F(十进制63),低10位的值为0x03,该类型代码为63,代表的意义是在该16位值后附加了3个(低10位值代表的数)字节的辅助信息,若字节个数为奇数,则再附加一个字节的空值,在本例中就是“28 4E 00 00”;然后再从下一字节读16位值0x043B,其高6位的值为1,低10位的值为0x3B(十进制59),该类型码1代表正常心搏,发生时间为0.213秒((18+59)/360Hz);依次类推即可读出所有的注释,当读到的16位值为0时,就表示到了文件尾。另,当高6位为十进制59时,读取之后第3个16位的高6位,作为类型代码,读取之后第二个16位+第一个16位*2^16;高6位为十进制60,61,62时,继续读下一个16位。

MIT-BIH数据文件的读取 数据文件[.dat]的读取

数据是由两个信号组成,分别称为是S1和S2;每三个字节存储两个数据,三个字节分别称为B1、B2、B3,数据是以二进制方式存储。组成方式如下图:

算法如下:

//将读取的byte数组转化为二维数组,包含[byte.length/3]行,3列

byte[] content = out.toByteArray();// 读取的内容,从内存传至一维数组 int n = 3; // 列

int m = content.length / n; // 行 = 650000

byte[] a = content; // 读出的一维数组,每个元素为一个字节 byte[][] b = newbyte[m][3]; // 变为二维数组,m行3列 for(inti = 0; i< m; i++) {

for(int j = 0; j < 3; j++) {

b[i][j] = a[i * 3 + j]; } }

// 数据移位,解析DAT文件的212格式

ArrayListsignalOne = new ArrayList(); ArrayListsignalTwo = new ArrayList(); for(inti = 0; i< m; i++) {

// 第一列屏蔽高24位,

int A1i = getUnsignedByte(b[i][0]); // 第2列屏蔽高24位

int A2i = getUnsignedByte(b[i][2]); // 二维数组第二列的低四位0-3位,是第一路信号的高4位,和1111相与, //来获得m1h

int m1hi = getUnsignedByte(b[i][1]) & 15;

// 第二列的4-7位为第二路信号的高4位,右移四位获得,m2h int m2hi = getUnsignedByte(b[i][1]) >> 4;

// m1h左移八位,补到A1的8-11,相与,组成第一路信号,共十二位 int sOnei = ((m1hi << 8) | A1i); signalOne.add(sOnei); // m2h和A2组成第二路信号

int sTwoi = (m2hi << 8) | A2i; signalTwo.add(sTwoi);

}

由此得到采集器采集的数值,要想获取其电压值则为N/200 单位是mv

本文来源:https://www.bwwdw.com/article/lzdo.html

Top