Felkorrigeringskod - Error correction code

Inom beräkning , telekommunikation , informationsteori och kodteori används en felkorrigeringskod , ibland felkorrigeringskod , ( ECC ) för att styra fel i data över opålitliga eller bullriga kommunikationskanaler . Den centrala idén är att avsändaren kodar meddelandet med redundant information i form av en ECC. Redundansen gör att mottagaren kan upptäcka ett begränsat antal fel som kan uppstå var som helst i meddelandet, och ofta för att korrigera dessa fel utan vidarebefordran. Den amerikanska matematikern Richard Hamming var pionjär inom detta område på 1940-talet och uppfann den första felkorrigerande koden 1950: Hamming (7,4) -koden .

ECC kontrasterar med feldetektering genom att fel som påträffas kan korrigeras, inte bara upptäckas. Fördelen är att ett system som använder ECC inte kräver en omvänd kanal för att begära vidaresändning av data när ett fel uppstår. Nackdelen är att det finns en fast overhead som läggs till i meddelandet, vilket kräver en högre bandbredd framåt. ECC tillämpas därför i situationer där vidarebefordran är kostsam eller omöjlig, såsom envägskommunikationslänkar och vid överföring till flera mottagare i multicast . Långtidsförbindelser gynnas också; vid satellit som kretsar runt Uranus kan vidarebefordran på grund av fel skapa en fördröjning på fem timmar. ECC -information läggs vanligtvis till masslagringsenheter för att möjliggöra återställning av skadad data, används ofta i modem och används på system där det primära minnet är ECC -minne .

ECC -behandling i en mottagare kan tillämpas på en digital bitström eller i demodulering av en digitalt modulerad bärare. För den senare är ECC en integrerad del av den initiala analog-till-digital-omvandlingen i mottagaren. Den Viterbiavkodaren implementerar en mjuk beslutsalgoritm för att demodulera digitala data från en analog signal skadad av buller. Många ECC-kodare/avkodare kan också generera en BER-signal ( bit-error rate ), som kan användas som feedback för att finjustera den analoga mottagande elektroniken.

De maximala fraktionerna av fel eller av saknade bitar som kan korrigeras bestäms av utformningen av ECC -koden, så olika felkorrigeringskoder är lämpliga för olika förhållanden. I allmänhet inducerar en starkare kod mer redundans som måste överföras med hjälp av den tillgängliga bandbredden, vilket minskar den effektiva bithastigheten samtidigt som det förbättrade förhållandet mellan signal och brus förbättras. Den bullriga-kanalkodnings sats av Claude Shannon kan användas för att beräkna den maximala uppnåbara kommunikationsbandbredd för en given maximal acceptabel felsannolikhet. Detta sätter gränser för den teoretiska maximala informationsöverföringshastigheten för en kanal med viss given basbrusnivå. Beviset är emellertid inte konstruktivt och ger därför ingen inblick i hur man bygger en kapacitet att uppnå kod. Efter år av forskning kommer några avancerade ECC -system från och med 2016 mycket nära det teoretiska maxvärdet.

Vidarebefordra felkorrigering

I telekommunikation , informationsteori , och kodningsteori , framåtriktad felkorrigering ( FEC ) eller kanalkodning är en teknik som används för att styra fel i dataöverföringen över otillförlitliga eller brusiga kommunikationskanaler . Den centrala tanken är att avsändaren kodar meddelandet på ett redundant sätt, oftast med hjälp av en ECC.

Redundansen gör det möjligt för mottagaren att upptäcka ett begränsat antal fel som kan uppstå var som helst i meddelandet, och ofta för att korrigera dessa fel utan omöverföring. FEC ger mottagaren möjlighet att korrigera fel utan att behöva en omvänd kanal för att begära vidarebefordran av data, men på bekostnad av en fast, högre kanalbredd framåt. FEC tillämpas därför i situationer där återöverföringar är dyra eller omöjliga, till exempel envägskommunikationslänkar och vid överföring till flera mottagare i multicast . FEC -information läggs vanligtvis till på masslagringsenheter (magnetiska, optiska och fasta tillstånd/flashbaserade) enheter för att möjliggöra återställning av skadad data, används ofta i modem , används på system där det primära minnet är ECC -minne och i sändningssituationer, där mottagaren har inte möjligheter att begära återöverföring eller att göra det skulle orsaka betydande latens. Till exempel, i fallet med en satellit som kretsar runt Uranus , kan en återöverföring på grund av avkodningsfel skapa en fördröjning på minst 5 timmar.

