#[non_exhaustive]pub enum DetectorKind {
Mr,
Zf,
Mmse,
Sic,
ZfSic,
Ml,
Sphere,
KBest(usize),
Amp(usize),
Oamp(usize),
}Expand description
A detector of crate::detection.
Variants (Non-exhaustive)§
This enum is marked as non-exhaustive
Mr
Maximum ratio (matched filter).
Zf
Zero forcing.
Mmse
Unbiased MMSE.
Sic
MMSE successive interference cancellation (V-BLAST).
ZfSic
Zero-forcing successive interference cancellation.
Ml
Exhaustive maximum likelihood.
Sphere
The sphere decoder (maximum likelihood).
KBest(usize)
K-best with this number of paths.
Amp(usize)
LAMA, the complex Bayesian AMP of large systems, with this number of iterations.
Oamp(usize)
OAMP with the LMMSE estimator, with this number of iterations.
Implementations§
Source§impl DetectorKind
impl DetectorKind
Sourcepub const DEFAULT_PATHS: usize = 8
pub const DEFAULT_PATHS: usize = 8
The paths of K-best when its name does not give them.
Sourcepub const DEFAULT_ITERATIONS: usize = 10
pub const DEFAULT_ITERATIONS: usize = 10
The iterations of AMP and OAMP when their name does not give them.
Sourcepub const ALL: [DetectorKind; 10]
pub const ALL: [DetectorKind; 10]
Every detector, K-best with DetectorKind::DEFAULT_PATHS paths and AMP and
OAMP with DetectorKind::DEFAULT_ITERATIONS iterations.
Sourcepub const NAMES: [&'static str; 10]
pub const NAMES: [&'static str; 10]
The names of DetectorKind::ALL (DetectorKind::name), in order: the list
of the detector names that the specifications take theirs from.
§Examples
use comnum_mimo::receiver::DetectorKind;
assert_eq!(DetectorKind::NAMES.len(), DetectorKind::ALL.len());
for (name, d) in DetectorKind::NAMES.iter().zip(DetectorKind::ALL) {
assert_eq!((d.name(), name.parse::<DetectorKind>()?), (*name, d));
}Sourcepub const fn name(self) -> &'static str
pub const fn name(self) -> &'static str
The name of the detector, as DetectorKind::from_str
reads it.
Sourcepub fn with_iterations(self, iterations: usize) -> Result<DetectorKind>
pub fn with_iterations(self, iterations: usize) -> Result<DetectorKind>
The same detector with iterations iterations, for AMP and OAMP (the others are
returned unchanged).
§Errors
Error::Config for zero iterations of AMP or OAMP.
Sourcepub fn from_name(name: &str, k: usize) -> Result<DetectorKind>
pub fn from_name(name: &str, k: usize) -> Result<DetectorKind>
The detector of a name (DetectorKind::from_str),
K-best with k paths.
§Errors
Error::Config for another name or zero paths.
Sourcepub fn has_soft_output(self) -> bool
pub fn has_soft_output(self) -> bool
Whether the detector computes bit LLRs (MimoDetector::has_soft_output of its
detector; false for a detector that cannot be built, K-best with no path).
Sourcepub fn detector(
self,
c: &Constellation,
) -> Result<Box<dyn MimoDetector + Send + Sync>>
pub fn detector( self, c: &Constellation, ) -> Result<Box<dyn MimoDetector + Send + Sync>>
The detector for the alphabet c.
§Errors
Error::Config for K-best with no path or AMP and OAMP with no iteration.
Trait Implementations§
Source§impl Clone for DetectorKind
impl Clone for DetectorKind
impl Copy for DetectorKind
Source§impl Debug for DetectorKind
impl Debug for DetectorKind
impl Eq for DetectorKind
Source§impl FromStr for DetectorKind
impl FromStr for DetectorKind
Source§fn from_str(name: &str) -> Result<DetectorKind>
fn from_str(name: &str) -> Result<DetectorKind>
The detector of a name: mr, zf, mmse, sic (mmse_sic), zf_sic, ml,
sphere, kbest (with DetectorKind::DEFAULT_PATHS paths), amp (lama)
or oamp (with DetectorKind::DEFAULT_ITERATIONS iterations),
case-insensitive.
§Errors
Error::Config for another name.