Sionna RT 시작하기: Import와 Scene 로딩
여기에서는 Sionna RT에서 제공하는 Tutorial을 직접 WSL2 환경에 세팅해서 돌려보고, 그 과정을 해석해본다.
Tutorial 링크 : https://nvlabs.github.io/sionna/rt/tutorials/Introduction.html
Introduction to Sionna RT — Sionna 1.2.1 documentation
Ray tracing is a technique to simulate environment-specific and physically accurate channel realizations for a given scene and user position. Please see the EM Primer for further details on the theoretical background of ray tracing of wireless channels. Si
nvlabs.github.io
라이브러리 Import
import sionna.rt
%matplotlib inline
import matplotlib.pyplot as plt
import numpy as np
no_preview = False # Toggle to True to not use the preview widget
# Import relevant components from Sionna RT
from sionna.rt import load_scene, PlanarArray, Transmitter, Receiver, Camera,\
PathSolver, RadioMapSolver, subcarrier_frequencies
Sionna RT 주요 컴포넌트 Import는 다음과 같다.
- load_scene : 3D 환경(Scene) 로딩
- PlanarArray : 안테나 배열 정의
- Transmitter, Receiver : 송수신기 배치
- Camera : 시각화 카메라 설정
- PathSolver : 전파 경로 계산
- RadioMapSolver : 공간 기반 신호 세기 계산
- subcarrier_frequencies : OFDM 서브캐리어 주파수 생성
Scene 로딩
scene = load_scene(sionna.rt.scene.munich)
여기서는 Sionna RT에 내장된 Munich Frauenkirche 주변 3D 도시 환경을 로딩한다.
우리가 직접 생성한 Mitsuba XML 파일도 로딩할 수 있지만, 기본 제공 Scene을 활용하면 빠르게 실험을 시작할 수 있다.
3D Preview 기능
preview()는 Jupyter Notebook 환경에서만 동작하는 인터랙티브 3D 뷰어를 실행한다.
if not no_preview:
scene.preview();

마우스 조작 방식은 다음과 같다.
- 왼쪽 버튼: 회전
- 휠: 확대/축소
- 오른쪽 버튼: 이동
Preview 카메라 활용
Preview에서 설정한 시점을 기반으로 고품질 이미지를 렌더링할 수도 있다.
즉, 인터랙티브 탐색 → 최종 이미지 렌더링이라는 흐름으로 작업하게 된다.
if not no_preview:
scene.preview();

그 외에도 카메라 시점, 렌더링 해상도 등을 설정하고, 생성된 이미지를 png 파일로 저장할 수 있다.

SceneObject 이해하기: 환경을 직접 조작하는 방법
Sionna RT에서 Scene은 단순한 배경이 아니라, 물리적으로 상호작용하는 객체들의 집합이다.
각 건물, 바닥, 벽, 구조물은 모두 SceneObject로 구성되어 있으며, 이 객체들을 직접 조작할 수 있다는 점이 매우 중요하다.
이제 Munich 환경 대신 6개의 건물로 이뤄진 간단한 환경에서 테스트를 진행한다.

scene = load_scene(sionna.rt.scene.simple_street_canyon, merge_shapes=False)
scene.objects
Scene을 Load한 후 objects의 요소를 출력하면 Scene을 구성하는 Object 목록을 확인할 수 있다.
출력 결과는 다음과 같이 Scene을 구성하는 객체 목록을 보여준다.

