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§
Sourcefn constellation(&self) -> &Constellation
fn constellation(&self) -> &Constellation
The alphabet of every stream (the labels of MimoDetector::detect index its
points).
Sourcefn detect(
&self,
h: &ArrayView2<'_, C64>,
y: &[C64],
noise_var: f64,
) -> Result<Vec<usize>>
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§
Sourcefn has_soft_output(&self) -> bool
fn has_soft_output(&self) -> bool
Whether MimoDetector::llr gives bit LLRs (false: it returns an error).
Sourcefn soft_estimate(
&self,
_h: &ArrayView2<'_, C64>,
_y: &[C64],
_noise_var: f64,
) -> Result<Option<Estimates>>
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
Sourcefn llr(
&self,
_h: &ArrayView2<'_, C64>,
_y: &[C64],
_noise_var: f64,
) -> Result<Vec<f64>>
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.
Sourcefn detect_llr(
&self,
h: &ArrayView2<'_, C64>,
y: &[C64],
noise_var: f64,
) -> Result<(Vec<usize>, Vec<f64>)>
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
Sourcefn detect_block(
&self,
h: &ArrayView2<'_, C64>,
y: &ArrayView2<'_, C64>,
noise_var: f64,
) -> Result<Array2<usize>>
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
Dyn Compatibility§
This trait is dyn compatible.
In older versions of Rust, dyn compatibility was called "object safety".