cir_to_time_channel#
- sionna.phy.channel.cir_to_time_channel(bandwidth: float, a: torch.Tensor, tau: torch.Tensor, l_min: int, l_max: int, normalize: bool = False) torch.Tensor[source]#
Compute the channel taps forming the discrete complex-baseband representation of the channel from the channel impulse response (
a,tau)This function assumes that a sinc filter is used for pulse shaping and receive filtering. Therefore, given a channel impulse response \((a_{m}(t), \tau_{m}), 0 \leq m \leq M-1\), the channel taps are computed as follows:
\[\bar{h}_{b, \ell} = \sum_{m=0}^{M-1} a_{m}\left(\frac{b}{W}\right) \text{sinc}\left( \ell - W\tau_{m} \right)\]for \(\ell\) ranging from
l_mintol_max, and where \(W\) is thebandwidth.- Parameters:
bandwidth (float) – Bandwidth [Hz]
a (torch.Tensor) – Path coefficients, shape [batch size, num_rx, num_rx_ant, num_tx, num_tx_ant, num_paths, num_time_steps]
tau (torch.Tensor) – Path delays [s], shape [batch size, num_rx, num_tx, num_paths] or [batch size, num_rx, num_rx_ant, num_tx, num_tx_ant, num_paths]
l_min (int) – Smallest time-lag for the discrete complex baseband channel (\(L_{\text{min}}\))
l_max (int) – Largest time-lag for the discrete complex baseband channel (\(L_{\text{max}}\))
normalize (bool) – If set to True, the channel is normalized over the block size to ensure unit average energy per time step
- Outputs:
hm – [batch size, num_rx, num_rx_ant, num_tx, num_tx_ant, num_time_steps, l_max - l_min + 1], torch.complex. Channel taps coefficients.
Examples
import torch from sionna.phy.channel import cir_to_time_channel # Create dummy CIR batch_size, num_paths, num_time_steps = 2, 4, 10 a = torch.randn(batch_size, 1, 1, 1, 1, num_paths, num_time_steps, dtype=torch.complex64) tau = torch.rand(batch_size, 1, 1, num_paths) * 1e-6 # Compute time channel h_t = cir_to_time_channel(20e6, a, tau, l_min=-6, l_max=20) print(h_t.shape) # torch.Size([2, 1, 1, 1, 1, 10, 27])