MIT-BIH数据库中format16格式数据读取-MATLAB

MIT-BIH数据库综述

MIT-BIH 是由美国麻省理工学院提供的研究心律失常的数据库。目前国际上公认的可作为标准的心电数据库有三个,分别是美国麻省理工学院提供的MIT-BIH 数据库,美国心脏学会的AHA数据库以及欧洲ST-T心电数据库。其中MIT-BIH 数据库近年来应用比较广泛。

MIT-BIH数据库文件

(1)头文件[.hea],存储方式ASCII码字符。包含文件名 、格式 、每帧样本数[可选] 、偏移[可选] 、字节偏移量[可选] 、ADC增益(每个物理单元的ADC单位)[可选]、基线(ADC单位)[可选] 、单位[可选] 、ADC分辨率(位)[可选]、ADC零值[可选] 、初始值[可选] 、块大小[可选] 等。(https://www.physionet.org/physiotools/wag/header-5.htm)
(2)数据文件[.dat],按二进制存储,数据格式共有:Format 8、Format 16、Format 24、Format 32、Format 61、Format 80、Format 160、Format 212、Format 310、Format 311,心律失常数据库的数据格式为Format 212,此格式的读取被很多学者研究,本文中不做详细赘述。(https://www.physionet.org/physiotools/wag/signal-5.htm#toc3)
(3)注释文件[.atr],按二进制存储。记录了心电专家对相应的心电信号的诊断信息,主要有两种格式:MIT格式和AHA格式。

数据读取

数据读取一般按照“头文件”-数据文件-“注释”的顺序进行

头文件读取

我们通过记事本打开头文件,会发现如下内容:

a0001 2 2000 71332
a0001.wav 16+44 1 16 0 0 0 0 PCG
a0001.dat 16 1000 16 0 0 367 0 ECG
#Abnormal

第一行为样本数据的综述,共2个信号,采样频率为2000,样本数为71332;
第二行为第一个数据,为.wav格式,format16,每mV包含的整数为1,采样精度为16,信号第一个整数值为0,为PCG数据
第三行为第二个数据,为.dat格式,format16,每mV包含的整数为1000,采样精度为16,信号第一个整数值为0。为ECG数据。
因为我们只对ECG数据进行读取,故下文均为提取ECG数据。

PATH= 'E:\training_2\training-a'; % 指定数据的储存路径
HEADERFILE= 'a0001.hea';      % .hea 格式,头文件,可用记事本打开
signalh= fullfile(PATH, HEADERFILE);    % 通过函数 fullfile 获得头文件的完整路径
for k=1:nosig           % 读取每个通道信号的数据信息
    z= fgetl(fid1);
    A= sscanf(z, '%*s %d %d %d %d %d %d',[1,6]);
    dformat= A(1);           % 信号格式; 这里只允许为 16 格式
    gain= A(2);              % 每 mV 包含的整数个数
    bitres= A(3);            % 采样精度(位分辨率)
    zerovalue= 4500;         % ECG 信号零点相应的整数值,(此处存疑,因为该文件中并未给定零点的整数值,设为4500,)
    firstvalue= A(5);        % 信号的第一个整数值 (用于偏差测试)
end;

数据文件读取

数据文件按照位进行读取,然后依据偏差值和增益,调整数据。

PATH= 'E:\training_2\training-a'; % 指定数据的储存路径
DATAFILE='a0007.dat';       % .dat 格式,ECG 数据
if dformat~= [16], error('this script does not apply binary formats different to 16.'); end;
signald= fullfile(PATH, DATAFILE);            % 读入 16 格式的 ECG 信号数据
fid2=fopen(signald,'r');
A= fread(fid2, [1, SAMPLES2READ], 'uint16')';  % matrix with 1 rows, each 16 bits long

根据基准值和增益调整数据

M = A;
 M( : , 1)= (M( : , 1)- zerovalue(1));
 M=M';
 M(1)=[];
 sM=size(M);
 sM=sM(2)+1;
 M(sM)=0;
 M=M';
 M=M/gain(1);
 TIME=(0:2*(SAMPLES2READ)-1)/sfreq;

绘制结果

M = M(100:end-100,1);  %因为数据前后均有EOF,故删除100个样本点
figure(1); clf, box on, hold on
plot(TIME(1:size(M,1)), M(:,1),'r');

结果

ECG数据

  • 1
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值