FEC -behandling i en mottagare kan tillämpas på en digital bitström eller i demodulering av en digitalt modulerad bärare. För den senare är FEC en integrerad del av den initiala analog-till-digital-omvandlingen i mottagaren. Den Viterbiavkodaren implementerar en mjuk beslutsalgoritm för att demodulera digitala data från en analog signal skadad av buller. Många FEC-kodare kan också generera en bit-error rate (BER) signal som kan användas som feedback för att finjustera den analoga mottagande elektroniken.

Den maximala andelen fel eller saknade bitar som kan korrigeras bestäms av ECC: s utformning, så olika felkorrigeringskoder för framåt är lämpliga för olika förhållanden. I allmänhet inducerar en starkare kod mer redundans som måste överföras med hjälp av den tillgängliga bandbredden, vilket minskar den effektiva bithastigheten samtidigt som det förbättrade förhållandet mellan signal och brus förbättras. Den bullriga-kanalkodning sats av Claude Shannon svarar på frågan om hur mycket bandbredd som finns kvar för datakommunikation när du använder den mest effektiva kod som vänder avkodning felsannolikhet till noll. Detta sätter gränser för den teoretiska maximala informationsöverföringshastigheten för en kanal med viss given basbrusnivå. Hans bevis är inte konstruktivt och ger därför ingen insikt om hur man bygger en kapacitet att uppnå kod. Men efter år av forskning uppnår vissa avancerade FEC -system som polarkod Shannon -kanalens kapacitet under hypotesen om en oändlig längdram.

Hur det fungerar

ECC åstadkoms genom att lägga till redundans till den överförda informationen med hjälp av en algoritm. En redundant bit kan vara en komplex funktion av många ursprungliga informationsbitar. Den ursprungliga informationen kanske visas bokstavligen i den kodade utmatningen; koder som inkluderar den omodifierade ingången i utmatningen är systematiska , medan de som inte gör det är icke-systematiska .

Ett förenklat exempel på ECC är att sända varje databit 3 gånger, vilket är känt som en (3,1) upprepningskod . Genom en bullrig kanal kan en mottagare se 8 versioner av utgången, se tabellen nedan.

Triplet mottagen Tolkas som
000 0 (felfri)
001 0
010 0
100 0
111 1 (felfri)
110 1
101 1
011 1

Detta gör att ett fel i något av de tre urvalen kan korrigeras med "majoritetsröst" eller "demokratisk omröstning". Korrigeringsförmågan hos denna ECC är:

  • Upp till 1 bit triplet av misstag, eller
  • upp till 2 bitar av trilling utelämnas (fall visas inte i tabellen).

Även om den är enkel att implementera och ofta används, är denna tredubbla modulära redundans en relativt ineffektiv ECC. Bättre ECC -koder undersöker vanligtvis de sista flera tiotalen eller till och med de senaste hundratals tidigare mottagna bitarna för att bestämma hur man avkodar den nuvarande lilla handfull bitarna (vanligtvis i grupper om 2 till 8 bitar).

Medelbrus för att minska fel

ECC kan sägas fungera med "medelvärde för buller"; eftersom varje databit påverkar många överförda symboler, gör korruptionen av vissa symboler genom brus vanligtvis det möjligt att extrahera de ursprungliga användardata från de andra, oförstörda mottagna symbolerna som också är beroende av samma användardata.

  • På grund av denna "risk-pooling" -effekt tenderar digitala kommunikationssystem som använder ECC att fungera långt över ett visst minimalt signal-brus-förhållande och inte alls under det.
  • Detta allt-eller-inget tendens - den klippan effekt - blir mer uttalad som starkare koder används som närmare närma sig teoretiska Shannon gräns .
  • Interleaving ECC -kodad data kan minska alla eller ingenting egenskaper för överförda ECC -koder när kanalfelen tenderar att uppstå i skurar. Denna metod har dock gränser; den används bäst på smalbanddata.

