資源簡介
本文是用小波變換的方法,實(shí)現(xiàn)心電信號特征點(diǎn)算法的研究,算法比較復(fù)雜,
代碼片段和文件信息
%以每5s為一段進(jìn)行檢測,閾值的確定采用前一段和本段的共同確定方法
%對ceshi.m的改進(jìn)在于假陰排除采取1.66T的間隔
clc;?clear?all;
tic
%------?SPECIFY?DATA?------------------------------------------------------
PATH=‘F:\醫(yī)學(xué)信號\醫(yī)學(xué)\心率失常數(shù)據(jù)庫‘;?%?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);????????%字節(jié)向右移四位,即取字節(jié)的高四位
M1H=?bitand(A(:2)?15);??????????%取字節(jié)的低四位
PRL=bitshift(bitand(A(:2)8)9);?????%?sign-bit???取出字節(jié)低四位中最高位,向右移九位
PRR=bitshift(bitand(A(:2)128)5);???%?sign-bit???取出字節(jié)高四位中最高位,向右移五位
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=
評論
共有 條評論