Skip to main content

Module receiver

Module receiver 

Source
Expand description

The receiver of a link: one detector applied channel use after channel use, with soft outputs.

Receiver detects the layers of every channel use $y = H x + w$ (spatial multiplexing) or every block of Alamouti’s code, and accumulates a SoftOutput:

  • the estimate of every transmitted symbol: the estimate of the detector when it forms one (MimoDetector::soft_estimate: the unbiased linear estimate of ZF and MMSE, the decoupled channel of AMP and OAMP), the decided point with the other detectors;
  • its noise variance: that of the estimate, or the noise variance of the channel for a decision;
  • optionally the bit LLRs of the detector (ZF, MMSE, ML, K-best, AMP, OAMP, Alamouti: MimoDetector::has_soft_output).

§Examples

use comnum_mimo::receiver::{DetectorKind, Receiver, SoftOutput};
use comnum_mapping::constellation::Constellation;
use comnum_math::C64;
use ndarray::array;
let c = Constellation::qam(4)?.normalized();
let rx = Receiver::new(DetectorKind::Ml, c.clone(), true)?;
let h = array![[C64::new(1.0, 0.0), C64::new(0.2, 0.1)], [C64::new(-0.3, 0.0), C64::new(0.9, 0.0)]];
let x = [c.points()[1], c.points()[2]];
let y: Vec<C64> = (0..2).map(|r| h[[r, 0]] * x[0] + h[[r, 1]] * x[1]).collect();
let mut out = SoftOutput::default();
rx.layers(&h.view(), &y, 1e-3, &mut out)?;
assert_eq!(out.symbols, x.to_vec());
assert_eq!(out.llr.len(), 4);

Structs§

Receiver
A detector applied channel use after channel use (see the module).
SoftOutput
The accumulated output of a Receiver: the Estimates of the channel uses one after the other (the same fields), and their bit LLRs.

Enums§

DetectorKind
A detector of crate::detection.