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 >::Viterbi_Workspace< cost_t > Struct Template Reference

Workspace for Viterbi decoding on this trellis. More...

#include <graphs.hpp>

Public Member Functions

 Viterbi_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< cost_t > path_costs_prev
 Path costs from the previous layer.
std::vector< cost_t > path_costs_curr
 Path costs for the current layer.
std::vector< std::vector< const details::Edge< T > * > > backptrs
 Backpointer selected for each vertex and layer.
std::vector< uint16_t > tie_counts
 Number of equal-cost paths seen for randomized tie-breaking.
std::vector< std::vector< cost_t > > edge_costs
 Edge cost for each segment and edge index.
std::optional< std::variant< Vector< T >, Matrix< double > > > v
 Optional received word (hard symbols or LLR matrix) shown in TikZ output.

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
 Initial path cost used for unreachable vertices.

Detailed Description

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

Workspace for Viterbi decoding on this trellis.

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

Stores path metrics for two adjacent layers, edge costs, tie counts, and backpointers. Construct it from the trellis before calling the Viterbi routines in codes.hpp.

Definition at line 235 of file graphs.hpp.

Constructor & Destructor Documentation

◆ Viterbi_Workspace()

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

Allocate metric arrays for tr.

Parameters
trTrellis whose layer and edge sizes define the workspace

Definition at line 553 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 >::Viterbi_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()

With erasure support, erased received symbols give cost 0 on all outgoing labels.

Definition at line 568 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 >::Viterbi_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

Edge costs are the symbol costs of CECCO::details::symbol_costs_from_llrs: cost 0 on 0-labelled edges and L_s(a) on edges labelled by symbol a.

Definition at line 585 of file graphs.hpp.

Member Data Documentation

◆ backptrs

template<FieldType T>
template<typename cost_t>
std::vector<std::vector<const details::Edge<T>*> > CECCO::Trellis< T >::Viterbi_Workspace< cost_t >::backptrs

Backpointer selected for each vertex and layer.

Definition at line 279 of file graphs.hpp.

◆ edge_costs

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

Edge cost for each segment and edge index.

Definition at line 283 of file graphs.hpp.

◆ init

template<FieldType T>
template<typename cost_t>
cost_t CECCO::Trellis< T >::Viterbi_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

Initial path cost used for unreachable vertices.

Definition at line 239 of file graphs.hpp.

◆ is_soft

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

True for floating-point soft metrics.

Definition at line 237 of file graphs.hpp.

◆ path_costs_curr

template<FieldType T>
template<typename cost_t>
std::vector<cost_t> CECCO::Trellis< T >::Viterbi_Workspace< cost_t >::path_costs_curr

Path costs for the current layer.

Definition at line 277 of file graphs.hpp.

◆ path_costs_prev

template<FieldType T>
template<typename cost_t>
std::vector<cost_t> CECCO::Trellis< T >::Viterbi_Workspace< cost_t >::path_costs_prev

Path costs from the previous layer.

Definition at line 275 of file graphs.hpp.

◆ tie_counts

template<FieldType T>
template<typename cost_t>
std::vector<uint16_t> CECCO::Trellis< T >::Viterbi_Workspace< cost_t >::tie_counts

Number of equal-cost paths seen for randomized tie-breaking.

Definition at line 281 of file graphs.hpp.

◆ v

template<FieldType T>
template<typename cost_t>
std::optional<std::variant<Vector<T>, Matrix<double> > > CECCO::Trellis< T >::Viterbi_Workspace< cost_t >::v

Optional received word (hard symbols or LLR matrix) shown in TikZ output.

Definition at line 285 of file graphs.hpp.


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