Teorie kódování

Jan Volec, jan@ucw.cz

Materiály

Skripta od prof. Pelantové

Tři série domácích cvičení, vyřešit alespoň jednu v každé sérii. Může se na nich spolupracovat, ale sepsat je máme sami.

Zkouškový test na poslední přednášce

Motivace: Máme konečnou abecedu A (většinou {0,1}) a nad ní chceme postavit kódová slova délky n, tedy wAn. Kód je nějaká množina možných slov CAn.

Kódování pomocí paritního bitu: C={a1an1s|ai{0,1},(s=i=1n1ai)mod2} – lze rozpoznat jednu chybu

Definice. Nechť A je konečná abeceda, n a u,wAn. Potom vzdálenost slov u,w je dist(u,w)#{i|uiwi}
Poznámka. Zjevně jde o metriku na množině An.
Definice. Nechť A je konečná abeceda a M,n,d. Množina CAn,|C|=M je (M,n,d)-kód nad abecedou A, pokud u,wC:uwdist(u,w)d
Příklad. Nechť A={0,1}. Pokud d=2, máme kód, kde dokážeme poznat chybu v jednom bitu. Pokud d=3, máme kód, kde dokážeme opravit jednu chybu.

Ve zkouškovém testu bude za úkol pro dva dané z parametrů M,n,d určit optimální hodnotu třetího.

Komunikace: Odesílatel odešle nějaké slovo wC, nepřítel ho nějak změní, příjemce dostane slovo xAn a má odhadnout původní slovo w. K tomu použije algoritmus dekódování:

x^arg minuCdist(u,x)

(V případě, že je víc možností, budeme muset zvolit libovolně.)

Věta (oprava chyb). Nechť C je (M,n,d)-kód nad A a wC,xAn jsou slova taková, že dist(x,w)td12. Potom x^=w.
Důkaz. Triviální pomocí sporu a trojúhelníkové nerovnosti.
Věta (Hammingova). Nechť C je (M,n,d)-kód nad {0,1} a td12. Potom platí Hammingova nerovnost: Mi=0t(ni)2n
Důkaz. Nechť u,wC. Podle trojúhelníkové nerovnosti jsou koule Bt(u),Bt(w) disjunktní (kde koule značíme obráceně než Štampach a ještě navíc tím myslíme uzavřené koule, aby to bylo matoucí). Zjevně pro každé slovo je právě i=0t(ni) způsobů, jak v něm změnit nanejvýš t znaků. To je tedy velikost koule kolem každého slova a z toho, že jsou disjunktní, plyne nerovnost.
Poznámka. Obecně má-li abeceda q znaků, potom platí analogicky Mi=0t(ni)(q1)iqn
Definice. Pokud v Hammingově nerovnosti platí rovnost, kód se nazývá perfektní.
Příklad. Pro n=d licheˊ je koktavý/opakovací kód {0n,1n} perfektní.

Lineární kódy

Definice. Je-li T konečné těleso a kód CTn je lineární podprostor, kód se nazývá lineární.
Poznámka. Kód nad 2 je lineární, právě když obsahuje nulové slovo a je uzavřený na sčítání.
Poznámka. Je-li kód CTn lineární, potom M=|T|dimC.
Definice. Generující matice lineárního kódu je matice, jejíž řádky tvoří bázi kódu. Značíme G
Definice. Kontrolní matice lineárního kódu je matice, jejíž řádky tvoří jádro jeho generující matice.
Příklad. Paritní kód je lineární, jeho generující matice je například G=(10001010010010100011) a jeho kontrolní matice je H=(11111)
Příklad. Koktavý kód je lineární, jeho generující matice je G=(11111) a jeho kontrolní matice je například H=(10001010010010100011) Tedy paritní a koktavý kód jsou k sobě duální.
Věta. Jsou-li G,H generující a kontrolní matice lineárního kódu, potom HGT=0.
Věta. Je-li C lineární kód, H jeho kontrolní matice a wTn, potom wCHw=0.
Definice. Váha slova xTn je wt(x)dist(x,0).
Věta. Je-li C lineární kód, potom d=min{wt(z)|zC{0}}.
Věta. Je-li C lineární kód, potom d=min{k+|existuje k lineaˊrneˇ zaˊvislyˊch sloupcu˚ H}.
Definice. Nechť T je konečné těleso velikosti q a m. (q,m)-Hammingův kód je lineární kód, jehož kontrolní matice má jako sloupce právě všechny nenulové vektory z Tm, jejichž první nenulový prvek je 1.
Věta. Pro Hammingův kód je d3.
Věta. Pro Hammingův kód je n=qm1q1.
Věta. Pro Hammingův kód je k=nm.
Věta. Hammingův kód je perfektní.
Definice. Nechť C1,C2 jsou kódy délky n. C1 je ekvivalentní C2, jestliže existuje permutace π𝕊n taková, že w1wnC1wπ(1)wπ(n)C2
Definice. Lineární kód CTn dimenze k je systematický, pokud α1,,αkT,1αk+1,,αn:α1αnC Intuitivně: do prvních k písmen můžeme zakódovat, co chceme, a poté jen správně doplníme.
Věta. Nechť CTn je systematický lineární kód dimenze k. Potom pro generující a kontrolní matici můžeme psát G=(Ik|F),H=(FT|Ink),FTk×(nk)
Věta. Každý lineární kód je ekvivalentní nějakému systematickému.
Věta (Singletonova nerovnost). Nechť CTn je lineární kód dimenze k s minimální vzdáleností d. Potom n+1k+d.
Věta (Gilbert-Varshamova mez pro binární kódy). Nechť T=2,r,n,d a platí j=0d2(n1j)<2r Potom existuje kontrolní matice HTr×n, jejíž kód má minimální vzdálenost alespoň d.
Definice. Pro k,d označme N(k,d) minimální možnou délku lineárního binárního kódu dimenze k s minimální vzdáleností d.
Poznámka. Zjevně N(k,1)=k,N(1,d)=d.
Lemma. Pro k,d,k2 je N(k,d)d+N(k1,d2)
Věta (Griesmerova mez). N(k,d)i=0k1d2i

