Skip to main content
. 2025 Nov 17;12(11):1257. doi: 10.3390/bioengineering12111257
Algorithm 1 Multimodal Affective-to-Symbolic Control (Closed Loop)
Inputs:
Physio P_t = {HRV_RMSSD, EDA_phasic, EDA_tonic, EEG_alpha_asym, EyeFix}
Behavior B_t = {head/hand kinematics, locomotion (approach–avoidance),
object/avatar interactions, (prosody: F0, rate, pauses) [optional]}
Parameters:
θ_vagal, θ_arousal        # safety thresholds
f_s = 5–10 Hz                # control-loop frequency
w_phys, w_beh              # fusion weights (safety-first priority)
Initialize:
scene_params ← neutral_safe_scene
avatar_params ← neutral_presence

while session_active:
# 1) Acquisition & preprocessing (edge)
P̂_t ← preprocess(P_t)         # filtering, artifact removal, z-scoring
B̂_t ← preprocess(B_t)         # smoothing, normalization

# 2) Affect proxies (physio & behavior)
p_affect ← g_phys(P̂_t)        # e.g., vagal withdrawal (HRV), arousal (EDA), avoidance (EyeFix)
b_affect ← g_beh(B̂_t)          # e.g., approach–avoidance, freezing, interaction tempo

# 3) Safety-first multimodal fusion
affect* ← fuse(p_affect, b_affect; weights = {w_phys, w_beh}, safety_priority = True)

# 4) Symbolic/environmental mapping
scene_params ← map_env(affect*)        # LightIntensity, SpaceDensity, Soundscape, TransitionalObjects

# 5) Relational/Avatar adaptation
avatar_params ← map_avatar(affect*)    # Proximity, Gaze, Turn-taking/Prosody

# 6) Render & log
render(scene_params, avatar_params)
log(t, P̂_t, B̂_t, p_affect, b_affect, affect*, scene_params, avatar_params)

# 7) Safety override
if (p_affect.arousal > θ_arousal) or (b_affect.avoidance_high) or user_panic_exit():
scene_params ← neutral_safe_scene
avatar_params ← calming_distance
render(scene_params, avatar_params)
continue
end while