BCH -kode - BCH code

I kodningsteorien danner BCH-koderne eller Bose-Chaudhuri-Hocquenghem-koderne en klasse af cykliske fejlkorrigerende koder, der er konstrueret ved hjælp af polynom over et begrænset felt (også kaldet Galois-felt ). BCH-koder blev opfundet i 1959 af den franske matematiker Alexis Hocquenghem og uafhængigt i 1960 af Raj Bose og DK Ray-Chaudhuri . Navnet Bose – Chaudhuri – Hocquenghem (og akronymet BCH ) stammer fra initialerne til opfindernes efternavne (fejlagtigt i tilfældet Ray-Chaudhuri).

En af nøglefunktionerne i BCH -koder er, at der under kodedesign er en præcis kontrol over antallet af symbolfejl, der kan korrigeres af koden. Især er det muligt at designe binære BCH -koder, der kan korrigere flere bitfejl. En anden fordel ved BCH -koder er den lethed, hvormed de kan afkodes, nemlig via en algebraisk metode kendt som syndromdekodning . Dette forenkler designet af dekoderen til disse koder ved hjælp af lille elektronisk hardware med lav effekt.

BCH-koder bruges i applikationer såsom satellitkommunikation, cd- afspillere, dvd'er , diskdrev , solid-state-drev , kvantebestandig kryptografi og todimensionale stregkoder .

Definition og illustration

Primitive BCH-koder med smal sans

I betragtning af et primtal q og primær kraft q m med positive heltal m og d sådan, at dq m -1 , en primitiv BCH-kode med snæver sans over det endelige felt (eller Galois-felt) GF ( q ) med kodelængde n = q m - 1 og afstanden mindst d konstrueres ved følgende metode.

Lad α være et primitivt element i GF ( q m ) . For ethvert positivt heltal i , lad m i ( x ) være det minimale polynom med koefficienter i GF ( q ) af α i . Den generatorpolynomium af BCH-koden defineres som den mindste fælles multiplum g ( x ) = lcm ( m 1 ( x ), ..., m d - 1 ( x )) . Det kan ses, at g ( x ) er et polynom med koefficienter i GF ( q ) og deler x n - 1 . Derfor er den polynomiske kode defineret af g ( x ) en cyklisk kode.

Eksempel

Lad q = 2 og m = 4 (derfor n = 15 ). Vi vil overveje forskellige værdier af d for GF (16) = GF (2 4 ) baseret på det reducerende polynom z 4 + z + 1 ved hjælp af primitivt element α ( z ) = z . Der er fjorten minimumspolynomer m i ( x ) med tilfredsstillende koefficienter i GF (2)

De minimale polynomer er

BCH -koden med har generatorpolynom

Den har minimal Hamming -afstand mindst 3 og retter op til en fejl. Da generatorpolynomet er af grad 4, har denne kode 11 databit og 4 checksum -bits.

BCH -koden med har generatorpolynom

Den har minimal Hamming -afstand mindst 5 og retter op til to fejl. Da generatorpolynomet er af grad 8, har denne kode 7 databit og 8 checksum -bits.

BCH -koden med har generatorpolynom

Den har minimal Hamming -afstand mindst 7 og retter op til tre fejl. Da generatorpolynomet har en grad 10, har denne kode 5 databit og 10 checksum -bits. (Denne særlige generatorpolynom har en applikation i den virkelige verden i QR-kodens formatmønstre .)

BCH -koden med og højere har generatorpolynom

Denne kode har minimal Hamming -afstand 15 og retter 7 fejl. Den har 1 databit og 14 checksum -bits. Faktisk har denne kode kun to kodeord: 000000000000000 og 111111111111111.

Generelle BCH -koder

Generelle BCH-koder adskiller sig fra primitive smalle sansede BCH-koder i to henseender.

For det første kan kravet om at være et primitivt element i lempes. Ved at slappe dette krav, koden længde ændrer sig fra at den rækkefølge af elementet

For det andet kan de på hinanden følgende rødder af generatorpolynomet løbe fra i stedet for

Definition. Fix et begrænset felt, hvor der er en primær effekt. Vælg positive heltal sådan og er multiplikative rækkefølgen af modulo

Som før, så lad være en primitiv th roden af enhed i , og lad være det minimale polynomium løbet af for alle Generatoren polynomium af BCH-koden er defineret som den mindste fælles multiplum

Bemærk: hvis som i den forenklede definition, så er 1, og rækkefølgen af modulo er Derfor er den forenklede definition faktisk et specielt tilfælde af den generelle.

