一、将下载下来的心电信号采集数据一条数据分拆成30秒一段的信号,保存成txt文件,分为两列,第一列是时间,第二列是采样值还原的电压值。
clc;clear
close all;
%------ SPECIFY DATA ------------------------------------------------------
PATH= 'D:\Program Files\Polyspace\R2020b\bin\matlab code\main_codes\ECG process\data\MIT-BIH Arrhythmia Database\234\'; % path, where data are saved
% path(path,'D:\Program Files\MATLAB\R2015b\bin\test_codes\ECG\data\100');
HEADERFILE= '234.hea'; % header-file in text format
ATRFILE= '234.atr'; % attributes-file in binary format
DATAFILE='234.dat'; % data-file
SAMPLES2READ=650000; % number of samples to be read
% SAMPLES2READ=1000; % number of samples to be read
% in case of more than one signal:
% 2*SAMPLES2READ samples are read
%------ LOAD HEADER DATA --------------------------------------------------
signald= fullfile(PATH, DATAFILE); % data in format 234
% signald = DATAFILE;
fid2=fopen(signald,'r');
A= fread(fid2, [3, SAMPLES2READ], 'uint8')'; % matrix with 3 rows, each 8 bits long, = 2*12bit
% A= fread(fid2, 3*SAMPLES2READ, 'uint8')';
% x=fscanf(fid2,'%g'); %读取文件数据
fclose(fid2);
% A=dlmread(signald);
%=----------------------------我的方法-----------------------------------
M2H= bitshift(A(:,2), -4); %字节向右移四位,即取字节的高四位
M1H= bitand(A(:,2), 15); %取字节的低四位
M( : , 1)= bitshift(M1H,8)+ A(:,1); %低四位向左移八位
M( : , 2)= bitshift(M2H,8)+ A(:,3); %高四位向左移八位
M = (M-1024)/234;
%至此两个通道的数据保存在数组中M中
%----------------------------将数据分割成30份,一分钟一份---------------------------------
for t=1:29
str=num2str(t);
name=['D:\Program Files\Polyspace\R2020b\bin\matlab code\main_codes\ECG process\data\MIT-BIH Arrhythmia Database\234\MIT-BTH txt格式\',str,'.txt'];
fid=fopen(name,'wt');
m1=21600*(t-1)+1;
m2=21600*t;
n=2;
for i=m1:1:m2
for j=1:1:n
if j==n
fprintf(fid,'%5.3f\n',M(i,j));
else
fprintf(fid,'%5.3f \t',M(i,j));
end
end
end
fclose(fid);
end
%----------分割最后一段
t=30;
str=num2str(t);
name=['D:\Program Files\Polyspace\R2020b\bin\matlab code\main_codes\ECG process\data\MIT-BIH Arrhythmia Database\234\MIT-BTH txt格式\',str,'.txt'];
fid=fopen(name,'wt');
m1=21600*(t-1)+1;
m2=length(M);
n=2;
for i=m1:1:m2
for j=1:1:n
if j==n
fprintf(fid,'%5.3f\n',M(i,j));
else
fprintf(fid,'%5.3f \t',M(i,j));
end
end
end
fclose(fid);
fprintf('完成\n');
% ————————————————
% 版权声明:本文为CSDN博主「LZDCQU」的原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接及本声明。
% 原文链接:https://blog.csdn.net/qq_21905401/article/details/54021052