资源简介
读取MIT-BIH数据库,每个人的心电数据。
代码片段和文件信息
PATH= ‘e:\xindian\data3‘; % path where data are saved
HEADERFILE= ‘116.hea‘; % header-file in text format
ATRFILE= ‘116.atr‘; % attributes-file in binary format
DATAFILE=‘116.dat‘; % data-file
SAMPLES2READ=650000; % number of samples to be read
% in case of more than one signal:
% 2*SAMPLES2READ samples are read
%------ LOAD HEADER DATA ----------
fprintf(1‘\\n$> WORKING ON %s ...\n‘ HEADERFILE);
signalh= fullfile(PATH HEADERFILE);
fid1=fopen(signalh‘r‘);
z= fgetl(fid1);
A= sscanf(z ‘%*s %d %d %d‘[13]);
nosig= A(1); % number of signals
sfreq=A(2); % sample rate of data
clear A;
for k=1:nosig
z= fgetl(fid1);
A=[];
A= sscanf(z ‘%*s %d %d %d %d %d‘[15]);
dformat(k)= A(1); % format; here only 212 is allowed
gain(k)= A(2); % number of integers per mV
bitres(k)= A(3); % bitresolution
zerovalue(k)= A(4); % integer value of ECG zero point
firstvalue(k)= A(5); % first integer value of signal (to test for errors)
end;
fclose(fid1);
clear A;
%------ LOAD BINARY DATA ---------
if dformat~= [212212] error(‘this script does not apply binary formats different to 212.‘); end;
signald= fullfile(PATH DATAFILE); % data in format 212
fid2=fopen(signald‘r‘);
A= fread(fid2 [3 SAMPLES2READ] ‘uint8‘)‘; % matrix with 3 rows each 8 bits long = 2*12bit A 是三列3000行的矩阵
fclose(fid2);
M2H= bitshift(A(:2) -4); %字节向右移四位,取每一行中的第二列的字节的高四位,即取字节的高四位,比如56(112000),右移四位就是(00000011)为3
M1H= bitand(A(:2) 15); %取已经移动了的字节的低四位,就是原来字节的低四位,bit(ab)ab的二进制对应位求与运算,比如bitand(3(0011)10(2000))之后为(0010),即为2
PRL=bitshift(bitand(A(:2)8)9); % sign-bit 取出字节低四位中最高位,向左移九位
PRR=bitshift(bitand(A(:2)128)5); % sign-bit 取出字节高四位中最高位,向左移五位
M( : 1)= bitshift(M1H8)+ A(:1)-PRL;
M( : 2)= bitshift(M2H8)+ 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;%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;%time是3000个采样点的时间位置
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‘)‘;%A有2121行,2列
fclose(fid3);
ATRTIME=[]; %保存每一个心跳标记的时间点
ANNOT=[];%保存每个心跳的注释代码
sa
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 4759 2014-04-28 19:25 Unti
----------- --------- ---------- ----- ----
4759 1
评论
共有 条评论