Skip to main content

MimoDetector

Trait MimoDetector 

Source
pub trait MimoDetector {
    // Required methods
    fn constellation(&self) -> &Constellation;
    fn detect(
        &self,
        h: &ArrayView2<'_, C64>,
        y: &[C64],
        noise_var: f64,
    ) -> Result<Vec<usize>>;

    // Provided methods
    fn has_soft_output(&self) -> bool { ... }
    fn soft_estimate(
        &self,
        _h: &ArrayView2<'_, C64>,
        _y: &[C64],
        _noise_var: f64,
    ) -> Result<Option<Estimates>> { ... }
    fn llr(
        &self,
        _h: &ArrayView2<'_, C64>,
        _y: &[C64],
        _noise_var: f64,
    ) -> Result<Vec<f64>> { ... }
    fn detect_llr(
        &self,
        h: &ArrayView2<'_, C64>,
        y: &[C64],
        noise_var: f64,
    ) -> Result<(Vec<usize>, Vec<f64>)> { ... }
    fn detect_block(
        &self,
        h: &ArrayView2<'_, C64>,
        y: &ArrayView2<'_, C64>,
        noise_var: f64,
    ) -> Result<Array2<usize>> { ... }
}
Expand description

A detector of the model $y = H x + w$.

Required Methods§

Source

fn constellation(&self) -> &Constellation

The alphabet of every stream (the labels of MimoDetector::detect index its points).

Source

fn detect( &self, h: &ArrayView2<'_, C64>, y: &[C64], noise_var: f64, ) -> Result<Vec<usize>>

The label of the decided point of every transmit stream.

§Errors

Error::Shape if y does not have n_rx entries, Error::Config for a channel the detector cannot handle (fewer receive than transmit antennas for ZF and the tree searches, too many hypotheses for Ml).

Provided Methods§

Source

fn has_soft_output(&self) -> bool

Whether MimoDetector::llr gives bit LLRs (false: it returns an error).

Source

fn soft_estimate( &self, _h: &ArrayView2<'_, C64>, _y: &[C64], _noise_var: f64, ) -> Result<Option<Estimates>>

The estimates of the transmitted symbols and their noise variances, when the detector forms them (None for the detectors that decide on the lattice).

§Errors

As MimoDetector::detect.

Source

fn llr( &self, _h: &ArrayView2<'_, C64>, _y: &[C64], _noise_var: f64, ) -> Result<Vec<f64>>

Bit LLRs, $n_{t} \log_{2} M$ of them (positive for a 0).

§Errors

As MimoDetector::detect; Error::Config if the detector has no soft output.

Source

fn detect_llr( &self, h: &ArrayView2<'_, C64>, y: &[C64], noise_var: f64, ) -> Result<(Vec<usize>, Vec<f64>)>

The labels and the bit LLRs of one channel use, those of MimoDetector::detect and MimoDetector::llr; the detectors with soft output get both from one search.

§Errors

As MimoDetector::llr.

Source

fn detect_block( &self, h: &ArrayView2<'_, C64>, y: &ArrayView2<'_, C64>, noise_var: f64, ) -> Result<Array2<usize>>

Detect every column of y (n_rx × T) with the same channel: the labels, n_tx × T. The detectors of this module factor the channel once for the block.

§Errors

As MimoDetector::detect.

Dyn Compatibility§

This trait is dyn compatible.

In older versions of Rust, dyn compatibility was called "object safety".

Implementors§