위치, 회전, 크기 조정
SceneObject는 다음과 같은 기하학적 속성을 가진다.
- position (위치)
- orientation (회전)
- scaling (크기)
- look_at (특정 방향을 바라보게 설정)
특정 객체에 접근하려면 다음과 같이 사용한다.
아래에선는 floor Object의 물리적 속성을 확인할 수 있다.
floor = scene.get("floor")
print("Position (x,y,z) [m]: ", floor.position)
print("Orientation (alpha, beta, gamma) [rad]: ", floor.orientation)
print("Scaling: ", floor.scaling)
>>>
Position (x,y,z) [m]: [[-0.769669, 0.238537, -0.0307941]]
Orientation (alpha, beta, gamma) [rad]: [[0, 0, 0]]
Scaling: [[1, 1, 1]]
만약 건물의 위치를 변경하려면 다음과 같이 설정할 수 있다.
floor.position = [0, 0, 0]
이러한 공간적 변형은 전파 경로 구조에 직접적인 영향을 준다.
특히 mmWave 환경에서는 작은 위치 변화도 경로 수와 반사 각도에 큰 영향을 미친다.
Velocity와 Doppler 효과
이 부분이 가장 디테일하다고 느끼는 부분인데,모든 SceneObject는 velocity 벡터를 가진다.
print("Velocity (x,y,z) [m/s]: ", floor.velocity)
>>>
Velocity (x,y,z) [m/s]: [[0, 0, 0]]
이 값은 Ray Tracing 과정에서 각 경로의 Doppler shift 계산에 사용된다.
즉, 이동하는 객체가 있으면 시간에 따라 채널이 변하는 페이딩 현상을 시뮬레이션할 수 있다.
위와 같이 바닥이 움직이는 상황은 현실적이지 않지만,
차량이나 드론 객체에 velocity를 부여하면 다음과 같이 모든 Propagation path에 대한 도플로 효과를 계산할 수 있다.
scene.get("tx").velocity = [10, 0, 0]
이 경우 송신기가 x축 방향으로 10 m/s로 이동하는 상황을 모델링하게 된다.
RadioMaterial: 전파와의 상호작용 정의
SceneObject의 가장 중요한 속성 중 하나는 radio_material이다.
floor.radio_material

이 파라미터들은 다음을 의미한다.
- eta_r: 상대 유전율
- sigma: 전도도
- thickness: 재료 두께
- scattering_coefficient: 산란 계수
- xpd_coefficient: 편파 분리 관련 계수
이 값들은 반사 손실, 투과 감쇠, 위상 변화에 직접적인 영향을 준다.
주파수 의존성
고주파 대역에서는 재료 특성이 주파수에 따라 달라진다. Sionna RT는 이를 자동으로 반영한다.
scene.frequency = 28e9 # 28 GHz
floor.radio_material
예를 들어 conductivity(sigma)가 자동으로 변경되는 것을 확인할 수 있다.

sigma=0.626
// sigma=0.123이었음
전파 경로 계산하기: PathSolver로 실제 무선 채널 만들기



