• No results found

Avkodning av cykliska koder - baserad på Euklides algoritm

N/A
N/A
Protected

Academic year: 2022

Share "Avkodning av cykliska koder - baserad på Euklides algoritm"

Copied!
31
0
0

Loading.... (view fulltext now)

Full text

(1)

Karlstads universitet 651 88 Karlstad Universitetsgatan 2 Tfn 054-700 10 00 Fax 054-700 14 60

information@kau.se www.kau.se

Avkodning av cykliska koder - baserad på Euklides algoritm

Decoding of cyclic codes - based on Euclidean algorithm

Mathilda Dahlin

Fakultet: Teknik och naturvetenskap Ämne: Matematik

Högskolepoäng: 15 hp Handledare: Igor Gachkov Examinator: Niclas Bernhoff Datum:

(2)

2

Sammanfattning

Dagens samhälle kräver att informationsöverföring sker på ett effektivt och korrekt sätt, det vill säga att den information som når mottagaren motsvarar den som skickades från början.

Det finns många avkodningsmetoder för att lokalisera och rätta fel. Syftet i denna uppsats är att studera en av dessa, en som baseras på Euklides algoritm och därefter illustrera ett exempel på hur metoden används vid avkodning av en tre - rättande BCH - kod. Först presenteras grunderna inom kodningsteorin, bland annat vad en kod är och viktiga begrepp som bör kännas till. Sedan följer linjära koder, cykliska koder och BCH - koder i nämnd ordning, för att till sist presentera avkodningsprocessen. Det visar sig att det är relativt enkelt att rätta ett eller två fel, men när tre eller fler fel uppstår blir det betydligt mer komplicerat. Då krävs någon speciell metod.

Nyckelord: kodord, paritetskontrollmatris, generatormatris, syndrom, BCH - kod, kroppsutvidgning, Euklides algoritm - metoden, felsökningspolynom.

(3)

3

Förord

Det område som jag har valt att skriva om kallas för felrättande koder. Mitt intresse för denna gren inom matematiken uppstod i och med att Igor Gachkov berättade om sitt

forskningsområde i en mindre kurs jag läste som hette ”Matematik i vetenskap och samhälle”.

Det har varit fascinerande och intressant att arbeta med denna uppsats då jag upplever att kodningsteorins resultat har spelat en stor roll för samhället.

Jag vill skänka ett stort tack till Igor som på ett pedagogiskt sätt väglett mig och gett mig verktygen jag har behövt för att kunna fullfölja uppsatsen.

(4)

4

Innehållsförteckning

1 Introduktion………...………... 5

2 Koder………... 7

3 Linjära koder………... 11

4 Cykliska koder………....………... 15

5 Avkodning för BCH - koder..……... 21

6 Euklides algoritm - metoden………... 25

7 Exempel på avkodning baserad på Euklides algoritm…... 27

8 Diskussion... 30

9 Källförteckning………... 31

(5)

5

1 Introduktion

Tänk dig att du sitter vid busshållplatsen och väntar på en buss som ska ta dig in till centrum.

Du vet att bussnumret är 521 för du har åkt denna rutt många gånger tidigare. Det är sen höst så även fast det är tidig eftermiddag så har mörkret lagt sig och en svag dimma skymmer sikten. Du ser en buss närma sig men vinkar åt busschauffören att åka vidare eftersom det var fel nummer. Buss 527 passerar nämligen också denna hållplats. Men precis när bussen

passerar dig inser du att du har sett fel och att det står 521.

Under processen när information skickas och tas emot kan det uppstå fel på vägen, vilket resulterar i att den mottagna informationen inte motsvarar den som skickades från början.

Exemplet ovan illustrerar just detta, men att missa bussen kanske inte är hela världen. I vissa situationer är det ett måste att kunna upptäcka och reparera felen som uppstår, vilket helt klart är lättare sagt än gjort. I exemplet ovan skickas informationen i form av 3 siffror från en maskin till en människa [3, s.3]. Människan är ofta kapabel till att rätta fel som uppstår, antingen med hjälp av kunskap eller sunt förnuft. Låt säga att en person lyssnar på en väderprognos på radion och hör ordet roligt. Förmodligen rättas ordet till soligt då det är mycket troligare att väderprognosen innefattar soligt väder än roligt väder. Denna förmåga har inte en maskin.

I dagens samhälle sker en stor del av all kommunikation och informationsöverföring digitalt.

Pengaöverföring till ett bankkonto, mail som skickas från en enhet till en annan,

kommunikation mellan ett flygplan och dess ledningscentral, eller bilder som skickas från Saturnus till Jorden, är exempel på detta. Det går inte att undvika att fel uppstår. Det är därför kodningsteorin finns till, för att studera metoder som på ett effektivt och korrekt sätt kan överföra information från en enhet till en annan [1, s.1-2].

Ett meddelande som skickas digitalt konverteras till elektroniska signaler. Ett mål är att transportera dessa från en plats till en annan, vilket med ett ord kan beskrivas som

kommunikation. Det andra är att kunna bevara meddelandet under en längre tid, från nu till då, vilket kallas för datalagring [3, s.3-4].

Kodningsteorin hade sin start i slutet av 1940-talet och det var Claude Shannon som lade grunden för denna teori. 1948 skrev han artikeln ”En matematisk teori om kommunikation”

[4, s.1]. Sedan dess har kodningsteorin utvecklats i en rasande fart och lett fram till de komplexa avkodningsmetoder som existerar idag. Från början ansågs kodningsteorin tillhöra

(6)

6

ingenjörernas kunskapsområde men matematikerna har tagit över detta område mer och mer.

Idag är det självklart att kodningsteorin med sina komplexa matematiska tekniker utgör en stor gren inom matematiken.

Richard Hamming var en annan viktig person som spelade en stor roll för kodningsteorins genombrott. Han var en av de första som konstruerade en felrättande kod, hans vid namn Hamming koden [5].

(7)

7

2 Koder

Informationen betraktas som ett block av symboler från en ändlig mängd. Den vanligaste ändliga mängden består av endast 0 och 1, den så kallade binära mängden och det är denna som studeras i detta arbete [3, s.5]. Informationssymbolerna 𝑥 = 𝑥1𝑥2… 𝑥𝑘 kodas till ett kodord 𝑣 = 𝑣1𝑣2… 𝑣𝑛, 𝑛 ≥ 𝑘. 𝑣𝑖 = 𝑥𝑖, 1 ≤ 𝑖 ≤ 𝑘 och 𝑣𝑘+1… 𝑣𝑛 är kontrollsymboler. 𝑣𝑖 1 ≤ 𝑖 ≤ 𝑛 är antingen 0 eller 1 [2, s.1-3]. Kodorden bildar tillsammans en kod 𝐶.

Det existerar totalt 2𝑛 binära vektorer av längd 𝑛, eftersom varje koordinat kan anta värdet 0 eller 1. Mängden som består av alla dessa vektorer kallas för 𝑉. En kod 𝐶 med ett specifikt 𝑘 består av 2𝑘 stycken kodord. En kod 𝐶 ≠ 𝑉 är alltså en delmängd av 𝑉 [4, s.6].

𝐶 ⊂ 𝑉

Figuren nedan illustrerar en kommunikationskanal som överför information från en enhet till en annan. Kodaren kodar informationsordet till ett kodord. Under processen då ett

meddelande transporteras utsätts det för något som kallas brus vilket resulterar i att det mottagna meddelandet inte motsvarar det som skickades från början. Det är avkodaren som rättar detta fel och återställer meddelandet.

Figur 1. Kommunikationskanal [4, s.2]

Definition 1: Hammingavståndet mellan två kodord 𝑢 och 𝑣 är antalet positioner där dessa skiljer sig åt. Avståndet betecknas 𝑑(𝑢, 𝑣) [4, s.10].

T.ex. är 𝑑((0,1,0,1), (1,1,1,1)) = 2. Det är möjligt att beräkna avståndet mellan det mottagna ordet 𝑤 och alla andra kodord, men beroende på hur många kodord som existerar i koden, kan detta ta lång tid.

Definition 2: Vikten av ett kodord 𝑢 är antalet symboler som är lika med 1. Vikten betecknas 𝑤𝑡(𝑢) [4, s.9].

T.ex. är 𝑤𝑡(0,1,1,0) = 2. Följande samband råder mellan avstånd och vikt

𝑑(𝑢, 𝑣) = 𝑤𝑡(𝑢 − 𝑣) (1)

