TDecoder Derived Type

type, public :: TDecoder

LDPC Decoder object


Inherits

type~~tdecoder~~InheritsGraph type~tdecoder TDecoder type~tedgelist TEdgeList type~tdecoder->type~tedgelist c_to_e, v_to_e, c_to_v, v_to_c

Components

Type Visibility Attributes Name Initial
integer, public :: cnum

Number of Check Nodes

integer, public :: vnum

Number of variable nodes

integer, public :: Ne

Number of edges

type(TEdgeList), public, allocatable :: c_to_e(:)

For each check node, the list of its connected edges

type(TEdgeList), public, allocatable :: v_to_e(:)

For each variable node, the list of its connected edges

type(TEdgeList), public, allocatable :: c_to_v(:)

For each check node, the list of its connected variable nodes

type(TEdgeList), public, allocatable :: v_to_c(:)

For each variable node, the list of its connected check nodes

real(kind=wp), public, allocatable :: B_buffer(:)

Support buffer for node processing (backwards partial results)

real(kind=wp), public, allocatable :: F_buffer(:)

Support buffer for node processing (forward partial results)


Constructor

public interface TDecoder

  • public function TDecoderConstructor(N, e_to_v, e_to_c) result(decoder)

    Arguments

    Type IntentOptional Attributes Name
    integer, intent(in) :: N

    Number of edges

    integer, intent(in) :: e_to_v(N)

    each location contains the index of the variable node connected to the edge corresponding to that location

    integer, intent(in) :: e_to_c(N)

    each location contains the index of the check node connected to the edge corresponding to that location

    Return Value type(TDecoder)

    The resulting Decoder object


Finalization Procedures

final :: destructor

  • public subroutine destructor(decoder)

    Destructor method for the TDecoder object It will just deallocate whatever was allocated.

    Read more…

    Arguments

    Type IntentOptional Attributes Name
    type(TDecoder) :: decoder

Type-Bound Procedures

procedure, public, pass(this) :: print => print_decoder

  • public subroutine print_decoder(this)

    Arguments

    Type IntentOptional Attributes Name
    class(TDecoder) :: this

procedure, public, pass(this) :: check_llr

  • public function check_llr(this, llr, synd)

    Check the array of LLRs (or LAPPRs) against the syndrome

    Arguments

    Type IntentOptional Attributes Name
    class(TDecoder) :: this

    Decoder

    real(kind=wp), intent(in) :: llr(this%vnum)

    Array of LLR (or LAPPR)

    logical, intent(in) :: synd(this%cnum)

    Syndrome

    Return Value logical

procedure, public, pass(this) :: word_to_synd

  • public function word_to_synd(this, word) result(synd)

    Evaluate the syndrome from a word

    Arguments

    Type IntentOptional Attributes Name
    class(TDecoder) :: this

    Decoder

    logical, intent(in) :: word(this%vnum)

    Word

    Return Value logical, (this%cnum)

    Syndrome

procedure, public, pass(this) :: decode

  • public subroutine decode(this, llr_channel, llr_updated, synd, N_iterations)

    Iteratively decode array of LLR (or LAPPRs) based on syndrome

    Arguments

    Type IntentOptional Attributes Name
    class(TDecoder) :: this

    Decoder

    real(kind=wp), intent(in) :: llr_channel(this%vnum)

    Array of LLRs (or LAPPRs) obtained from the channel

    real(kind=wp), intent(out) :: llr_updated(this%vnum)

    Array of processed LLRs (or LAPPRs)

    logical, intent(in) :: synd(this%cnum)

    Syndrome

    integer, intent(inout) :: N_iterations

    Maximum number of iterations (in), actual number of iterations (out)