De flesta telekommunikationssystem använder en fast kanalkod som är utformad för att tolerera den förväntade värsta fallfelhastigheten och misslyckas sedan med att fungera alls om bitfelhastigheten är allt sämre. Vissa system anpassar sig dock till de givna kanalfelförhållandena: vissa fall av hybrid automatisk upprepad begäran använder en fast ECC-metod så länge ECC kan hantera felprocenten och byter sedan till ARQ när felprocenten blir för hög; adaptiv modulering och kodning använder en mängd olika ECC-hastigheter, lägger till fler felkorrigeringsbitar per paket när det finns högre felhastigheter i kanalen, eller tar ut dem när de inte behövs.

Typer av ECC

Image
En kort klassificering av felkorrigeringskoderna

De två huvudkategorierna av ECC -koder är blockkoder och konvolutionskoder .

  • Blockkoder fungerar på block med fast storlek (paket) med bitar eller symboler med förutbestämd storlek. Praktiska blockkoder kan generellt avkodas i polynomtid till deras blocklängd.
  • Konvolutionskoder fungerar på bit- eller symbolströmmar av godtycklig längd. De avkodas oftast med Viterbi -algoritmen , även om andra algoritmer ibland används. Viterbi -avkodning möjliggör asymptotiskt optimal avkodningseffektivitet med ökande tvångslängd för konvolutionskoden, men på bekostnad av exponentiellt ökande komplexitet. En konvolutionskod som avslutas är också en "blockkod" genom att den kodar för ett block av indata, men blockstorleken för en konvolutionskod är i allmänhet godtycklig, medan blockkoder har en fast storlek som dikteras av deras algebraiska egenskaper. Typer av avslutning för konvolutionskoder inkluderar "svansbett" och "bitsköljning".

Det finns många typer av blockkoder; Reed -Solomon -kodning är anmärkningsvärd för sin utbredda användning på CD -skivor , DVD -skivor och hårddiskar . Andra exempel på klassiska blockkoder inkluderar Golay , BCH , flerdimensionell paritet och Hamming -koder .

Hamming ECC används vanligtvis för att korrigera NAND -flashminnesfel. Detta ger en-bitars felkorrigering och 2-bitars feldetektering. Hammningskoder är endast lämpliga för mer tillförlitlig single-level cell (SLC) NAND. Tätare multi-level cell (MLC) NAND kan använda multi-bitskorrigerande ECC såsom BCH eller Reed – Solomon. NOR Flash använder vanligtvis ingen felkorrigering.

Klassiska blockkoder avkodas vanligtvis med algoritmer för hårda beslut , vilket innebär att för varje ingångs- och utsignal tas ett hårt beslut om det motsvarar en en- eller nollbit. Däremot avkodas konvolutionskoder vanligtvis med hjälp av mjuka beslutsalgoritmer som Viterbi-, MAP- eller BCJR- algoritmerna, som bearbetar (diskretiserade) analoga signaler, och som möjliggör mycket högre felkorrigeringsprestanda än avkodning av hårda beslut.

Nästan alla klassiska blockkoder tillämpar de algebraiska egenskaperna hos ändliga fält . Därför kallas klassiska blockkoder ofta som algebraiska koder.

Till skillnad från klassiska blockkoder som ofta specificerar en feldetekterande eller felkorrigerande förmåga saknar många moderna blockkoder som LDPC-koder sådana garantier. I stället utvärderas moderna koder i termer av sina bitfelhastigheter.

De flesta felkorrigeringskoder för framåt korrigerar endast bit-flips, men inte bitinsättningar eller bit-raderingar. I denna inställning är Hamming -avståndet det lämpliga sättet att mäta bitfelhastigheten . Några felkorrigeringskoder för framåt är utformade för att korrigera bitinsättningar och raderingar, till exempel markörkoder och vattenstämpelkoder. Den levenshteinavstånd är ett lämpligare sätt att mäta bitfelskvoten vid användning av sådana koder.

Kodhastighet och avvägningen mellan tillförlitlighet och datahastighet

Den grundläggande principen för ECC är att lägga till redundanta bitar för att hjälpa avkodaren att ta reda på det sanna meddelandet som kodades av sändaren. Kodhastigheten för ett givet ECC-system definieras som förhållandet mellan antalet informationsbitar och det totala antalet bitar (dvs. information plus redundansbitar) i ett givet kommunikationspaket. Kodhastigheten är därför ett reellt tal. En låg kodfrekvens nära noll innebär en stark kod som använder många redundanta bitar för att uppnå bra prestanda, medan en stor kodfrekvens nära 1 innebär en svag kod.