Meddelande Kodare Kanal Mottaget

meddelande Avkodare

BRUS

Meddelande

(8)

8

ty både vänsterled och högerled anger på hur många positioner kodorden skiljer sig åt.

Bruset skrivs i form av en felvektor som betecknas 𝑒 och 𝑤 = 𝑣 + 𝑒, där 𝑣 är den kodvektor som skickades från början och 𝑤 är den mottagna vektorn [2, s.8].

Exempel 1: 𝑣 = 01100 och 𝑤 = 10100 ger 𝑒 = (10100) − (01100) = 11000.

Notera att beräkningarna ovan utförs modulo 2 och att 1:orna i vektorn 𝑒 talar om hur många och på vilken position felen har uppstått. I exempel 1 har det uppstått två fel, på första och andra positionen.

En kommunikationskanal med sannolikheten för att en siffra förblir den samma eller ändras under överföringen, betecknade 𝑞 respektive 𝑝 = 1 − 𝑞 kallas för en binär symmetrisk kanal.

Den kallas så eftersom den inte har något minne och består endast av siffrorna 0 och 1 [4, s.2].

Ett begrepp som är väsentligt för att beskriva hur många fel en kod kan upptäcka respektive rätta är minimalavståndet och är precis som det låter, det minsta hammingavståndet mellan två valfria kodord i koden och betecknas 𝑑 [2, s.9]. En kod med längd 𝑛, 2𝑘 kodord och minimalavstånd 𝑑 betecknas som en (𝑛, 𝑘, 𝑑) kod.

När ett meddelande skickas finns det tre olika möjligheter för den mottagna vektorn 𝑤. Det kan vara samma kodord som sändes, ett annat kodord eller inget kodord alls. Om det

mottagna ordet 𝑤 är ett kodord, men inte detsamma som skickades från början, upptäcks inte felet [3, s.16-17].

Sats 1: För en kod 𝐶 kan 𝑡 eller färre fel upptäckas om och endast om 𝑑 ≥ 𝑡 + 1.

Figur 2. Minimalavstånd för att upptäcka t eller färre fel [3, s.17]

Bevis 1: Om 𝑑(𝑢, 𝑣) ≤ 𝑡 och 𝑤(𝑒) ≤ 𝑡, kan ett kodord transformeras till det andra och tvärtom. Som nämnt tidigare, upptäcks inte detta men om 𝑑(𝑢, 𝑣) ≥ 𝑡 + 1 kan exakt 𝑡 eller färre fel upptäckas ty om ett fel av vikt 𝑡 uppstår kommer ett kodord med säkerhet

transformeras till ett ord som inte är ett kodord [3, s.17-18].

(9)

9

Det är viktigt att skilja på en felupptäckande kod och en felrättande kod. Nedan följer en sats som inte endast gäller för att upptäcka 𝑡 eller färre fel, utan även för att rätta dem.

Sats 2: Om en kod 𝐶 har minimalavstånd 𝑑, kan 𝐶 rätta 𝑡 =𝑑−12 eller färre fel. Omvänt gäller också.

Figur 3. Minimalavstånd för att rätta t eller färre fel, 𝑤 ∈ 𝑆𝑡(𝑢) ⋂ 𝑆𝑡(𝑣) [4, s.11]

Bevis 2: Anta att två sfärer med radien 𝑡 =𝑑−12 runt varsitt kodord skär varandra, dvs. att 𝑆𝑡(𝑢) ⋂ 𝑆𝑡(𝑣) är en icke-tom mängd och att vektorn 𝑤 tillhör snittet. Enligt triangelolikheten gäller att 𝑑(𝑢, 𝑣) ≤ 𝑑(𝑢, 𝑤) + 𝑑(𝑤, 𝑣) men 𝑑(𝑢, 𝑣) ≤ 2𝑡. 2𝑡 ≤ 𝑑 − 1 vilket medför att 𝑑(𝑢, 𝑣) ≤ 𝑑 − 1. Men 𝑑(𝑢, 𝑣) = 𝑤𝑡(𝑢 − 𝑣) ≥ 𝑑 eftersom (𝑢 − 𝑣) är skiljt från nollvektorn i 𝐶. Detta ger en motsägelse och därmed är de två sfärerna osammanhängande. Detta betyder att den mottagna vektorn 𝑤 befinner sig i en sfär med radien 𝑡 kring ett unikt kodord 𝑣, om 𝑡 eller färre fel uppstår. 𝑤 kodas då av som 𝑣 [4, s.11-12].

Exempel 2: Om en kod 𝐶 har minimalavståndet 𝑑 = 7 kan 3 eller färre fel rättas ty

𝑡 =𝑑−12 =7−12 = 3.

Sats 3: För en kod 𝐶 med längd 𝑛 och som kan rätta 𝑡 eller färre fel gäller |𝐾| ≤1+𝑛+(𝑛2𝑛

2)+⋯+(𝑛𝑡) (2) och kallas hamminggränsen för koden 𝐶. |𝐾|är det maximala antalet kodord som koden kan innehålla [1, s.66].

En förklaring till (2) är att sfärerna runt alla 𝐾 stycken kodord innehåller vardera

1 + 𝑛 + (𝑛2) + ⋯ + (𝑛𝑡) vektorer, men det finns totalt 2𝑛 binära vektorer av längd 𝑛 [1, s.65].

(10)

10

En känd kod är den så kallade Hammingkoden (7,4,3), vilken rättar endast ett fel [3, s.67].

Den består av 4 informationssymboler och 𝑛 − 𝑘 = 7 − 4 = 3 kontrollsymboler.

Informationsdelarna 𝑎𝑏𝑐𝑑 är 0000, 0001, 0010, 0100, … , 1111 och totalt finns det 24 = 16 kodord, där kontrolldelen fås av (3), (4) och (5).

𝑒 = 𝑎 + 𝑐 + 𝑑 (3) 𝑓 = 𝑎 + 𝑏 + 𝑐 (4) 𝑔 = 𝑏 + 𝑐 + 𝑑 (5) Exempel 3: Hammingkoden (7,4,3) har följande hamminggräns

|𝐾| ≤1+727 = 16.

Alltså finns 16 kodord i koden. Detta stämmer.

(11)

11

3 Linjära koder

För en linjär kod 𝐶 innebär det att om 𝑢 och 𝑣 tillhör koden, gör även 𝑢 + 𝑣 det. Alltså 𝐶 måste vara sluten under addition. Notera att 𝑢 + 𝑣 = 𝑢 − 𝑣 över ℤ2. En linjär kod måste även innehålla nollvektorn eftersom 𝑣 + 𝑣 = 0. Istället för att mäta avståndet mellan den mottagna vektorn 𝑤 och alla de andra vektorerna i koden, kan enligt (1), den vektor med minst vikt väljas. En linjär kod kan betraktas som ett linjärt rum [1, s.27].

Skillnaden på beteckningen av en vanlig kod och en linjär kod är att en vanlig kod omges av vanliga parenteser medan en linjär kod omges av hakparanteser. Alltså en linjär kod betecknas [𝑛, 𝑘, 𝑑].

Definition 3: En generatormatris 𝐺 till en linjär kod 𝐶 är den matris vars rader består av 𝑘 linjärt oberoende vektorer som utgör en bas för koden [1, s.42].

Om alla kodvektorer i en linjär kod 𝐶 kan skrivas som en linjärkombination 𝑙1𝑒1+ ⋯ + 𝑙𝑘𝑒𝑘 där 𝑙𝑖 är antingen 0 eller 1, är {𝑒1, … , 𝑒𝑘} kodens bas. Kodens dimension är då 𝑘 och koden innehåller 2𝑘 kodord. En fördel med att använda linjära koder är att alla kodord kan fås av endast 𝑘 stycken [4, s.6].

För att koda ett meddelande till ett kodord 𝑣 multipliceras 𝐺 med informationsordet 𝑎 [2, s.5].

𝐺𝑎𝑇 = 𝑣𝑇 (6) 𝐺 är på så kallad standardform om de 𝑘 första kolumnerna bildar en 𝑘 × 𝑘 identitetsmatris. Då motsvarar de 𝑘 första kolumnerna informationsvariabler och de 𝑛 − 𝑘 sista kolumnerna kontrollvariabler. 𝐺 = [𝐼𝑘|𝐴] och har dimensionen 𝑘 × 𝑛 [1, s.48-49].

