• 大小: 20KB
    文件类型: .m
    金币: 1
    下载: 0 次
    发布日期: 2021-06-12
  • 语言: Matlab
  • 标签: 心电信号  算法  

资源简介

本文是用小波变换的方法,实现心电信号特征点算法的研究,算法比较复杂,

资源截图

代码片段和文件信息

%以每5s为一段进行检测,阈值的确定采用前一段和本段的共同确定方法
%对ceshi.m的改进在于假阴排除采取1.66T的间隔
clc; clear all;
tic
%------ SPECIFY DATA ------------------------------------------------------
PATH=‘F:\医学信号\医学\心率失常数据库‘; % path where data are saved
HEADERFILE=‘105.txt‘;      % header-file in text format
ATRFILE=‘105.atr‘;         % attributes-file in binary format
DATAFILE=‘105.dat‘;         % data-file
SAMPLES2READ=649800;         % 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= 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
fclose(fid2);
M2H= bitshift(A(:2) -4);        %字节向右移四位,即取字节的高四位
M1H= bitand(A(:2) 15);          %取字节的低四位
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;
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;
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‘)‘;
fclose(fid3);
ATRTIME=

评论

共有 条评论