Særlige tilfælde

  • En BCH-kode med kaldes en smalfølsom BCH-kode .
  • En BCH -kode med kaldes primitiv .

Generatorpolynomet for en BCH -kode har koefficienter fra Generelt kaldes en cyklisk kode med som generatorpolynomet en BCH -kode over BCH -koden over og generatorpolynom med successive beføjelser som rødder er en type Reed -Solomon -kode, hvor dekoder (syndromer) alfabet er det samme som kanal (data og generator polynom) alfabet, alle elementer af . Den anden type Reed Solomon -kode er en original visning af Reed Solomon -kode, som ikke er en BCH -kode.

Ejendomme

Generatorpolynomet for en BCH -kode har højst grad . Desuden, hvis og , har generatorpolynomet højst grad .

Bevis

Hvert minimalt polynom har højst grad . Derfor har det mindst fælles multiplum af dem højst grad . Desuden, hvis så for alle . Derfor er det mindst almindelige multiplum af højst minimale polynom for ulige indeks hver af grader højst .

En BCH -kode har mindst Hamming -afstand mindst .

Bevis

Antag, at det er et kodeord med færre end ikke-nul termer. Derefter

Recall, der er rødder til derfor af . Dette indebærer, at tilfredsstille følgende ligninger for hver :

I matrixform har vi

Determinanten for denne matrix er lig

Matricen ses at være en Vandermonde -matrix , og dens determinant er

som ikke er nul. Derfor følger det derfor

En BCH -kode er cyklisk.

Bevis

En polynomisk længdekode er cyklisk, hvis og kun hvis dens generator polynom deler sig Siden er det minimale polynom med rødder, er det tilstrækkeligt at kontrollere, at hver af dem er en rod til Dette følger umiddelbart af det faktum, at det per definition er en rod til enhed .

Indkodning

Fordi ethvert polynom, der er et multiplum af generatorpolynomet, er et gyldigt BCH -kodeord, er BCH -kodning blot processen med at finde et polynom, der har generatoren som en faktor.

Selve BCH -koden er ikke foreskrivende for betydningen af ​​koefficienterne i polynomet; konceptuelt er en BCH -afkodingsalgoritme eneste bekymring at finde det gyldige kodeord med den minimale Hamming -afstand til det modtagne kodeord. Derfor kan BCH -koden implementeres enten som en systematisk kode eller ej, afhængigt af hvordan implementøren vælger at integrere meddelelsen i det kodede polynom.

Ikke-systematisk kodning: Beskeden som faktor

Den mest enkle måde at finde et polynom, der er et multiplum af generatoren, er at beregne produktet af et vilkårligt polynom og generatoren. I dette tilfælde kan det vilkårlige polynom vælges ved hjælp af meddelelsens symboler som koefficienter.

Som et eksempel kan du overveje generatorpolynomet , valgt til brug i den (31, 21) binære BCH -kode, der bruges af POCSAG og andre. For at kode 21-bit beskeden {101101110111101111101} repræsenterer vi den først som et polynom over :

Beregn derefter (også over ):

Således er det transmitterede kodeord {1100111010010111101011101110101}.

Modtageren kan bruge disse bits som koefficienter i og, efter fejlkorrektion for at sikre et gyldigt kodeord, kan genberegne

Systematisk kodning: Beskeden som et præfiks

En systematisk kode er en, hvor meddelelsen vises ordret et sted i kodeordet. Derfor involverer systematisk BCH-kodning først at integrere meddelelsespolynomet i kodeordpolynomet og derefter justere koefficienterne for de resterende (ikke-besked) vilkår for at sikre, at det kan deles med .

Denne kodningsmetode udnytter det faktum, at det at trække resten fra et udbytte resulterer i et multiplum af divisoren. Derfor, hvis vi tager vores budskabspolynom som før og multiplicerer det med (for at "flytte" budskabet væk fra resten), kan vi derefter bruge euklidisk opdeling af polynomier til at give:

Her ser vi, at det er et gyldigt kodeord. Som det altid er grad mindre end (hvilket er graden af ), kan vi roligt trække det fra uden at ændre nogen af ​​beskedkoefficienterne, derfor har vi vores som

Over (dvs. med binære BCH-koder) kan denne proces ikke skelnes fra at tilføje en cyklisk redundanskontrol , og hvis en systematisk binær BCH-kode kun bruges til fejldetekteringsformål, ser vi, at BCH-koder kun er en generalisering af cykliske matematik redundans kontrol .

