• 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!
34
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: 17-03-30

(2)

1

Abstract

Today’s society requires that transformation of information is done effectively and correctly.

In other words, the received message must correspond to the message being sent. There are a lot of decoding methods to locate and correct errors. The main purpose in this degree project is to study one of these methods based on the Euclidean algorithm. Thereafter an example will be illustrated showing how the method is used when decoding a three - error correcting BCH code. To begin with, fundamental concepts about coding theory are introduced. Secondly, linear codes, cyclic codes and BCH codes - in that specific order - are explained before advancing to the decoding process. The results show that correcting one or two errors is relatively simple, but when three or more errors occur it becomes much more complicated. In that case, a specific method is required.

Key words: code word, parity check matrix, generator matrix, syndrome, BCH - code, field extension, Euclidean algorithm method, error locating polynomial.

(3)

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 ges en presentation av grunderna inom kodningsteorin. Sedan introduceras 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.

(4)

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.

(5)

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..……... 22

6 Euklides algoritm - metoden………... 26

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

8 Diskussion... 32

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

(6)

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 [4, 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 [4, s.3-4].

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

kommunikation” [6]. 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

(7)

6

tillhöra 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 Hammingkoden [7].

I kapitel 2 och 3 presenteras grundläggande begrepp tillhörande kodningsteorin, bland annat Hammingavstånd, minimalavstånd, vikt, linjär kod, kodord, paritetskontrollmatris och generatormatris. I kapitel 4 introduceras cykliska koder och en speciell klass av dessa, så kallade BCH - koder. Cykliska koder är linjära och bygger på polynom och

kroppsutvidgningar vilket innebär att abstrakt algebra/algebraiska strukturer tillsammans med linjär algebra är en bra grund för att förstå sig på dessa typer av koder.

Om endast ett eller två fel uppstår är det relativt enkelt att koda av en BCH - kod. Vid ett fel sker en omskrivning av de olika felpolynomen 𝑒(𝑥) till polynom med lägre grad än den grad som generatorpolynomet 𝑔(𝑥) har. Den rest som fås vid division mellan det mottagna polynomet 𝑤(𝑥) och generatorpolynomet 𝑔(𝑥) kan då jämföras med det egentliga felet. Vid två fel hittas två distinkta rötter till ekvationen 𝑝(𝑥) = 0, där 𝑝(𝑥) är ett så kallat

felsökningspolynom.

Om fler än två fel uppstår krävs en avancerad metod, och dessa finns det många av. I detta arbete studeras en avkodningsmetod som baseras på Euklides algoritm. Kortfattat går metoden ut på att bestämma syndromen för att sedan hitta ett felsökningspolynom och ett värdepolynom genom användning av Euklides algoritm. Till sist lokaliseras felen genom att bestämma rötterna till 𝑝(𝑥) = 0, där 𝑝(𝑥) är ett så kallat felsökningspolynom. Det finns mycket teori att hämta om Euklides algoritm - metoden, men något som har uppmärksammats är att det inte finns så många tydliga exempel som visar på hur metoden faktiskt fungerar.

Därför illustreras två exempel på avkodning med Euklides algoritm - metoden. I kapitel 6 presenteras ett relativt enkelt exempel då endast ett fel uppstår och i kapitel 7 illustreras ett lite svårare då en tre - rättande BCH - kod betraktas. Båda dessa exempel ger önskat resultat, dvs. avkodningen är korrekt. Alltså fungerar avkodningsmetoden som baseras på Euklides algoritm [3, s.365-369].

(8)

7

2 Koder

Här betraktas information 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 [4, s.5]. Informationssymbolerna 𝑥 = 𝑥1𝑥2… 𝑥𝑘 kodas till ett kodord 𝑣 = 𝑣1𝑣2… 𝑣𝑛, 𝑛 ≥ 𝑘. 𝑣𝑖 = 𝑥𝑖, 1 ≤ 𝑖 ≤ 𝑘 och 𝑣𝑘+1… 𝑣𝑛 är kontrollsymboler. 𝑣𝑖 1 ≤ 𝑖 ≤ 𝑛 är antingen 0 eller 1 [3, 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 här för 𝑉. En kod 𝐶 med ett

specifikt 𝑘 består av 2𝑘 stycken kodord. En kod 𝐶 ≠ 𝑉 är alltså en äkta delmängd av 𝑉 [5, 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 [5, s.2]

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

T.ex. är 𝑑((0,1,0,1), (1,1,1,1)) = 2.

Definition 2: Vikten av ett kodord 𝑢 är antalet symboler i 𝑢 som är lika med 1. Här betecknas vikten 𝑤𝑡(𝑢) [5, 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

(9)

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 [3, s.8].

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

Notera att beräkningarna ovan utförs modulo 2 och att additionen sker på samma sätt som när vektorer adderas. Antalet ettor i 𝑒 talar om hur många fel som har inträffat och dess positioner säger var 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 densamma och 𝑝 = 1 − 𝑞 för att en siffra ändras under överföringen, kallas för en binär symmetrisk kanal.

Den kallas så eftersom den inte har något minne och endast består av siffrorna 0 och 1 [5, 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 här 𝑑 [3, s.9]. För att hitta minimalavståndet 𝑑 till en kod 𝐶 går det att bestämma avståndet mellan alla kodord, men beroende på hur många kodord som existerar i koden, kan detta ta lång tid. En kod med längd 𝑛, 2𝑘 kodord och

minimalavstånd 𝑑 skrivs på formen (𝑛, 𝑘, 𝑑).

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 [4, 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 [4, s.17]

(10)

9

Bevis [4, s.17-18]: Om 𝑑(𝑢, 𝑣) ≤ 𝑡 och 𝑤𝑡(𝑒) ≤ 𝑡, kan ett kodord transformeras till det andra och tvärtom. Som nämnts 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.

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.

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

Bevis [5, s.11-12]: 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 𝑑(𝑢, 𝑣) ≤ 𝑑(𝑢, 𝑤) + 𝑑(𝑤, 𝑣) så 𝑑(𝑢, 𝑣) ≤ 2𝑡. 2𝑡 ≤ 𝑑 − 1 vilket medför att 𝑑(𝑢, 𝑣) ≤ 𝑑 − 1. Men 𝑑(𝑢, 𝑣) = 𝑤𝑡(𝑢 − 𝑣) ≥ 𝑑 eftersom (𝑢 − 𝑣) är skild 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 𝑣.

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

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

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

2)+⋯+(𝑛𝑡) (2) där |𝐾| är det maximala antalet kodord som koden kan innehålla. Högerledet i olikheten kallas för Hamminggränsen för koden 𝐶.

(11)

10

En förklaring till (2) är att sfärerna med radien 𝑡 runt alla 𝐾 stycken kodord innehåller vardera 1 + 𝑛 + (𝑛2) + ⋯ + (𝑛𝑡) vektorer, medan det finns totalt 2𝑛 binära vektorer av längd 𝑛 [1, s.65].

En känd kod är den så kallade Hammingkoden (7,4,3), vilken rättar endast ett fel [4, 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) vilka kallas för paritetskontrollekvationerna till Hammingkoden:

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

|𝐾| ≤1+727 = 16.

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

(12)

11

3 Linjära koder

I detta kapitel definieras en speciell klass av koder, så kallade linjära koder. Att en kod 𝐶 är linjär innebär att om 𝑢 och 𝑣 tillhör koden, gör även 𝑢 + 𝑣 det. Alltså 𝐶 är sluten under addition. En linjär kod måste även innehålla nollvektorn eftersom 𝑣 + 𝑣 = 0. En linjär kod kan betraktas som ett linjärt rum [1, s.27].

Notera att 𝑢 + 𝑣 = 𝑢 − 𝑣 över ℤ2. För att bestämma minimalavståndet 𝑑 för en vanlig kod måste avståndet mellan alla kodord i koden beräknas. Fördelen med att bestämma

minimalavståndet 𝑑 till en linjär kod är att kodordet med minst vikt, förutom nollvektorn kan väljas, enligt (1).

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. En linjär kod skrivs på formen [𝑛, 𝑘, 𝑑].

Om alla kodvektorer i en linjär kod 𝐶 kan skrivas som en linjärkombination av linjärt

oberoende vektorer {𝑒1, … , 𝑒𝑘} dvs. 𝑙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 [5, s.6].

Definition 3: En generatormatris till en linjär kod 𝐶 är en matris vars rader består av 𝑘 linjärt oberoende vektorer {𝑒1, … , 𝑒𝑘} som spänner upp koden 𝐶 [1, s.42]. En generatormatris betecknas här 𝐺.

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

𝑎𝐺 = 𝑣. (6) En generatormatris 𝐺 är på så kallad standardform om de 𝑘 första kolumnerna bildar en 𝑘 × 𝑘 identitetsmatris. De 𝑘 första symbolerna i kodordet som fås i (6) är då informationssymboler, medan de 𝑛 − 𝑘 sista symbolerna är kontrollsymboler. En generatormatris 𝐺 på standardform kan skrivas på formen 𝐺 = [𝐼𝑘|𝐴] och har dimension 𝑘 × 𝑛 [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.

(13)

12

Definition 4: En paritetskontrollmatris 𝐻 till en linjär kod 𝐶 är en matris vars rader består av koefficienterna till det ekvationssystem som genererar koden [5, s.7]. En

paritetskontrollmatris 𝐻 kan skrivas på formen 𝐻 = [−𝐴𝑇|𝐼𝑛−𝑘] och har dimension (𝑛 − 𝑘) × 𝑛 [5, s.9].

Paritetskontrollmatrisen till Hammingkoden i kapitel 2 ges av

𝐻 = [1011100 1110010 0111001

] . (7)

Ett mottaget ord 𝑤 är ett kodord om 𝑤 uppfyller

𝐻𝑤 = 0. (8) Varken en generatormatris eller en paritetskontrollmatris har något med avkodningsprocessen att göra. Dessa används endast till att koda ett informationsord till ett kodord respektive 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 avstånd från 𝑤 med hjälp av en standarduppställning [4, 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 koden, dvs. 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 [4, s.47-48]

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

Exempel 4: Trippelrepetitionskoden 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.

(14)

13

(10)

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

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 𝑤. Ju större 𝑛 är desto större blir standarduppställningen, och det tar längre tid att konstruera den. Därför är inte maximal sannolikhetsavkodning en speciellt effektiv metod.

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

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

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

[

111213 · · · ℎ1𝑛

212223 · · · ℎ2𝑛

·

·

·

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

]

[ e1 𝑒2

·

· · 𝑒𝑛]

= [

1𝑖2𝑖

·

·

· ℎ(𝑛−𝑘)𝑖]

. (12)

Enligt (12) ä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

(15)

14

[

111213 · · · ℎ1𝑛

212223 · · · ℎ2𝑛

·

·

·

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

]

[ e1 𝑒2

·

· · 𝑒𝑛]

= [

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

·

·

·

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

. (13)

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.

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

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 en

paritetskontrollmatris 𝐻 till en linjär kod, ges alla kodord i koden av lösningarna till (8), och dessutom är alla tre parametrarna 𝑛, 𝑘 och 𝑑 kända. Dessvärre finns ingen effektiv metod och därför utvidgas teorin till cykliska koder som bygger på polynom och kroppsutvidgningar.

(16)

15

4 Cykliska koder

Här presenteras cykliska koder för vilka det existerar effektiva avkodningsmetoder. BCH - koder definieras senare i detta kapitel och dessa kan representeras som cykliska koder [5, s.67].

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 [1, s.91].

Exempel 5: 𝑣 = 1110 med 𝑛 = 4 kopplas till 𝑣(𝑥) = 1 + 𝑥 + 𝑥2.

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

Definition 6: En kod 𝐶 ä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 𝑥𝑣(𝑥) modulo 𝑥𝑛 − 1. Det 𝑖:te skiftet, 𝜋𝑖(𝑣), till ett ord 𝑣 motsvaras av polynomet 𝑥𝑖𝑣(𝑥) modulo 𝑥𝑛− 1.

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

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

Exempel 7: Här betraktas en cyklisk kod 𝐶 med 𝑛 = 4 och 𝑘 = 2. Skiften av kodordet 𝑣 = 0101 är 𝜋(𝑣) = 1010 och 𝜋2(𝑣) = 0101 = 𝑣. Detta ger att 𝑆 = {0101,1010} vilket innebär att kodorden i 𝐶 är 0000, 0101,1010 och 1111. 𝑣 är kodens generator 𝑔.

Att ett kodpolynom 𝑐(𝑥) tillhör koden innebär att 𝑐(𝑥) kan skrivas som en linjärkombination av elementen i 𝑆. I nedanstående steg, utförs beräkningarna modulo 𝑥𝑛− 1 och 𝑣(𝑥) är ett generatorpolynom till koden.

(17)

16

𝑐(𝑥) = (ℎ0𝑣(𝑥) + ℎ1𝑥𝑣(𝑥) + ⋯ + ℎ𝑛−1𝑥𝑛−1𝑣(𝑥)) = (ℎ0+ ℎ1𝑥 + ℎ2𝑥2+ ⋯ + ℎ𝑛−1𝑥𝑛−1)𝑣(𝑥) (14) = ℎ(𝑥)𝑣(𝑥).

Endast en generator motsvarar ett speciellt polynom, ett så kallat generatorpolynom 𝑔(𝑥).

Definition 8: Ett generatorpolynom 𝑔(𝑥) är ett polynom med lägst grad i koden och som genererar alla kodord. Generatorpolynomet 𝑔(𝑥) är unikt [1, s.96-98].

Sats 5: 𝑔(𝑥) är ett generatorpolynom till någon cyklisk kod 𝐶 med längd 𝑛, om och endast om 𝑔(𝑥) är en delare till 𝑥𝑛− 1.

Det polynom som fås genom att dividera 𝑥𝑛 − 1 med generatorpolynomet 𝑔(𝑥) kallas för ett paritetskontrollpolynom och betecknas här ℎ(𝑥)

ℎ(𝑥) = (𝑥𝑛− 1)/𝑔(𝑥). (15)

En generatormatris 𝐺 till en cyklisk kod fås enkelt med hjälp av 𝑔(𝑥) och de 𝑘 − 1 första skiften av 𝑔(𝑥) och har dimension 𝑘 × 𝑛

𝐺 =

[

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

·

·

·

· 𝑥𝑘−1𝑔(𝑥)]

. (16)

I (18) 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]

𝑣(𝑥) = 𝑔(𝑥)𝑎(𝑥). (17) Systematisk kodning innebär att termerna i informationspolynomet 𝑎(𝑥) kan hittas

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

(18)

17

Lösningarna till (8) utgör alla kodord i den cykliska koden. Skillnaden mot en linjär kod är att det finns en metod för att finna en paritetskontrollmatris 𝐻 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 modulo 𝑥𝑛 − 1 över ℤ2 [3, s.189].

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

Bevis [5, s.69-70]: Anta att 𝐶 är en cyklisk kod. Om 𝑎(𝑥) och 𝑏(𝑥) tillhör 𝐶 medför det att 𝑎(𝑥) ± 𝑏(𝑥) också tillhör 𝐶. Detta följer av definitionen av en linjär kod. 𝑎(𝑥)𝑥 tillhör 𝐶 eftersom detta är ett cykliskt skift. På samma sätt gäller att alla cykliska skift av 𝑎(𝑥) tillhör 𝐶. Låt 𝑐(𝑥) tillhöra polynomringen 𝑅𝑛 där

𝑐(𝑥) = 𝑐0+ 𝑐1𝑥 + 𝑐2𝑥2+ ⋯ + 𝑐𝑛−1𝑥𝑛−1 (18) 𝑎(𝑥)𝑐(𝑥) = 𝑐0𝑎(𝑥) + 𝑐1𝑎(𝑥)𝑥 + ⋯ + 𝑐𝑛−1𝑎(𝑥)𝑥𝑛−1 (19) 𝑎(𝑥)𝑐(𝑥) tillhör koden 𝐶 eftersom varje term i högerledet i (21) tillhör 𝐶. Av detta följer att en cyklisk kod 𝐶 utgör ett ideal i 𝑅𝑛

Definition 9: Ett polynom 𝑣(𝑥) = 𝑣0+ 𝑣1𝑥 + 𝑣2𝑥2 +··· +𝑣𝑛−1𝑥𝑛−1 är irreducibelt om 𝑣(𝑥) inte kan faktoriseras som en produkt av två polynom av lägre grad än 𝑣(𝑥) [1, s.111].

Definition 10: En Galoiskropp 𝐺𝐹(2𝑚) betraktas här som en kroppsutvidgning av 𝐺𝐹(2), av ett irreducibelt polynom av grad 𝑚. Om 𝑔(𝑥) är irreducibelt över ℤ2 av grad 𝑚 kan 𝐺𝐹(2𝑚) konstrueras över detta. 𝐺𝐹(2𝑚) innehåller totalt 2𝑚 element.

Definition 11: Om varje element i koden kan skrivas som någon potens av 𝛼, där 𝛼 tillhör 𝐺𝐹(2𝑚) kallas 𝛼 för kodens primitiva element och genererar hela koden. Dessutom gäller att 𝛼𝑛 = 1 [1, s.112].

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

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.

Exempel 8: Här betraktas en cyklisk kod 𝐶 med längd 𝑛 = 7

(19)

18

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

Generatorpolynomet väljs till 𝑔(𝑥) = 1 + 𝑥 + 𝑥3 som är irreducibelt över ℤ2.

Kroppsutvidgningen 𝐺𝐹(23) består av 8 element och eftersom vi vet att 𝑥3 = 𝑥 + 1 kan de andra elementen i 𝐺𝐹(8) utöver {0,1, 𝛼, 𝛼2} konstrueras enligt (22). 𝛼 är en rot till 𝑔(𝑥) eftersom 𝑔(𝛼) = 1 + 𝛼 + 𝛼3 = 100 + 010 + 110 = 000.

(20)

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

BCH - koder

Efter Shannons arbete konstruerades flera effektiva och snabba avkodningsalgoritmer. BCH - koder utgör en viktig klass inom cykliska koder och dessa bygger på kroppsutvidgningar och har förmågan att kunna rätta ett visst antal fel. De utvecklades av R.C. Bose, D.K. Ray - Chaudhuri och A. Hocquenghem, därav namnet BCH - kod. Det som utmärker en BCH - kod är att istället för att identifiera generatorpolynomet 𝑔(𝑥) med koefficienter, kan det istället identifieras med dess rötter. Konstruktionen av en paritetskontrollmatris till en BCH - kod bygger på rötterna till dess generatorpolynom [5, s.111].

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

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

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

(20)

19

𝑛 = 2𝑚− 1 (21) 𝑛 − 𝑘 ≤ 𝑚𝑡 (22) 𝑑 ≥ 2𝑡 + 1. (23) Låt 𝛼 vara en rot till generatorpolynomet 𝑔(𝑥). Eftersom 𝑔(𝑥) delar alla kodpolynom 𝑣(𝑥) i koden gäller

𝑣(𝛼) = 𝑣0+ 𝑣1𝛼 + 𝑣2𝛼2+ ⋯ + 𝑣𝑛−1𝛼𝑛−1 = 0 (24) Eftersom ett kodord 𝑣 uppfyller 𝐻𝑣 = 0 betecknas kolumnerna i paritetskontrollmatrisen 𝐻 här som (1, 𝛼, 𝛼2, … , 𝛼𝑛−1). För att undvika förvirring när 𝛼 används vid beteckning av kolumner på detta sätt, kom ihåg att kolumnerna i en paritetskontrollmatris 𝐻 skrivs som (1, 𝛼, 𝛼2, … , 𝛼𝑛−1) om endast 𝛼 är en rot till generatorpolynomet 𝑔(𝑥). Om 𝛼2 också är en rot till generatorpolynomet 𝑔(𝑥), betecknas kolumnerna i paritetskontrollmatrisen 𝐻 som

( 1, 𝛼 , 𝛼2 , … , 𝛼𝑛−1 1, 𝛼2, 𝛼4, … , (𝛼2)𝑛−1).

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

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

]. (25)

Vänsterledet 𝑣(𝛼) och högerledet 0 i 𝑣(𝛼) = 0 kvadreras på följande vis

(𝑣0+ 𝑣1𝛼 + 𝑣2𝛼2 + ⋯ + 𝑣𝑛−1𝛼𝑛−1)2 = 0 (26) ⇔

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

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

𝑔(𝑥) = 𝑀𝐺𝑀{𝜃1(𝑥), 𝜃2(𝑥), … , 𝜃2𝑡(𝑥)} (28) där 𝜃𝑖(𝑥) är minimalpolynomet till 𝛼𝑖.

(21)

20

Här följer hur en paritetskontrollmatris 𝐻 till en BCH - kod konstrueras, som bygger på rötterna till generatorpolynomet 𝑔(𝑥)

𝐻 =

[

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]

. (29)

Sats 7 [5, s.110]: För den kvadratiska 𝑛 × 𝑛 Vandermondematrisen

𝑉 =

[

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

·

·

·

·

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

(30)

är det(𝑉) ≠ 0.

Följdsats [4, s.203]: Kolumnerna i Vandermondematrisen 𝑉 är linjärt oberoende.

Låt 𝑀 vara den matris som fås genom att välja 2𝑡 valfria kolumner i 𝐻. Determinanten av 𝑀 går att skriva om som en skalär multiplicerad med en determinant |𝑀′| = |(𝑀)𝑇| som alltså är en Vandermondedeterminant. Detta innebär att de 2𝑡 kolumnerna i 𝐻 som valts är linjärt oberoende och minimalavståndet 𝑑 ≥ 2𝑡 + 1.

Exempel 9: Låt en BCH - kod med längd 𝑛 = 15 betraktas där generatorpolynomet 𝑔(𝑥) har de fyra rötterna 𝛼, 𝛼2, 𝛼3, 𝛼4. Paritetskontrollmatrisen ges av

𝐻 = [

1 𝛼 𝛼2 𝛼3 · · · 𝛼14 1 𝛼2 𝛼4 𝛼6 · · · 𝛼13 1 𝛼3 𝛼6 𝛼9 · · · 𝛼12 1 𝛼4 𝛼8 𝛼12 · · · 𝛼11

].

Låt säga att kolumn 2, 3, 5 och 8 väljs

(22)

21 |𝑀| = |

𝛼 𝛼2 𝛼4 𝛼2 𝛼4 𝛼8 𝛼3 𝛼6 𝛼12 𝛼4 𝛼8 𝛼

𝛼7 𝛼14

𝛼6 𝛼13

| = 𝛼 𝛼2𝛼4𝛼7|

1 1 1 𝛼 𝛼2 𝛼4

𝛼2 𝛼4 𝛼8 𝛼3 𝛼6 𝛼12

1 𝛼7 𝛼14

𝛼6

| = 𝛼 𝛼2𝛼4𝛼7|𝑀′|.

Här är |𝑀′|=|(𝑀)𝑇| en Vandermondedeterminant vilket innebär att de 4 kolumnerna i paritetskontrollmatrisen 𝐻 är linjärt oberoende och 𝑑 ≥ 5.

Enligt (29) har många rötter samma minimalpolynom vilket innebär att formeln för generatorpolynomet i (30) kan reduceras till 𝑔(𝑥) = 𝑀𝐺𝑀{𝜃1(𝑥)𝜃3(𝑥), … , 𝜃2𝑡−1(𝑥)}.

Eftersom varje minimalpolynom i denna formel är irreducibelt fås generatorpolynomet 𝑔(𝑥) genom att multiplicera dessa med varandra för ett visst antal fel 𝑡 [1, s.111-122]

𝑔(𝑥) = 𝜃1(𝑥)𝜃3(𝑥) ··· 𝜃2𝑡−1(𝑥). (31) Paritetskontrollmatrisen 𝐻 kan därmed reduceras till [5, 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]

. (32)

Exempel 10: En BCH - kod med 𝑛 = 15 och som kan rätta 𝑡 = 2 fel betraktas

𝑥15− 1 = (𝑥 + 1)(𝑥2+ 𝑥 + 1)(𝑥4+ 𝑥 + 1)(𝑥4+ 𝑥3+ 1)(𝑥4+ 𝑥3+ 𝑥2+ 𝑥 + 1).

Generatorpolynomet 𝑔(𝑥) = 1 + 𝑥 + 𝑥4 är minimalpolynomet till 𝛼, 𝛼2, 𝛼4. Minimalpolynomet till 𝛼3 är 𝑥4+ 𝑥3+ 𝑥2 + 𝑥 + 1. 𝐺𝐹(24) = 𝐺𝐹(16) och

𝑔(𝑥) = 𝜃1(𝑥)𝜃3(𝑥) = (𝑥4+ 𝑥 + 1)(𝑥4 + 𝑥3+ 𝑥2+ 𝑥 + 1) = 𝑥8+ 𝑥7 + 𝑥6+ 𝑥4+ 1 och har rötterna 𝛼, 𝛼2, 𝛼3, 𝛼4. Detta generatorpolynom med 4 rötter ger att 𝑑 ≥ 5 [5, 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 ]. (33)

(23)

22

5 Avkodning för BCH - koder

I detta kapitel introduceras två avkodningsprocesser för BCH - koder. En för att rätta enbart ett fel och en annan för att rätta två fel.

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

För att koda av ett mottaget polynom 𝑤(𝑥) när ett fel har uppstått kan det divideras med generatorpolynomet 𝑔(𝑥) där resten motsvarar felpolynomet 𝑒(𝑥). Då gäller att

grad(𝑒(𝑥)) < grad(𝑔(𝑥)). Eftersom 𝑒(𝑥) = 𝑥𝑖 är 𝑖 < grad(𝑔(𝑥)) vilket betyder att ett fel på en position som är större än grad(𝑔(𝑥)) inte fås direkt. Det krävs en omskrivning. När symbolen ↔ används i nedanstående exempel menas motsvarelsen mellan ett ord och dess polynom.

Exempel 11: Här betraktas en BCH - kod med längd 𝑛 = 7 och som endast kan rätta 1 fel

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

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

generatorpolynomet 𝑔(𝑥)

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 𝑒(𝑥) = 𝑥𝑖, 0 ≤ 𝑖 ≤ 6 skrivas om på följande vis

(34)

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

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

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

(24)

23

𝑥 + 𝑥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].

Att koda av på detta sätt är enkelt när ett fel har inträffat. Men för fler fel blir det 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 gäller att 𝐻𝑤 = 𝐻𝑒 = [𝑤(𝛼), 𝑤(𝛼3)] = [(𝛼𝑖 + 𝛼𝑗), (𝛼3𝑖+ 𝛼3𝑗)] = [𝑠1, 𝑠3]. 𝑠1 och 𝑠3 används för att bilda ekvationssystemet

{ 𝑠1 = 𝛼𝑖 + 𝛼𝑗

𝑠3 = 𝛼3𝑖+ 𝛼3𝑗 . (35)

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

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

vilket ger

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

𝑠𝑠3

1+ 𝑠12= 𝛼𝑖+𝑗. (36) 𝛼𝑖 och 𝛼𝑗 är rötter till

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

𝑥2+ 𝑠1𝑥 + (𝑠𝑠3

1+ 𝑠12) = 0. (38) Vänsterledet i (40) kallas för felsökningspolynomet 𝑝(𝑥) [1, s.123]. 𝑥 = −𝑘2± √𝑘42− 𝑞 ger lösningarna till andragradsekvationen 𝑥2 + 𝑘𝑥 + 𝑞 = 0. 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 bestämma

(25)

24

rötterna 𝛼𝑖 och 𝛼𝑗 måste alla element i 𝐺𝐹(2𝑚) testas. När en rot 𝛼𝑖 har hittats är det lätt att finna 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].

Avkodningsprocessen börjar alltså med att bestämma syndromen 𝑠1 och 𝑠3. Om båda två syndromen är lika med 0 ger det att 𝐻𝑤 = 0 vilket innebär att det mottagna meddelandet är ett kodord. Om endast ett av syndromen är lika med noll så har det blivit något fel, och meddelandet måste därför skickas en gång till. Om ett fel uppstår, är 𝑠13 = 𝑠3 och felet rättas enligt punkt 4. Om två fel uppstår är 𝑠1 ≠ 𝑠3 och två distinkta rötter kan bestämmas till ekvationen 𝑝(𝑥) = 0 med hjälp av att testa alla element i kroppen 𝐺𝐹(2𝑚). Om det inte går att finna två distinkta rötter till ekvationen, innebär det att tre eller fler fel har uppstått och meddelandet måste skickas en gång till.

Exempel 12: En BCH - kod med längd 𝑛 = 15 och som kan rätta 𝑡 = 2 fel studeras här.

𝐺𝐹(16) konstrueras över 𝑔(𝑥) = 1 + 𝑥 + 𝑥4. Låt säga att det mottagna polynomet är

𝑤(𝑥) = 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. (39)

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 och 𝑤(𝑥) avkodas på följande sätt

(26)

25

𝑣(𝑥) = 𝑤(𝑥) + 𝑒(𝑥) = 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

{

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

. (40)

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

(27)

26

6 Euklides algoritm - metoden

En effektiv avkodningsalgoritm för BCH - koder är Euklides algoritm - metoden och denna studeras i detta kapitel och kapitel 7. Denna metod 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 och ett värdepolynom [2]. Värdepolynomet anger värdet på felet men då den binära mängden studeras i detta arbete, tas ingen hänsyn till detta i de

nedanstående exemplen [4, s.249-253].

Det finns många olika sätt att illustrera Euklides algoritm - metoden på. Vissa mer komplexa än andra. Dock finns väldigt få tydliga och omfattande exempel på hur metoden används, och motiveringarna till vad som sker i de olika stegen mer i detalj är sparsamma. Min uppgift i detta arbete är därför att nämna de olika stegen i avkodningsprocessen och därefter illusterera två exempel som visar på att Euklides algoritm - metoden faktiskt fungerar.

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, vilken är 𝑆𝐺𝐷(𝑥2𝑡+1, 𝑆(𝑥)) kallas för värdepolynomet 𝛾(𝑥).

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

5. Testa alla element i 𝐺𝐹(2𝑚) och hitta rötterna till 𝑝(𝑥) = 0. Rötterna ges av 𝛼𝑘1, 𝛼𝑘2, … , 𝛼𝑘𝑣 om 𝑣 fel har uppstått. Felens positioner är då 𝑗𝑖 = −𝑘𝑖 modulo 𝑛.

Euklides algoritm - metoden börjar alltså med att bestämma de första syndromen vilka är dubbelt så många som antalet fel som koden kan rätta. Därefter beräknas syndrompolynomet enligt punkt 2. I punkt 3 används Euklides algoritm för att bestämma värdepolynomet (vilket dock inte har någon betydelse i vårt fall). För att tillslut bestämma felsökningspolynomet löses den diofantiska ekvationen i punkt 4. Till sist testas alla element i kroppen 𝐺𝐹(2𝑚) för att finna vilka positioner som felen har uppstått på.

Exempel 13: En BCH - kod med längden 𝑛 = 7 och som kan rätta 𝑡 = 1 fel betraktas. 𝐺𝐹(23) konstrueras över 𝑔(𝑥) = 1 + 𝑥 + 𝑥3. Systematisk kodning av informationspolynomet

(28)

27

𝑎(𝑥) = 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𝑥.

Så 𝛾(𝑥) = 𝛼2𝑥. 𝑝(𝑥) fås genom

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

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

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

𝑝(𝛼5) = 1 + 𝛼2𝛼5 = 1 + 𝛼7 = 0.

Vi får därmed att 𝑗1 = −5 = 2 modulo 7. Alltså har ett fel uppstått på plats 2. Vi får 𝑒(𝑥) = 𝑥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 här rättas endast ett fel. I nästa kapitel följer ett lite längre exempel på avkodning av en tre - rättande BCH - kod, baserad på Euklides algoritm.

(29)

28

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]

(41)

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

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

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

𝑥11+ 𝑥12+ 𝑥14 = (𝑥 + 𝑥4)𝑔(𝑥) + 𝑥 + 𝑥2 + 𝑥3+ 𝑥4+ 𝑥8 𝑣(𝑥) = 𝑥 + 𝑥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

References

Related documents

Den grundl¨aggande observationen i denna proposition ¨ar att volymen av de tv˚ a kongruenta prismorna l¨angst till h¨oger i figur 13 utg¨or mer ¨an h¨alften av volymen till

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

På så sätt undviks problemet med skalbarhet eftersom lösningen behålls mellan iterationerna vilket innebär att konstruktionssteget inte behöver skapa en lösning från början

Denna krets testades utan vidare resultat och efter ytterligare tester konstaterades det att den bästa kopplingen för detta ändamål var att koppla trycksensorn direkt till

Slutligen återstår mig att till förläggarna uttala min tacksamhet för den beredvillighet, hvarmed de åtagit sig ut- gifvandet af ännu en edition af Euklides'' Elementa, och för

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

resultat för variation i höjd, röd linje visar en medelvärdestrend mellan alla resultat En mer detaljerad genomgång av resultat för höjd-variation efter 50 exekveringar med

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