Detectors#

The ComNumpy Library implements several classical MIMO detectors.

class MaximumLikelihoodDetector(alphabet: ndarray, H: ndarray | None = None, is_mimo: bool = True, name: str = 'ML Detector')#

Implements the ML (Maximum Likelihood) Detector for white Gaussian noise in a MIMO (Multiple-Input, Multiple-Output) communication system.

Algorithm#

The ML Detector is designed to estimate the transmitted signal from the received signal in the presence of noise, based on the Maximum Likelihood criterion.

\[\widehat{\mathbf{x}}[n] = \arg \min_{\mathbf{x}\in \mathcal{M}^{N_t}}\|\mathbf{y}[n] - \mathbf{H}\mathbf{x}\|^2\]

Warning

The ML detector can be computationally expensive for large number of transmit antennas or high order constellation.

Attributes#

alphabetnumpy.ndarray

Internal storage for the symbol constellation.

Hnumpy.ndarray

Internal storage for the channel matrix.

namestr

Name of the detector.

References#

  • Larsson, Erik G., Petre Stoica, and Girish Ganesan. Space-time block coding for wireless communications. Cambridge university press, 2003.

class LinearDetector(alphabet: ndarray, H: ndarray | None = None, method: Literal['zf', 'mmse'] = 'zf', sigma2: float = None, is_mimo: bool = True, name: str = 'ZF Detector')#

Implements a Linear MIMO detector.

Algorithm#

A linear detector is a two-step detector

  1. Channel Equalization (using zero forcing or MMSE equalization)

  2. Symbol Detection

Attributes#

alphabetnumpy.ndarray

Symbol constellation.

Hnumpy.ndarray

Internal storage for the channel matrix.

method: zf or mmse

linear estimation technique (default: zf)

sigma2: float

noise variance (used for the mmse equalizer only)

namestr

Name of the detector.

References#

  • Larsson, Erik G., Petre Stoica, and Girish Ganesan. Space-time block coding for wireless communications. Cambridge university press, 2003.

linear_estimator(Y)#

Perform Zero Forcing or MMSE linear equalization

class OrderedSuccessiveInterferenceCancellationDetector(alphabet: ndarray, osic_type: str = 'sinr', H: ndarray | None = None, method: Literal['zf', 'mmse'] = 'zf', sigma2: float | None = None, name: str = 'OSIC Detector')#

Ordered Successive Interference Cancellation (OSIC) detector.

Parameters#

alphabetnp.ndarray

Modulation alphabet (e.g. 16-QAM points)

osic_typestr

Ordering strategy: ‘sinr’, ‘colnorm’, or ‘snr’

HOptional[np.ndarray]

Channel matrix (NR x NT)

sigma2Optional[float]

Noise variance

namestr

Component name

Reference#

  • Cho, Yong Soo, et al. MIMO-OFDM wireless communications with MATLAB. John Wiley & Sons, 2010.

class ApproximateMessagePassingDetector(alphabet: ndarray, H: ndarray | None = None, sigma2: float = None, alpha: float = 1, N_it: int = 100, is_mimo: bool = True, name: str = 'AMP Detector')#

Implements the AMP (Approximate Message Passing) MIMO detector.

Attributes#

alphabetnumpy.ndarray

Symbol constellation.

Hnumpy.ndarray

Internal storage for the channel matrix.

sigma2float

Noise variance.

N_itint

Number of iterations.

alphafloat

Damping factor.

namestr

Name of the detector.

class OrthogonalApproximateMessagePassingDetector(alphabet: ndarray, H: ndarray | None = None, sigma2: float = None, alpha: float = 1, N_it: int = 100, type: Literal['H', 'pinv', 'MMSE'] = 'MMSE', is_mimo: bool = True, name: str = 'OAMP Detector')#

Implements the OAMP (Orthogonal AMP) MIMO detector.

Attributes#

alphabetnumpy.ndarray

Symbol constellation.

Hnumpy.ndarray

Internal storage for the channel matrix.

sigma2float

Noise variance.

typestr

Type of linear estimator.

N_itint

Number of iterations.

alphafloat

Damping factor.

namestr

Name of the detector.