Vraťme se k binárnímu Hammingovu kódu. Definujme standardní tabulku, kde na nultém řádku jsou kódová slova a na i-tém řádku jsou slova, která se liší od kódového slova v i-tém bitu.

Věta. U binárního Hammingova kódu pro slova y,z je HyT=HzT právě tehdy, pokud leží ve stejném řádku kontrolní tabulky.
Definice. Nechť C je lineární kód a x je slovo. Potom syndrom x je HxT.
Poznámka. Obecně definujeme standardní tabulku tak, že v každém řádku budou slova se stejným syndromem.
Věta. Nechť C je lineární binární kód s minimální vzdáleností d a td12. Potom v každém řádku standardní tabulky je nanejvýš jedno slovo váhy t.

Cyklické kódy

Definice. Lineární kód C délky n je cyklický, pokud s každým slovem obsahuje i jeho cyklické permutace, neboli w0w1wn1C:w1wn1w0C
Poznámka. Množinu slov 2n můžeme reprezentovat jako okruh polynomů 2[x](xn1), kde budeme značit z formální proměnnou splňující zn=1. Potom pro cyklický kód platí wCwzC.
Příklad. Paritní kód délky 4 je cyklický: C={0000,0011,0101,0110,1001,1010,1100,1111}={0,z2+z3,z+z3,z+z2,1+z3,1+z2,1+z,1+z+z2+z3} Všimněme si, že jsou to všechno násobky z+1.
Věta. Nechť C je cyklický kód délky n a dimenze k. Potom existuje gC stupně nk takový, že
Definice. Polynomy g a h z předchozí věty jsou generující polynom a kontrolní polynom kódu C.

V důsledku předchozí věty se dá určit, kolik existuje cyklických kódů dané délky. Například x51=(x1)(x4+x3+x2+x+1), kde oba polynomy na pravé straně jsou ireducibilní, takže existují jen dva cyklické kódy délky 5 (plus dva triviální). Tudíž by nás zajímalo obecně, na co se rozloží xn1, a to v nějakém obecném tělese se stejným počtem prvků jako 2[x](xn1). Ukazuje se, že to vyjde hezčeji, když místo něj budeme faktorizovat xn+1x.

Definice. Nechť b2[x]q, kde q je ireducibilní polynom. Potom minimální polynom prvku b je polynom minimálního stupně s prvky ze 2 takový, že f(b)=0.
Věta. Každé b2[x]q má minimální polynom.
Příklad. Vezměme konečné těleso 2[x](x3+x+1). To má 8 prvků – všechny polynomy stupně menšího než 3. Zkusíme pro každý najít minimální polynom, tedy takový polynom, že když do něj za x dosadíme ten daný polynom, dostaneme polynom, který je násobek x3+x+1:
bminimální polynom b
0x
1x+1
zx3+x+1
z+1x3+x2+1
z2x3+x+1
z2+1?
z2+z?
z2+z+1?
Vidíme, že to není úplně jednoduché.
Věta. Ke každému prvku b2[x]q existuje právě jeden minimální polynom f. Ten je ireducibilní nad 2 a dělí každý polynom, který má kořen b, speciálně také x2m+x. Navíc je také kořenem b2.
Věta. Je-li q2[x] ireducibilní polynom stupně m, potom x2mx je součin všech různých minimálních polynomů prvků 2[x]q.
Věta. Nechť b2[x]q a α ne nejmenší kladné číslo takové, že b2α=b. Potom minimální polynom b je fi=0α1(xb2i)

