time_to_doppler_channel#
- sionna.phy.channel.time_to_doppler_channel(h_t: torch.Tensor) torch.Tensor[source]#
Compute the delay-Doppler channel from a uniformly sampled time-delay channel
Given channel taps \(\bar{h}_{b,\ell}\), the delay-Doppler channel is computed as
\[\tilde{h}_{q,\ell} = \frac{1}{S}\sum_{b=0}^{S-1}\bar{h}_{b,\ell} e^{-j\frac{2\pi bq}{S}},\]where \(S\) is
num_time_steps, \(b\) is the time-step index, \(q\) is the Doppler-bin index, and \(\ell\) is the time-lag index.- Parameters:
h_t (torch.Tensor) – Uniformly sampled time-delay channel, shape […, num_time_steps, num_time_lags]
- Outputs:
h_dd – […, num_doppler_bins, num_time_lags], torch.complex. Delay-Doppler channel with centered Doppler-bin ordering, where
num_doppler_bins = num_time_steps.
Notes
The zero-Doppler bin is shifted to the center of the Doppler dimension. The output stores the bin for Doppler index \(q\), ranging from \(-\lfloor S/2\rfloor\) to \(S-\lfloor S/2\rfloor-1\), at index \(q+\lfloor S/2\rfloor\). A positive Doppler shift, i.e., a path coefficient varying as \(e^{j2\pi\nu t}\) with \(\nu>0\), appears at a positive Doppler index.
Due to the \(1/S\) normalization, a tap with a Doppler shift on the frequency grid appears in a single bin equal to its coefficient, and the channel energy is preserved, \(\sum_{q}|\tilde{h}_{q,\ell}|^2 = \frac{1}{S}\sum_{b=0}^{S-1}|\bar{h}_{b,\ell}|^2\), i.e., the energy summed over the Doppler bins equals the energy averaged over the time steps.
This function does not compute physical Doppler frequencies. The frequency of each output bin is obtained from
time_frequency_vector(), called with the time spacing between consecutive channel observations, whose frequency vector uses the same centered ordering.See also
ofdm_to_time_channel()andofdm_to_delay_doppler_channel().Examples
import torch from sionna.phy.channel import time_to_doppler_channel h_t = torch.ones(2, 8, 5, dtype=torch.complex64) h_dd = time_to_doppler_channel(h_t) print(h_dd.shape) # torch.Size([2, 8, 5])