Fordelen ved den systematiske kodning er, at modtageren kan gendanne den originale meddelelse ved at kassere alt efter de første koefficienter efter at have udført fejlkorrektion.

Afkodning

Der er mange algoritmer til afkodning af BCH -koder. De mest almindelige følger denne generelle oversigt:

  1. Beregn syndromerne s j for den modtagne vektor
  2. Bestem antallet af fejl t og fejllokatorens polynom Λ (x) fra syndromerne
  3. Beregn rødderne til fejlplaceringspolynomet for at finde fejlplaceringerne X i
  4. Beregn fejlværdierne Y i på disse fejlsteder
  5. Ret fejlene

Under nogle af disse trin kan dekoderingsalgoritmen bestemme, at den modtagne vektor har for mange fejl og ikke kan rettes. For eksempel, hvis en passende værdi af t ikke findes, ville korrektionen mislykkes. I en afkortet (ikke primitiv) kode kan en fejlplacering være uden for området. Hvis den modtagne vektor har flere fejl, end koden kan rette, kan dekoderen ubevidst frembringe en tilsyneladende gyldig meddelelse, der ikke er den, der blev sendt.

Beregn syndromerne

Den modtagne vektor er summen af ​​det korrekte kodeord og en ukendt fejlvektor Syndromværdierne dannes ved at betragte det som et polynom og evaluere det på Således er syndromerne

for at

Da nuller heraf er et multiplum, isolerer undersøgelse af syndromværdierne således fejlvektoren, så man kan begynde at løse for det.

Hvis der ikke er nogen fejl, for alle Hvis syndromerne alle er nul, er afkodningen udført.

Beregn fejlplaceringspolynomet

Hvis der er nul -syndromer, er der fejl. Dekoderen skal finde ud af, hvor mange fejl og placeringen af ​​disse fejl.

Hvis der er en enkelt fejl, skal du skrive dette som hvor er placeringen af ​​fejlen og dens størrelse. Så er de to første syndromer

så sammen giver de os mulighed for at beregne og give nogle oplysninger om (fuldstændig bestemmelse af det i tilfælde af Reed -Solomon -koder).

Hvis der er to eller flere fejl,

Det er ikke umiddelbart indlysende, hvordan man begynder at løse de resulterende syndromer for de ukendte og

Det første trin er at finde, kompatibelt med computersyndromer og med minimalt muligt lokaliseringspolynom:

Tre populære algoritmer til denne opgave er:

  1. Peterson – Gorenstein – Zierler algoritme
  2. Berlekamp – Massey algoritme
  3. Sugiyama euklidisk algoritme

Peterson – Gorenstein – Zierler algoritme

Petersons algoritme er trin 2 i den generaliserede BCH -afkodningsprocedure. Petersons algoritme bruges til at beregne fejllokatorens polynomkoefficienter for et polynom

Nu er proceduren for Peterson – Gorenstein – Zierler -algoritmen. Forvent, at vi har mindst 2 t syndromer s c ,…, s c +2 t −1 . Lad v  =  t .

  1. Start med at generere matricen med elementer, der er syndromværdier
  2. Generer en vektor med elementer
  3. Lad betegne de ukendte polynomiske koefficienter, som er givet ved
  4. Form matrixligningen
  5. Hvis matrixens determinant er nul, kan vi faktisk finde en invers af denne matrix og løse værdierne for ukendte værdier.
  6. Hvis så følg
           if 
           then
                 declare an empty error locator polynomial
                 stop Peterson procedure.
           end
           set 
    
    fortsætte fra begyndelsen af ​​Petersons afkodning ved at gøre mindre
  7. Når du har værdierne for , har du fejlfinderpolynomet.
  8. Stop Peterson -proceduren.

Faktorfejl lokaliseringspolynom

Nu hvor du har polynomet, kan dets rødder findes i formen ved brutal kraft, for eksempel ved hjælp af Chien -søge -algoritmen. Det primitive elements eksponentielle kræfter vil give de positioner, hvor der opstår fejl i det modtagne ord; deraf navnet 'fejlfinder' polynom.

Nullerne på Λ ( x ) er α - i 1 ,…, α - i v .

Beregn fejlværdier

Når fejlplaceringerne er kendt, er det næste trin at bestemme fejlværdierne på disse steder. Fejlværdierne bruges derefter til at rette de modtagne værdier på disse steder for at gendanne det originale kodeord.

