-
Hi everyone, I'm currently trying to simulate an 8x8 planar array using synthetic_array=False, since I need to capture the element-wise physical behavior of the channel. However, when I do this directly, my GPU quickly runs out of memory (out-of-GPU-memory error). To mitigate this, I tried computing the full channel matrix in smaller chunks (e.g., 3x3 windows of TX elements), and then combining the results manually. The idea is to only simulate and store parts of the full array at a time. I’ve also tried filtering out the border elements and only keeping values from TX elements that are fully surrounded, to reduce inconsistencies at the edges of each chunk. However, I haven’t been able to get this to work correctly — the resulting combined channel doesn’t match the full 8x8 output, and I suspect something is going wrong either in the batching logic or in how phase alignment is handled across the chunks. From what I can tell, there’s no official support in Sionna yet for computing non-synthetic arrays in batches. Has anyone found a clean or efficient way to do this? I’d really appreciate any insights or examples from people who’ve worked around this GPU limitation. Thanks in advance! Best, |
Beta Was this translation helpful? Give feedback.
Replies: 1 comment 1 reply
-
Hi @oxelarnal, This should definitely work. The important part is to correctly set the antenna positions for the subarrays. Here is a minimal working example in a LOS setting: from sionna.rt import load_scene, PlanarArray, Transmitter, Receiver, PathSolver
scene = load_scene()
scene.tx_array = PlanarArray(num_rows=1,
num_cols=4,
vertical_spacing=0.5,
horizontal_spacing=0.5,
pattern="iso",
polarization="V")
scene.rx_array = PlanarArray(num_rows=1,
num_cols=1,
vertical_spacing=0.5,
horizontal_spacing=0.5,
pattern="iso",
polarization="V")
tx = Transmitter(name="tx", position=[0, 0, 0])
scene.add(tx)
rx = Receiver(name="rx", position=[30, 0, 0])
scene.add(rx)
p_solver = PathSolver()
paths = p_solver(scene=scene,
max_depth=1,
synthetic_array=False)
a, tau = [el.squeeze() for el in paths.cir(out_type="numpy")]
print("--------------------------------")
print("Full array:")
print("tau: ", tau)
print("a:", a)
pos = scene.tx_array.normalized_positions.numpy()
scene.tx_array.normalized_positions = pos[:,:2]
paths = p_solver(scene=scene,
max_depth=1,
synthetic_array=False)
a, tau = [el.squeeze() for el in paths.cir(out_type="numpy")]
print("--------------------------------")
print("1st half of array:")
print("tau: ", tau)
print("a:", a)
scene.tx_array.normalized_positions = pos[:,2:]
paths = p_solver(scene=scene,
max_depth=1,
synthetic_array=False)
a, tau = [el.squeeze() for el in paths.cir(out_type="numpy")]
print("--------------------------------")
print("2nd half of array:")
print("tau: ", tau)
print("a:", a)
|
Beta Was this translation helpful? Give feedback.
Hi @oxelarnal,
This should definitely work. The important part is to correctly set the antenna positions for the subarrays. Here is a minimal working example in a LOS setting: