A Python library for generating realistic synthetic Muscle Sympathetic Nerve Activity (MSNA) signals with physiologically accurate timing, noise characteristics, and signal properties. This library also includes an interactive dashboard for real-time parameter exploration and exporting data.
Muscle Sympathetic Nerve Activity (MSNA) provides direct measurement of sympathetic outflow to skeletal muscle vasculature, offering insights into cardiovascular neural control mechanisms. This library generates realistic synthetic MSNA signals that closely replicate those obtained through microneurography recordings.
The simulator incorporates:
- Physiologically accurate cardiac synchronization with heart rate variability
- Respiratory modulation of sympathetic activity
- Realistic burst morphology with variable timing and amplitude
- Comprehensive multi-frequency noise modeling based on real clinical recordings
- Interactive dashboard for parameter exploration and data export
msna-sim is designed for algorithm development, method validation, education, and clinical research applications where realistic synthetic MSNA data is needed.
Install from PyPI:
pip install msna-simRequirements will be automatically installed, but can be found in requirements.txt.
Launch the interactive dashboard for real-time parameter exploration:
msna-sim-dashboardThe dashboard allows you to play with various simulation parmaeters, and export data as CSV. It could be used as the main way to interact with this library for users with minimal programming experience.
from msna_sim import quick_simulation
# Generate a 60-second recording with default settings
results = quick_simulation(duration = 60, preset = "normal_adult")
# Access the signals
time = results.time
clean_msna = results.clean_msna # Clean MSNA signal
noisy_msna = results.noisy_msna # Realistic noisy signal
burst_times = results.burst_peak_idx # Burst occurrence times
print(f"Generated {results.n_bursts} bursts")
print(f"Burst incidence: {results.burst_incidence:.1f}%")from msna_sim import Simulation, create_preset_config
# Available presets include physiological and pathological conditions
presets = [
"normal_adult", "young_healthy", "athlete", "elderly_healthy",
"hypertensive", "heart_failure", "bradycardia", "tachycardia",
"diabetes", "obesity", "sleep_apnea", "copd", "anxiety",
"post_exercise", "pristine_lab", "noisy_clinical"
]
# Create simulation with hypertensive patient preset
config = create_preset_config("hypertensive")
simulation = Simulation(config)
results = simulation.simulate(duration = 120, sampling_rate = 1000)
print(f"Heart rate: {results.mean_heart_rate:.1f} bpm")
print(f"Burst incidence: {results.burst_incidence:.1f}%")from msna_sim import Simulation, PatientConfig, SignalConfig
# Create custom patient configuration
patient_config = PatientConfig(
heart_rate = 75.0, # beats per minute
hrv_std = 0.04, # heart rate variability
burst_incidence = 65.0, # percentage of cardiac cycles with bursts
noise_floor = 0.25, # baseline noise level
signal_amplitude = 1.2, # relative burst amplitude
resp_rate = 16.0, # breaths per minute
resp_modulation_strength = 0.4 # respiratory modulation strength
)
# Optional: customize signal processing parameters
signal_config = SignalConfig(
integration_smoothing = 0.95, # signal integration smoothing
pink_noise_amplitude = 0.4, # pink noise contribution
spike_artifact_amplitude = 0.3 # spike artifact strength
)
simulation = Simulation(patient_config, signal_config)
results = simulation.simulate(duration = 180, sampling_rate = 1000, seed = 42)# Launch dashboard
msna-sim-dashboardFor technical details, refer to the SPECS.md file.
Simulation: Main simulation classPatientConfig: Physiological parameter configurationSignalConfig: Signal processing parameter configurationSimulationResults: Container for simulation outputs
quick_simulation(): Convenience function for simple simulationscreate_preset_config(): Load predefined patient configurations
The SimulationResults object provides:
time: Time array in secondsclean_msna: Clean MSNA signal without noisenoisy_msna: Realistic MSNA signal with noiserespiratory_signal: Respiratory waveformburst_peak_idx: Array of burst occurrence timesn_bursts: Total number of burstsburst_incidence: Realized burst incidence percentage
This project is licensed under the MIT License - see the LICENSE file for details.
If you use this library in your research, please cite:
@software{msna_sim,
author = {Ryan Peters},
title = {msna-sim: Realistic MSNA Signal Simulation},
url = {https://github.com/ryanirl/msna-sim},
version = {0.1.2},
year = {2025}
}