function [Sp,QRS2,type,Sgran]=Swave(n,X,D,Der,PKni,Rp,Sp,M,I,ymax,imax,ymin,imin,dermax,type,Sgran,Fs,Kr,Ks) % ---- S wave and QRS offset ---- Sp=[]; QRS2=[]; Sex=1; crece=0; iumb=[]; Daux=Der(imin:length(Der)); ncero=zerocross(Daux); ncero=imin+ncero-1; %if abs(Der(ncero-1))< abs(Der(ncero)) ncero=ncero-1; end Daux=D(imin:length(D)); nceau=zerocross(Daux); nceau=imin+nceau-1; %if abs(D(nceau-1))130e-3&Rp>=PKni Sex=0; end if nceau=length(D) ilim=length(D); end Daux=D(nceau:ilim); [ypic,mpic]=max(Daux); mpic=nceau+mpic-1; if ypic=nceau); mpic=I(Iq(1)); end Iq=find(I>imin); icep=I(Iq(1)); % ---- Protection against cases in which the derivative almost exceeds zero % ---- if abs(D(mpic))>dermax/30 & (~(icep=6.2 Ks=3*Ks+1; elseif (D(mpic))>=4.75 Ks=3*Ks; elseif (D(mpic))>=4 Ks=3*Ks-1; end umbral=(D(mpic))/Ks; inicio=mpic+round(10e-3*Fs); Daux=D(mpic:length(D)); iumb=thresholdcross(Daux,umbral); iumb=mpic+iumb-1; Iq=find(I>inicio); if ~isempty(Iq) %RBL ipic=I(Iq(1)); if (ipic200e-3 % ---- There is not S wave ---- umbral=(D(mpic))/Kr; Daux=D(mpic:length(D)); iumb=thresholdcross(Daux,umbral); iumb=mpic+iumb-1; inicio=mpic+round(10e-3*Fs); Is=find(I>inicio); ipic=I(Is(1)); if ipicncero); mpic=Id(Is(1)); mpic=testpeak(Der,mpic,Fs,1); if abs(Der(mpic))=PKni Sex=0; end if (Sex==1) umbral=(Der(mpic))/Ks; Daux=Der(mpic:length(Der)); iumb=thresholdcross(Daux,umbral); iumb=mpic+iumb-1; inicio=mpic+round(10e-3*Fs); Is=find(I>inicio); ipic=I(Is(1)); if ipic200e-3 % ---- There is not S wave ---- umbral=(D(mpic))/Kr; Daux=D(mpic:length(D)); iumb=thresholdcross(Daux,umbral); iumb=mpic+iumb-1; inicio=mpic+round(10e-3*Fs); Is=find(I>inicio); ipic=I(Is(1)); if ipic200e-3&Rp>=PKni Sex=0; Sp=[]; end % ---- If there is not S wave, search for the onset of R wave ---- if (Sex==0) umbral=(D(imin))/Kr; Daux=D(imin:length(D)); iumb=thresholdcross(Daux,umbral); iumb=imin+iumb-1; inicio=imin+round(10e-3*Fs); Is=find(I>inicio); ipic=I(Is(1)); if ipic