Skip to content

Generators

Complete catalog of 18 generator types for realistic industrial signal simulation — sine, noise, random walk, correlated, transport delay, and more.

Generators produce member values each tick. Miravo ships 18 generator types organized into three categories.

These produce values from their own configuration without requiring input from other members.

Sinusoidal oscillation with optional noise.

generator:
type: sine
center: 1750 # Supports $param.X
amplitude: 50
period: 3600
noise: 0.01

Formula: center + amplitude * sin(2 * pi * t / period) + N(0, noise * |center|)

Gaussian noise around a center value.

generator:
type: noise
center: 22.0 # Supports $param.X
stddev: 0.5

Formula: center + N(0, stddev)

Bounded random walk. Stateful — remembers position between ticks.

generator:
type: random-walk
min: 0
max: 100
step: 0.5

Cycles through a list of values at fixed intervals. Fully deterministic, no RNG.

generator:
type: step
values: [0, 25, 50, 75, 100]
interval: 60

Linear trajectory from a start value. Holds after duration.

generator:
type: ramp
start_value: 0
rate: 10
duration: 300

Ornstein-Uhlenbeck process. Bounded variance unlike random-walk.

generator:
type: mean-reverting-noise
mean: 50 # Supports $param.X
tau: 10
sigma: 2.0

Formula: value = mean + alpha * (prev - mean) + sigma * sqrt(1 - alpha^2) * N(0, 1) where alpha = exp(-dt / tau)

Piecewise interpolation over time-value waypoints. Supports linear and step interpolation.

generator:
type: timetable
repeat: true
interpolation: step
points:
- { time: 0, value: 0 }
- { time: 21600, value: 1200 }
- { time: 64800, value: 900 }
- { time: 86400, value: 0 }

Probabilistic state transitions. Stateful.

generator:
type: state-machine
initial: "idle"
transitions:
- from: idle
to: running
probability: 0.1
- from: running
to: idle
probability: 0.05
- from: running
to: faulted
on: fault

The on: "fault" trigger fires only when the instance has active faults.

These transform input from other members, parameters, or inline sub-generators.

All dynamic generators accept an input field:

input: { member: "speed_feedback" } # Read from an earlier member
input: { param: "rated_rpm" } # Read from a parameter
input: { generator: { type: noise, center: 50, stddev: 1 } } # Inline sub-generator

PT1 low-pass filter. Models thermal lag, sensor response.

generator:
type: first-order-lag
tau: 30
gain: 1.0 # Supports $param.X
bias: 0 # Supports $param.X
input: { member: "speed_feedback" }

Accumulator with clamp or wrap. Models runtime hours, tank levels, energy totals.

generator:
type: integrator
gain: 0.000278
bias_rate: 0
clamp: [0, 100000]
input: { member: "power_draw" }

Delays input by a configurable time. Ring buffer with interpolation.

generator:
type: transport-delay
delay: 15 # Supports $param.X
interpolation: linear
input: { member: "entry_signal" }

Limits rate of change with asymmetric up/down rates.

generator:
type: slew-rate-limiter
rate_up: 100
rate_down: 50
input: { member: "speed_command" }

Second-order dynamic response. Models underdamped overshoot or overdamped settling.

generator:
type: second-order
omega_n: 0.5
zeta: 0.3
gain: 1.0 # Supports $param.X
bias: 0 # Supports $param.X
input: { member: "load_setpoint" }

Two-threshold switching with dead band. String or numeric output.

generator:
type: hysteresis-relay
threshold_rising: 8.5 # Supports $param.X
threshold_falling: 7.5 # Supports $param.X
output_high: 1
output_low: 0
input: { member: "header_pressure" }

Linear combination of multiple inputs.

generator:
type: weighted-sum
bias: 0 # Supports $param.X
terms:
- input: { member: "inflow_rate" }
weight: 1.0 # Supports $param.X
- input: { member: "outflow_rate" }
weight: -1.0

Passes input through only when a Boolean member is true. Used for run/stop gating.

generator:
type: gate
enabled_member: running
disabled_value: 0
input: { member: "speed_command" }

Derives a value from another member with a linear transform.

generator:
type: correlated
source: speed_feedback
factor: 0.008 # Supports $param.X
offset: 2.0 # Supports $param.X
noise: 0.02

Formula: factor * source + offset + N(0, noise * |base|)

The source member must be declared earlier in the model’s members map.

Delegates to different sub-generators based on the current lifecycle stage.

generator:
type: health-dependent
stages:
healthy:
type: noise
center: 2.5
stddev: 0.3
degraded:
type: noise
center: 4.0
stddev: 0.8
critical:
type: noise
center: 7.0
stddev: 1.5

Many generator fields support $param.X references. These resolve to the instance’s parameter value at runtime:

parameters:
rated_rpm:
type: float
default: 1750
members:
speed:
kind: variable
data_type: Double
generator:
type: noise
center: "$param.rated_rpm"
stddev: 5

Supported fields: center (sine, noise), mean (mean-reverting-noise), factor/offset (correlated), gain/bias (first-order-lag, second-order), delay (transport-delay), thresholds (hysteresis-relay), bias/weight (weighted-sum).