Baselli Model

Baselli, G., Cerutti, S., Civardi, S., Malliani, A., & Pagani, M. (1988). Cardiovascular variability signals: towards the identification of a closed-loop model of the neural control mechanisms. IEEE Transactions on Biomedical Engineering, 35(12), 1033-1046. (DOI))

Theory

The model is defined through the following three equations, where $G$ denotes an all-zero and $M$ an all-pole transfer function:

\[\begin{aligned} S_n &= G_{SS}(z)S_n \quad + \quad G_{SI}(z)I_n \quad + \quad G_{S\rho}(z) \rho_n \quad + \quad M_{S}(z) w_{S} \\ I_n &= G_{IS}(z)S_n \quad + \hspace{29mm} G_{I\rho}(z) \rho_n \quad + \quad M_{I}(z) w_{I}\\ \rho_n &= \hspace{76mm}M_{\rho}(z) w_{\rho} \end{aligned}\]

It can be identified from data as an ARXAR-model using the generalized least squares method (via arxar).

Usage

CardioModels.BaselliModelType
BaselliModel()

A simple structure that stores a Baselli-model in form of transfer functions. It has a recipe defined to get some bode plots.

The default initialization is not proper, to get a working model use 'getModel(sim)', which gives one of the four configurations from the original paper.

Examples

julia> model = getModel(1)
[ Info: Simulation 1: Respiration enters on S (LF are generated in the S, S loop)
BaselliModel...
source

The model can be plotted using Plots.jl:

plot(getModel(1), lab = "")
CardioModels.getModelFunction
getModel(sim::Int)

Gives a proper Baselli-model taken from the original paper, where 'sim' can take the value from 1:4, with the meaning:

  • 1: Respiration enters on S (LF are generated in the S, S loop)
  • 2: Respiration enters on I (LF are generated in the S, S loop)
  • 3: The LF are generated by S regulating feedback in the S, S loop (respiration enters both on S and on I)
  • 4: LF are generated externally from the closed-loop system (i.e., via a central command-respiration enters both on S and on I)
source
CardioModels.predictMethod
predict(model::BaselliModel, N::Int; burnIn::Int = 50)

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, I, ρ = predict(model, 100) (S = [...], I = [...], ρ = [...])

source
CardioModels.fitBaselliFunction
fitBaselli(S::Vector{<:Real}, I::Vector{<:Real}, ρ::Vector{<:Real}; ...)

Fit the Baselli model from measured or generated data.

Arguments

  • S: Systolic blood pressure
  • I: RR Interval series
  • ρ: Respiration

Keyword Arguments

  • na, nb, nc: order of the respective transfer functions, default to 10
  • iterations: maximum number of iterations, defaults to 10
  • δmin: minimum changes that defines convergence, defaults to 0.001
  • verbose: get more information
  • estimator: defaults to \ least squares

Return

Returns a BaselliModel from which physiological indices can be inferrede by postprocess()

Example

    model = getModel(1)
    result = predict(model, 100)
    modelEst = fitBaselli(result...)
source
CardioModels.postprocessFunction
postprocess(M::BaselliModel, S::Vector{<:Real}, I::Vector{<:Real})

Extract physiologically relevant indices from the Baselli model by means of post processing as defindes in:

Baselli et al. (1994) Model for the assessment of heart period and arterial pressure variability interactions and of respiration influences

Indices

  • α: Measure for baroreflex sensitivity
  • gSI: Mechanical effects and properties of the myocardium, Starling's law
  • gSS: Mechanical effects of blood pressure regulation (Windkessel)
  • GssLF: Index of the contribution of AP regulation to the genesis of LF oscillations
  • Θt/Θs: Respiratory effects
  • PusLF/PutLF: Residual signals and detection of different L F sources
source