I tilfælde af binær BCH (med alle læsbare tegn) er dette trivielt; bare vend bitene for det modtagne ord på disse positioner, og vi har det korrigerede kodeord. I det mere generelle tilfælde kan fejlvægtene bestemmes ved at løse det lineære system

Forney algoritme

Der er imidlertid en mere effektiv metode kendt som Forney -algoritmen .

Lade

Og fejlvurderingspolynomet

Endelig:

hvor

End hvis syndromer kunne forklares med et fejlord, der kun kunne være nul på positioner , er fejlværdierne

For BCH-koder med smal sans, c = 1, så udtrykket forenkles til:

Forklaring af Forney -algoritmeberegning

Det er baseret på Lagrange -interpolation og teknikker til generering af funktioner .

Overvej og for enkelthedens skyld antag for og for derefter

Vi vil beregne ubekendte, og vi kunne forenkle konteksten ved at fjerne vilkårene. Dette fører til fejlevalueringspolynomet

Takket være det har vi

Takket være (Lagrange -interpolationstricket) degenereres summen til kun én summen for

For at få det skal vi bare slippe af med produktet. Vi kunne beregne produktet direkte fra allerede beregnede rødder af, men vi kunne bruge enklere form.

Som formel afledt

vi får igen kun en summen ind

Så endelig

Denne formel er fordelagtig, når man beregner det formelle derivat af form

hvilket giver:

hvor

Afkodning baseret på udvidet euklidisk algoritme

En alternativ proces med at finde både polynomet Λ og fejllokatorpolynomet er baseret på Yasuo Sugiyamas tilpasning af den udvidede euklidiske algoritme . Korrektion af ulæselige tegn kan også let indarbejdes i algoritmen.

Lad være positioner med ulæselige tegn. Man opretter polynom lokalisering af disse positioner Indstil værdier på ulæselige positioner til 0 og beregne syndromerne.

Som vi allerede har defineret for Forney -formlen lad

Lad os køre en udvidet euklidisk algoritme til lokalisering af den mindst fælles divisor af polynomier og Målet er ikke at finde den mindst fælles divisor, men højst et polynom og polynomer således, at Lav grad af garantier, der ville tilfredsstille udvidede (ved ) definerende betingelser til

At definere og bruge på stedet for i Fourney -formlen vil give os fejlværdier.

Den største fordel ved algoritmen er, at den i mellemtiden beregner nødvendige i Forney -formlen.

Forklaring af afkodningsprocessen

Målet er at finde et kodeord, der adskiller sig fra det modtagne ord minimalt som muligt på læsbare positioner. Når vi udtrykker det modtagne ord som en sum af nærmeste kodeord og fejlord, forsøger vi at finde fejlord med et minimalt antal ikke-nuller på læsbare positioner. Syndrom begrænser fejl ord efter tilstand

Vi kunne skrive disse betingelser separat eller vi kunne skabe polynom

og sammenligne koefficienter nær beføjelser til

Antag, at der er et ulæseligt bogstav om position, vi kunne erstatte sæt syndromer med sæt af syndromer defineret ved ligning Antag for et fejlord, at alle begrænsninger ved det originale sæt syndromer holder, end

Nyt sæt syndromer begrænser fejlvektoren

på samme måde begrænsede det originale sæt syndromer fejlvektoren Bortset fra koordinaten, hvor vi har en, er nul, hvis For målet om at lokalisere fejlpositioner kunne vi ændre sættet med syndromer på lignende måde for at afspejle alle ulæselige tegn. Dette forkorter sæt af syndromer med

I polynomformulering fører udskiftning af syndromer sat med syndromesæt til

Derfor,

Efter udskiftning af med ville man kræve ligning for koefficienter nær kræfter

Man kunne overveje at kigge efter fejlpositioner fra det synspunkt at eliminere indflydelse fra givne positioner på samme måde som for ulæselige tegn. Hvis vi fandt positioner, så eliminering af deres indflydelse fører til at få et sæt syndromer, der består af alle nuller, end der findes fejlvektor med fejl kun på disse koordinater. Hvis betegner det polynom, der eliminerer påvirkningen af ​​disse koordinater, opnår vi

I den euklidiske algoritme forsøger vi højst at rette fejl (på læsbare positioner), fordi med større fejltælling kan der være flere kodeord i samme afstand fra det modtagne ord. Derfor, for vi leder efter, skal ligningen holde for koefficienter nær kræfter, der starter fra

I Forney -formlen kan den ganges med en skalar, der giver det samme resultat.

