SionnaRT Channel¶
The SionnaRTChannel
is an adapter for Sionna Ray Tracing module.
It is deterministic, defined by the given sionna.rt.Scene. Meaning, given same devices and positions, different channel samples (SionnaRTChannelSample
) and realizations (SionnaRTChannelRealization<hermespy.channel.sionna_rt_channel.SionnaRTChannelRealization>`
) would not introduce any random changes and would produce equal state and propagation results.
This channel model requires sionna.rt.Scene to operate. It should be loaded with sionna.rt.load_scene and provided to the SionnaRTChannel
__init__ method.
Current assumptions in the adapter implementation are:
All the transmitting and receiving antennas utilize isometric pattern (“iso”) and a single vertical polarization (“V”).
The antenna arrays are synthetic.
The delays are not normalized.
If not a single ray hit was cought, then a zeroed signal or state are returned.
It should be noted that sionna.rt.Scene is a singleton class. So when a new scene is loaded, a conflict with the previous existing instance will occure. Thus usage of several scenes at once must be avoided.
classDiagram direction LR class SionnaRTChannel { _realize() : SionnaRTChannelRealization } class SionnaRTChannelRealization { _sample() : SionnaRTChannelSample } class SionnaRTChannelSample { propagate(Signal) : Signal } SionnaRTChannel --o SionnaRTChannelRealization : realize() SionnaRTChannelRealization --o SionnaRTChannelSample : sample() click SionnaRTChannel href "#hermespy.channel.sionna_rt_channel.SionnaRTChannel" click SionnaRTChannelRealization href "#hermespy.channel.sionna_rt_channel.SionnaRTChannelRealization" click SionnaRTChannelSample href "#hermespy.channel.sionna_rt_channel.SionnaRTChannelSample"
The following minimal example outlines how to configure the channel model
within the context of a Simulation
:
1# Initialize two devices to be linked by a channel
2simulation = Simulation()
3alpha_device = simulation.new_device(
4 carrier_frequency=24e9, pose=Transformation.From_Translation(np.array([8.5, 21., 27.])))
5beta_device = simulation.new_device(
6 carrier_frequency=24e9, pose=Transformation.From_Translation(np.array([45., 90., 1.5])))
7
8# Load the desired scene
9scene = rt.load_scene(rt.scene.munich)
10
11# Create a channel between the two devices
12channel = SionnaRTChannel(scene=scene, gain=1., seed=42)
13simulation.set_channel(alpha_device, beta_device, channel)
14
15# Configure communication link between the two devices
16link = SimplexLink()
17alpha_device.transmitters.add(link)
18beta_device.receivers.add(link)
19
20# Specify the waveform and postprocessing to be used by the link
21link.waveform = RRCWaveform(
22 symbol_rate=1e8, oversampling_factor=2, num_data_symbols=1000,
23 num_preamble_symbols=10, pilot_rate=10)
24link.waveform.channel_estimation = SCLeastSquaresChannelEstimation()
25link.waveform.channel_equalization = SCZeroForcingChannelEqualization()