%*读取MIT-BIH 心律失常数据库

%------ SPECIFY DATA ------------------------------------------------------
%------ 指定数据文件 -------------------------------------------------------
PATH= ‘C:\Users\lenovo\Desktop\MITBIH\104’; % 指定数据的储存路径
HEADERFILE= ‘104.hea’; % .hea 格式,头文件,可用记事本打开
ATRFILE= ‘104.atr’; % .atr 格式,属性文件,数据格式为二进制数
DATAFILE=‘104.dat’; % .dat 格式,ECG 数据
SAMPLES2READ=3600; % 指定需要读入的样本数
% 若.dat文件中存储有两个通道的信号:
% 则读入 2*SAMPLES2READ 个数据

%------ LOAD HEADER DATA --------------------------------------------------
%------ 读入头文件数据 -----------------------------------------------------
%
% 示例:用记事本打开的117.hea 文件的数据
%
% 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
%
%-------------------------------------------------------------------------
fprintf(1,’\n$> WORKING ON %s …\n’, HEADERFILE); % 在Matlab命令行窗口提示当前工作状态
%
% 【注】函数 fprintf 的功能将格式化的数据写入到指定文件中。
% 表达式:count = fprintf(fid,format,A,…)
% 在字符串’format’的控制下,将矩阵A的实数数据进行格式化,并写入到文件对象fid中。该函数返回所写入数据的字节数 count。
% fid 是通过函数 fopen 获得的整型文件标识符。fid=1,表示标准输出(即输出到屏幕显示);fid=2,表示标准偏差。
%
signalh= fullfile(PATH, HEADERFILE); % 通过函数 fullfile 获得头文件的完整路径
fid1=fopen(signalh,‘r’); % 打开头文件,其标识符为 fid1 ,属性为’r’–“只读”
z= fgetl(fid1); % 读取头文件的第一行数据,字符串格式
A= sscanf(z, ‘%*s %d %d %d’,[1,3]); % 按照格式 ‘%*s %d %d %d’ 转换数据并存入矩阵 A 中
nosig= A(1); % 信号通道数目
sfreq=A(2); % 数据采样频率
clear A; % 清空矩阵 A ,准备获取下一行数据
for k=1:nosig % 读取每个通道信号的数据信息
z= fgetl(fid1);
A= sscanf(z, ‘%*s %d %d %d %d %d’,[1,5]);
dformat(k)= A(1); % 信号格式; 这里只允许为 212 格式
gain(k)= A(2); % 每 mV 包含的整数个数
bitres(k)= A(3); % 采样精度(位分辨率)
zerovalue(k)= A(4); % ECG 信号零点相应的整数值
firstvalue(k)= A(5); % 信号的第一个整数值 (用于偏差测试)
end;
fclose(fid1);
clear A;

