Intermediate Examples
GUI Examples
Section titled “GUI Examples”Examples of intermediate complexity that demonstrate useful patterns while remaining relatively readable.
1) Two-field FM synthesis
Section titled “1) Two-field FM synthesis”Combines a carrier and modulator so the carrier phase becomes
giving a modulation index of controlled by the mixer.
local sim = require("libsimcore")local N = 512local dt = 0.001local ctx = sim.sim_create()
sim.sim_set_timestep(ctx, dt)sim.sim_set_visual_mode(ctx, "phase_portrait")
local carrier = sim.sim_add_field(ctx, {N}, { type = "complex_double", fill = {0, 0}})
local mod = sim.sim_add_field(ctx, {N}, { type = "complex_double", fill = {0, 0}})
sim.sim_add_stimulus_operator(ctx, carrier, { type = "stimulus_sine", amplitude = 0.2, wavenumber = 0.25, omega = 0.3, scale_by_dt = true})
sim.sim_add_stimulus_operator(ctx, mod, { type = "stimulus_sine", amplitude = 0.1, wavenumber = 0.5, omega = 0.05, scale_by_dt = false})
sim.sim_add_mixer_operator(ctx, carrier, mod, carrier, { mode = "fm", rhs_gain = 0.5, scale_by_dt = true})
local integrator = sim.sim_create_context_integrator(ctx, "rkf45", { initial_dt = dt, adaptive = false})
sim.sim_set_integrator(ctx, integrator)
return ctxExample output:

2) Dispersion Playground
Section titled “2) Dispersion Playground”Tune coefficient and order of a dispersion operator applied to a chirped stimulus.
local sim = require("libsimcore")local ctx = sim.sim_create()local dt = 0.0125local N = 512
sim.sim_set_timestep(ctx, dt)sim.sim_set_visual_mode(ctx, "waveform")
local field = sim.sim_add_field(ctx, {N}, { type = "complex_double", fill = {0, 0}})
sim.sim_add_stimulus_operator(ctx, field, { type = "stimulus_chirp", amplitude = 0.25, wavenumber = 0.07, omega = -0.27, phase = math.pi / 4, kdot = -0.096, wdot = 0.012, scale_by_dt = true})
sim.sim_add_dispersion_operator(ctx, field, { coefficient = 0.75, order = 1.05, spacing = 0.02})
local integrator = sim.sim_create_context_integrator(ctx, "rkf45", { initial_dt = dt})
sim.sim_set_integrator(ctx, integrator)
return ctx3) Phase modulation with feedback
Section titled “3) Phase modulation with feedback”Implements a phase modulation system with feedback, where the phase of field_2 is modulated by field_1,
which in turn is influenced by field_2’s previous state through a mixer operator with feedback parameters.
local sim = require("libsimcore")local N = 768local dt = 0.025
local ctx = sim.sim_create()
sim.sim_set_timestep(ctx, dt)sim.sim_set_visual_mode(ctx, "phase_portrait")
local field_1 = sim.sim_add_field(ctx, {N}, { type = "complex_double", fill = {0.0, 0.0}})
local field_2 = sim.sim_add_field(ctx, {N}, { type = "complex_double", fill = {0.0, 0.0}})
sim.sim_add_mixer_operator(ctx, field_2, field_1, field_1, { mode = "linear", lhs_gain = 0, rhs_gain = 0})
sim.sim_add_stimulus_operator(ctx, field_2, { type = "stimulus_sine", amplitude = 0.5, wavenumber = 1, omega = -0.43, spacing = 1, rotation = math.pi/2})
sim.sim_add_stimulus_operator(ctx, field_2, { type = "stimulus_spectral_lines", amplitude = 0.2, wavenumber = 1, omega = 0.01, phase = 4.8, spacing = 1, harmonic_power = 0.9, harmonic_count = 2})
sim.sim_add_stimulus_operator(ctx, field_1, { type = "stimulus_sine", amplitude = 1, wavenumber = 1, omega = -0.25, spacing = 0.18, rotation = 0})
sim.sim_add_mixer_operator(ctx, field_2, field_1, field_1, { mode = "pm", lhs_gain = 1.0, rhs_gain = 1.0, feedback_decay = 1.0, feedback_strength = 1.8})
local integrator = sim.sim_create_context_integrator(ctx, "rkf45", { initial_dt = dt})
sim.sim_set_integrator(ctx, integrator)
return ctxExample output:
