好文档就是一把金锄头!
欢迎来到金锄头文库![会员中心]
电子文档交易市场
安卓APP | ios版本
电子文档交易市场
安卓APP | ios版本

MIT-BIH ECG信号的数据读取方法和Matlab程序 收藏.doc

10页
  • 卖家[上传人]:gg****m
  • 文档编号:230578479
  • 上传时间:2021-12-27
  • 文档格式:DOC
  • 文档大小:82.50KB
  • / 10 举报 版权申诉 马上下载
  • 文本预览
  • 下载提示
  • 常见问题
    • MIT-BIH ECG信号的数据读取方法和Matlab程序 收藏最近在写一篇基于小波变换的ECG信号压缩算法的论文,遇到了怎样获取ECG 信号测试数据的问题,在百度和专业论坛里搜索了一番,发现也有很多朋友为此 发愁现在论文写好了,投稿中,顺便也把怎样获取和处理ECG信号数据的方 法写出来,供有需要的朋友参考,省却在百度和论坛里苦苦求索的麻烦,呵呵a_a一、 首先,如果是对ECG心电信号进行观察、分析和诊断使用的话,有两个方 法:(1) 从MIT-BIH数据库下载请参考我前些天发布的文章《MIT-BIH ECG心电数据的下载和读取图解》,里 面有详尽介绍2) 用专门的Matlab心屯数据读取程序我10日在浩惠电子论坛(hg:// 读取ECG心电数据的Matlab程序(rddata.m),如获至宝啊!这个程序是由外 国人写的,能够读取MIT-BIH数据库.atr> .dat> ,hea三种文件的数据,根据这 些数据计算出实际的心屯信号值,并绘制出信号波形程序不大,注释也算齐全, 不过是英文的,需要这个程序的朋友请按以下链接下载匿名提取文件连接 hg:〃pickuD或登录Mofile,使用提取码3497080791233097提取文件PS:关于 rddata.m 的下载,在打开 后, 下载链接是在“文件标签和“文件介绍"之后的地方,夹在两块广告图片之间,共 有3个链接:“推荐快车(flashget)高速下载文件下载文件(IE浏览器)下载文 件(非IE浏览器广,非常隐蔽,一般点击中间的那个链接“下载文件(IE浏览器广 就会弹出保存对话框了。

      二、 如果是要对ECG信号进行压缩、编码等信号处理操作上面程序获得的数据就不便于使用了,因为那是转换为具有实际意义的心电数 据,信号数据值一般在・2〜2之间,单位是mVo那么,要找新的ECG读取程序 来获取数据吗?不用!实际上,程序rddata.m中本身就是把MIT .dat文件中存 储的二值数据转换为十进制数据,然后再进一步处理转换成具有实际意义的心电 信号值我们进行信号处理时,需要用到的就是从二值数据转换来的初始十进制 数据,由于・dat文件中是三个字节存储2个数,即每个数12bits,转换后得到的 十进制数范围应该是0〜2048我所理解的数据存储方式图示如下,不知是否正 确,仅供参考:由于rddata.m程序中的注释是英文的,且有些地方也说明不清疑,我从程序中截 取出将二值数据转换为十进制数据的部分代码,将注释转换为中文,并根据自己 的理解作一些补充说明,希望对大家有所帮助!具体的程序代码如下:% %程序Fun.ReadECGData用于读取ECG信号数据,将原始的二值数据转换为十进制数%输入参数及其示例:% PATH= *D:\MATLAB\R2007b\work\ECG Data*; % 指定数据的储存路径% HEADERFILE= rl 17.heaf; % .hea格式,头文件,可用记事本打开% DATAFILEM117.dat; % .dat 格式,ECG 数据% SAMPLES2READ=204& %指定需要读入的样本数% %若•血(文件中存储有两个通道的信号:% % 则读入2*SAMPLES2READ个数据%输出参数:M——一个SAMPLES2READ行2列的数据矩阵,每列数据代 表一个通道的信号值% function M =Fun_ReadECGData(PATH,HEADERFILE,DATAFILE,SAMPLES2READ) %——LOAD HEADER DATA %--读入头文件数据 %%示例:用记事木打开的117,hea文件的数据%% 117 2 360 650000% 117.dat 212 200 11 1024 839 31170 0 MLII% 117.dat 212 200 II 1024 930 28083 0 V2% #69M 950 654 x2% # None%% % %【注】函数fprintf的功能将格式化的数据写入到指定文件中。

      表达式:count = fprintf(fid,format,A,...)%在字符^format的控制下,将矩阵A的实数数据进行格式化,并写入到文件 对象fid中该函数返回所写入数据的字节数counto% fid是通过函数fopen获得的整型文件标识符fid二1,表示标准输出(即输 出到屏幕显示);fid=2,表示标准偏差 fprintf( 1 ;\\n$> WORKING ON %s ...\n\ HEADERFILE); % 在 Matlab 命令行窗 口提示当前工作状态signalh= fullfile(PATH, HEADERFILE); % 通过函数 fullfile 获得头文件的完整路径fid 1 =fopen(signalh,r,); %打开头文件,其标识符为fidl ,属性为T —只读”z=fgetl(fidl); %读取头文件的第一行数据,字符串格式A二 sscanf(z, %*s %d %d %cl;[l,3]); % 按照格式’%*s %d %d %df 转换数据并存入矩阵A中 nosig=A(l); %信号通道数目sfreq=A(2); %数据采样频率clear A; %清空矩阵A ,准备获取下一行数据for k=l:nosig %读取每个通道信号的数据信息z= fgetl(fidl);A= sscanf(z, %*s %d %d %d %d %d*,[l,5]);%信号格式;这里只允许为212格式%每mV包含的整数个数%采样精度(位分辨率)%ECG信号零点相应的整数值%信号的第一个整数值(用于偏差测试)dformat(k)= A(l);gain(k)= A(2);bitres(k)= A(3);zerovalue(k)= A(4);firstvalue(k)= A(5);end;fclose(fidl);clear A;%——LOAD BINARY DATA%……读取ECG信号二值数据 %%说明:.dat文件的数据格式 %% 用uint8格式读入N个样本,存入矩阵A中,则A有N行、3列, 每列一个字节,% 即每行用三个字节表示两个数ml、m2,每个数12 bits,故乂称为212格式% ml的低8位存放在A (:,1) , m2的低8位存放在A (:,3),% ml的高4位存放在A (:,2)的低4位,m2的高4位存放在A (:,2)的高 4位%%根据上述数据格式,可以用一系列移位、位与操作,提取出十进制格式的双 通道信号数据%% if ciformat〜二[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], % 矩阵 A 共有SAMPLES2READ行、3列,每列数据都是以uint8格式读入,注意这时数据通 过uint8的读入方式已经成为十进制数了fclose(fid2);M2H= bitshift(A(:,2), -4); %字节向右移四位,即取字节的高四位,属于信号2的高4位M1H= bitand(A(:,2), 15); %取字节的低四位,属于信号1的高4位PRL=bitshift(bitand(A(:,2),8),9); % sign-bit 取出字节低四位中最高位,向左移九位PRR=bitshift(bitand(A(:,2), 128),5); % sign-bit 取出字节高四位中最高位,向左移五位M(:, l)=bitshift(MlH,8)+A(:,l)・PRL; %将 M1H、M2H 分别左移 8 位,即 乘以2八8,再分别加上A(:,l), A(:,2),M(:, 2)二bitshift(M2H,8)+ A(:,3)・PRR; %由于左移时把符号位也移动了,要减去符号位的值M=M: %为了方便后期的数据处理,将输出矩阵M转置为2行SAMPLES2READ 列发表于@2008年01月12日23:55:001评论(50)|编辑|举报|收藏旧一篇:推荐一款免费的桌而搜索软件VistaGkmcel.2 ,按文件名称建立索引!I新一篇:推荐一些常用的中外学术文献数据库网站查看最新精华文章请访问博客首页相关文章opal发表于2008年1月16日 12:44:21 IP:举报回复删除请问一下,我做心电信号的聚类分析,如果用心电信号的时间序列,是不是直接 用M向量就可以了呢? chenyusiyuan发表于2008年1月16日13:01:45 IP:举 报回复删除你好,我认为用于心电信号的聚类分析可以直接使用rddata.ni文件得出的M 向量,因为具有实际意义的ECG数据值相对比较小,便于聚类分析。

      ygy发表 于2008年3月8 口 14:22:15 IP:举报回复删除楼主好,为什么我使用时候matlab中没有fgetl函数???? Error using ==> fgetlInvalid file identifier.我是6.5的,是不是必须在7.0上才可以用?谢谢ygy发表于2008年3月8 口 14:37:08 IP:举报回复删除晕,我自己忘记设路径了,已解决sunhuinan发表于2008年3月13日9:01:52 IP:222.171.23.*举报回复删除为什么我使用时候matlab中没有fgetl函数?出现下面错误??? Error using ==> fgetlInvalid file identifier.ygy你好,你是怎么解决的,多谢了sunhuinan 发表于 2008 年 3 月 13 日 9:06:47 IP:222.171.23.*举报回复删除路径我也设了,可是还不对,请各位朋友给我指点sunhuinan发表于2008年3月13 H 9:35:54 IP:222・171.23・*举报回复删除刚才的问题我已经解决了,不过又出现了下而的问题,在 读取每个通道信号的 数据信息出现:Index exceeds matrix dimensions.这个问题怎么决绝呀,多谢各位朋友。

      chenyusiyuan发表于20()8年3月13 口10:46:07 IP:222.200.105.*举报回复删除sunhuinan,你好,把Matlab给出的具体错误信息粘帖出来大家分析一下吧?另 外你的Matlab版木是多少? chenyusiyuan发表于2008年3月13 H10:47:37 IP:222.200.105.*举报回复疵除主要是看Index exceeds matrix dimensions.是哪个变量的数据读取超限了。

      点击阅读更多内容
      关于金锄头网 - 版权申诉 - 免责声明 - 诚邀英才 - 联系我们
      手机版 | 川公网安备 51140202000112号 | 经营许可证(蜀ICP备13022795号)
      ©2008-2016 by Sichuan Goldhoe Inc. All Rights Reserved.