cbadc.simulator.StateSpaceSimulator

class cbadc.simulator.StateSpaceSimulator(analog_system: cbadc.analog_system.AnalogSystem, digital_control: cbadc.digital_control.DigitalControl, input_signal: List[Union[cbadc.analog_signal.AnalogSignal, cbadc.analog_signal.ConstantSignal, cbadc.analog_signal.Sinusodial]], Ts: Optional[float] = None, t_stop: float = inf, atol: float = 1e-12, rtol: float = 1e-12, max_step: float = inf, initial_state_vector=None)

Bases: Iterator[numpy.ndarray]

Simulate the analog system and digital control interactions in the presence on analog signals.

Parameters
analog_system

the analog system being simulated.

Type

cbadc.analog_system.AnalogSystem

digital_control

the digital control being simulated.

Type

cbadc.digital_control.DigitalControl

t

current time of simulator.

Type

float

Ts

sample rate of simulation.

Type

float

t_stop

end time at which the generator raises StopIteration.

Type

float

rtol, atol

Relative and absolute tolerances. The solver keeps the local error estimates less than atol + rtol * abs(y). Effects the underlying solver as described in scipy.integrate.solve_ivp(). Default to 1e-3 for rtol and 1e-6 for atol.

Type

float, optional

max_step

Maximum allowed step size. Default is np.inf, i.e., the step size is not bounded and determined solely by the solver. Effects the underlying solver as described in scipy.integrate.solve_ivp(). Defaults to math.inf.

Type

float, optional

initial_state_vector

initial state vector.

Type

array_like, shape=(N), optional

Examples

>>> from cbadc.simulator import StateSpaceSimulator
>>> from cbadc.analog_signal import Sinusodial
>>> from cbadc.analog_system import AnalogSystem
>>> from cbadc.digital_control import DigitalControl
>>> import numpy as np
>>> A = np.array([[0., 0], [6250., 0.]])
>>> B = np.array([[6250., 0]]).transpose()
>>> CT = np.array([[1, 0], [0, 1]])
>>> Gamma = np.array([[-6250, 0], [0, -6250]])
>>> Gamma_tildeT = CT
>>> analog_system = AnalogSystem(A, B, CT, Gamma, Gamma_tildeT)
>>> digital_control = DigitalControl(1e-6, 2)
>>> input_signal = Sinusodial(1.0, 250)
>>> simulator = StateSpaceSimulator(analog_system, digital_control, (input_signal,))
>>> _ = simulator.__next__()
>>> _ = simulator.__next__()
>>> print(np.array(simulator.__next__()))
[0 0]
Yields

array_like, shape=(M,), dtype=numpy.int8

:raises str : unknown:

Methods

__init__(analog_system, digital_control, ...)

state_vector()

return current analog system state vector \(\mathbf{x}(t)\) evaluated at time \(t\).

state_vector() numpy.ndarray

return current analog system state vector \(\mathbf{x}(t)\) evaluated at time \(t\).

Examples

>>> from cbadc.simulator import StateSpaceSimulator
>>> from cbadc.analog_signal import Sinusodial
>>> from cbadc.analog_system import AnalogSystem
>>> from cbadc.digital_control import DigitalControl
>>> import numpy as np
>>> A = np.array([[0., 0], [6250., 0.]])
>>> B = np.array([[6250., 0]]).transpose()
>>> CT = np.array([[1, 0], [0, 1]])
>>> Gamma = np.array([[-6250, 0], [0, -6250]])
>>> Gamma_tildeT = CT
>>> analog_system = AnalogSystem(A, B, CT, Gamma, Gamma_tildeT)
>>> digital_control = DigitalControl(1e-6, 2)
>>> input_signal = Sinusodial(1.0, 250)
>>> simulator = StateSpaceSimulator(analog_system, digital_control, (input_signal,))
>>> _ = simulator.__next__()
>>> _ = simulator.__next__()
>>> print(np.array(simulator.state_vector()))
[-0.00623036 -0.00626945]
Returns

returns the state vector \(\mathbf{x}(t)\)

Return type

array_like, shape=(N,)

Examples using cbadc.simulator.StateSpaceSimulator