Skip to main content

PolarCode

Struct PolarCode 

Source
pub struct PolarCode { /* private fields */ }
Expand description

A polar code of length $N$ with $K$ information bits.

Implementations§

Source§

impl PolarCode

Source

pub fn new(n: usize, k: usize, design_ebn0_db: f64) -> Result<PolarCode>

The code of length n (a power of two) with k information bits, built by the Gaussian approximation at the design $E_{b}/N_{0}$ design_ebn0_db.

§Errors

comnum_core::Error::Config unless $N$ is a power of two, $0 < K \le N$ and the design $E_{b}/N_{0}$ is finite.

Source

pub fn with_crc(self, crc: Crc) -> Result<PolarCode>

The same code with a CRC appended to the information bits (the information set grows by its degree, $K$ is kept; CA-SCL keeps the path that passes it). A second call replaces the CRC of the first.

§Errors

comnum_core::Error::Config if the information bits and the CRC exceed the block, or for a code built by PolarCode::with_positions, whose information set is fixed by its table (a standard with a CRC checks it outside the code, as crate::nr::NrPolar with PolarCode::decode_list).

Source

pub fn with_list(self, list: usize) -> Result<PolarCode>

The same code decoded by SC list with list paths (1: successive cancellation).

§Errors

comnum_core::Error::Config for list = 0.

Source

pub fn crc(&self) -> Option<&Crc>

The CRC appended to the information bits (CA-SCL), if any (PolarCode::with_crc).

Source

pub fn list(&self) -> usize

The list size $L$ of the decoder (1: successive cancellation).

Source

pub fn with_positions( n: usize, info_positions: &[usize], pc_positions: &[usize], ) -> Result<PolarCode>

The code of length n (a power of two) whose information (and CRC) bits sit at info_positions and parity-check bits at pc_positions, all other positions frozen to zero: the codes of a standard whose construction is a table (5G NR, crate::nr::NrPolar). A parity-check bit is the first cell of a cyclic register of length 5 that every information bit before it updates (TS 38.212, Sec. 5.3.1.2); the list decoder sets it from the decisions of its path.

§Errors

comnum_core::Error::Config unless $N$ is a power of two and the positions are distinct and below $N$.

Source

pub fn info_positions(&self) -> &[usize]

The positions carrying information and CRC bits.

Source

pub fn pc_positions(&self) -> &[usize]

The parity-check positions (empty but for PolarCode::with_positions).

Source

pub fn decode_list(&self, llr: &[f64]) -> Result<Vec<Vec<u8>>>

The information (and CRC) bits of the surviving paths of the list decoder, the most likely first, for a CRC checked outside the code (after a deinterleaver).

§Errors

comnum_core::Error::Shape if llr does not have $N$ values.

Trait Implementations§

Source§

impl BlockCode for PolarCode

Source§

fn k(&self) -> usize

Information bits per block.
Source§

fn n(&self) -> usize

Coded bits per block.
Source§

fn encode_block(&self, info: &[u8]) -> Result<Vec<u8>>

Encode one block of $k$ bits. Read more
Source§

fn decode_block(&self, llr: &[f64]) -> Result<Vec<u8>>

Decode one block of $n$ LLRs into $k$ bits. Read more
Source§

fn encode_block_into(&self, info: &[u8], out: &mut [u8]) -> Result<()>

Encode one block of $k$ bits into the $n$ values of out (ADR 0011: the default copies BlockCode::encode_block; a code overrides it when a profile shows the copy). Read more
Source§

fn decode_block_into(&self, llr: &[f64], out: &mut [u8]) -> Result<()>

Decode one block of $n$ LLRs into the $k$ values of out (as BlockCode::encode_block_into). Read more
Source§

fn code_rate(&self) -> f64

Code rate $k/n$.
Source§

fn encode_stream(&self, info: &[u8]) -> Result<Vec<u8>>

Encode whole blocks. Read more
Source§

fn decode_stream(&self, llr: &[f64]) -> Result<Vec<u8>>

Decode whole blocks. Read more
Source§

impl Clone for PolarCode

Source§

fn clone(&self) -> Self

Returns a duplicate of the value. Read more
1.0.0 (const: unstable) · Source§

fn clone_from(&mut self, source: &Self)

Performs copy-assignment from source. Read more
Source§

impl Debug for PolarCode

Source§

fn fmt(&self, f: &mut Formatter<'_>) -> Result

Formats the value using the given formatter. Read more
Source§

impl Decode for PolarCode

Source§

fn decode_into(&mut self, llr: &Llr, out: &mut Bits) -> Result<()>

Decode llr into out. Read more
Source§

fn decode(&mut self, llr: &Llr) -> Result<Bits, Error>

Decode llr (allocates, calls Decode::decode_into). Read more
Source§

impl Encode for PolarCode

Source§

fn rate(&self) -> f64

Code rate k/n.
Source§

fn encode_into(&self, info: &Bits, out: &mut Bits) -> Result<()>

Encode info into out. Read more
Source§

fn encode(&self, info: &Bits) -> Result<Bits, Error>

Encode info (allocates, calls Encode::encode_into). Read more
Source§

impl PartialEq for PolarCode

Source§

fn eq(&self, other: &Self) -> bool

Equality operator ==. Read more
1.0.0 (const: unstable) · Source§

fn ne(&self, other: &Rhs) -> bool

Inequality operator !=. Read more
Source§

impl StructuralPartialEq for PolarCode

Auto Trait Implementations§

Blanket Implementations§

Source§

impl<T> Any for T
where T: 'static + ?Sized,

Source§

fn type_id(&self) -> TypeId

Gets the TypeId of self. Read more
Source§

impl<T> Borrow<T> for T
where T: ?Sized,

Source§

fn borrow(&self) -> &T

Immutably borrows from an owned value. Read more
Source§

impl<T> BorrowMut<T> for T
where T: ?Sized,

Source§

fn borrow_mut(&mut self) -> &mut T

Mutably borrows from an owned value. Read more
Source§

impl<T> CloneToUninit for T
where T: Clone,

Source§

unsafe fn clone_to_uninit(&self, dest: *mut u8)

🔬This is a nightly-only experimental API. (clone_to_uninit)
Performs copy-assignment from self to dest. Read more
Source§

impl<T> From<T> for T

Source§

fn from(t: T) -> T

Returns the argument unchanged.

Source§

impl<T, U> Into<U> for T
where U: From<T>,

Source§

fn into(self) -> U

Calls U::from(self).

That is, this conversion is whatever the implementation of From<T> for U chooses to do.

Source§

impl<T> ToOwned for T
where T: Clone,

Source§

type Owned = T

The resulting type after obtaining ownership.
Source§

fn to_owned(&self) -> T

Creates owned data from borrowed data, usually by cloning. Read more
Source§

fn clone_into(&self, target: &mut T)

Uses borrowed data to replace owned data, usually by cloning. Read more
Source§

impl<T, U> TryFrom<U> for T
where U: Into<T>,

Source§

type Error = !

The type returned in the event of a conversion error.
Source§

fn try_from(value: U) -> Result<T, !>

Performs the conversion.
Source§

impl<T, U> TryInto<U> for T
where U: TryFrom<T>,

Source§

type Error = <U as TryFrom<T>>::Error

The type returned in the event of a conversion error.
Source§

fn try_into(self) -> Result<U, <U as TryFrom<T>>::Error>

Performs the conversion.