Takže teď umíme rozložit x2mx, ale my chceme obecně xn1. Co s tím? Z technických důvodů budeme s újmou na obecnosti uvažovat jen lichá n.

Věta. Nechť n je liché. Potom existují r,m taková, že nr=2m1.

Vezměme tedy taková r,m. Z algebry nějak víme, že existuje ireducibilní polynom q stupně m (tudíž 2[x]q je těleso) a β2[x]q takové, že βi jsou různé pro i=1,,2m1, přičemž pro i=2m=1 je to rovno 1.

Polynomy αiβir pro i=1,,n jsou různé kořeny rovnice xn=1. Z toho plyne, že to musí být všechny kořeny. ??? xn1 je součin minimálních polynomů prvků b2[x]q, kde řád b dělí n.

Věta. Nechť C je cyklický kód liché délky n. Potom g(x) je součin minimálních polynomů k prvkům αi1,,αis, kde α je prvek řádu n v nějakém tělese 2[x]q.
Definice. αi1,,αis z předchozí věty jsou generující kořeny kódu C.

Teď už máme nějaký cyklický kód a chceme vymyslet způsob, jak zakódovat nějakou informaci. Mějme nějaké datové slovo d0dk1. Definujme polynom ai=0k1dixi. Jako kódové slovo stačí vzít ag. To plyne z toho, že tyto výsledky pro různá a právě dávají celý kód.

Ovšem pro pohodlnost by bylo hezké kód přepermutovat, aby byl systematický. To sice umíme pro obecný lineární kód, ale není zaručené, že tím vznikne cyklický kód. Definujme si tentokrát ai=0n1dixn1i. Vydělíme se zbytkem a=neˇcog+r. Jako kódové slovo vezmeme ar. Jelikož r je menšího stupně než g, nepoškodíme si tím bity na konci, ve kterých je zpráva. Tudíž máme kód, který je „obráceně“ systematický. V případě potřeby ho samozřejmě můžeme obrátit a pořád bude cyklický.

Zajímalo by nás, jestli je Hammingův kóď ekvivalentní cyklickému kódu. Ukazuje se, že pro obecné q nemusí být, ale pro binární Hammingův kód to dokážeme. Máme tedy nějaké n, které se rovná 2m1, a chceme najít cyklický kód se stejnými parametry jako Hammingův, tudíž dimenze nm.

BCH kódy