%------ LOAD BINARY DATA --------------------------------------------------
%------ 读取 ECG 信号二值数据 ----------------------------------------------
%
if dformat~= [212,212], error(‘this script does not apply binary formats different to 212.’); end;
signald= fullfile(PATH, DATAFILE); % 读入 212 格式的 ECG 信号数据
fid2=fopen(signald,‘r’);
A= fread(fid2, [3, SAMPLES2READ], ‘uint8’)’; % matrix with 3 rows, each 8 bits long, = 212bit
fclose(fid2);
% 通过一系列的移位(bitshift)、位与(bitand)运算,将信号由二值数据转换为十进制数
M2H= bitshift(A(:,2), -4); %字节向右移四位,即取字节的高四位
M1H= bitand(A(:,2), 15); %取字节的低四位
PRL=bitshift(bitand(A(:,2),8),9); % sign-bit 取出字节低四位中最高位,向右移九位
PRR=bitshift(bitand(A(:,2),128),5); % sign-bit 取出字节高四位中最高位,向右移五位
M( : , 1)= bitshift(M1H,8)+ A(:,1)-PRL;
M( : , 2)= bitshift(M2H,8)+ A(:,3)-PRR;
if M(1,:) ~= firstvalue, error(‘inconsistency in the first bit values’); end;
switch nosig
case 2
M( : , 1)= (M( : , 1)- zerovalue(1))/gain(1);
M( : , 2)= (M( : , 2)- zerovalue(2))/gain(2);
TIME=(0:(SAMPLES2READ-1))/sfreq;
case 1
M( : , 1)= (M( : , 1)- zerovalue(1));
M( : , 2)= (M( : , 2)- 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;
otherwise % this case did not appear up to now!
% here M has to be sorted!!!
disp(‘Sorting algorithm for more than 2 signals not programmed yet!’);
end;
clear A M1H M2H PRR PRL;
fprintf(1,’\n$> LOADING DATA FINISHED \n’);

%------ LOAD ATTRIBUTES DATA ----------------------------------------------
atrd= fullfile(PATH, ATRFILE); % attribute file with annotation data
fid3=fopen(atrd,‘r’);
A= fread(fid3, [2, inf], ‘uint8’)’;
fclose(fid3);
ATRTIME=[];
ANNOT=[];
sa=size(A);
saa=sa(1);
i=1;
while i<=saa
annoth=bitshift(A(i,2),-2);
if annoth59
ANNOT=[ANNOT;bitshift(A(i+3,2),-2)];
ATRTIME=[ATRTIME;A(i+2,1)+bitshift(A(i+2,2),8)+…
bitshift(A(i+1,1),16)+bitshift(A(i+1,2),24)];
i=i+3;
elseif annoth60
% nothing to do!
elseif annoth61
% nothing to do!
elseif annoth62
% nothing to do!
elseif annoth==63
hilfe=bitshift(bitand(A(i,2),3),8)+A(i,1);
hilfe=hilfe+mod(hilfe,2);
i=i+hilfe/2;
else
ATRTIME=[ATRTIME;bitshift(bitand(A(i,2),3),8)+A(i,1)];
ANNOT=[ANNOT;bitshift(A(i,2),-2)];
end;
i=i+1;
end;
ANNOT(length(ANNOT))=[]; % last line = EOF (=0)
ATRTIME(length(ATRTIME))=[]; % last line = EOF
clear A;
ATRTIME= (cumsum(ATRTIME))/sfreq;
ind= find(ATRTIME <= TIME(end));
ATRTIMED= ATRTIME(ind);
ANNOT=round(ANNOT);
ANNOTD= ANNOT(ind);

%------ DISPLAY DATA ------------------------------------------------------
figure(1); %clf, box on, hold on
plot(TIME, M(:,1),‘b’);
plot(M(:,1),‘r’);
if nosig==2
plot(TIME, M(:,2),‘b’);
end;
for k=1:length(ATRTIMED)
text(ATRTIMED(k),0,num2str(ANNOTD(k)));
end
xlim([TIME(1), TIME(end)]);
xlabel(‘Time / s’); ylabel(’ MLII导联 / mV’);
string=[‘MIT心律失常ECG原始signal ‘,DATAFILE];
title(string);
fprintf(1,’\nKaTeX parse error: Undefined control sequence: \n at position 28: … DATA FINISHED \̲n̲'); fprintf(1,'…> ALL FINISHED \n’);
ecg1=M(:,1);大家基本都使用的这一列数据,进行实验,因为这组数据波形比较好一些。

其中,ATRTIMED为标注R的时间(单位s),ANNOTD为ATRTIMED处的标记。

使用matlab代码读取展示MIT-BIH心律失常数据库数据(带注释)相关推荐

  1. 傅里叶变换 matlab代码_基于机器学习的心律失常分类(三)——小波阈值去噪[MATLAB]...

    在对心电信号进行分析前,需要对其进行去噪预处理.因为在心电信号采集或者数模转换的过程中,会产生噪声,包括工频干扰.肌电干扰.基线漂移这三种.本文将介绍目前十分常用且有效的一种去噪方法--小波阈值去噪. ...

  2. Matlab循环读取txt文件并对其中数据进行计算最后导出为excel

    废话不多说,先上代码. clear; clc;for i = 1:30 %文件个数filename = ['test (' num2str(i) ')' '.txt']; %文件名称delimiter ...

  3. 如何用ABAP代码读取SAP Business partner的附件数据

    Sent: Wednesday, April 3, 2013 9:47 PM Subject: RE: how to read attachment in BP overview UI 我写了一个re ...

  4. matlab用ls显示目录,matlab中读取某个文件夹下所有数据文件

    tearful (pingr)于2009年09月14日16:57:15 星期一)提到: 现在有个文件夹data中的数据想要批量处理,而data中有多个子文件夹,名字分别为0100 1,01002,-, ...

  5. java代码读取到excel的两列数据,进行相乘得到新的数据

    具体的怎么读取excel,请看我的另外一篇http://blog.csdn.net/anmoyyh/article/details/75050438 例如某个表格的第7列为价格,第8列为折扣,在读取到 ...

  6. PHP(2):PHP读取MS Sql Server 2014数据库数据

    前面使用VBS将Excel数据写入到了Ms Sql Server 2014的数据库,现在要将记录显示出来,本来打算用IIS+ASP.net,可是9月份安装好Apache+PHP后一直没有写过PHP代码 ...

  7. 【数学建模】灰色关联(Matlab代码实现)

    目录 1 灰色关联理论 2 算例及Matlab代码实现 2.1 算例1 2.2 算例2   2.3 算例3 2.4 算例4  3 写在最后 1 灰色关联理论 灰色关联分析l是由邓聚龙教授于1982年提 ...

  8. 【web】PHP网页调用Matlab代码的实现以及一些需要注意的bug~

    目的:在一个PHP网页中调用matlab代码实现一些功能,比如处理数据,或者画图~ 平台: linux+apache+php的服务器 实现: 正常情况下,我们在Linux客户端运行matlab代码时候 ...

  9. matlab sheet名字,MATLAB得到excel多个非默认sheet名_怎样利用matlab去读取一个excel表中多个sheet的数据并导入一个sheet中?...

    如何用matlab读取一个excel表格中的若干个工作表 如果数字: xlsread('e:/shiyanshuju/shiyanbiaoge','sheet1','B1:D1440') 最好个表格放 ...