De redundanta bitarna som skyddar informationen måste överföras med samma kommunikationsresurser som de försöker skydda. Detta orsakar en grundläggande avvägning mellan tillförlitlighet och datahastighet. I en ytterlighet kan en stark kod (med låg kodhastighet) framkalla en viktig ökning av mottagarens SNR (signal-brus-förhållande) som minskar bitfelhastigheten, på bekostnad av att minska den effektiva datahastigheten. Å andra sidan använder man inte någon ECC (dvs. en kodfrekvens lika med 1) hela kanalen för informationsöverföring, på bekostnad av att lämna bitarna utan ytterligare skydd.

En intressant fråga är följande: hur effektiv när det gäller informationsöverföring kan ett ECC vara med en försumbar avkodningsfel? Denna fråga besvarades av Claude Shannon med sin andra sats, som säger att kanalkapaciteten är den maximala bithastighet som kan uppnås av alla ECC vars felhastighet tenderar att nollas: Hans bevis bygger på Gaussisk slumpmässig kodning, som inte är lämplig för verkliga världen applikationer. Den övre gränsen som ges av Shannons arbete inspirerade till en lång resa med att utforma ECC: er som kan komma nära den ultimata prestationsgränsen. Olika koder idag kan uppnå nästan Shannon -gränsen. Emellertid är kapacitet att uppnå ECC vanligtvis extremt komplex att implementera.

De mest populära ECC har en avvägning mellan prestanda och beräkningskomplexitet. Vanligtvis ger deras parametrar en rad möjliga kodhastigheter, som kan optimeras beroende på scenariot. Vanligtvis görs denna optimering för att uppnå en låg avkodningsfelsannolikhet samtidigt som påverkan på datahastigheten minimeras. Ett annat kriterium för att optimera kodhastigheten är att balansera låg felfrekvens och nummer för vidarebefordran för att kommunicera energikostnaden.

Sammankopplade ECC -koder för förbättrad prestanda

Klassiska (algebraiska) blockkoder och konvolutionskoder kombineras ofta i sammanlänkade kodningsscheman där en kort Vinterbi-avkodad konvolutionskod med begränsad längd gör det mesta av arbetet och en blockkod (vanligtvis Reed – Solomon) med större symbolstorlek och blocklängd "torkar upp" eventuella fel som görs av den konvolutiva avkodaren. Enkel avkodning med denna familj av felkorrigeringskoder kan ge mycket låga felhastigheter, men för överföringsförhållanden över långa avstånd (som djupt utrymme) rekommenderas iterativ avkodning.

Kopplade koder har varit standardpraxis inom satellit- och djupkommunikation sedan Voyager 2 först använde tekniken i mötet med Uranus 1986 . Den Galileo farkoster används iterativa konkateneras koder för att kompensera för de mycket höga felfrekvens tillstånd som orsakas av att ha en misslyckad antenn.

Låg densitet paritetskontroll (LDPC)

LDPC-koder ( low-density parity-check ) är en klass av högeffektiva linjära blockkoder gjorda av många SPC-koder (single parity check). De kan tillhandahålla prestanda mycket nära kanalkapaciteten (det teoretiska maxvärdet) med hjälp av en itererad mjukbeslutande avkodningsmetod, vid linjär tidskomplexitet när det gäller deras blocklängd. Praktiska implementationer förlitar sig starkt på att avkoda de ingående SPC -koderna parallellt.

LDPC -koder introducerades först av Robert G. Gallager i sin doktorsavhandling 1960, men på grund av beräkningsinsatsen för att implementera kodare och avkodare och införandet av Reed -Solomon -koder ignorerades de mestadels fram till 1990 -talet.

LDPC-koder används nu i många senaste höghastighetskommunikationsstandarder, till exempel DVB-S2 (Digital Video Broadcasting-Satellite-Second Generation), WiMAX ( IEEE 802.16e standard för mikrovågskommunikation), High-Speed ​​Wireless LAN ( IEEE 802.11n ), 10GBase-T Ethernet (802.3an) och G.hn/G.9960 (ITU-T Standard för nätverk över kraftledningar, telefonlinjer och koaxialkabel). Andra LDPC -koder är standardiserade för trådlösa kommunikationsstandarder inom 3GPP MBMS (se fontänkoder ).