Definice. BCH kód je kód v tělese 𝔽2m2[x]q generovaný kořeny α a α3, kde α je prvek řádu n.
Příklad. Méjme n15,m4. Vezmeme ireducibilní polynom qx4+x+1. Prvky 𝔽16 jsou všechny polynomy stupně nanejvýš 3, to jest 𝔽16={0,1,z,z+1,z2,z2+1,z2+z,z2+z+1,z3,z3+1,z3+z,z3+z+1,z3+z2,z3+z2+1,z3+z2+z,z3+z2+z+1} Jako generátor můžeme vzít například αz:
MocninaHodnotaMinimální polynom
α01x+1
α1zx4+x+1
α2z2x4+x+1
α3z3x4+x3+x2+x+1
α4z+1x4+x+1
α5z2+zx2+x+1
α6z3+z2x4+x3+x2+x+1
α7z3+z+1
α8z2+1x4+x+1
α9z3+z
α10z2+z+1x2+x+1
α11z3+z2+z
α12z3+z2+z+1x4+x3+x2+x+1
α13z3+z2+1
α14z3+1
Protože chceme BCH kód, pro generující polynom vezmeme minimální polynomy pro α a α3, tedy máme g=(x4+x3+x2+x+1)(x4+x+1) Jelikož zároveň n=14, kontrolní polynom h má stupeň 6, z čehož plyne, že máme 27 kódových slov. Teď by nás zajímalo, jaká je minimální vzdálenost. Spočteme si g=x8+x7+x6+x4+1 Z toho plyne, že existuje kódové slovo váhy 5, tudíž d5. Pro dané slovo w vyjádřené jako polynom platí wCw(α)=0w(α3)=0 Na základě tohoto poznatku si definujeme něco jako kontrolní matici tak, aby platilo wCH~w=0: H~(1αα2α3α4α5α6α141α3α6α9α121α3α12) Každý prvek matice si vyjádříme jako čtyřsložkový sloupcový vektor odpovídající koeficientům u polynomu: H(100011010010001000000101100011000111001011011111) To už je skutečná kontrolní matice. Mějme nějaké slovo u, u kterého se staly dvě chyby, tudíž je ve vzdálenosti 2 od nějakého kódového slova: u=w+ew+xi+xj,wC,ij. Potom Hu=He=Hxi+Hxj. Zároveň Hu=(u(α)u(α3))=(e(α)e(α3))=(αi+αjα3i+α3j)(s1s3) Jelikož α je generátor, máme αiαj a tedy s10. Z binomické věty s13=α3i+α3j+α2iαj+αiα2j=s3+αiαjs1 αiαj=s3s11+s12 Zavedeme-li ještě další formální proměnnou λ, můžeme psát (λ+αi)(λ+αj)=λ2+(αi+αj)λ+αiαj=λ2+s1λ+s3s11+s12 Tudíž pokud umíme řešit takovouto kvadratickou rovnici, můžeme si snadno dopočíst, kde se staly chyby. Uvažujme ještě případ, kdy nastala jen jedna chyba, tedy e=xi. Potom máme s1=αi,s3=α3i a dostaneme přesně tu samou rovnici, akorát s nulou místo xj. Tedy i tento případ dokážeme detekovat. Celkově umíme rozpoznat a opravit až dvě chyby, tudíž d=5.
Věta (Davenport). Nechť 𝔽q je konečné těleso s q=pm prvky (tedy pr, kde r je ireducibilní polynom stupně m). Potom existuje primitivní prvek β𝔽q takový, že {βpi|i=0,,m1} je báze 𝔽q jakožto lineárního prostoru nad p.
Lemma. Mějme kvadratickou rovnici tvaru aλ2+bλ+c,a,b0. Potom bez újmy na obecnosti stačí řešit rovnici tvaru μ2+μ+d.
Věta. Mějme v tělese 𝔽2m kvadratickou rovnici aλ2+c=0,a0, kterou můžeme substitucí dca převést na tvar λ2+d=0. Nechť d=i=0m1diβ2i, kde β je primitivní prvek z Davenportovy věty. Potom řešení rovnice je λ=i=0m2di+1β2i+d0β2m1
Věta. Májme v tělese 𝔽2m kvadratickou rovnici μ2+μ+d=0. Nechť d=i=0m1diβ2i, kde β je primitivní prvek z Davenportovy věty. Potom rovnice má řešení, právě když i=0m1di0(mod2) V takovém případě jsou dvě řešení ve tvaru μ(k)i=0m1(k+j=1idj)β2i,k{0,1}

Když jsme jako generátor vzali α, dostali jsme Hammingův kód, který umí opravovat jednu chybu. S generátory α,α3 jsme dostali kód, který umí opravovat dvě chyby. Co kdybychom zkusili přidávat další liché mocniny?

Definice. Nechť a1,,ad jsou prvky nějakého tělesa. Potom Vandermondova matice je V(a1,,ad)(a10ad0a1d1add1)
Lemma. detV(a1,,ad)=detV(a1,,ad1)i=1d1(adai)
Věta. detV(a1,,ad)=k=1di=1k1(akai)
Definice. Nechť d,m a α je prvek řádu n v tělese 𝔽2m. BCH kód pro vzdálenost d je cyklický kód délky n s generujícími kořeny α,α2,,αd1.
Věta. BCH kód pro vzdálenost 2t+1 má skutečně vzdálenost alespoň 2t+t, tedy spravuje t chyb.

Teď je otázkou, jak nějak efektivně dekódovat BCH kód. Dejme tomu, že bylo vysláno slovo wC a přijato slovo v=w+e,wt(e)p. Pomocí kontrolní matice snadno spočteme syndrom (s1,,s2t)THe=Hv. Je-li množina pozic, na kterých se staly chyby, potom z definice H platí

sk=iαki

Takže je snadné spočítat syndromy z indexů, ale my chceme udělat přesný opak – známe syndromy a máme určit indexy. Pro ={i1,,ip} si označme ajαij,jp^ a definujme lokátor:

fj=1p(1apx)

Pokud najdeme kořeny lokátoru x1,,xp, můžeme spočíst aj=xj1 a to si potom dohledáme v nějaké tabulce, čímž zjistíme ij. Takže úplně stačí najít kořeny lokátoru, který ale samozřejmě neznáme. Jen víme, že má nějaké koeficienty:

