心电信号处理——MIT数据库数据处理

一、将下载下来的心电信号采集数据一条数据分拆成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

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值