En annan fördel med linjära koder är att det är relativt enkelt att kontrollera om ett mottaget ord är ett kodord eller inte, vilket kräver en speciell matris.

Definition 4: En paritetskontrollmatris 𝐻 till en linjär kod 𝐶 är den matris vars rader består av koefficienterna till de ekvationer som utgör själva koden, de så kallade

paritetskontrollekvationerna [4, s.7]. 𝐻 har dimensionen (𝑛 − 𝑘) × 𝑛 och är på formen 𝐻 = [−𝐴𝑇|𝐼𝑛−𝑘] [4, s.9].

T.ex. ekvation (3) ger att den första radvektorn i paritetskontrollmatrisen 𝐻 för Hammingkoden är 1011100.

(12)

12 Ett mottaget ord 𝑤 är ett kodord om 𝑤 uppfyller

𝐻𝑤 = 0 (7) Varken generatormatrisen eller paritetskontrollmatrisen har något med avkodningsprocessen att göra. 𝐺 används för att koda ett informationsord till ett kodord och 𝐻 för att upptäcka om ett mottaget ord är ett kodord eller inte.

Den vanligaste metoden för att koda av ett meddelande kallas Maximal sannolihetsavkodning.

Denna metod går ut på att välja den kodvektor som har minst hammingavstånd från 𝑤 med hjälp av en standarduppställnig [3, s.47]. En standarduppställning 𝑆 till en linjär kod har dimensionen 2𝑛−𝑘× 2𝑘 och denna uppställning i form av en tabell innehåller alla möjliga binära ord av längd 𝑛. Alla orden förekommer exakt en gång. Raderna namnges från 0 till 2𝑛−𝑘− 1 och kolumnerna från 0 till 2𝑘− 1. Raderna konstrueras en i taget och ordet 𝑢𝑖,𝑗 betecknar ordet i rad 𝑖 och kolumn 𝑗. Rad 0 består av alla kodord i koden i någon ordning men något som är bestämt är att 𝑢0,0 = 0. 𝑢1,0 väljs till ett element som inte finns med i första raden. Ofta väljs detta element så att det har minsta möjliga vikt och kallas då för

sidoklassledare. De resterande elementen i rad 1 bestäms genom att addera dess sidoklassledare och kodordet överst i tabellen i samma kolumn [3, s.47-48].

𝑢𝑖,𝑗= 𝑢𝑖,0+ 𝑢0,𝑗, ∀ 𝑖, 𝑗 (8) Det mottagna ordet 𝑤 avkodas som 𝑣 = 𝑤 − 𝑒 där 𝑒 betecknar sidoklassledaren i samma rad som 𝑤. Elementen i varje rad utgör en sidoklass för koden 𝐶 [3, s.51-53].

Exempel 4: Trippelrepetionskoden med två informationssymboler där 0 kodas som 000 och 1 som 111 betraktas. Totalt finns 26 = 64 ord i standarduppställningen varav 22 = 4 av dessa är kodord. Nedan är standarduppställningen för denna kod till och med rad 5.

(13)

13

(9)

Tabell 1. Standarduppställning till och med rad 5 för Trippelrepetionskoden

Om t.ex. det mottagna ordet 𝑤 skulle vara 000011 avkodas detta som 𝑣 = 000011 − 000100 = 000111 vilket är kodordet överst i tabellen i samma kolumn som 𝑤.

Definition 5: För en linjär kod C med paritetskontrollmatris 𝐻 ges syndromet till det mottagna ordet 𝑤 av 𝐻𝑤 = 𝑠, där syndromet betecknas 𝑠 [3, s.56].

Eftersom den mottagna vektorn 𝑤 kan skrivas som 𝑤 = 𝑣 + 𝑒 gäller följande [1, s.57-58].

𝐻𝑤 = 𝐻(𝑣 + 𝑒) = 𝐻𝑣 + 𝐻𝑒 = 0 + 𝐻𝑒 = 𝑠 (10) Om endast ett fel uppstår, låt 𝑒𝑖 = 1 och alla andra koordinater i felvektorn 𝑒 vara lika med noll.

[

111213 · · · ℎ1𝑛

212223 · · · ℎ2𝑛

·

·

·

(𝑛−𝑘)1(𝑛−𝑘)2(𝑛−𝑘)3 · · · ℎ(𝑛−𝑘)𝑛

]

[ e1 𝑒2

·

· · 𝑒𝑛]

= [

1𝑖2𝑖

·

·

· ℎ(𝑛−𝑘)𝑖]

(11)

Enligt (11) är syndromet den 𝑖:te kolumnen i 𝐻, vilket innebär att felet har inträffat på

position 𝑖. Alltså är det enkelt att koda av den mottagna vektorn när endast ett fel har uppstått.

Vid två fel blir det mer komplicerat. Låt säga att 𝑒𝑖, 𝑒𝑗 = 1 och att alla andra koordinater i felvektorn 𝑒 är lika med 0.

000000 000111 111000 111111

100000 100111 011000 011111

010000 010111 101000 101111

001000 001111 110000 110111

000100 000011 111100 111011

000010 000101 111010 111101

(14)

14

[

111213 · · · ℎ1𝑛

212223 · · · ℎ2𝑛

·

·

·

(𝑛−𝑘)1(𝑛−𝑘)2(𝑛−𝑘)3 · · · ℎ(𝑛−𝑘)𝑛

]

[ e1 𝑒2

·

· · 𝑒𝑛]

= [

1𝑖+ ℎ1𝑗2𝑖+ ℎ2𝑗

·

·

·

(𝑛−𝑘)𝑖+ ℎ(𝑛−𝑘)𝑗]

(12)

För att hitta syndromet i 𝐻 måste alla kolumnerna i 𝐻 adderas parvis med varandra. Vidare, när 𝑡 fel uppstår krävs (𝑛𝑡) additioner. Detta är ingen effektiv metod. Maximal

sannolikhetsavkodning är en teoretisk metod men det som behövs är en effektiv metod som fungerar för fler fel.

Sats 4: En linjär kod 𝐶 med paritetskontrollmatrisen 𝐻 har minimalavstånd 𝑑 ≥ 𝑟 + 1 om och endast om 𝑟 kolumner i 𝐻 är linjärt oberoende [3, s.59].

Om endast parametrarna i en [𝑛, 𝑘, 𝑑] kod är kända, råder ingen kunskap om vilka kodord som ingår i koden. Men om det skulle finnas en effektiv metod för att konstruera

paritetskontrollmatrisen 𝐻 till en kod, ges alla kodord i koden av lösningarna till (7).

Om endast ett fel uppstår, är det lätt att konstruera 𝐻 eftersom kolumnerna i 𝐻 är alla olika vektorer av längd (𝑛 − 𝑘) förutom nollvektorn. Att konstruera 𝐻 när fler än ett fel uppstår, finns det dock ingen effektiv metod för. Därför utvidgas teorin till cykliska koder som bygger på polynom istället för matriser.

(15)

15

4 Cykliska koder

Cykliska koder definieras med hjälp av polynom. Ett ord 𝑣 = 𝑣0𝑣1… 𝑣𝑛−1 av längd 𝑛 och där 𝑣𝑖 är antingen 0 eller 1 kopplas till polynomet

𝑣(𝑥) = 𝑣0+ 𝑣1𝑥 + 𝑣2𝑥2 +··· +𝑣𝑛−1𝑥𝑛−1 (13) Exempel 5: 𝑣 = 1110 med 𝑛 = 4 kopplas till 𝑣(𝑥) = 1 + 𝑥 + 𝑥2 [1, s.91].

Ett cykliskt skift av ett ord 𝑣 betecknas 𝜋(𝑣) och flyttar den sista symbolen i 𝑣 längst fram och de resterande symbolerna flyttas ett steg till höger.

Definition 6: En kod C är cyklisk om den är linjär och om det cykliska skiftet av varje kodord också är ett kodord. Alltså om kodordet 𝑣 = 𝑣0𝑣1… 𝑣𝑛−1 existerar i koden, gör även dess skift 𝜋(𝑣) = 𝑣𝑛−1𝑣0… 𝑣𝑛−2 det.

𝜋(𝑣) motsvaras av polynomet 𝑥𝑣(𝑥) mod 𝑥𝑛 − 1. Det 𝑖:te skiftet, 𝜋𝑖(𝑣), till ett ord 𝑣 motsvaras av polynomet 𝑥𝑖𝑣(𝑥) mod 𝑥𝑛− 1.

