LTE Primopredajnik
Loading...
Searching...
No Matches
receiver.viterbi_decoder.ViterbiDecoder Class Reference

Public Member Functions

 __init__ (self, constraint_len, generators, rate=1/2)
np.ndarray decode (self, bits_or_soft, bool tail_biting=False)

Public Attributes

 K = int(constraint_len)
list generators = [int(g) for g in generators]
 rate = float(rate)
 n_out = len(self.generators)
int num_states = 2 ** (self.K - 1)
 taps
 next_state = np.zeros((self.num_states, 2), dtype=np.int32)
 output_bits = np.zeros((self.num_states, 2, self.n_out), dtype=np.int8)

Protected Member Functions

 _build_trellis (self)
 _run_viterbi (self, np.ndarray rcv, int start_state)

Detailed Description

Hard-decision Viterbi dekoder za konvolucijske kodove.

Ova klasa implementira Viterbi algoritam za dekodiranje konvolucijski
kodiranih bitova sa hard-odlukom (0/1). Posebno je prilagođena LTE PBCH
lancu gdje se koristi **tail-biting** konvolucijsko kodiranje.

LTE PBCH napomena:
- Predajnik koristi tail-biting (nema flush bitova).
- Početno stanje nije poznato unaprijed.
- Dekoder traži start_state za koji važi: end_state == start_state
  uz minimalnu putnu metriku.

Parameters
----------
constraint_len : int
    Dužina ograničenja konvolucijskog koda (K).
generators : list of int
    Generator polinomi konvolucijskog koda (npr. [0o133, 0o171, 0o165]).
rate : float, default=1/2
    Kodna stopa (informativno, ne utiče direktno na algoritam).

Attributes
----------
K : int
    Dužina ograničenja konvolucijskog koda.
generators : list of int
    Generator polinomi.
rate : float
    Kodna stopa.
n_out : int
    Broj izlaznih bitova po ulaznom bitu.
num_states : int
    Ukupan broj stanja trellisa (2^(K-1)).

Member Function Documentation

◆ _build_trellis()

receiver.viterbi_decoder.ViterbiDecoder._build_trellis ( self)
protected
Izgrađuje trellis strukturu (prelazi stanja i izlazni bitovi).

Metoda popunjava:
- next_state[state, bit]
- output_bits[state, bit, :]

◆ _run_viterbi()

receiver.viterbi_decoder.ViterbiDecoder._run_viterbi ( self,
np.ndarray rcv,
int start_state )
protected
Izvršava jedan Viterbi algoritam za fiksno početno stanje.

Parameters
----------
rcv : numpy.ndarray
    Primljeni kodirani bitovi oblika (T, n_out).
start_state : int
    Početno stanje trellisa.

Returns
-------
path : numpy.ndarray
    Matrica putnih metrika dimenzija (T+1, num_states).
prev_state : numpy.ndarray
    Prethodna stanja za backtracking.
prev_bit : numpy.ndarray
    Prethodni ulazni bitovi za backtracking.

◆ decode()

np.ndarray receiver.viterbi_decoder.ViterbiDecoder.decode ( self,
bits_or_soft,
bool tail_biting = False )
Dekodira kodirane bitove.

bits_or_soft: očekuje hard bitove 0/1 dužine T*n_out.
              Ako dođe float, kvantizuje se pragom 0.5.
tail_biting:  True -> tail-biting Viterbi (end_state == start_state)
              False -> start_state=0, end_state=argmin

Member Data Documentation

◆ taps

receiver.viterbi_decoder.ViterbiDecoder.taps
Initial value:
= np.array(
[[(g >> (self.K - 1 - i)) & 1 for i in range(self.K)] for g in self.generators],
dtype=np.int8,
)

The documentation for this class was generated from the following file:
  • receiver/viterbi_decoder.py