function [QRS1,Rp,Sp,R2p,QRS2,ymaxaux,type,Sgran]=Rwave(n,X,Xpb,D,Der,PKni,M,I,Fs,Kr,Ks,Krr) % ---- QRS complex classification ---- % In RSR' type significative points are returned, % in QRS and QR types, R and S wave positions, are returned respectively. % ---- Initialization ---- QRS1=[]; QRS2=[]; Qp=[]; Rp=[]; Sp=[]; R2p=[]; Rex=0; Qex=0; Sex=0; R2ex=0; type=0; noR=0; Sgran=0; % ---- Previous and former peaks ---- Ir=find(I>PKni); mpicd=I(Ir(1)); Ir=find(I0&ydd<0&(kpi*ydi<(-1)*ydd|kpi*(-1)*ydd0&ydi>0&ydd<0)|((1+perc)*(-1)*ydi>ydd&(1-perc)*(-1)*ydincero); if ~isempty(Ir) mpda=I(Ir(1)); if ((-1*D(mpda)ncero); if ~isempty(Ir) mpic=I(Ir(1)); if ~((1+perc)*abs(ydd)>abs(D(mpic))&(1-perc)*abs(ydd)abs(ydd) % ---- PKnii corresponds to R' wave ---- Daux=flipud(D(1:mpici)); ncero=zerocross(Daux); ncero=mpici-ncero+1; if ~isempty(ncero) return; end Ir=find(Iabs(D(mpic))&(1-perc)*abs(ydi)150e-3 if Xpb(PKni)>0 type=1; % ---- Normal QRS type ---- else type=3; % ---- Very large Q or S wave ---- end end else type=3; % ---- Very large Q or S wave ---- end else type=1; % ---- Normal QRS type ---- end % ---- Onset and offset of RSR' ---- if (type==2) Ir=find(I>R2p); mpicd=I(Ir(1)); Ir=find(Iprr*abs(D(mpici))|(PKni-nrtei)>(nrted-PKni)) % ---- PKni corresponds to Q wave, R wave will be on the right % ---- Daux=D(mpicd:length(D)); ncero=zerocross(Daux); if isempty(ncero) return; end ncero=mpicd+ncero-1; Ir=find(I>ncero); mpda=I(Ir(1)); if (ncero-PKni)/Fs>150e-3|(-1)*D(mpda)140e-3|(ymax2<(-1)*ydi/10)|((Xpb(ncero))<-abs(Xpb(PKni))*1/6) if (PKni-ncero)/Fs>140e-3|(ymax2<(-1)*ydi/100)|(Xpb(ncero)<-abs(Xpb(PKni))*1/3) %JGM Rp=PKni; type=4; % ---- QS type ---- else Rp=ncero; end end end end % ---- R wave location in the normal QRS type ---- if (type==1) Rp=PKni; R2p=[]; end