Scene을 구성했다면 이제 실제로 전파가 어떻게 이동하는지를 계산해야 한다.
이 단계가 바로 Ray Tracing의 핵심이며, 물리 기반 무선 채널 모델링 부분이라고 할 수 있다.
Sionna RT에서는 이 과정을 PathSolver라는 함수가 담당한다.
다시 Munich의 Scene을 불러온다.
scene = load_scene(sionna.rt.scene.munich, merge_shapes=True)
송수신기와 안테나 배열 설정
Scene을 불러온 다음 단계는 송신기(TX)와 수신기(RX)에 사용할 안테나 배열을 정의하는 것이다.
Sionna RT에서는 배열 객체를 먼저 만들고, 이를 씬에 속한 모든 송신기와 수신기에 공통으로 적용한다.
여기서는 다음과 같이 설정하였다.
// 송신 안테나 배열 설정
scene.tx_array = PlanarArray(
num_rows=4,
num_cols=4,
vertical_spacing=0.5,
horizontal_spacing=0.5,
pattern="tr38901",
polarization="V"
)
// 수신 안테나 배열 설정
scene.rx_array = PlanarArray(
num_rows=1,
num_cols=1,
vertical_spacing=0.5,
horizontal_spacing=0.5,
pattern="dipole",
polarization="cross"
)
여기서 설정한 요소들은 다음 의미를 가진다.
- TX Array
- num_rows, num_cols (배열 구조): 1×1 Planar Array
- spacing (안테나 간 간격): 수직/수평 간격 0.5
- pattern (방사 패턴): 3GPP TR 38.901 패턴 사용
- polarization (단일/이중 편파 설정): 수직 편파("V")
- RX Array
- 1×1 단일 안테나
- dipole 패턴
- cross polarization
모든 송신기는 이 배열 구조를 공유한다.
위와 같은 설정은 mmWave 또는 6G 환경에서의 빔포밍 실험을 위한 전형적인 구조이다.
4×4 배열은 지향성 전파를 생성하며, RX는 단일 안테나로 수신 성능을 관찰한다.
송수신기 배치
tx = Transmitter(name="tx",
position=[8.5,21,27],
display_radius=2)
scene.add(tx)
rx = Receiver(name="rx",
position=[45,90,1.5],
display_radius=2)
scene.add(rx)
tx.look_at(rx)
- position은 3D 공간 내 좌표
- look_at은 송신기 빔 방향을 수신기로 정렬
이 설정에 따라 LoS 여부, 반사 각도, 경로 수가 달라진다.
PathSolver로 전파 경로 계산
이제 PathSolver를 생성한다.
p_solver = PathSolver()
다음과 같이 실행한다.
paths = p_solver(
scene=scene,
max_depth=5,
los=True,
specular_reflection=True,
diffuse_reflection=False,
refraction=True,
synthetic_array=False,
seed=41
)
이때 주요 파라미터는 다음과 같다.
- max_depth → 한 경로가 최대 몇 번 물체와 상호작용할 수 있는가
(0이면 LoS만 계산, 1이면 1차 반사 포함, 5이면 다중 반사까지 고려) - los → 직선 경로 포함 여부
- specular_reflection → 거울 반사 포함 여부
- diffuse_reflection → 난반사 포함 여부 (랜덤성 증가)
이때, diffuse reflection은 랜덤 샘플링을 사용하므로 seed를 설정하지 않으면 실행마다 결과가 달라질 수 있다. - refraction → 굴절 포함 여부
- synthetic_array
False: 모든 안테나 쌍에 대해 실제 경로 계산 (정확하지만 계산량 증가)
True: 배열 중심 기준 계산 후 위상 보정 적용 (빠르지만 근사 모델) - seed → 난수 기반 경로 탐색의 재현성 확보
계산된 경로 결과 시각화
scene.preview(paths=paths, clip_at=20);

이 코드는 계산된 전파 경로를 3D 환경 위에 시각화하며 clip_at = 20은 20m 이후 경로는 표시하지 않는 옵션이다.
이 시각화를 통해 다음을 직관적으로 확인할 수 있다.
- LoS 존재 여부
- 주요 반사 경로
- 다중 경로 구조
- NLoS 환경에서의 전파 메커니즘
Paths 객체의 의미
PathSolver의 결과인 paths 객체에는 다음 정보가 포함된다.
- 각 경로의 복소 계수
- 지연 시간
- 편파 정보
- Doppler shift
- 반사 횟수
이 정보는 이후 다음 계산의 기반이 된다.
- CIR (Channel Impulse Response)
- CFR (Channel Frequency Response)
- 시간 변화 채널 모델
- Mobility 시뮬레이션
즉, PathSolver는 물리적 경로를 계산하고, 이후 모든 통신 시뮬레이션은 이 물리 모델 위에서 이루어진다.
'Tool 활용법 > Sionna 활용법' 카테고리의 다른 글
| Sionna RAN 플랫폼 제어 파라미터 총정리 (RT, PHY, SYS, RK) (0) | 2026.06.04 |
|---|---|
| Blender 기반 도시 모델에서 물리 채널 생성하기 (CIR, CFR, Radio Map) (0) | 2026.02.11 |
| Sionna RT 설치하고 Blender 도시 Scene 연동하기 (8) | 2026.02.11 |
| Blender의 도시 Scene에 Radio Material 할당하기 (0) | 2026.02.10 |
| Blender와 OpenStreetMap을 이용한 도시 Scene 생성 (0) | 2026.02.10 |