cbadc.analog_system.LeapFrog

class cbadc.analog_system.LeapFrog(beta: numpy.ndarray, rho: numpy.ndarray, kappa: numpy.ndarray)

Bases: cbadc.analog_system.AnalogSystem

Represents an leap-frog analog system.

This class inherits from cbadc.analog_system.AnalogSystem and creates a convenient way of creating leap-frog A/D analog systems. For more information about leap-frog ADCs see # page=126/>`_. `Leap Frog ADC <https://www.research-collection.ethz.ch/bitstream/handle/20.500.11850/469192/control-bounded_converters_a_dissertation_by_hampus_malmberg.pdf?sequence=1&isAllowed=y

A leap-frog analog system is goverened by the differential equations,

\(\dot{\mathbf{x}}(t) = \mathbf{A} \mathbf{x}(t) + \mathbf{B} \mathbf{u}(t) + \mathbf{\Gamma} \mathbf{s}(t)\)

\(\mathbf{y}(t) = \mathbf{C}^\mathsf{T} \mathbf{x}(t)\)

\(\tilde{\mathbf{s}}(t) = \tilde{\mathbf{\Gamma}}^\mathsf{T} \mathbf{x}(t)\)

where

\(\mathbf{A} = \begin{pmatrix} \rho_1 & \rho_2 \\ \beta_2 & 0 & \rho_3 \\ & \ddots & \ddots & \ddots \\ & & \beta_N & 0 & \rho_{N+1} \end{pmatrix}\)

\(\mathbf{B} = \begin{pmatrix} \beta_1 & 0 & \cdots & 0 \end{pmatrix}^\mathsf{T}\)

\(\mathbf{C}^\mathsf{T} = \mathbf{I}_N\)

\(\mathbf{\Gamma} = \begin{pmatrix} \kappa_1 \\ & \ddots \\ & & \kappa_N \end{pmatrix}\)

\(\tilde{\mathbf{\Gamma}}^\mathsf{T} = \mathbf{I}_N\)

Parameters
  • beta (array_like, shape=(N,)) – vector with per integrator signal amplification \(\begin{pmatrix}\beta_1 & \cdots & \beta_N \end{pmatrix}\).

  • rho (array_like, shape=(N,)) – local feedback factor vector \(\begin{pmatrix}\rho_1 & \cdots & \rho_N \end{pmatrix}\).

  • kappa (array_like, shape=(N,)) – control gain vector \(\begin{pmatrix}\kappa_1 & \cdots & \kappa_N \end{pmatrix}\).

N

state space order \(N\).

Type

int

N_tilde

number of signal observations \(\tilde{N}\).

Type

int

M

number of digital control signals \(M\).

Type

int

M_tilde

number of control signal observations \(\tilde{M}\).

Type

int

L

number of input signals \(L\).

Type

int

A

system matrix \(\mathbf{A}\).

Type

array_like, shape=(N, N)

B

input matrix \(\mathbf{B}\).

Type

array_like, shape=(N, L)

CT

signal observation matrix \(\mathbf{C}^\mathsf{T}\).

Type

array_like, shape=(N_tilde, N)

Gamma

control input matrix \(\mathbf{\Gamma}\).

Type

array_like, shape=(N, M)

Gamma_tildeT

control observation matrix \(\tilde{\mathbf{\Gamma}}^\mathsf{T}\).

Type

array_like, shape=(M_tilde, N)

Example

>>> import numpy as np
>>> from cbadc.analog_system import LeapFrog
>>> beta = np.array([101, 102, 103])
>>> rho = np.array([-1, -2, -3])
>>> kappa = np.arange(100,109).reshape((3, 3))
>>> print(LeapFrog(beta, rho, kappa))
The analog system is parameterized as:
A =
[[ -1.  -2.   0.]
 [102.   0.  -3.]
 [  0. 103.   0.]],
B =
[[101.]
 [  0.]
 [  0.]],
CT =
[[1. 0. 0.]
 [0. 1. 0.]
 [0. 0. 1.]],
Gamma =
[[100. 101. 102.]
 [103. 104. 105.]
 [106. 107. 108.]],
and Gamma_tildeT =
[[-0.5603758  -0.57718708 -0.59399835]
 [-0.56054048 -0.5771902  -0.59383992]
 [-0.560702   -0.57719323 -0.59368447]]
Raises

InvalidAnalogSystemError – For faulty analog system parametrization.

Methods

__init__(beta, rho, kappa)

Create an leap-frog analog system.

control_observation(x)