Exempel 6: 𝑣 = 10 motsvaras av polynomet 𝑣(𝑥) = 1. Det cykliska skiftet av 𝑣, 𝜋(𝑣) = 01 och motsvaras av polynomet 𝑥, vilket är detsamma som 𝑥𝑣(𝑥) = 𝑥 · 1 = 𝑥.

Definition 7: Om ett kodord 𝑣 och alla dess cykliska skift 𝑆 = {𝑣, 𝜋(𝑣), . . . , 𝜋𝑛−1(𝑣)} spänner upp koden 𝐶, (𝐶 = 〈𝑆〉), kallas 𝑣 för kodens generator, och betecknas 𝑔. Det kan finnas flera generatorer för samma kod [1, s.97].

Exempel 7: 𝑛 = 4 och 𝑘 = 2. 𝑣 = 0101. 𝜋(𝑣) = 1010, 𝜋2(𝑣) = 0101 = 𝑣. 𝑆 =

{0101,1010} ger att kodorden i 𝐶 är 0000, 0101,1010 och 1111. 𝑣 är kodens generator.

Om 𝑐(𝑥) tillhör koden kan detta skrivas som en linjärkombination av elementen i 𝑆.

𝑐(𝑥) = (𝑎0𝑣(𝑥) + 𝑎1𝑥𝑣(𝑥) + ⋯ + 𝑎𝑛−1𝑥𝑛−1𝑣(𝑥)) mod 𝑥𝑛− 1 (14) = (𝑎0+ 𝑎1𝑥 + 𝑎2𝑥2 + ⋯ + 𝑎𝑛−1𝑥𝑛−1)𝑣(𝑥) mod 𝑥𝑛− 1 (15) = 𝑎(𝑥)𝑣(𝑥) mod 𝑥𝑛− 1 (16) Endast en generator motsvarar ett speciellt polynom, det så kallade generatorpolynomet 𝑔(𝑥).

𝑔(𝑥) är unikt och är det polynom som tillhör koden med lägst grad, dvs. (𝑛 − 𝑘) vilket genererar hela koden 𝐶 [1, s.96-98].

Sats 5: 𝑔(𝑥) är generatorpolynomet till en cyklisk kod 𝐶 med längd 𝑛, om och endast om 𝑔(𝑥) är en delare till 𝑥𝑛 − 1 [1, s.100].

(16)

16

𝑥𝑛− 1 = ℎ(𝑥)𝑔(𝑥) (17) ↔

ℎ(𝑥) = (𝑥𝑛− 1)/𝑔(𝑥) (18) ℎ(𝑥) i (18) kallas paritetskontrollpolynomet till koden 𝐶. Generatormatrisen 𝐺 till en cyklisk kod fås enkelt med hjälp av 𝑔(𝑥) och de 𝑘 − 1 första skiften av 𝑔(𝑥). 𝐺 har dimensionen 𝑘 × 𝑛.

𝐺 =

[

𝑔(𝑥) 𝑥𝑔(𝑥) 𝑥2𝑔(𝑥)

·

·

·

· 𝑥𝑘−1𝑔(𝑥)]

(19)

I (19) består raderna i matrisen av koefficienterna till respektive polynom [1, s.91-100].

Kodningsprocessen för en cyklisk kod går ut på att generatorpolynomet multipliceras med informationspolynomet [1, s.98].

𝑣(𝑥) = 𝑔(𝑥)𝑎(𝑥) (20) Systematisk kodning innebär att informationsdelen följer av kontrolldelen.

Informationspolynomet 𝑎(𝑥) multipliceras då med 𝑥𝑛−𝑘 och resultatet divideras med generatorpolynomet. Resten som då fås adderas till 𝑎(𝑥)𝑥𝑛−𝑘 för att få kodpolynomet 𝑣(𝑥) [3, s.224].

Lösningarna till (7) utgör alla kodord i den cykliska koden. Skillnaden mot en linjär kod är att det finns en metod för att finna paritetkontrollmatrisen 𝐻 till en cyklisk kod. Metoden för att konstruera den förklaras lite senare.

Nu definieras 𝑅𝑛 = ℤ2[𝑥]/(𝑥𝑛− 1) där 𝑅𝑛 är en polynomring som består av polynom mod 𝑥𝑛− 1 över 𝐹2 [2, s.189].

Sats 6: En cyklisk kod 𝐶 utgör ett ideal 𝐼 i 𝑅𝑛.

Bevis 6: Anta att 𝐼 är ett ideal i 𝑅𝑛 och motsvarar en cyklisk kod 𝐶. Om

𝑎(𝑥),𝑏(𝑥) ∈ 𝐼 → 𝑎(𝑥) ± 𝑏(𝑥) ∈ 𝐼, vilket följer av definitionen av en kod. 𝑎(𝑥)𝑥 ∈ 𝐼 ty detta

(17)

17

är ett cykliskt skift. På samma sätt gäller att alla cykliska skift av 𝑎(𝑥) ∈ 𝐼. Låt ett element 𝑐(𝑥) ∈ 𝑅𝑛 definieras av

𝑐(𝑥) = 𝑐0+ 𝑐1𝑥 + 𝑐2𝑥2+ ⋯ + 𝑐𝑛−1𝑥𝑛−1 (21) 𝑎(𝑥)𝑐(𝑥) = 𝑐0𝑎(𝑥) + 𝑐1𝑎(𝑥)𝑥 + ⋯ + 𝑐𝑛−1𝑎(𝑥)𝑥𝑛−1 (22) (22) ∈ 𝐼 ty varje element i summan tillhör 𝐼. Av detta följer att 𝐼 är ett ideal i 𝑅𝑛 och

polynomen i 𝐼 motsvarar kodpolynomen i en cyklisk kod [4, s.69-70].

Definition 8: Ett polynom 𝑣(𝑥) = 𝑣0+ 𝑣1𝑥 + 𝑣2𝑥2 +··· +𝑣𝑛−1𝑥𝑛−1 är irreducibelt om 𝑣(𝑥) inte kan faktoriseras som en produkt av två polynom med lägre grad än 𝑣(𝑥). När 𝑥𝑛 − 1 faktoriseras i nedanstående exempel fås alla möjliga generatorpolynom och varje enskilt polynom är irreducibelt eftersom det inte går att faktorisera detta vidare [1, s.111].

Definition 9: En Galoiskropp, betecknad 𝐺𝐹(2𝑚) är en kroppsutvidgning av ℤ2, av ett irreducibelt polynom av grad 𝑚. Om 𝑔(𝑥) är irreducibelt över ℤ2, av grad 𝑚 konstrueras 𝐺𝐹(2𝑚) över detta.

Definition 10: Om varje element i koden är någon potens av 𝛼, är 𝛼 kodens primitiva element och genererar hela koden. Dessutom gäller att 𝛼𝑛 = 1. Om 𝛼 är en rot till 𝑔(𝑥) gäller att 𝑔(𝛼) = 0 [1, s.112].

Definition 11: Minimalpolynomet till 𝛼är det polynom med lägst grad i ℤ2[𝑥], vilket har 𝛼 som en rot.

Exempel 8: 𝑛 = 7.

𝑥7− 1 = (𝑥 + 1)(𝑥3+ 𝑥 + 1)(𝑥3+ 𝑥2 + 1) 𝑔(𝑥) = 1 + 𝑥 + 𝑥3 är irreducibelt över ℤ2. Kroppsutvidgningen

𝐺𝐹(23) = {0,1, 𝛼, 𝛼 + 1, 𝛼2, 𝛼2+ 𝛼, 𝛼2+ 𝛼 + 1, 𝛼2+ 1} innehåller 8 element. Eftersom 𝑥3 = 𝑥 + 1 kan de andra elementen bildas därefter enligt (23). 𝛼 är en rot till 𝑔(𝑥).

(18)

18

(23)

Tabell 2. 𝐺𝐹(8) konstruerad över 1 + 𝑥 + 𝑥3

BCH - koder

BCH - koder utgör en viktig klass inom cykliska koder och konstrueras för att kunna rätta ett visst antal fel.

Definition 12: För 𝑚 ≥ 3 och 𝑡 < 2𝑚−1 existerar en BCH - kod med nedanstående parametrar [1, s.120].

𝑛 = 2𝑚− 1 (24) 𝑛 − 𝑘 ≤ 𝑚𝑡 (25) 𝑑 ≥ 2𝑡 + 1 (26) Det finns en effektiv metod för att konstruera paritetskontrollmatrisen till en BCH - kod, som bygger på rötterna till generatorpolynomet 𝑔(𝑥).

