KroneckerPilotPattern#
- class sionna.phy.ofdm.KroneckerPilotPattern(resource_grid: ResourceGrid, pilot_ofdm_symbol_indices: List[int], normalize: bool = True, seed: int = 0, precision: Literal['single', 'double'] | None = None, device: str | None = None)[source]#
Bases:
sionna.phy.ofdm.pilot_pattern.PilotPatternSimple orthogonal pilot pattern with Kronecker structure.
This function generates an instance of
PilotPatternthat allocates non-overlapping pilot sequences for all transmitters and streams on specified OFDM symbols. As the same pilot sequences are reused across those OFDM symbols, the resulting pilot pattern has a frequency-time Kronecker structure. This structure enables a very efficient implementation of the LMMSE channel estimator. Each pilot sequence is constructed from randomly drawn QPSK constellation points.- Parameters:
resource_grid (ResourceGrid) – Resource grid to be used
pilot_ofdm_symbol_indices (List[int]) – List of integers defining the OFDM symbol indices that are reserved for pilots
normalize (bool) – If True, the
pilotsare normalized to an average energy of one across the last dimension. Defaults to True.seed (int) – Seed for the generation of the pilot sequence. Different seed values lead to different sequences. Defaults to 0.
precision (Literal['single', 'double'] | None) – Precision used for internal calculations and outputs. If set to None,
precisionis used.device (str | None) – Device for tensor operations. If None,
deviceis used.
Notes
It is required that the
resource_grid’s propertynum_effective_subcarriersis an integer multiple ofnum_tx * num_streams_per_tx. This condition is required to ensure that all transmitters and streams get non-overlapping pilot sequences. For a large number of streams and/or transmitters, the pilot pattern becomes very sparse in the frequency domain.Examples
from sionna.phy.ofdm import ResourceGrid rg = ResourceGrid(num_ofdm_symbols=14, fft_size=64, subcarrier_spacing=30e3, num_tx=4, num_streams_per_tx=2, pilot_pattern="kronecker", pilot_ofdm_symbol_indices=[2, 11]) rg.pilot_pattern.show()