f=j=0pfjxj

Zřejmě f0=1. Spočteme si z obou tvarů formální derivaci:

f=j=1pjfjxj1=j=1p2f2j+1x2j f=j=1paj1ajxf=fj=1p(ajk=0(ajx)k)=fk=1xk1j=1pajk=fk=1xk1sk

Porovnáme obě vyjádření:

j=1p2f2j+1x2j=(j=0pfjxj)k=1xk1sk f1=s10=s2+f1s1f3=s3+f1s2+f2s10=s4+f1s3+f2s2+f3s1f5=s5+f1s4+f2s3+f3s2+f4s10=s2p1+s2p2s1++sp1fp

Zapíšeme si to do matičkové podoby:

(s1s3s5s2p1)=(1000000s2s110000s4s3s2s1100s2p2s2p3sp1)=(f1f2f3fp)

Akorát je tu trochu problém, že neznáme p. Dá se dokázat, což tady dělat nebudeme, že pokud matici pro dané p označíme Mp, potom pro to správné p je Mp regulární, Mp+1 taky a všechny další už ne. Takže podle toho to už najdeme.

Plotkinova mez

Definice. Pro n,d označme A(n,d) maximální M takové, že existuje (n,M,d) kód nad 2.
Lemma. Pro každé n,r je A(n,2r1)=A(n+1,2r).
Lemma. Pro každé n,d je A(n,d)2A(n1,d).
Lemma. Nechť n,d,2d>n. Potom A(n,d)2d2dn
Věta (Plotkinova mez). Nechť n,d. Potom:
  1. Je-li d sudé a 2d>n, potom A(n,d)2d2dn.
  2. Je-li d sudé a 2d=n, potom A(n,d)4d.
  3. Je-li d liché a 2d+1>n, potom A(n,d)2d+12d+1n.
  4. Je-li d liché a 2d+1=n, potom A(n,d)4d+4.
Definice. Hadamardova matice je matice H{±1}n×n taková, že HHT=nI.
Lemma. Je-li n3 a existuje Hadamardova matice velikosi n, potom n je násobek 4.
Definice. Nechť An×n,Bs×s jsou čtvercové matice. Potom jejich tenzorový součin je AB(A1,1BA1,nBAn,1BAn,nB)
Lemma. (AB)T=ATBT
Lemma. (AB)(CD)=ACBD
Věta (Sylvesterova konstrukce). Jsou-li Hn a Hm Hadamardovy matice, potom HnHm je Hadamardova matice.
Definice. Nechť C1 je (n1,M1,d1)-kód a C2 je (n2,M2,d2)-kód. Potom C1⊕︎C2 je (n1+n2,min{M1,M2},d1+d2)-kód, který vytvoříme tak, že nějak seřadíme slova v obou kódech a spojíme ta na stejných indexech (pokud má jeden víc slov, přebytečná zahodíme).
Definice. Nechť C je (n,M,d)-kód a b. Potom bCC⊕︎⊕︎Cn× je (bn,M,bd)-kód.

Vytvoříme-li kód An, jehož kódová slova budou řádky Hadamardovy matice velikosti n×n (s přemapováním 10,11), zjevně to bude (n,n,n2)-kód.

Navíc pokud všechny řádky a sloupce vynásobíme tak, aby začínaly jedničkou, můžeme první sloupec beze strachu smazat a dostaneme tím (n1,n,n2)-kód 𝒜n, který navíc obsahuje nulové slovo.

A pokud z něj vezmeme jen slova začínající nulou a tyto nuly smažeme, dostaneme (n2,n2,n2)-kód 𝒜n (to, že má přesně n2 slov, plyne z toho, že druhý smazaný sloupec byl kolmý na první smazaný sloupec).

Teď se vraťme k An a vytvořme kód Bn tím, že přidáme ke všem slovům jejich negaci. S trochou přemýšlení ověříme, že je to (n,2n,n2)-kód.

Věta (Levenshteinova, napsaná podle Volce). Plotkin s „=“, když Hadamard dá.
Věta (Levenshteinova, napsaná normálně). Nechť n,d. Potom
  1. Je-li d sudé a 2d>n a platí Hadamardova domněnka, potom A(n,d)=2d2dn.
  2. Je-li d sudé, 2d=n a existuje Hadamardova matice velikosti n×n, potom A(n,d)=4d.
  3. Je-li d liché a 2d+1>n a platí Hadamardova domněnka, potom A(n,d)=2d+12d+1n.
  4. Je-li d liché a 2d+1=n a existuje Hadamardova matice velikosti (n+1)×(n+1), potom A(n,d)=4d+4.