C(++)ECCO
C++ Error Control COding: a header-only library for ECC simulations and experiments, modeling complete coding systems across arbitrary finite fields and complex inter-field relationships - Christian Senger <senger@inue.uni-stuttgart.de>
Loading...
Searching...
No Matches
CECCO::Trellis< T >::ListViterbi_Workspace< cost_t > Struct Template Reference

Workspace for list-output Viterbi decoding on this trellis. More...

#include <graphs.hpp>

Public Member Functions

 ListViterbi_Workspace (const Trellis &tr)
 Allocate metric arrays for tr.
void calculate_edge_costs (const Trellis &tr, const Vector< T > &r)
 Set hard-decision edge costs from received word r.
void calculate_edge_costs (const Trellis &trellis, const Matrix< double > &llrs)
 Set soft edge costs from symbol-level LLRs.

Public Attributes

std::vector< std::vector< cost_t > > edge_costs
 Edge cost for each segment and edge index.
std::vector< std::vector< cost_t > > cost_to_go
 Minimum cost from each vertex (by layer and id) to any final-layer vertex.

Static Public Attributes

static constexpr bool is_soft = std::is_floating_point_v<cost_t>
 True for floating-point soft metrics.
static constexpr cost_t init
 Cost of an unreachable vertex or an infeasible path.

Detailed Description

template<FieldType T>
template<typename cost_t>
requires std::integral<cost_t> || std::floating_point<cost_t>
struct CECCO::Trellis< T >::ListViterbi_Workspace< cost_t >

Workspace for list-output Viterbi decoding on this trellis.

Template Parameters
cost_tIntegral type for hard-decision costs or floating-point type for soft costs

Stores edge costs by segment and, for the priority-first path enumeration, the backward cost-to-go from every vertex to the final layer. Construct it from the trellis before calling the list Viterbi routine in codes.hpp.

Definition at line 299 of file graphs.hpp.

Constructor & Destructor Documentation

◆ ListViterbi_Workspace()

template<FieldType T>
template<typename cost_t>
CECCO::Trellis< T >::ListViterbi_Workspace< cost_t >::ListViterbi_Workspace ( const Trellis & tr)
explicit

Allocate metric arrays for tr.

Parameters
trTrellis whose layer and edge sizes define the workspace

Definition at line 601 of file graphs.hpp.

Member Function Documentation

◆ calculate_edge_costs() [1/2]

template<FieldType T>
requires std::integral<cost_t>
template<typename cost_t>
requires std::integral<cost_t>
void CECCO::Trellis< T >::ListViterbi_Workspace< cost_t >::calculate_edge_costs ( const Trellis & tr,
const Vector< T > & r )

Set hard-decision edge costs from received word r.

Parameters
trTrellis whose edges define candidate symbols
rReceived word; length must equal the number of segments
Exceptions
std::invalid_argumentif r.get_n() != tr.E.size()

Definition at line 612 of file graphs.hpp.

◆ calculate_edge_costs() [2/2]

template<FieldType T>
requires std::floating_point<cost_t> && FiniteFieldType<T>
template<typename cost_t>
requires std::floating_point<cost_t> && FiniteFieldType<T>
void CECCO::Trellis< T >::ListViterbi_Workspace< cost_t >::calculate_edge_costs ( const Trellis & trellis,
const Matrix< double > & llrs )

Set soft edge costs from symbol-level LLRs.

Parameters
trellisTrellis whose edges define candidate symbols
llrsSymbol-level LLR matrix with q−1 rows and one column per segment
Exceptions
std::invalid_argumentif the LLR matrix has the wrong number of rows or columns

Definition at line 629 of file graphs.hpp.

Member Data Documentation

◆ cost_to_go

template<FieldType T>
template<typename cost_t>
std::vector<std::vector<cost_t> > CECCO::Trellis< T >::ListViterbi_Workspace< cost_t >::cost_to_go

Minimum cost from each vertex (by layer and id) to any final-layer vertex.

Definition at line 336 of file graphs.hpp.

◆ edge_costs

template<FieldType T>
template<typename cost_t>
std::vector<std::vector<cost_t> > CECCO::Trellis< T >::ListViterbi_Workspace< cost_t >::edge_costs

Edge cost for each segment and edge index.

Definition at line 334 of file graphs.hpp.

◆ init

template<FieldType T>
template<typename cost_t>
cost_t CECCO::Trellis< T >::ListViterbi_Workspace< cost_t >::init
staticconstexpr
Initial value:
=
is_soft ? std::numeric_limits<cost_t>::infinity() : std::numeric_limits<cost_t>::max()
static constexpr bool is_soft
True for floating-point soft metrics.
Definition graphs.hpp:237

Cost of an unreachable vertex or an infeasible path.

Definition at line 303 of file graphs.hpp.

◆ is_soft

template<FieldType T>
template<typename cost_t>
bool CECCO::Trellis< T >::ListViterbi_Workspace< cost_t >::is_soft = std::is_floating_point_v<cost_t>
staticconstexpr

True for floating-point soft metrics.

Definition at line 301 of file graphs.hpp.


The documentation for this struct was generated from the following file: