#[repr(u8)]pub enum BitOutcome {
Clean = 0,
Corrected = 1,
Uncorrected = 2,
Introduced = 3,
}Expand description
What the channel and the inner decoder each did to one coded bit.
Derived by comparing three bit-streams in the coded-bit index space — what the transmitter sent, what arrived at the demapper, and what the inner decoder’s own output re-encodes to:
| State | arrived correct | decoder agrees | Meaning |
|---|---|---|---|
Clean | yes | yes | the channel did not touch it |
Corrected | no | yes | the inner code fixed it |
Uncorrected | no | no | arrived wrong, still wrong — the outer code’s problem now |
Introduced | yes | no | arrived right, the decoder broke it |
Introduced is not padding for the fourth cell. A belief-propagation
decoder that fails to converge flips correct bits, and one that does so at
high SNR is broken. Having the state means the map can show that; folding
it into Uncorrected would hide the symptom in with its opposite.
Variants§
Clean = 0
Arrived correct and the decoder left it correct.
Corrected = 1
Arrived wrong; the inner decoder fixed it.
Uncorrected = 2
Arrived wrong and the inner decoder did not fix it.
Introduced = 3
Arrived correct and the inner decoder broke it.
Implementations§
Source§impl BitOutcome
impl BitOutcome
Sourcepub fn arrived_wrong(self) -> bool
pub fn arrived_wrong(self) -> bool
Whether the channel corrupted this bit — i.e. anything but
Clean or Introduced.
Counting these over a frame and dividing by its coded-bit count
reproduces channel_ber
exactly: the map is that rate’s per-bit expansion, not a second
measurement of it.
This says nothing about the decoder. Both states it matches mean
“arrived wrong”; whether the decoder then fixed it is the other half of
the map, and decoder_disagreed is how to
ask. A consumer checking only this one is blind to the estimate stream
entirely — see that method’s note.
Sourcepub fn decoder_disagreed(self) -> bool
pub fn decoder_disagreed(self) -> bool
Whether the inner decoder’s output still disagrees with the truth at
this bit — i.e. Uncorrected or
Introduced.
The dual of arrived_wrong: that one is the
channel’s half of the map, this is the decoder’s. Both halves need a
name, because this predicate is the map’s whole meaning and a consumer
that spells it out by hand can get it subtly wrong with nothing to say
so.
The two are independent, not complementary. Corrected is
arrived_wrong && !decoder_disagreed; Introduced is the reverse; a
bit can be both (Uncorrected) or neither (Clean).
Trait Implementations§
Source§impl Clone for BitOutcome
impl Clone for BitOutcome
Source§fn clone(&self) -> BitOutcome
fn clone(&self) -> BitOutcome
1.0.0 (const: unstable) · Source§fn clone_from(&mut self, source: &Self)
fn clone_from(&mut self, source: &Self)
source. Read more