Computes the control observation for a given state vector \(\mathbf{x}(t)\) evaluated at time \(t\).

control_signal_transfer_function_matrix(omega)

Evaluates the transfer functions between control signals and the system output.

derivative(x, t, u, s)

Compute the derivative of the analog system.

signal_observation(x)

Computes the signal observation for a given state vector \(\mathbf{x}(t)\) evaluated at time \(t\).

transfer_function_matrix(omega)

Evaluate the analog signal transfer function at the angular frequencies of the omega array.

zpk([input])

return zero-pole-gain representation of system

control_observation(x: numpy.ndarray) numpy.ndarray

Computes the control observation for a given state vector \(\mathbf{x}(t)\) evaluated at time \(t\).

Specifically, returns

\(\tilde{\mathbf{s}}(t) = \tilde{\mathbf{\Gamma}}^\mathsf{T} \mathbf{x}(t)\)

Parameters

x (array_like, shape=(N,)) – the state vector.

Returns

the control observation.

Return type

array_like, shape=(M_tilde,)

control_signal_transfer_function_matrix(omega: numpy.ndarray) numpy.ndarray

Evaluates the transfer functions between control signals and the system output.

Specifically, evaluates

\(\bar{\mathbf{G}}(\omega) = \mathbf{C}^\mathsf{T} \left(\mathbf{A} - i \omega \mathbf{I}_N\right)^{-1} \mathbf{\Gamma} \in \mathbb{R}^{\tilde{N} \times M}\)

for each angular frequency in omega where \(\mathbf{I}_N\) represents a square identity matrix of the same dimensions as \(\mathbf{A}\) and \(i=\sqrt{-1}\).

Parameters

omega (array_like, shape=(K,)) – an array_like object containing the angular frequencies for evaluation.

Returns

the signal transfer function evaluated at K different angular frequencies.

Return type

array_like, shape=(N_tilde, M, K)

derivative(x: numpy.ndarray, t: float, u: numpy.ndarray, s: numpy.ndarray) numpy.ndarray

Compute the derivative of the analog system.

Specifically, produces the state derivative

\(\dot{\mathbf{x}}(t) = \mathbf{A} \mathbf{x}(t) + \mathbf{B} \mathbf{u}(t) + \mathbf{\Gamma} \mathbf{s}(t)\)

as a function of the state vector \(\mathbf{x}(t)\), the given time \(t\), the input signal value \(\mathbf{u}(t)\), and the control contribution value \(\mathbf{s}(t)\).

Parameters
  • x (array_like, shape=(N,)) – the state vector evaluated at time t.

  • t (float) – the time t.

  • u (array_like, shape=(L,)) – the input signal vector evaluated at time t.

  • s (array_like, shape=(M,)) – the control contribution evaluated at time t.

Returns

the derivative \(\dot{\mathbf{x}}(t)\).

Return type

array_like, shape=(N,)

signal_observation(x: numpy.ndarray) numpy.ndarray

Computes the signal observation for a given state vector \(\mathbf{x}(t)\) evaluated at time \(t\).

Specifically, returns

\(\mathbf{y}(t)=\mathbf{C}^\mathsf{T} \mathbf{x}(t)\)

Parameters

x (array_like, shape=(N,)) – the state vector.

Returns

the signal observation.

Return type

array_like, shape=(N_tilde,)

transfer_function_matrix(omega: numpy.ndarray) numpy.ndarray

Evaluate the analog signal transfer function at the angular frequencies of the omega array.

Specifically, evaluates

\(\mathbf{G}(\omega) = \mathbf{C}^\mathsf{T} \left(\mathbf{A} - i \omega \mathbf{I}_N\right)^{-1} \mathbf{B} + \mathbf{D}\)

for each angular frequency in omega where \(\mathbf{I}_N\) represents a square identity matrix of the same dimensions as \(\mathbf{A}\) and \(i=\sqrt{-1}\).

Parameters

omega (array_like, shape=(K,)) – an array_like object containing the angular frequencies for evaluation.

Returns

the signal transfer function evaluated at K different angular frequencies.

Return type

array_like, shape=(N_tilde, L, K)

zpk(input=0)

return zero-pole-gain representation of system

Parameters
  • input – determine for which input (in case of L > 1) to compute zpk, defaults to 0.

  • int – determine for which input (in case of L > 1) to compute zpk, defaults to 0.

  • optional – determine for which input (in case of L > 1) to compute zpk, defaults to 0.

Returns

z,p,k the zeros, poles and gain of the system

Return type

array_like, shape=(?, ?, 1)