Turbokoder

Turbokodning är ett iterat mjukt avkodningsschema som kombinerar två eller flera relativt enkla konvolutionskoder och en interleaver för att producera en blockkod som kan utföra inom en bråkdel av en decibel av Shannon-gränsen . De förutser LDPC -koder när det gäller praktisk tillämpning och ger nu liknande prestanda.

En av de tidigaste kommersiella tillämpningarna av turbokodning var CDMA2000 1x (TIA IS-2000) digital mobilteknologi som utvecklats av Qualcomm och såldes av Verizon Wireless , Sprint och andra bärare. Det används också för utvecklingen av CDMA2000 1x specifikt för internetåtkomst, 1xEV-DO (TIA IS-856). Precis som 1x utvecklades EV-DO av Qualcomm och säljs av Verizon Wireless , Sprint och andra operatörer (Verizons marknadsföringsnamn för 1xEV-DO är bredbandstillgång , Sprints konsument- och företagsmarknadsföringsnamn för 1xEV-DO är Power Vision och Mobile Bredband , respektive).

Lokal avkodning och testning av koder

Ibland är det bara nödvändigt att avkoda enskilda bitar av meddelandet, eller att kontrollera om en given signal är ett kodord, och göra det utan att titta på hela signalen. Detta kan vara meningsfullt i en streaminginställning, där kodord är för stora för att klassiskt avkodas tillräckligt snabbt och där bara några bitar av meddelandet är av intresse för tillfället. Sådana koder har också blivit ett viktigt verktyg inom beräkningskomplexitetsteori , t.ex. för utformning av sannolikt kontrollerbara bevis .

Lokalt avkodbara koder är felkorrigerande koder för vilka enskilda bitar av meddelandet sannolikt kan återvinnas genom att endast titta på ett litet (säg konstant) antal positioner i ett kodord, även efter att kodordet har skadats vid någon konstant bråkdel av positioner. Lokalt testbara koder är felkorrigerande koder för vilka det sannolikt kan kontrolleras om en signal är nära ett kodord genom att bara titta på ett litet antal positioner för signalen.

Interleaving

Image
En kort illustration av sammanflätad idé

Interleaving används ofta i digitala kommunikations- och lagringssystem för att förbättra prestanda för felkorrigeringskoder. Många kommunikationskanaler är inte minnesfria: fel uppstår vanligtvis i skurar snarare än oberoende. Om antalet fel i ett kodord överstiger den felkorrigerande kodens förmåga, kan det ursprungliga kodordet inte återställas. Interleaving lindrar detta problem genom att blanda källsymboler över flera kodord och skapar därmed en mer enhetlig fördelning av fel. Därför används interfoliering i stor utsträckning för burst-felkorrigering .

Analysen av moderna itererade koder, som turbokoder och LDPC -koder , förutsätter vanligtvis en oberoende fördelning av fel. System som använder LDPC -koder använder därför vanligtvis ytterligare sammanflätningar över symbolerna i ett kodord.

För turbokoder är en interleaver en integrerad komponent och dess korrekta design är avgörande för god prestanda. Den iterativa avkodningsalgoritmen fungerar bäst när det inte finns korta cykler i faktordiagrammet som representerar avkodaren; interfolieraren väljs för att undvika korta cykler.

Interleaver -design inkluderar:

  • rektangulära (eller enhetliga) interleavers (liknande metoden med hjälp av hoppfaktorer som beskrivs ovan)
  • konvolutionella interleavers
  • slumpmässiga interleavers (där interleaver är en känd slumpmässig permutation)
  • S-slumpmässig interleaver (där interleaver är en känd slumpmässig permutation med begränsningen att inga insignaler inom avstånd S visas inom ett avstånd av S i utgången).
  • ett tvistefritt kvadratiskt permutationspolynom (QPP). Ett exempel på användning finns i 3GPP Long Term Evolution mobil telekommunikationsstandard.

I fler bärare kommunikationssystem, interleaving över bärare kan användas för att tillhandahålla frekvens mångfald , t ex för att mildra frekvensselektiv fädning eller smalbandsinterferens.