Låt 𝛼 vara en rot till 𝑔(𝑥). Eftersom 𝑔(𝑥) delar alla kodord 𝑣 ∈ 𝐶 gäller

𝑣(𝛼) = 𝑣0+ 𝑣1𝛼 + 𝑣2𝛼2+ ⋯ + 𝑣𝑛−1𝛼𝑛−1 = 0 (27) Eftersom ett kodord 𝑣 uppfyller 𝐻𝑣 = 0 kan kolumnerna i paritetskontrollmatrisen betecknas som (1, 𝛼, 𝛼2, … , 𝛼𝑛−1). Varje kolumnvektor i 𝐻 är av samma längd som graden av 𝑔(𝑥).

I exempel 8 är 𝛼 en rot till generatorpolynomet 𝑔(𝑥) = 1 + 𝑥 + 𝑥3 vilket ger en binär 3 × 7 paritetskontrollmatris.

𝑜𝑟𝑑 𝑥𝑖 𝑚𝑜𝑑 𝑔(𝑥) 𝑝𝑜𝑡𝑒𝑛𝑠 𝑎𝑣 𝛼

000 0 −

100 1 𝛼0 = 1

010 𝑥 𝛼

001 𝑥2 𝛼2

110 1 + 𝑥 ≡ 𝑥3 𝛼3

011 𝑥 + 𝑥2 ≡ 𝑥4 𝛼4

111 1 + 𝑥 + 𝑥2 ≡ 𝑥5 𝛼5

101 1 + 𝑥2 ≡ 𝑥6 𝛼6

(19)

19

𝐻 = [1 0 0 1 0 1 1 0 1 0 1 1 1 0 0 0 1 0 1 1 1

]

Polynomet 𝑣(𝛼) kvadreras på följande vis

(𝑣0+ 𝑣1𝛼 + 𝑣2𝛼2 + ⋯ + 𝑣𝑛−1𝛼𝑛−1)2 = 0 (28) ↔

𝑣0+ 𝑣1𝛼2+ 𝑣2(𝛼2)2+ ⋯ + 𝑣𝑛−1(𝛼2)𝑛−1= 0 (29) vilket betyder att 𝛼2 också är en rot. D.v.s. om 𝛼 är en rot är 𝛼2, 𝛼4, 𝛼8… också rötter till generatorpolynomet. På samma sätt om 𝛼3 är en rot är även 𝛼6, 𝛼12, 𝛼24… det [4, s.109-111].

För ett generatorpolynom med rötterna {𝛼, 𝛼2, 𝛼3, … , 𝛼2𝑡} där 𝛼 är ett primitivt element i 𝐺𝐹(2𝑚) gäller att 𝑔(𝑥) = 𝑀𝐺𝑀{𝜃1(𝑥), 𝜃2(𝑥), … , 𝜃2𝑡(𝑥)} där 𝜃𝑖(𝑥) är minimalpolynomet till 𝛼𝑖.

𝑔(𝛼𝑖) = 0, 1 ≤ 𝑖 ≤ 2𝑡 (30) Eftersom varje minimalpolynom är irreducibelt fås 𝑔(𝑥) genom att multiplicera dessa med varandra för ett visst 𝑡 [1, s.111-122].

𝑔(𝑥) = 𝜃1(𝑥)𝜃2(𝑥) ··· 𝜃2𝑡(𝑥) (31) Nedan visas hur paritetskontrollmatrisen 𝐻 konstrueras, där elementen i 𝐻 är potenser av rötterna till 𝑔(𝑥).

𝐻 =

[

1 𝛼 𝛼2 𝛼3 · · · 𝛼𝑛−1

1 𝛼2 (𝛼2)2 (𝛼2)3 · · · (𝛼2)𝑛−1 1 𝛼3 (𝛼3)2 (𝛼3)3 · · · (𝛼3)𝑛−1

·

·

·

·

1 𝛼2𝑡 (𝛼2𝑡)2 (𝛼2𝑡)3 · · · (𝛼2𝑡)𝑛−1]

(32)

𝑉 =

[

1 𝛼1 𝛼12 𝛼13 · · · 𝛼1𝑛−1 1 𝛼2 𝛼22 𝛼23 · · · 𝛼2𝑛−1 1 𝛼3 𝛼32 𝛼33 · · · 𝛼3𝑛−1

·

·

·

·

1 𝛼𝑛 𝛼𝑛2 𝛼𝑛3 · · · 𝛼𝑛𝑛−1]

(33)

(20)

20

För den kvadratiska 𝑛 × 𝑛 Vandermondematrisen 𝑉 är det(𝑉) ≠ 0 [4, s.110].

Sats 7: Kolumnerna i 𝑉 är linjärt oberoende [3, s.203].

Determinanten 𝐻′ som bildas genom att välja 2𝑡 valfria kolumner i 𝐻, har samma struktur som Vandermondedeterminanten vilken är nollskild. Då är även det(𝐻′) ≠ 0. De 2𝑡 kolumnerna i 𝐻 är då linjärt oberoende och då är minimalavståndet 𝑑 ≥ 2𝑡 + 1.

Enligt (29) har många rötter samma minimalpolynom vilket innebär att formeln för generatorpolynomet kan förenklas till 𝑔(𝑥) = 𝜃1(𝑥)𝜃3(𝑥) ··· 𝜃2𝑡−1(𝑥).

Paritetskontrollmatrisen 𝐻 kan därmed reduceras som i (34) [4, s.110-114].

𝐻=

[

1 𝛼 𝛼2 𝛼3 · · · 𝛼𝑛−1

1 (𝛼3) (𝛼3)2 (𝛼3)3 · · · (𝛼3)𝑛−1 1 (𝛼5) (𝛼5)2 (𝛼5)3 · · · (𝛼5)𝑛−1

·

·

·

·

1 (𝛼2𝑡−1) (𝛼2𝑡−1)2 (𝛼2𝑡−1)3 · · · (𝛼2𝑡−1)𝑛−1]

(34)

Exempel 9: 𝑛 = 15, 𝑡 = 2

𝑥15− 1 = (𝑥 + 1)(𝑥2+ 𝑥 + 1)(𝑥4+ 𝑥 + 1)(𝑥4+ 𝑥3+ 1)(𝑥4+ 𝑥3+ 𝑥2+ 𝑥 + 1) och 𝑔(𝑥) = 1 + 𝑥 + 𝑥4 som är minimalpolynomet till 𝛼, 𝛼2, 𝛼4. Minimalpolynomet för 𝛼3 är 𝑥4+ 𝑥3+ 𝑥2+ 𝑥 + 1. 𝐺𝐹(24) = 𝐺𝐹(16) och

𝑔(𝑥) = 𝜃1(𝑥)𝜃3(𝑥) = (𝑥4+ 𝑥 + 1)(𝑥4 + 𝑥3+ 𝑥2+ 𝑥 + 1) = 𝑥8+ 𝑥7 + 𝑥6+ 𝑥4+ 1 som har rötterna 𝛼, 𝛼2, 𝛼3, 𝛼4. Detta generatorpolynom med 4 rötter ger att 𝑑 ≥ 5 [4, s.111- 112]. Den reducerade paritetskontrollmatrisen har dimension 8 × 15 och ser ut på följande vis

𝐻 = [1 𝛼 𝛼2 𝛼3 · · · 𝛼14

1 𝛼3 𝛼6 𝛼9 · · · 𝛼12 ] (35)

(21)

21

5 Avkodning för BCH - koder

En BCH - kod kodas enligt (20). Det mottagna polynomet 𝑤(𝑥) = 𝑔(𝑥)𝑎(𝑥) + 𝑒(𝑥) och har högst grad 2𝑚− 2. Om 𝛼 är en rot till 𝑔(𝑥), är 𝑤(𝛼) = 𝑒(𝛼). Om endast ett fel uppstår har 𝑒 vikt 1 vilket ger att 𝑒(𝛼) = 𝛼𝑖, där 𝑖 är den position som felet har inträffat på. Alltså 𝑤(𝑥) = 𝑔(𝑥)𝑎(𝑥) + 𝑥𝑖 [1, s.119].

