Skip to content
Snippets Groups Projects
mmae_simulator.py 1.41 KiB
Newer Older
Tilboon Elberier's avatar
Tilboon Elberier committed
import numpy as np

from inputs import Input
from MMAE.mmae import MMAE
from System.system_simulator import SystemSimulator
from testbench_tools import simulation_configuration_setup
from testbench_tools import mmae_simulator_simulation_and_plot
Tilboon Elberier's avatar
Tilboon Elberier committed

class MMAESimulator:
    def __init__(self, λs, true_λ, dt, H, Q, R, x0, true_system_noisy, estimator_noisy, max_time, max_steps, amplitude):
Tilboon Elberier's avatar
Tilboon Elberier committed
        # Synthetic system simulator initialization
        self.TrueSystem = SystemSimulator(true_λ, dt, H, Q, R, x0, true_system_noisy)
Tilboon Elberier's avatar
Tilboon Elberier committed

        # Input initialization
        self.input_signal = Input(self.TrueSystem.model, max_time).step_function(max_steps, amplitude)

        # MMAE initialization
        self.MMAE = MMAE(λs, dt, H, Q, R, x0, estimator_noisy)
Tilboon Elberier's avatar
Tilboon Elberier committed


    def update(self, t: int) -> float:
        u = self.input_signal[t, :].reshape(-1, 1)
        _, z = self.TrueSystem.update(u)
        λ_hat, cumulative_posteriors, pdvs = self.MMAE.update(u, z)
Tilboon Elberier's avatar
Tilboon Elberier committed

Tilboon Elberier's avatar
Tilboon Elberier committed

if __name__ == "__main__":
    # Load configuration from JSON file
    λs, m, k, b, dt, H, Q, R, x0, max_time, max_steps, amplitude = simulation_configuration_setup()

    true_λ = [m, k, b]
Tilboon Elberier's avatar
Tilboon Elberier committed

    # MMAE simulator initialization
    MMAESimulator = MMAESimulator(λs, true_λ, dt, H, Q, R, x0, True, False, max_time, max_steps, amplitude)
Tilboon Elberier's avatar
Tilboon Elberier committed

    mmae_simulator_simulation_and_plot(MMAESimulator, λs, true_λ, max_steps, dt)