List2LLR#

class sionna.phy.mimo.List2LLR(precision: Literal['single', 'double'] | None = None, device: str | None = None, **kwargs)[source]#

Bases: sionna.phy.block.Block

Abstract class defining a callable to compute LLRs from a list of candidate vectors (or paths) provided by a MIMO detector.

The following channel model is assumed

\[\bar{\mathbf{y}} = \mathbf{R}\bar{\mathbf{x}} + \bar{\mathbf{n}}\]

where \(\bar{\mathbf{y}}\in\mathbb{C}^S\) are the channel outputs, \(\mathbf{R}\in\mathbb{C}^{S\times S}\) is an upper-triangular matrix, \(\bar{\mathbf{x}}\in\mathbb{C}^S\) is the transmitted vector whose entries are uniformly and independently drawn from the constellation \(\mathcal{C}\), and \(\bar{\mathbf{n}}\in\mathbb{C}^S\) is white noise with \(\mathbb{E}\left[\bar{\mathbf{n}}\right]=\mathbf{0}\) and \(\mathbb{E}\left[\bar{\mathbf{n}}\bar{\mathbf{n}}^{\mathsf{H}}\right]=\mathbf{I}\).

It is assumed that a MIMO detector such as KBestDetector produces \(K\) candidate solutions \(\bar{\mathbf{x}}_k\in\mathcal{C}^S\) and their associated distance metrics \(d_k=\lVert \bar{\mathbf{y}} - \mathbf{R}\bar{\mathbf{x}}_k \rVert^2\) for \(k=1,\dots,K\). This layer can also be used with the real-valued representation of the channel.

Parameters:
  • precision (Literal['single', 'double'] | None) – Precision used for internal calculations and outputs. If set to None, precision is used.

  • device (str | None) – Device for computation. If None, device is used.

Inputs:
  • y – […, M], torch.complex or torch.float. Channel outputs of the whitened channel.

  • r – […, num_streams, num_streams], same dtype as y. Upper triangular channel matrix of the whitened channel.

  • dists – […, num_paths], torch.float. Distance metric for each path (or candidate).

  • path_inds – […, num_paths, num_streams], torch.int32. Symbol indices for every stream of every path (or candidate).

  • path_syms – […, num_paths, num_streams], same dtype as y. Constellation symbol for every stream of every path (or candidate).

Outputs:

llr – […, num_streams, num_bits_per_symbol], torch.float. LLRs for all bits of every stream.

Notes

An implementation of this class does not need to make use of all of the provided inputs which enable various different implementations.