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 (
cbadc.analog_system.AnalogSystem) – the analog systemdigital_control (
cbadc.digital_control.DigitalControl) – the digital controlinput_signals ([
cbadc.analog_signal.AnalogSignal]) – a python list of analog signals (or a derived class)Ts (float, optional) – specify a sampling rate at which we want to evaluate the systems , defaults to
digitalControl.Ts. Note that this Ts must be smaller thandigitalControl.Ts.t_stop (float, optional) – determines a stop time, defaults to
math.inf
- analog_system
the analog system being simulated.
- digital_control
the digital control being simulated.
- 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 tomath.inf.- Type
float, optional
- initial_state_vector
initial state vector.
- Type
array_like, shape=(N), optional
See also
cbadc.analog_signal.AnalogSignal,cbadc.analog_system.AnalogSystem,cbadc.digital_control.DigitalControlExamples
>>> 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, ...)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,)