|
LTE Primopredajnik
|
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) | |
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)).
|
protected |
Izgrađuje trellis strukturu (prelazi stanja i izlazni bitovi). Metoda popunjava: - next_state[state, bit] - output_bits[state, bit, :]
|
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.
| 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
| receiver.viterbi_decoder.ViterbiDecoder.taps |