DeBoer Model

DeBoer, R. W., Karemaker, J. M., & Strackee, J. (1987). Hemodynamic fluctuations and baroreflex sensitivity in humans: a beat-to-beat model. American Journal of Physiology-Heart and Circulatory Physiology, 253(3), H680-H689. (DOI)

Theory

Effective pressure:

The systolic pressure is transformed to be in accordance with the sigmoid-shaped activation curve of the baroreflex. The constant $S_0$ defines the working point.

\[S_{n}^{\star} = f(S_n)\hspace{5mm}\text{with} \hspace{5mm} f(S_n) = S_0 + 18\text{atan}\left(\frac{S_{n} -S_0 }{18}\right)\]

Baroreflex on Heart Rate

The transfer function $G_a(z)$ relates the effective systolic pressure to the RR interval. It models fast vagally mediated and slower, sympathetic, baroreflex effects.

\[I_{n} = G_a (z) S_{n}^{\star}\]

Baroreflex on Peripheral Resistance

The peripheral resistance is influenced by the baroreflex mediated through the sympathetic nervous system reflected in the transfer function $G_b(z)$. $T_0$ is an empirical offset constant (around 3000 ms).

\[T_{ n } = R_n C = T_{ 0 } + G_b(z)S_{n}^{\star}\]

Properties of Myocardium & Respiration

Starling's law governs the pulse pressure through the coupling constant $\gamma$. Respiration also enters through the pulse pressure, modeled as a sine.

\[P_{ n } = \gamma I_{n} + A_{\rho}\sin(2\pi f_{\rho} t) \hspace{5mm} \text{with} \hspace{5mm} t = \sum I_n\]

Windkessel

Diastolic pressure is derived from the two-element Windkessel model.

\[D_{ n } = S_{n} \exp \left( - \frac{I_{n}}{ T_{n} } \right)\]

Time Propagation

The next beat is calculated through the standard relation:

\[S_{n+1} = P_{n} + D_{n}\]

Usage

CardioModels.DeBoerModelType
DeBoerModel()

A simple structure that stores a DeBoer-model.

The default initialization was taken from the original paper. When constructiong the model, single properties can be defined as keyword arguments. The model has a state, if it was already used in predict!, otherwise a default is provided in predict or predict!.

Examples

julia> model = DeBoerModel()
DeBoerModel
  a0: Int64 9
  ak: Array{Int64}((6,)) [0, 1, 2, 3, 2, 1]
  c1: Int64 -1360
  bk: Array{Int64}((6,)) [0, 2, 4, 6, 4, 2]
  TStar: Int64 3585
  γ: Float64 0.016
  c2: Float64 32.2
  c3: Float64 1.0957070684897647
  A: Int64 3
  fresp: Float64 0.3
  resp: #30 (function of type Main.CardioModels.var"#30#36"{Int64, Float64})
  noiseI: Distributions.Normal{Float64}
  noiseS: Distributions.Normal{Float64}
  operationPoint: Int64 120
  F: #31 (function of type Main.CardioModels.var"#31#37"{Int64})
  hasState: Bool false
  S: Nothing nothing
  Seff: Nothing nothing
  D: Nothing nothing
  I: Nothing nothing
  T: Nothing nothing
  ρ: Nothing nothing
  time: Int64 0
source
CardioModels.predictMethod
predict(model::DeBoerModel, n::Int; burnIn::Int = 0)

Predicts 'N' values of the cardiovascular variables for the respective model. With 'burnIn' a certain number af values can be dropped in the beginning.

Examples

julia julia> S, D, I, T, ρ = predict(model, 100) (S = [...], D = [...], I = [...], T = [...], ρ = [...])

source
CardioModels.predict!Method
predict!(model::DeBoerModel, n::Int; burnIn::Int = 0)

Updates the state of the state of the model with the last predicted values. Predicts 'N' values of the cardiovascular variables for the respective model and updates its state. With 'burnIn' a certain number af values can be dropped in the beginning.

Examples

julia julia> S, D, I, T, ρ = predict!(model, 100) (S = [...], D = [...], I = [...], T = [...], ρ = [...]) julia> model.hasState true

source