Ciklikus, lineáris kódok megvalósítása shift-regiszterekkel
Nem szisztematikus generálás Adott egy C(n,k) lineáris ciklikus kód. Az u(x) üzenetpolinomból a c(x) kódpolinomot legegszerűbben úgy kapjuk, hogy az üzenetet megszorozzuk a g(x) generátorpolinommal:
Végezzük el a szorzást! Vegyük észre, hogy a kódpolinom együtthatók a jól ismert konvolúciós formulával számíthatóak ki. A diszkrét konvolúciót megvalósító HW a FIR-szűrő (vagy súlyozott előrecsatolt shift-regiszter)
Polinomszorzás FIR-szűrővel Tekintsünk egy konkrét (bináris) példát: n=8 k=6 g(x)=1+x2 (Gyakorlásként leellenőrizhetjük, hogy g(x) tényleg lehet-e n=8 hosszú ciklikus kód generátorpolinomja: Azt kell megvizsgálni, g(x) osztja-e az x8-1 polinomot.) Legyen az üzenet például u(x)=1+x+x5
A FIR-szűrő kimenete az első időrésben a c0 együtthatót adja: (az induláskor a belső álapotok mindig 0-k) u0=1 D D g0=1 g1=0 g2=1 S c0=1
a 2. időrésben a c1 együtthatót kapjuk: D D g0=1 g1=0 g2=1 S c1=1
a 3. időrésben a c2 együtthatót kapjuk:
néhány lépést kihyagva, az utolsó, 8 néhány lépést kihyagva, az utolsó, 8. időrésben a c7 együtthatót kapjuk: u5=1 D D g0=1 g1=0 g2=1 S c7=1
Szisztematikus generálás polinomosztással Lineáris, ciklikus C(n,k) kódok szisztematikus generálásának egyik legegyszerűbb módszere a következő: Ebben az esetben az u(x) üzenet „eltoltjának” g(x)-szel való osztását kell implementálnunk, és az osztás maradékát használjuk föl paritásszegmensként. Az előbbi példában láttuk, hogy a csupa zérussal rendelkező diszkrét szűrő, a FIR-szűrő alkalmas polinomszorzás implementálására. A csak pólusokat tartalmazó diszkrét IIR szűrő pedig az osztás megvalósítására lesz alkalmas.
Példa Itt az utolsó sorban az euklideszi osztás eredményét adtuk meg. Ezek szerint a kód a következő: Most azt mutatjuk meg, hogyan implementálható ez a számítás visszacsatolt shift-regsizter segítségével.
Az általános „recept” a következő: 0,..,0, u1,…,uk-1 -g0 -g1 -gn-k-1 A szűrő bemenetére az n-k számú 0-val kiegészített üzenetet tesszük (ez megfelel az xn-k-val való szorzásnak) . A szűrő súlyait (karakterisztikus polinom) az osztó g(x) polinom együtthatóiból vesszük (mivel g(x) főpolinom, így gn-k=1). A regiszter n lépés után a maradékot fogja tartalmazni. Az inicializálás 0-kkal történik.
Példánk esetében ez a következő kapcsolást jelenti: 00110001 a b a b kezdőállapot x7 lépés 1 x6 2. x5 3. 4. 5. 6. x 7. 8. maradék: a+bx
Példa GF(3)-beli osztásra Oldjuk meg shift-regiszterrel az alábbi polinomosztási feladatot:
1002 a b -2=1 -1=2 a b kezdőállapot x3 lépés 2 x2 2. x 3. 1 4. x3 lépés 2 x2 2. x 3. 1 4. maradék: a+bx
Kódgenerálás paritásellenőrző polinommal uk-1 uk-2 u0 -h0 -hk-1 -hk-2 -h1
Példa
2. lépés 0 1 1 0 0 0 1. lépés 1 1 0 0 0 1 inicializálás 1 1 1 Megjegyzés: most elég két ütemig működtetni a szűrőt, hiszen két paritásbitet kell csak generálnunk. Ez a két paritásbit a 2. lépésben az első két regiszter tartalma, azaz 01, (hiszen az üzenettel inicializáltuk a regisztert, így először az üzenetbitek lépnek ki a kimeneten.