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
Channel Equalization (using zero forcing or MMSE equalization)
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.