ISAC-Sim

Models Module Guide

Core physical models and algorithms for ISAC simulation

This guide details how to use the Symbion library's Models module (symbion/models), which provides various physical models required for communication, sensing, and robotic system simulations.

Table of Contents

1. Module Overview

1.1 Role of Models Module

The Models module is the physical model layer of Symbion, providing:

  • Wireless Communication Models: Channel, modulation, coding, beamforming
  • Robotics Models: Dynamics, control, UAV simulation
  • Planning Algorithms: Path planning, trajectory optimization
  • Sensing Models: Radar, LiDAR simulation
  • Numerical Methods: Mathematical operations, optimization algorithms

1.3 Import Method

// Method 1: Import entire models module
import { models } from 'symbion';

// Method 2: Import specific submodules directly
import { channel, beamforming, planning } from 'symbion/models';

2. Channel - Channel Models

The Channel module provides implementations of various wireless channel models.

AWGN - Additive White Gaussian Noise

import { models } from 'symbion';

// Shannon Capacity
const capacity = models.channel.shannonCapacity(10, e6); // 10dB SNR, 20MHz
console.log(`Capacity: ${(capacity / 1e6).toFixed(2)} Mbps`);

// Add Noise
const noisySignal = models.channel.addNoise([1, -1, 1], 10);

Fading Channels

import { models } from 'symbion';

// Rayleigh Fading (NLOS)
const h = models.channel.rayleighFading();

// Rician Fading (LOS)
const hLos = models.channel.ricianFading({ kFactor: 10 }); // K=10dB

// Doppler Shift
const doppler = models.channel.maxDopplerShift(30, 3.e9); // 30m/s, 3.5GHz
const Tc = models.channel.coherenceTime(doppler);

MIMO Channels

// Generate 4x2 MIMO Channel
const H = models.channel.generateMIMOChannel(4, 2, 'rayleigh');

// Capacity
const capacity = models.channel.calculateMIMOCapacity(H, 10);

3. Beamforming - Beamforming

Antenna Arrays & MIMO

import { models } from 'symbion';

const config = { numAntennas: 8, spacing: 0.5, steeringAngle: 0 };

// Array Factor
const af = models.beamforming.arrayFactor(Math.PI  6, config);

// MIMO Beamforming (MRT)
const H = models.beamforming.generateChannelMatrix(4, 2);
const sinr = models.beamforming.mrtSinr(H, 1);

4. PHY - Physical Layer

Modulation & Coding

// QAM Modulation
const symbols = models.phy.modulation.qamModulate([0, 1, 1, 0], 16);

// OFDM
const ofdmSignal = models.phy.modulation.ofdmModulate(symbols, {
  numSubcarriers: 64, cpLength: 16
});

// Channel Coding (CRC)
const crc = models.phy.coding.crcCalculate([1, 0, 1], [1, 0, 1, 1]);

5. Robotics - Dynamics & Control

Quadrotor Dynamics

const quad = new models.robotics.dynamics.QuadrotorDynamics({ mass: 1.5 });

const derivative = quad.derivative(state, {
  thrust: 15,
  torque: [0, 0.1, 0]
});

6. Planning - Path Planning

Trajectory Optimization (MINCO)

const waypoints = [
  { position: [0, 0, 0], time: 0 },
  { position: [10, 5, 2], time: 2 }
];

const traj = models.planning.generateMinimumSnapTrajectory(waypoints, {
  maxVelocity: 5,
  maxAcceleration: 3
});

// Evaluate at t=1s
const state = traj.evaluate(1.0);

7. Sensing - LiDAR & Environment

LiDAR Simulation

const scan = models.sensing.simulateLiDAR(
  robotPose, 
  obstacles, 
  { numRays: 360, maxRange: 10 }
);

8. Numeric - Utilities

const { vec3, mat3 } = models.numeric.math;

const v = vec3.add([1, 2, 3], [4, 5, 6]);
const d = mat3.determinant(M);