Description
Hello! Thanks for your open-source Sionna which benefits our research. But I have some problems in obtaining channel matrix. I would like to use ray-tracing in a specific loaded scene to generate channel matrix. I had one Tx (ULA with 8 antennas) and one Rx (ULA with 4 antennas) in the scene. The overall process I did was
a, tau = paths.cir()
h_freq = cir_to_ofdm_channel(scene.frequency, a, tau, normalize=False)
# h_freq dimension: (1, 1, 4, 1, 8, 11, 1)
# h = paths.a[0,0,:,0,:,0,0]
h = h_freq[0,0,:,0,:,0,0]
However, when I delved into the channel model of h_freq, I was cofused that "where is the channel steering vector"? Normally, our research is based on the geometric model like this:
But I didn't know how to get the beta_l^k from ray-tracing results. I tried to reset Tx and Rx with only one antenna element and recovered the channel matrix based on the model in the figure. The abs value of channel h is shown below:
The code I used is shown below
import tensorflow as tf
import numpy as np
def steering_vector_ula(N, theta):
x = np.arange(0, N).reshape(-1, 1)
return 1 / np.sqrt(N) * np.exp(1j*np.pi*theta*x)
def reconstruct_H_ula(a_b, paths, n_ue, n_bs):
num_paths = a_b.shape[-2]
H = 0.
for i in range(num_paths):
a_ue = steering_vector_ula(n_ue, paths.phi_r[0,0,0,0,0,i].numpy())
a_bs = steering_vector_ula(n_bs, paths.phi_t[0,0,0,0,0,i].numpy())
H += a_b[0,0,0,0,0,i,0] * a_ue @ np.conjugate(a_bs).T
print(paths.phi_r[0,0,0,0,0,i]*180/np.pi,paths.phi_t[0,0,0,0,0,i]*180/np.pi)
return H
plt.figure(figsize=(4,4))
h = reconstruct_H_ula(a, paths, 4, 8)
sns.heatmap(abs(h))
plt.xlabel('BS side')
plt.ylabel('UE side')
So, I would like to learn how to extract parameters in the geometric channel model and obtain channel related parameters in Sionna. Thanks. I ensure that the position and orientation of two conditions were identical.