心电信号的提取和matlab编程
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
MIT-BIH ECG 信号的数据读取方法和Matlab程序收藏
最近在写一篇基于小波变换的ECG信号压缩算法的论文,遇到了怎样获取ECG信号测试数据的问题,在百度和专业论坛里搜索了一番,发现也有很多朋友为此发愁。现在论文写好了,投稿中,顺便也把怎样获取和处理ECG信号数据的方法写出来,供有需要的朋友参考,省却在百度和论坛里苦苦求索的麻烦,呵呵 ^_^ 一、首先,如果是对ECG心电信号进行观察、分析和诊断使用的话,有两个方法:
(1)从MIT-BIH数据库下载
请参考我前些天发布的文章《MIT-BIH ECG 心电数据的下载和读取图解》,里面有详尽介绍。
/chenyusiyuan/archive/2008 /01/06/2027887.aspx
(2)用专门的Matlab心电数据读取程序
我10日在浩惠电子论坛
(/bbs/)的“医疗器械”版块找到了读取ECG心电数据的Matlab程序(rddata.m),如获至宝啊!这个程序是由外国人写的,能够读取
MIT-BIH数据库 .atr、.dat、.hea三种文件的数据,根据这些数据计算出实际的心电信号值,并绘制出信号波形。程序不大,注释也算齐全,不过是英文的,需要这个程序的朋友请按以下链接下载。
匿名提取文件连接
/3497080791233097
或登录Mofile,使用提取码3497080791233097 提取文件
PS: 关于rddata.m的下载,在打开
/3497080791233097后,下载链接是在“文件标签”和“文件介绍”之后的地方,夹在两块广告图片之间,共有3个链接:“推荐快车(flashget)高速下载文件下载文件(IE浏览器) 下载文件(非IE浏览器)”,非常隐蔽,一般点击中间的那个链接“下载文件(IE浏览器)”就会弹出保存
对话框了。
二、如果是要对ECG信号进行压缩、编码等信号处理操作
上面程序获得的数据就不便于使用了,因为那是转换为具有实际意义的心电数据,信号数据值一般在-2~2之间,单位是mV。那么,要找新的ECG读取程序来获
取数据吗?不用!实际上,程序rddata.m中本身就是把MIT .dat 文件中存储的二值数据转换为十进制数据,然后再进一步处理转换成具有实际意义的心电信号值。我们进行信号处理时,需要用到的就是从二值数据转换来的初始十进制数据,由于 .dat文件中是三个字节存储2个数,即每个数12bits,转换后得到的十进制数范围应该是0~2048。我所理解的数据存储方式图示如下,不知是否正确,仅供参考:
由于rddata.m程序中的注释是英文的,且有些地方也说明不清楚,我从程序中截取出将二值数据转换为十进制数据的部分代码,将注释转换为中文,并根据自己的理解作一些补充说明,希望对大家有所帮助!
具体的程序代码如下:
%-------------------------------------------------------------------------
% 程序Fun_ReadECGData 用于读取ECG信号数据,将原始的二值数据转换为十进制数
% 输入参数及其示例:
% PATH= 'D:\MATLAB\R2007b\work\ECG Data'; % 指定数据的储存路径
% HEADERFILE= '117.hea'; % .hea 格式,
头文件,可用记事本打开
% DATAFILE='117.dat'; % .dat 格式,ECG 数据
% SAMPLES2READ=2048; % 指定需要读入的样本数
%
% 若.dat文件中存储有两个通道的信号:
%
% 则读入 2*SAMPLES2READ 个数据
% 输出参数:M ——一个SAMPLES2READ行2列的数据矩阵,每列数据代表一个通道的信号值
%-------------------------------------------------------------------------
function M =
Fun_ReadECGData(PATH,HEADERFILE,DATAFILE,SAMPL ES2READ)
%------ 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 的功能将格式化的数据写入到指定文件中。
% 表达式:count = fprintf(fid,format,A,...)
% 在字符串'format'的控制下,将矩阵A的实数数据进行格式化,并写入到文件对象fid中。该函数返回所写入数据的字节数 count。
% fid 是通过函数 fopen 获得的整型文件标识符。fid=1,表示标准输出(即输出到屏幕显示);fid=2,表示标准偏差。
%-------------------------------------------------------------------------
fprintf(1,'\\n$> WORKING ON %s ...\n', HEADERFILE); % 在Matlab命令行窗口提示当前工作状态
signalh= fullfile(PATH,
HEADERFILE);
% 通过函数 fullfile 获得头文件的完整路径
fid1=fopen(signalh,'r');
% 打开头文件,其标识符为 fid1 ,属性为'r'--“只读”
z=
fgetl(fid1);
% 读取头文件的第一行数据,字符串格式