Det kan ske, at den euklidiske algoritme finder en grad højere end at have et antal forskellige rødder svarende til dens grad, hvor Fourney -formlen ville være i stand til at rette fejl i alle dens rødder, men alligevel kunne det være risikabelt at rette så mange fejl (især uden andre begrænsninger på modtaget ord). Normalt efter at have fået en højere grad, beslutter vi os for ikke at rette fejlene. Korrektion kan mislykkes, hvis der er rødder med større multiplicitet, eller antallet af rødder er mindre end dets grad. Fejl kan også opdages ved at Forney -formel returnerer fejl uden for det transmitterede alfabet.

Ret fejlene

Brug fejlværdierne og fejlplaceringen til at rette fejlene og danne en korrigeret kodevektor ved at trække fejlværdier fra ved fejlplaceringer.

Afkodningseksempler

Afkodning af binær kode uden ulæselige tegn

Overvej en BCH -kode i GF (2 4 ) med og . (Dette bruges i QR -koder .) Lad meddelelsen, der skal transmitteres, være [1 1 0 1 1], eller i polynomnotation, "checksum" -symbolerne beregnes ved at dividere med og tage resten, hvilket resulterer i eller [1 0 0 0 0 1 0 1 0 0]. Disse er vedhæftet meddelelsen, så det overførte kodeord er [1 1 0 1 1 1 0 0 0 0 1 0 1 0 0].

Forestil dig nu, at der er to bitfejl i transmissionen, så det modtagne kodeord er [1 0 0 1 1 1 0 0 0 1 1 0 1 0 0]. I polynom notation:

For at rette fejlene skal du først beregne syndromerne. Når vi tager og derefter anvender vi Peterson-proceduren ved at reducere følgende forstørrede matrix i række.

På grund af nulrækken er S 3 × 3 ental, hvilket ikke er nogen overraskelse, da kun to fejl blev introduceret i kodeordet. Matrixens øverste venstre hjørne er imidlertid identisk med [ S 2 × 2 | C 2 × 1 ] , som giver anledning til løsningen Det resulterende fejllokaliseringspolynom er som har nuller på og Eksponenterne svarer til fejlplaceringerne. Det er ikke nødvendigt at beregne fejlværdierne i dette eksempel, da den eneste mulige værdi er 1.

Afkodning med ulæselige tegn

Antag det samme scenario, men det modtagne ord har to ulæselige tegn [1 0 0? 11 1? 0 0 1 1 0 1 0 0]. Vi erstatter de ulæselige tegn med nuller, mens vi opretter polynomet, der afspejler deres positioner Vi beregner syndromerne og (Ved hjælp af lognotation, der er uafhængig af GF (2 4 ) isomorfier. Til beregningskontrol kan vi bruge den samme repræsentation til tilføjelse som blev brugt i tidligere Hexadecimal beskrivelse af beføjelserne er i rækkefølge 1,2,4,8,3,6, C, B, 5, A, 7, E, F, D, 9 med tilføjelsen baseret på bitvis xor.)

Lad os gøre syndrom polynomt

beregne

Kør den udvidede euklidiske algoritme:

Vi har højst nået polynom af grad 3, og som

vi får

Derfor,

Lad dig ikke bekymre dig om, at Find ved brutal kraft en rod til Rødderne er og (efter at have fundet for eksempel kan vi dividere med tilsvarende monom, og roden til den resulterende monom kan let findes).

Lade

Lad os se efter fejlværdier ved hjælp af formel

hvor er rødderne til Vi kommer

Faktum, det burde ikke være overraskende.

Korrigeret kode er derfor [1 1 0 1 1 1 0 0 0 0 0 1 0 1 0 0].

Afkodning med ulæselige tegn med et lille antal fejl

Lad os vise algoritmens adfærd for sagen med et lille antal fejl. Lad det modtagne ord være [1 0 0? 11 1? 0 0 0 1 0 1 0 0].

Igen skal du erstatte de ulæselige tegn med nuller, mens du opretter polynomet, der afspejler deres positioner Beregn syndromerne og Opret syndromspolynom

Lad os køre den udvidede euklidiske algoritme:

Vi har højst nået polynom af grad 3, og som

vi får

Derfor,

Lad dig ikke bekymre dig om, at roden til er

Lade

Lad os lede efter fejlværdier ved hjælp af formel, hvor er polynomets rødder

Vi får

Det skulle ikke være overraskende.

Korrigeret kode er derfor [1 1 0 1 1 1 0 0 0 0 0 1 0 1 0 0].

Citater

Referencer

Primære kilder

Sekundære kilder

Yderligere læsning