Därmed för att koda av 𝑤 när ett fel har uppstått, divideras 𝑤(𝑥) med 𝑔(𝑥) där resten motsvarar felpolynomet 𝑒(𝑥) där grad(𝑒(𝑥)) < grad(𝑔(𝑥)). Eftersom 𝑒(𝑥) = 𝑥𝑖 är 𝑖 < grad(𝑔(𝑥)) vilket betyder att ett fel på en position högre än grad(𝑔(𝑥)) inte fås direkt.

Det krävs en omskrivning.

Exempel 10: 𝑛 = 7 och 𝑡 = 1.

𝑥7− 1 = (𝑥 + 1)(𝑥3+ 𝑥 + 1)(𝑥3+ 𝑥2 + 1)

och 𝑔(𝑥) = 1 + 𝑥 + 𝑥3. Låt säga att det mottagna polynomet är 𝑤(𝑥) = 1 + 𝑥3+ 𝑥4+ 𝑥5+ 𝑥6 . För att beräkna 𝑒(𝑥) divideras 𝑤(𝑥) med 𝑔(𝑥)

1 + 𝑥3+ 𝑥4 + 𝑥5 + 𝑥6 = (1 + 𝑥2+ 𝑥3)(1 + 𝑥 + 𝑥3) + (𝑥 + 𝑥2) Alltså 𝑒(𝑥) = 𝑥 + 𝑥2 vilket har lägre grad än 3. Men endast ett fel har uppstått. Därför utnyttjas 𝑔(𝑥) för att konstruera 𝐺𝐹(8).

Eftersom 𝑥3 = 𝑥 + 1 kan de olika felpolynomen 𝑒(𝑥) skrivas om som i (36) där 𝑒(𝑥) = 𝑥𝑖, 0 ≤ 𝑖 ≤ 6.

(36)

Tabell 3. 𝐺𝐹(8) konstruerad över 1 + 𝑥 + 𝑥3

𝑥 + 𝑥2 motsvarar 𝑥4 vilket betyder att det har uppstått ett fel på plats 4.

𝑣(𝑥) = (1 + 𝑥3+ 𝑥4+ 𝑥5+ 𝑥6) + 𝑥4 = 1 + 𝑥3 + 𝑥5+ 𝑥6 ↔ 1001011 [1, s.114].

𝑒(𝑥) 1 𝑥 𝑥2 𝑥3 𝑥4 𝑥5 𝑥6

𝑒(𝑥) mod 𝑔(𝑥) 1 𝑥 𝑥2 1 + 𝑥 𝑥 + 𝑥2 1 + 𝑥 + 𝑥2 1 + 𝑥2

(22)

22

Att koda av på detta sätt är enkelt när 𝑡 = 1. Men för fler fel blir detta betydligt svårare. En dubbelrättande BCH - kod har felpolynomet 𝑒(𝑥) = 𝑥𝑖 + 𝑥𝑗 där

max{𝑖, 𝑗} < grad(𝑔(𝑥)).T.ex. om grad(𝑔(𝑥)) = 4 kan endast två fel på positioner lägre än 4 hittas direkt. I detta fall krävs alltså också en omskrivning. För två eller fler fel är detta ingen effektiv metod.

Vid två fel kan felpolynomet 𝑒(𝑥) skrivas som 𝑒(𝑥) = 𝑥𝑖 + 𝑥𝑗 och 𝐻𝑤 = 𝐻𝑒 = [𝑤(𝛼), 𝑤(𝛼3)] = [(𝛼𝑖 + 𝛼𝑗), (𝛼3𝑖+ 𝛼3𝑗)] = [𝑠1, 𝑠3]. 𝑠1 och 𝑠3 används för att bilda ekvationssystemet

