Skip to main content

Documentation

A comprehensive guide to the LAMBDA: Data Pipeline, System Configuration, and Usage.

Data Collection Pipeline

LAMBDA utilizes a sophisticated Sim-to-Real pipeline. We leverage Unreal Engine 5 for photorealistic visuals and AirSim for sensor extraction, while combining Sionna's ray tracing with CADFEKO's electromagnetic simulations.

System Configuration

We simulate a multi-sensor UAV platform equipped with visual, laser, and radio-frequency sensors.

RGB & Depth Cameras are physically aligned to provide pixel-level correspondence via AirSim.

  • Resolution: 1920 × 1080
  • FOV: 110°
  • Frame Rate: 100 Hz

File Structure

The dataset follows a structured hierarchy organized by Scenario, Weather, and Trajectory.

Dataset_Root/
├── San Francisco (Urban)/ # Scenario Name
│ ├── Scene 1/ # Sub-scene ID
│ │ ├── sunny/ # Weather Condition
│ │ │ ├── 1_uav_z_trace_1/ # [Num_UAVs]_[Trace_Type]_[Trace_ID]
│ │ │ │ ├── multipath/
│ │ │ │ │ └── f4p9GHz_V/ # Carrier Freq & Polarization
│ │ │ │ │ └── ... (.npz files)
│ │ │ │ ├── lidar/ # .pcd files
│ │ │ │ ├── rgb/ # .png files
│ │ │ │ ├── depth/ # .npz files
│ │ │ │ ├── imu/ # .json files
│ │ │ │ └── poses/ # .json/.npz files
│ │ │ ├── 1_uav_z_trace_2/
│ │ │ └── ...
│ │ ├── rainy/
│ │ └── ...
│ ├── Scene 2/
│ └── ...
├── San Francisco Style City (Suburban)/
├── SJTU IEEE/
└── ...

Usage

Coordinate System

The LAMBDA dataset strictly follows Sionna's Right-Handed Coordinate System to align with mathematical intuition in wireless communications.

  • X: Forward
  • Y: Left
  • Z: Up

Loading CSI Data (Python)

import numpy as np

# Load the compressed CSI file
data = np.load("path/to/csi_sample.npz")

# 1. Access Multipath Components
a_real = data['a_real']
a_imag = data['a_imag']
delays = data['tau']
doppler = data['doppler']

# 2. Reconstruct Complex Gain
complex_gain = a_real + 1j * a_imag

# 3. Access Angles (AoD / AoA)
theta_t, phi_t = data['theta_t'], data['phi_t']
theta_r, phi_r = data['theta_r'], data['phi_r']

print(f"Detected {len(delays)} paths.")
print(f"Max Doppler Shift: {np.max(np.abs(doppler)):.2f} Hz")