Exempel

Transmission utan mellanlagring :

Error-free message:                                 aaaabbbbccccddddeeeeffffgggg
Transmission with a burst error:                    aaaabbbbccc____deeeeffffgggg

Här representerar varje grupp av samma bokstav ett 4-bitars ett-bitars felkorrigerande kodord. Kodordet cccc ändras i en bit och kan korrigeras, men kodordet dddd ändras i tre bitar, så antingen kan det inte avkodas alls eller så kan det avkodas felaktigt .

Med sammanfogning :

Error-free code words:                              aaaabbbbccccddddeeeeffffgggg
Interleaved:                                        abcdefgabcdefgabcdefgabcdefg
Transmission with a burst error:                    abcdefgabcd____bcdefgabcdefg
Received code words after deinterleaving:           aa_abbbbccccdddde_eef_ffg_gg

I vart och ett av kodorden "aaaa", "eeee", "ffff" och "gggg" ändras endast en bit, så en-bitars felkorrigerande kod kommer att avkoda allt korrekt.

Transmission utan mellanlagring :

Original transmitted sentence:                      ThisIsAnExampleOfInterleaving
Received sentence with a burst error:               ThisIs______pleOfInterleaving

Termen "AnExample" hamnar mestadels oförståelig och svår att korrigera.

Med sammanfogning :

Transmitted sentence:                               ThisIsAnExampleOfInterleaving...
Error-free transmission:                            TIEpfeaghsxlIrv.iAaenli.snmOten.
Received sentence with a burst error:               TIEpfe______Irv.iAaenli.snmOten.
Received sentence after deinterleaving:             T_isI_AnE_amp_eOfInterle_vin_...

Inget ord går helt förlorat och de saknade bokstäverna kan återställas med minimal gissning.

Nackdelar med sammanflätning

Användning av interleaving -tekniker ökar den totala fördröjningen. Detta beror på att hela interfolierade blocket måste tas emot innan paketen kan avkodas. Även interleavers döljer strukturen av fel; utan en interleaver kan mer avancerade avkodningsalgoritmer dra fördel av felstrukturen och uppnå mer tillförlitlig kommunikation än en enklare avkodare kombinerad med en interleaver. Ett exempel på en sådan algoritm är baserad på neurala nätverksstrukturer .

Programvara för felkorrigeringskoder

Att simulera beteendet hos felkorrigerande koder (ECC) i programvara är en vanlig metod för att designa, validera och förbättra ECC: er. Den kommande trådlösa 5G-standarden höjer ett nytt sortiment av applikationer för programvaran ECC: Cloud Radio Access Networks (C-RAN) i ett programvarudefinierat radio (SDR) -sammanhang. Tanken är att direkt använda programvaru -ECC i kommunikationen. Till exempel i 5G kan mjukvaru -ECC: erna lokaliseras i molnet och antennerna som är anslutna till dessa datorresurser: genom att på så sätt förbättra flexibiliteten i kommunikationsnätverket och så småningom öka systemets energieffektivitet.

I detta sammanhang finns det olika tillgängliga programvara med öppen källkod som listas nedan (icke uttömmande).

  • AFF3CT (A Fast Forward Error Correction Toolbox): en fullständig kommunikationskedja i C ++ (många koder som stöds som Turbo, LDPC, Polarkoder, etc.), mycket snabb och specialiserad på kanalkodning (kan användas som ett program för simuleringar eller som ett bibliotek för SDR).
  • IT ++ : ett C ++ - bibliotek med klasser och funktioner för linjär algebra, numerisk optimering, signalbehandling, kommunikation och statistik.
  • OpenAir : implementering (i C) av 3GPP -specifikationerna för Evolved Packet Core Networks.

Lista över felkorrigerande koder

Distans Koda
2 (detektering av enstaka fel) Paritet
3 (korrigering av enstaka fel) Trippel modulär redundans
3 (korrigering av enstaka fel) perfekt Hamming som Hamming (7,4)
4 ( SEKERAD ) Utökad Hamming
5 (dubbel-felkorrigering)
6 (detektering av dubbel felkorrigering/trippelfel)
7 (korrigering med tre fel) perfekt binär Golay -kod
8 (TECFED) utökad binär Golay -kod

Se även

Referenser

Vidare läsning

externa länkar