function rr = simPAF_gen_AF_RR_intervals(lamba,nRR) % rr = simPAF_gen_AF_RR_intervals() returns AF RR series modelled according % to the paper by Corino et al. An atrioventricular node model for analysis % of the ventricular response during atrial fibrillation. IEEE Transactions % on Biomedical Engineering. 2011, 58(12), 3386-3395. % % Copyright (C) 2011 Valentina D. A. Corino*, Frida Sandberg**, % Luca T. Mainardi*, Leif Sornmo** % *Department of Bioengineering, Politecnico di Milano; % **Department of Biomedical Engineering and % Center of Integrative Electrocardiology, Lund University; % % Available under the GNU General Public License version 3 % - please see the accompanying file named "LICENSE" % if nRR < 70 time = 1; else time = nRR/70; end prob_alpha = 0.6; P = [0.15 0.25]; difftau = 0.2; slope_beta = 10; tau1_in=polyval(P,1); tau1=polyval(P,0:.001:3); P2=[P(1) P(2)+difftau]; tau2=polyval(P2,0:.001:3); tau2_in=polyval(P2,1); Vt=-40; Vr=-90; dVdt=0; aa=exprnd(1/lamba,1000000,1); t_a=cumsum(aa); aa=aa(t_a0)); prob_beta=zeros(length(aa),length(Nbeta)); for ii=1:Nbeta prob_beta(1:prob2(ii),ii)=1; prob_beta(:,ii)=prob_beta(randperm(length(aa)),ii); end blocked_beta=zeros(length(aa),1); blocked_beta_t=zeros(length(tempo_x),1); non_blocked_beta_t=zeros(length(tempo_x),1); tempo_tot=zeros(length(aa),1); while nAA=nextAA % t1=atr_t; atr_t=0; nAA=nAA+1; % increments AF counter if nAA0); if beats>0 tempo=t-R(beats(end))-tau; [m, pos]=min(abs(tempo_x-tempo)); if pos<=Nbeta if prob_beta(nAA,pos)==0 deltaV=(Vt-Vr)+1; Vm=Vm+deltaV; non_blocked_beta_t(pos)=non_blocked_beta_t(pos)+1; else blocked_beta(nAA)=1; blocked_beta_t(pos)=blocked_beta_t(pos)+1; tempo_tot(nAA)=tempo; end else deltaV=(Vt-Vr)+1; Vm=Vm+deltaV; non_blocked_beta_t(pos)=non_blocked_beta_t(pos)+1; end else deltaV=(Vt-Vr)+1; Vm=Vm+deltaV; end end end %%% function VtrSense % there is a wave in the ventricle (vtr_nA>0) and the ventricle % is not in refractory period (vtr_tmA>=AntDly) if vtr_nA>0 i_R=i_R+1; R(i_R)=t; vtr_tmA=0; vtr_t=0; vtr_nA=0; end %%% function ActivateAVJ + StartAVJref if in phase4: % when Vm>=Vt AVJ is activated (avj_nA=avj_nA+1;) and then the % RP starts in AVJ % OR StartAVJph4 if in phase0 % when avj_t>tau, i.e. the RP of AVJ finishes, phase4 again if strcmp(phase,'phase4') % otherwise it's in refractory period if Vm>=Vt %%% ActivateAVJ avj_nA=avj_nA+1; vtr_nA=vtr_nA+1; phase='phase0'; avj_t=0; if prob(nAA)==0 beats=find(R>0); if beats>0 new_RR=t-R(beats(end)); [m xx]=min(abs(tempo_x-new_RR)); tau=tau2(xx); prob_vera(nAA)=2; else tau=tau2_in; prob_vera(nAA)=2; end else beats=find(R>0); if beats>0 new_RR=t-R(beats(end)); [m, xx]=min(abs(tempo_x-new_RR)); tau=tau1(xx); prob_vera(nAA)=1; else tau=tau1_in; prob_vera(nAA)=1; end end tautau(nAA)=tau; end elseif exist('tau1','var')==1 if avj_t>tau %%% StartAVJph4 phase='phase4'; Vm=Vr; end end end R=R(R>0); rr=diff(R);