{ 𝑠1 = 𝛼𝑖 + 𝛼𝑗

𝑠3 = 𝛼3𝑖+ 𝛼3𝑗 (37)

(37) kan skrivas om till en ekvation på följande sätt

𝛼3𝑖+ 𝛼3𝑗 = (𝛼𝑖+ 𝛼𝑗)(𝛼2𝑖+ 𝛼𝑖+𝑗 + 𝛼2𝑗) 𝑠12 = (𝛼𝑖+ 𝛼𝑗)2 = 𝛼2𝑖+ 𝛼2𝑗

Detta ger

𝑠3 = 𝛼3𝑖+ 𝛼3𝑗 = (𝛼𝑖 + 𝛼𝑗)(𝛼2𝑖+ 𝛼𝑖+𝑗+ 𝛼2𝑗) = 𝑠1(𝑠12+ 𝛼𝑖+𝑗) ↔

𝑠𝑠3

1+ 𝑠12= 𝛼𝑖+𝑗 (38)

𝛼𝑖 och 𝛼𝑗 är rötter till

𝑥2+ (𝛼𝑖+ 𝛼𝑗)𝑥 + 𝛼𝑖+𝑗 = 0 (39) Med hjälp av (38) kan (39) skrivas om till

𝑥2+ 𝑠1𝑥 + (𝑠𝑠3

1+ 𝑠12) = 0 (40) Vänsterledet i (40) kallas för felsökningspolynomet 𝑝(𝑥) [1, s.123]. 𝑥 = −𝑝2± √𝑝42− 𝑞 ger lösningarna till andragradspolynomet 𝑥2 + 𝑝𝑥 + 𝑞. Då den binära mängden studeras blir nämnarna lika med noll, vilket innebär att denna formel inte kan användas. För att få rötterna

(23)

23

𝛼𝑖 och 𝛼𝑗 måste alla element (1, 𝛼, 𝛼2, 𝛼3, … , 𝛼2𝑚−2) testas. När en rot 𝛼𝑖 har hittats är det lätt att få fram den andra ty 𝛼𝑖+𝑗 är känd från (40).

Algoritm för att koda av en dubbelrättande BCH - kod 1. Beräkna 𝐻𝑤 = [𝑤(𝛼), 𝑤(𝛼3)] = [𝑠1, 𝑠3].

2. Om 𝑠1, 𝑠3 = 0, anta att inga fel har inträffat.

3. Om 𝑠1 = 0 men 𝑠3 ≠ 0, be om att meddelandet skickas igen.

4. Om 𝑠13 = 𝑠3, rätta ett fel på position 𝑖, där 𝑠1 = 𝛼𝑖. 5. Om två distinkta rötter hittas till (40) har två fel inträffat.

6. Om ekvationen inte har två distinkta rötter, anta att tre eller fler fel har inträffat och be om att meddelandet skickas igen [1, s.124].

Exempel 11: 𝑛 = 15, 𝑡 = 2.

𝐺𝐹(16) konstrueras över 𝑔(𝑥) = 1 + 𝑥 + 𝑥4. 𝛼 är det primitiva elementet och en rot till 𝑔(𝑥).

Låt säga att 𝑤(𝑥) = 1 + 𝑥 + 𝑥4 + 𝑥8+ 𝑥10 ↔ 110010001010000. 𝐻𝑤 = [𝑤(𝛼), 𝑤(𝛼3)] = [𝛼, 𝛼13] = [𝑠1, 𝑠3].

𝑠13 = 𝛼3 ≠ 𝛼13= 𝑠3. Först beräknas (𝑠𝑠3

1+ 𝑠12) = 1101 ↔ 𝛼7. Ekvationen blir då

𝑥2+ 𝛼𝑥 + 𝛼7 = 0 (41)

Bland elementen som tillhör 𝐺𝐹(16) fås en rot till 𝛼2. Från (41) är det känt att 𝛼𝑖+𝑗 = 𝛼7, vilket ger att 𝛼𝑗 = 𝛼5. Alltså är det mest sannolikt att de två felen har uppstått på plats 2 och 5. 𝑒(𝑥) = 𝑥2+ 𝑥5 ger 𝑒 = 001001000000000 och 𝑤 avkodas på följande sätt

𝑣(𝑥) = 𝑤(𝑥) + 𝑒(𝑥) = 1 + 𝑥 + 𝑥2+ 𝑥4+ 𝑥5+ 𝑥8 + 𝑥10 ↔ 111011001010000.

Att rätta två fel är inget problem eftersom rötterna till en andragradsekvation ska hittas. När tre fel uppstår blir det betydligt svårare eftersom detta ekvationssystem fås

(24)

24 {

𝑠1 = 𝛼𝑗1 + 𝛼𝑗2+ 𝛼𝑗3 𝑠3 = 𝛼3𝑗1 + 𝛼3𝑗2 + 𝛼3𝑗3 𝑠5 = 𝛼5𝑗1 + 𝛼5𝑗2 + 𝛼5𝑗3

(42)

där 𝑗𝑖 , 𝑖 = 1,2,3 betecknar tre olika positioner. För att kunna rätta tre fel behövs en effektiv algoritm.

(25)

25

6 Euklides algoritm - metoden

Euklides algoritm används till att beräkna den största gemensamma delaren till två heltal.

Denna metod kan även appliceras på polynom. 1975 utvecklade Sugiyama en avkodningsalgoritm baserad på Euklides algoritm vilken leder fram till ett

felsökningspolynom som säger var felet ligger och ett värdepolynom som anger värdet på felet. Då den binära mängden studeras i detta arbete, tas ingen hänsyn till värdepolynomet i de nedanstående exemplen [6].

Avkodning av en BCH - kod baserad på Euklides algoritm 1. Beräkna de 2𝑡 första syndromen.

2. Beräkna syndrompolynomet 𝑆(𝑥) = ∑2𝑡𝑗=0𝑠𝑗𝑥𝑗

3. Beräkna sedan 𝑆𝐺𝐷(𝑥2𝑡+1, 𝑆(𝑥)), stanna när resten har grad mindre eller lika med antalet fel som koden kan rätta. Resten i sista steget kallas för värdepolynomet 𝛾(𝑥).

4. Felsökningspolynomet 𝑝(𝑥) fås genom att lösa den diofantiska ekvationen 𝑆(𝑥)𝑝(𝑥) + 𝑥2𝑡+1𝑏(𝑥) = 𝛾(𝑥)

5. Testa alla element (1, 𝛼, 𝛼2, 𝛼3, … , 𝛼2𝑚−2) och hitta rötterna till 𝑝(𝑥). Lösningarna till 𝑝(𝑥) ges av 𝛼𝑘1, 𝛼𝑘2, … , 𝛼𝑘𝑣 om 𝑣 fel har uppstått. Felens positioner är då 𝑗𝑖 = −𝑘𝑖 mod 𝑛 [3, s.249-253].

Exempel 12: 𝑛 = 7 och 𝑡 = 1. 𝐺𝐹(23) konstrueras över 𝑔(𝑥) = 1 + 𝑥 + 𝑥3. Systematisk kodning av informationspolynomet 𝑎(𝑥) = 1 + 𝑥 ger 𝑣(𝑥) = 𝑥2 + 𝑥3+ 𝑥5. Om 𝑒(𝑥) = 𝑥2 fås den mottagna vektorn 𝑤(𝑥) = 𝑥3+ 𝑥5 ↔ 0001010. De två första syndromen beräknas till

𝑆1 = 𝑤(𝛼) = 𝛼3+ 𝛼5 = 𝛼2 𝑆2= 𝑤(𝛼2) = 𝛼6+ 𝛼10= 𝛼4

Då är syndrompolynomet 𝑆(𝑥) = 𝛼2𝑥 + 𝛼4𝑥2. Nu beräknas 𝑆𝐺𝐷(𝑥2𝑡+1, 𝑆(𝑥)) = 𝑆𝐺𝐷(𝑥3, (𝛼2𝑥 + 𝛼4𝑥2)).

𝑥3 = 𝑆(𝑥)(𝛼3𝑥) + (𝛼5𝑥2) 𝑆(𝑥) = (𝛼5𝑥2)𝛼6+ (𝛼2𝑥) 𝛾(𝑥) = 𝛼2𝑥. 𝑝(𝑥) fås genom

𝛼2𝑥 = 𝑆(𝑥) + (𝛼5𝑥2)(𝛼6) =

(26)

26

𝑆(𝑥) + (𝑥3+ 𝑆(𝑥)(𝛼3𝑥))𝛼6 = 𝑆(𝑥)(1 + 𝛼2𝑥) + 𝑥3(𝛼6)

Alltså 𝑝(𝑥) = 1 + 𝛼2𝑥. Det element i 𝐺𝐹(8) som utgör en rot till polynomet är 𝛼5 ty

𝑝(𝛼5) = 1 + 𝛼2𝛼5 = 100 + 100 = 000

𝑗1 = −5 mod 7 = 2. Alltså har ett fel uppstått på plats 2. 𝑒(𝑥) = 𝑥2 vilket är det korrekta felpolynomet.

𝑒 = 0010000

𝑣 = 𝑤 + 𝑒 = 0001010 + 0010000 = 0011010 𝑣(𝑥) = 𝑥2+ 𝑥3+ 𝑥5

vilket var samma kodord som skickades från början. Exemplet ovan är relativt enkelt och koden rättar endast ett fel. På nästa sida följer ett lite längre exempel på avkodning av en tre - rättande BCH - kod, baserad på Euklides algoritm.

(27)

27

7 Exempel på avkodning baserad på Euklides algoritm

En (15,5,7) BCH - kod vilken kan rätta tre fel betraktas. 𝐺𝐹(16) konstrueras över polynomet 1 + 𝑥 + 𝑥4 [1, s.114].

(43)

Tabell 4. 𝐺𝐹(16) konstruerad över 1 + 𝑥 + 𝑥4

Låt 𝑔(𝑥) = 1 + 𝑥 + 𝑥2+ 𝑥4+ 𝑥5 + 𝑥8+ 𝑥10 och informationspolynomet 𝑎(𝑥) = 𝑥 + 𝑥2 + 𝑥4. Systematisk kodning av 𝑎(𝑥) utförs på följande vis

(𝑥 + 𝑥2+ 𝑥4)𝑥10= 𝑥11+ 𝑥12+ 𝑥14

𝑥11+ 𝑥12+ 𝑥14= (𝑥 + 𝑥4)𝑔(𝑥) + (𝑥 + 𝑥2 + 𝑥3+ 𝑥4+ 𝑥8) (𝑥11+ 𝑥12+ 𝑥14) + (𝑥 + 𝑥2 + 𝑥3+ 𝑥4+ 𝑥8)

= 𝑥 + 𝑥2+ 𝑥3+ 𝑥4+ 𝑥8 + 𝑥11+ 𝑥12+ 𝑥14 𝑣(𝑥) = 𝑥 + 𝑥2+ 𝑥3+ 𝑥4 + 𝑥8+ 𝑥11+ 𝑥12+ 𝑥14

𝛼 𝛼

𝛼2 𝛼2

𝛼3 𝛼3

𝛼4 𝛼 + 1

𝛼5 𝛼2+ 𝛼 𝛼6 𝛼3+ 𝛼2 𝛼7 𝛼3+ 𝛼 + 1 𝛼8 𝛼2+ 1 𝛼9 𝛼3+ 𝛼 𝛼10 𝛼2+ 𝛼 + 1 𝛼11 𝛼3+ 𝛼2+ 𝛼 𝛼12 𝛼3+ 𝛼2+ 𝛼 + 1 𝛼13 𝛼3+ 𝛼2+ 1 𝛼14 𝛼3+ 1

𝛼15 1

(28)

28

Felpolynomet 𝑒(𝑥) = 1 + 𝑥6 + 𝑥12 ger den mottagna vektorn 𝑤(𝑥) = 1 + 𝑥 + 𝑥2+ 𝑥3 + 𝑥4+ 𝑥6+ 𝑥8+ 𝑥11+ 𝑥14 . Nu beräknas de 6 första syndromen.

𝑠1 = 𝑤(𝛼) = 𝛼3+ 1 + 𝛼3+ 𝛼2+ 𝛼 + 𝛼2+ 1 + 𝛼3+ 𝛼2 + 𝛼 + 1 + 𝛼3+ 𝛼2+ 𝛼 + 1 = 𝛼 𝑠2 = 𝑤(𝛼2) = (𝑤(𝛼))2 = 𝛼2

𝑠3 = 𝑤(𝛼3) = 𝛼42+ 𝛼33+ 𝛼24+ 𝛼18+ 𝛼12+ 𝛼9+ 𝛼6+ 𝛼3+

= 𝛼12+ 𝛼3+ 𝛼9+ 𝛼3+ 𝛼12+ 𝛼9+ 𝛼6+ 𝛼3+ 1 = 𝛼6+ 𝛼3+ 1

= 𝛼3 + 𝛼2+ 𝛼3+ 1 = 𝛼2+ 1 = 𝛼8 𝑠4 = 𝑤(𝛼4) = (𝑤(𝛼2))2 = 𝛼4

𝑠5 = 𝑤(𝛼5) = 𝛼70+ 𝛼55+ 𝛼40+ 𝛼30+ 𝛼20+ 𝛼15+ 𝛼10+ 𝛼5+ 1

= 𝛼10+ 𝛼10+ 𝛼10+ 1 + 𝛼5+ 1 + 𝛼10+ 𝛼5+ 1 = 1 𝑠6 = 𝑤(𝛼6) = (𝑤(𝛼3))2 = (𝛼2+ 1)2 = 𝛼4 + 1 = 𝛼

Detta ger syndrompolynomet 𝑆(𝑥) = 1 + 𝛼𝑥 + 𝛼2𝑥2+ 𝛼8𝑥3+ 𝛼4𝑥4+ 𝑥5+ 𝛼𝑥6 och beräkning av felsökningspolynomet 𝑝(𝑥) sker enligt följande steg.

Steg 0.

𝑟−2(𝑥) = 𝑥7,

𝑟−1(𝑥) = 𝑆(𝑥) = 1 + 𝛼𝑥 + 𝛼2𝑥2+ 𝛼8𝑥3+ 𝛼4𝑥4+ 𝑥5+ 𝛼𝑥6, 𝑦−2(𝑥) = 0,

𝑦−1(𝑥) = 1.

Steg 1.

𝑟−2(𝑥) = 𝑟−1(𝑥)𝑞0(𝑥) + 𝑟0(𝑥), 𝑞0(𝑥) = 𝛼14𝑥 + 𝛼13,

𝑟0(𝑥) = 𝛼8𝑥5+ 𝛼12𝑥4+ 𝛼11𝑥3+ 𝛼13,

𝑦0(𝑥) = 𝑦−2(𝑥) + 𝑦−1(𝑥)𝑞0(𝑥) = 𝑞0(𝑥) = 𝛼14𝑥 + 𝛼13. Steg 2.

𝑟−1(𝑥) = 𝑟0(𝑥)𝑞1(𝑥) + 𝑟1(𝑥), 𝑞1(𝑥) = 𝛼8𝑥 + 𝛼2,

𝑟1(𝑥) = 𝛼14𝑥4 + 𝛼3𝑥3 + 𝛼2𝑥2 + 𝛼11𝑥, 𝑦1(𝑥) = 𝑦−1(𝑥) + 𝑦0(𝑥)𝑞1(𝑥) = 𝛼7𝑥2+ 𝛼11𝑥.

(29)

29 Steg 3.

𝑟0(𝑥) = 𝑟1(𝑥)𝑞2(𝑥) + 𝑟2(𝑥), 𝑞2(𝑥) = 𝛼9𝑥,

𝑟2(𝑥) = 𝛼5𝑥 + 𝛼13,

𝑦2(𝑥) = 𝑦0(𝑥) + 𝑦1(𝑥)𝑞2(𝑥) = 𝛼13+ 𝛼14𝑥 + 𝛼5𝑥2+ 𝛼𝑥3. 𝑝(𝑥) = 𝑦2(𝑥) = 𝛼13+ 𝛼14𝑥 + 𝛼5𝑥2 + 𝛼𝑥3

som har grad 3, vilket stämmer då tre fel studeras. Nu testas alla element i 𝐺𝐹(16) för att hitta rötterna till felsökningspolynomet.

𝑝(𝛼) = 𝛼4 + 𝛼7+ 1 + 𝛼13= 𝛼2, 𝑝(𝛼2) = 𝛼7+ 𝛼9+ 𝛼 + 𝛼13= 𝛼3+ 𝛼2+ 𝛼,

𝑝(𝛼3) = 𝛼10+ 𝛼11+ 𝛼2+ 𝛼13= 0, 𝑝(𝛼4) = 𝛼13+ 𝛼13+ 𝛼3+ 𝛼13 = 𝛼2+ 1,

𝑝(𝛼5) = 𝛼 + 1 + 𝛼4+ 𝛼13= 𝛼13, 𝑝(𝛼6) = 𝛼4+ 𝛼2+ 𝛼5+ 𝛼13 = 𝛼3+ 𝛼2,

𝑝(𝛼7) = 𝛼7+ 𝛼4+ 𝛼6+ 𝛼13 = 𝛼3+ 1, 𝑝(𝛼8) = 𝛼10+ 𝛼6+ 𝛼7 + 𝛼13 = 𝛼3+ 𝛼2+ 1,

𝑝(𝛼9) = 𝛼13+ 𝛼8+ 𝛼8 + 𝛼13 = 0, 𝑝(𝛼10) = 𝛼 + 𝛼10+ 𝛼9+ 𝛼13= 𝛼, 𝑝(𝛼11) = 𝛼4+ 𝛼12+ 𝛼10+ 𝛼13 = 𝛼2+ 𝛼,

𝑝(𝛼12) = 𝛼7+ 𝛼14+ 𝛼11+ 𝛼13= 1, 𝑝(𝛼13) = 𝛼10+ 𝛼 + 𝛼12+ 𝛼13 = 𝛼2+ 𝛼 + 1,

𝑝(𝛼14) = 𝛼13+ 𝛼3+ 𝛼13+ 𝛼13= 𝛼2 + 1, 𝑝(𝛼15) = 𝛼 + 𝛼5+14+ 𝛼13= 0.

Rötterna till felsökningspolynomet ges av 𝛼3, 𝛼9 och 𝛼15. 𝑗1 = −3 mod 15 = 12, 𝑗2 = −9 mod 15 = 6, 𝑗3 = −15 mod 15 = 0. 𝑒(𝑥) = 1 + 𝑥6+ 𝑥12 vilket är det rätta felpolynomet.

𝑣(𝑥) = 𝑤(𝑥) + 𝑒(𝑥) =

= (1 + 𝑥 + 𝑥2+ 𝑥3+ 𝑥4+ 𝑥6+ 𝑥8+ 𝑥11+ 𝑥14) + (1 + 𝑥6+ 𝑥12) =

= 𝑥 + 𝑥2+ 𝑥3+ 𝑥4+ 𝑥8+ 𝑥11+ 𝑥12+ 𝑥14 ↔ 011110001001101 som är samma meddelande som skickades från början, vilket innebär att avkodningen är korrekt.

(30)

30

8 Diskussion

Att beräkna på vilka positioner ett eller två fel har uppstått är relativt enkelt. Vid ett fel sker en omskrivning av de olika felpolynomen 𝑒(𝑥). Resten som då fås vid division mellan det mottagna polynomet 𝑤(𝑥) och generatorpolynomet 𝑔(𝑥) kan då jämföras med det egentliga felet i tabellen. Vid två fel hittas två distinkta rötter till (40).

Vid fler än två fel krävs en algoritm, och dessa finns det många av. Mitt mål var att undersöka den metod som baseras på Euklides algoritm och se hur den fungerar, men ett exempel på en annan metod är Berlekamp Massey vilken är snäppet bättre än den jag undersökte. Berlekamp Massey - metoden fungerar dock på liknande sätt.

Det generella för de flesta avkodningsmetoder, så som Meggitt – och felstegsmetoden, Berlekamp Massey - metoden och den som baseras på Euklides algoritm är att syndromen beräknas.

References

Related documents

Publikationerna ”Koder för inspektion av byggnadsverk” innehåller kodförteckningar för beskrivning av inspektioner, skador, tillstånd samt åtgärder. Koder för inspektion

Publikationerna ”Koder för inspektion av byggnadsverk” innehåller kodförteckningar för beskrivning av inspektioner, skador, tillstånd samt åtgärder. Koder för inspektion

Titel: Koder för inspektion av byggnadsverk, del 3 Konstruktionselement för tunnlar Publikation: 2007:57.. Kontaktpersoner: Bosse Eriksson, Bengt Rutgersson

Om det finns något samband mellan de båda avkodningsförmågorna, är studiens syfte att i samverkan med elever, föräldrar och lärare främja den mest optimala

Euklides algoritm är en algoritm för att bestämma största gemensamma delare till två positiva heltal. Det är en av de äldsta kända algoritmerna och beskrivs i

Ehuru storheter finnas af många olika slag, kunna de dock sägas sönderfalla i två stora hufvud- afdelningar: storheter, som hafva utsträckning i rummet, samt Tal, om hvilka

Verksamheten ska genomföras för att utmana barnets lärande och utveckling, sträva efter att varje barn utvecklar sin motorik, koordinationsförmåga och kroppsuppfattning

Här beskriver vi hur man, med hjälp av Euklides algoritm, skriver d som en linjär kombination av koefficienterna a och b... Detta substitueras i