最新文章

  1. 运行BU,利用矿工投票机制寻求BCH升级方案
  2. WeX5 -- xcode7+iphone免费帐号打包详解
  3. pytest使用简介
  4. HTML --- 盒模型
  5. JVM - 剖析Java对象头Object Header之对象大小
  6. 媒体查询 屏幕超过页面上版心的宽度时 ,(也就是所有内容能显示出来),不让它有滚动条 【解决了因为banner图的原因出现滚动条的问题】...
  7. simulink显示多个数据_Stateflow数据介绍(一)
  8. conky在ubuntu xfce4下面的配置
  9. 开发composer包
  10. MHA+keepalived实现Mysql高可用及读写分离
  11. Android -- 自定义View小Demo,绘制四位数随机码(一)
  12. 看门狗(APB watchdog)简介,各个寄存器简介,把看门狗挂到APB总线上,看门狗的验证测试(1)
  13. 使用Visual Studio比较两个数据库、查找差异和更新
  14. k3c最新官改非常稳定了_软件聚分享库APP最新版下载-软件聚分享库v1.0.0安卓版下载...
  15. Django城市信息查询功能(3)
  16. Mac电脑开启共享wifi教程
  17. 元编程: is_floating_point<Tp>
  18. 数据载入、Pandas基础和探索性数据分析
  19. [深度学习]CNN的基础结构与核心思想
  20. 电脑录音软件大全,推荐一波优秀的录音软件!

热门文章

  1. 论文阅读:Question Answering Over Temporal Knowledge Graphs
  2. Linux内核编译及系统裁剪
  3. linux 内核 nice,进程调度 – Linux内核API set_user_nice
  4. Video Understanding(视频理解,I3D,SlowFast,Non-local)
  5. Bilinear Attention Networks 代码记录
  6. COM 类工厂中 CLSID 错误: 80070005 拒绝访问的解决方案
  7. 利用while True: break 解决 asyncio:Future exception was never retrieved !
  8. 【通信电子电路】交流电路频域分析
  9. C#中数组中Skip 和 Take 怎么用
  10. SpringSecurity登录认证流程