Zúžení kódu

Zúžení kódu (anglicky puncturing, u některých autorů propichování) je v teorii kódování postup odstraňování některých paritních bitů po zakódování samoopravným kódem. Výsledek je podobný, jako kdyby byl použit samoopravný kód s vyšším kódovacím poměrem (s nižší redundancí). Zúžení kódu však umožňuje použít stejný dekodér bez ohledu na to, kolik bitů bylo odstraněno, výrazně tedy zvyšuje flexibilitu systému, aniž by významně zvyšovalo jeho složitost.

Ukázka postupu zúžení kódu.

Kodér v některých případech používá předdefinovaný vzorek zúžení kódu. V dekodéru je pak implementována inverzní operace nazývaná anglicky depuncturing.

Zúžení kódu se využívá v UMTS při procesu nastavování rychlosti. Používá se také ve standardech Wi-Fi, GPRS a EDGE, DVB-T a DRM.

Zúžení kódu se v kódovacích systémech často používá s Viterbiho algoritmem.

Při postupu navazování spojení (anglicky Connection set procedure) v řízení rádiových prostředků (RRC) je mez zúžení kódu pro uplink odeslána ve zprávě pro vytvoření rádiového spoje NBAP na Node B spolu s U/L činitelem rozprostření a U/L šifrovacím kódem.[1]

Autory techniky zúžení kódu je Gustave Solomon a J. J. Stiffler, kteří ji publikovali v roce 1964.[2][3]

Odkazy

Reference

V tomto článku byl použit překlad textu z článku Puncturing na anglické Wikipedii.

  1. JOHNSON, Chris. Radio Access Networks for UMTS: Principles and Practice. [s.l.]: [s.n.], 2011. Dostupné online. 
  2. SOLOMOM, G.; STIFFLER, J. J. Punctured Systematic Cyclic Codes. IEEE Convention Record. 1964, roč. 12. 
  3. SOLOMON, G.; STIFFLER, J.J. Algebraically punctured cyclic codes. Information and Control. Duben 1965, roč. 8, čís. 2, s. 170–79. DOI 10.1016/S0019-9958(65)90080-X. 
  • PLESS, Vera. Introduction to the Theory of Error-Correcting Codes. 3. vyd. [s.l.]: John Wiley & Sons, 2011. (Wiley Series in Discrete Mathematics and Optimization). ISBN 978-1118030998. 

Související články

  • Singletonova mez

Média použitá na této stránce

Punct.png
Autor: Kirlf, Licence: CC BY-SA 4.0
Illustration of the puncturing procedure.

Python example:

import numpy as np

def puncturing(message, punct_vec):
    shift = 0
    N = len(punct_vec)
    punctured = []
    for idx, item in enumerate(message):
        if punct_vec[idx-shift*N] == 1:
            punctured.append(item)
        if idx%N == 0:
            shift = shift + 1
    return np.array(punctured)

def depuncturing(punctured, punct_vec, shouldbe):
    shift = 0
    shift2 = 0
    N = len(punct_vec)
    depunctured = np.zeros((shouldbe,))
    for idx, item in enumerate(depunctured):
        if punct_vec[idx - shift*N] == 1:
            depunctured[idx] = float(punctured[idx-shift2])
        else:
            shift2 = shift2 + 1
        if idx%N == 0:
            shift = shift + 1;
    return depunctured

message = np.array([1, 2, 3, 4, 5, 6, 7, 8])
punct_vec = np.array([1, 1, 0])
punctured = puncturing(message, punct_vec)
print(punctured)

depunctured = depuncturing(punctured, punct_vec, len(message))
print(depunctured)