Nella teoria della codifica , i codici BCH o codici Bose-Chaudhuri-Hocquenghem formano una classe di codici correttivi ciclici che sono costruiti utilizzando polinomi su un campo finito (chiamato anche campo di Galois ). I codici BCH sono stati inventati nel 1959 dal matematico francese Alexis Hocquenghem , e indipendentemente nel 1960 da Raj Bose e DK Ray-Chaudhuri . Il nome Bose–Chaudhuri–Hocquenghem (e l'acronimo BCH ) deriva dalle iniziali dei cognomi degli inventori (erroneamente, nel caso di Ray-Chaudhuri).
Una delle caratteristiche chiave dei codici BCH è che durante la progettazione del codice, c'è un controllo preciso sul numero di errori di simbolo correggibili dal codice. In particolare, è possibile progettare codici BCH binari in grado di correggere errori multipli di bit. Un altro vantaggio dei codici BCH è la facilità con cui possono essere decodificati, ovvero tramite un metodo algebrico noto come decodifica della sindrome . Ciò semplifica la progettazione del decodificatore per questi codici, utilizzando un piccolo hardware elettronico a bassa potenza.
I codici BCH sono utilizzati in applicazioni quali comunicazioni satellitari, lettori di compact disc , DVD , unità disco , unità a stato solido , crittografia resistente ai quanti e codici a barre bidimensionali .
Definizione e illustrazione
Codici BCH primitivi a senso stretto
Dato un numero primo q e una potenza prima q m con interi positivi m e d tali che d ≤ q m − 1 , un codice BCH primitivo di senso stretto sul campo finito (o campo di Galois) GF( q ) con lunghezza del codice n = q m − 1 e la distanza almeno d è costruita con il metodo seguente.
Sia α un elemento primitivo di GF( q m ) . Per ogni intero positivo i , sia m i ( x ) il polinomio minimo con coefficienti in GF( q ) di α i . Il polinomio generatore del codice BCH è definito come il minimo comune multiplo g ( x ) = lcm( m 1 ( x ),…, m d − 1 ( x )) . Si può vedere che g ( x ) è un polinomio con coefficienti in GF( q ) e divide x n − 1 . Pertanto, il codice polinomiale definito da g ( x ) è un codice ciclico.
Esempio
Sia q = 2 e m = 4 (quindi n = 15 ). Considereremo diversi valori di d per GF(16) = GF(2 4 ) basati sul polinomio riducente z 4 + z + 1 , utilizzando l'elemento primitivo α ( z ) = z . Ci sono quattordici polinomi minimi m i ( x ) con coefficienti in GF(2) soddisfacenti

I polinomi minimi sono

Il codice BCH con ha un polinomio generatore


Ha una distanza minima di Hamming di almeno 3 e corregge fino a un errore. Poiché il polinomio generatore è di grado 4, questo codice ha 11 bit di dati e 4 bit di checksum.
Il codice BCH con ha un polinomio generatore


Ha una distanza minima di Hamming di almeno 5 e corregge fino a due errori. Poiché il polinomio generatore è di grado 8, questo codice ha 7 bit di dati e 8 bit di checksum.
Il codice BCH con ha un polinomio generatore


Ha una distanza minima di Hamming di almeno 7 e corregge fino a tre errori. Poiché il polinomio generatore è di grado 10, questo codice ha 5 bit di dati e 10 bit di checksum. (Questo particolare polinomio generatore ha un'applicazione nel mondo reale, nei modelli di formato del codice QR .)
Il codice BCH con e superiori ha un polinomio generatore


Questo codice ha una distanza minima di Hamming 15 e corregge 7 errori. Ha 1 bit di dati e 14 bit di checksum. In effetti, questo codice ha solo due parole in codice: 000000000000000 e 111111111111111.
Codici BCH generali
I codici BCH generali differiscono dai codici BCH primitivi a senso stretto per due aspetti.
Primo, il requisito che sia un elemento primitivo di può essere rilassato. Con rilassante questo requisito, la lunghezza del codice cambia da a l' ordine dell'elemento



In secondo luogo, le radici consecutive del polinomio generatore possono partire da invece di
Definizione. Fissa un campo finito dove è una potenza prima. Scegli interi positivi tali che e è l' ordine moltiplicativo di modulo





Come prima, sia una primitiva radice th di unità in e sia il minimo polinomio over di per tutti
Il polinomio generatore del codice BCH è definito come il minimo comune multiplo





Nota: se come nella definizione semplificata, allora è 1, e l'ordine del modulo è
Pertanto, la definizione semplificata è effettivamente un caso speciale di quella generale.





Casi speciali
- Un codice BCH con è chiamato codice BCH a senso stretto .

- Un codice BCH con è chiamato primitivo .

Il polinomio generatore di un codice BCH ha coefficienti da
In generale, un codice ciclico sopra con il polinomio generatore è chiamato un codice BCH sopra
il codice BCH sopra e polinomio generatore con successive potenze di come radici è un tipo di codice Reed-Solomon dove l'alfabeto del decodificatore (sindromi) è lo stesso dell'alfabeto del canale (polinomio dei dati e del generatore), tutti gli elementi di . L'altro tipo di codice Reed Solomon è un codice Reed Solomon vista originale che non è un codice BCH.









Proprietà
Il polinomio generatore di un codice BCH ha grado al massimo . Inoltre, se e , il polinomio generatore ha grado al massimo .




Un codice BCH ha almeno una distanza minima di Hamming .

|
Prova
|
|
Supponiamo che sia una parola in codice con meno di termini diversi da zero. Quindi
 

Ricordiamo che sono radici di quindi di . Ciò implica che soddisfano le seguenti equazioni, per ciascuna :
    

In forma matriciale, abbiamo

Il determinante di questa matrice è uguale a

La matrice è vista come una matrice di Vandermonde e il suo determinante è


che è diverso da zero. Ne segue quindi che quindi
|
Un codice BCH è ciclico.
|
Prova
|
|
Un codice polinomiale di lunghezza è ciclico se e solo se il suo polinomio generatore divide Poiché è il polinomio minimo con radici basta verificare che ciascuno di è una radice di Questo segue immediatamente dal fatto che è, per definizione, una radice-esima di unità .
       
|
Codifica
Poiché qualsiasi polinomio multiplo del polinomio generatore è una parola in codice BCH valida, la codifica BCH è semplicemente il processo di ricerca di un polinomio che abbia il generatore come fattore.
Lo stesso codice BCH non è prescrittivo sul significato dei coefficienti del polinomio; concettualmente, l'unica preoccupazione di un algoritmo di decodifica BCH è trovare la parola in codice valida con la distanza minima di Hamming dalla parola in codice ricevuta. Pertanto, il codice BCH può essere implementato o come codice sistematico o meno, a seconda di come l'implementatore sceglie di incorporare il messaggio nel polinomio codificato.
Codifica non sistematica: il messaggio come fattore
Il modo più semplice per trovare un polinomio multiplo del generatore è calcolare il prodotto di un polinomio arbitrario per il generatore. In questo caso, il polinomio arbitrario può essere scelto utilizzando come coefficienti i simboli del messaggio.

Ad esempio, si consideri il polinomio generatore , scelto per l'uso nel codice BCH binario (31, 21) utilizzato da POCSAG e altri. Per codificare il messaggio a 21 bit {101101110111101111101}, lo rappresentiamo prima come un polinomio su :



Quindi, calcola (anche su ):


Pertanto, il codice trasmesso è {1100111010010111101011101110101}.
Il ricevitore può utilizzare questi bit come coefficienti e, dopo la correzione degli errori per garantire un codice valido, può ricalcolare
Codifica sistematica: il messaggio come prefisso
Un codice sistematico è quello in cui il messaggio appare alla lettera da qualche parte all'interno del codice. Pertanto, la codifica BCH sistematica comporta prima l'incorporamento del polinomio del messaggio all'interno del polinomio della parola di codice e quindi la regolazione dei coefficienti dei restanti termini (non messaggi) per garantire che sia divisibile per .


Questo metodo di codifica sfrutta il fatto che sottraendo il resto da un dividendo si ottiene un multiplo del divisore. Quindi, se prendiamo il nostro polinomio del messaggio come prima e lo moltiplichiamo per (per "spostare" il messaggio fuori dal resto), possiamo quindi usare la divisione euclidea dei polinomi per ottenere:



Qui vediamo che è un codice valido. Poiché è sempre di grado inferiore a (che è il grado di ), possiamo sottrarlo in sicurezza senza alterare nessuno dei coefficienti del messaggio, quindi abbiamo il nostro as







Oltre (cioè con i codici BCH binari), questo processo è indistinguibile dall'aggiunta di un controllo di ridondanza ciclico , e se un codice BCH binario sistematico viene utilizzato solo per scopi di rilevamento degli errori, vediamo che i codici BCH sono solo una generalizzazione della matematica del ciclico controlli di ridondanza .

Il vantaggio della codifica sistematica è che il ricevente può recuperare il messaggio originale scartando tutto dopo i primi coefficienti, dopo aver eseguito la correzione degli errori.

decodifica
Esistono molti algoritmi per la decodifica dei codici BCH. I più comuni seguono questo schema generale:
- Calcolare le sindromi s j per il vettore ricevuto
- Determinare il numero di errori t e il polinomio di localizzazione dell'errore Λ(x) dalle sindromi
- Calcola le radici del polinomio della posizione dell'errore per trovare le posizioni dell'errore X i
- Calcola i valori di errore Y i in quelle posizioni di errore
- Correggi gli errori
Durante alcuni di questi passaggi, l'algoritmo di decodifica può determinare che il vettore ricevuto contiene troppi errori e non può essere corretto. Ad esempio, se non viene trovato un valore appropriato di t , la correzione fallirebbe. In un codice troncato (non primitivo), una posizione di errore potrebbe essere fuori intervallo. Se il vettore ricevuto ha più errori di quanti il codice possa correggere, il decodificatore può inconsapevolmente produrre un messaggio apparentemente valido che non è quello che è stato inviato.
Calcola le sindromi
Il vettore ricevuto è la somma del codice corretto e di un vettore di errore sconosciuto I valori della sindrome sono formati considerando come un polinomio e valutandolo a Quindi le sindromi sono






per a
Poiché sono gli zeri di cui è un multiplo, l' esame dei valori della sindrome isola quindi il vettore di errore in modo che si possa iniziare a risolverlo.




Se non c'è errore, per tutti Se le sindromi sono tutte zero, allora la decodifica è fatta.


Calcola il polinomio di posizione dell'errore
Se ci sono sindromi diverse da zero, allora ci sono errori. Il decoder deve capire quanti errori e la posizione di quegli errori.
Se c'è un singolo errore, scrivilo come dove è la posizione dell'errore e la sua grandezza. Allora le prime due sindromi sono




quindi insieme ci permettono di calcolare e fornire alcune informazioni in merito (determinandolo completamente nel caso dei codici Reed-Solomon).


Se ci sono due o più errori,

Non è immediatamente ovvio come iniziare a risolvere le sindromi risultanti per le incognite e
Il primo passo è trovare, compatibile con le sindromi calcolate e con il minimo polinomio di locatore possibile :


Tre algoritmi popolari per questo compito sono:
- Algoritmo di Peterson-Gorenstein-Zierler
- Algoritmo di Berlekamp-Massey
- Algoritmo euclideo di Sugiyama
Algoritmo di Peterson-Gorenstein-Zierler
L'algoritmo di Peterson è il passaggio 2 della procedura di decodifica BCH generalizzata. L'algoritmo di Peterson viene utilizzato per calcolare i coefficienti polinomiali del localizzatore di errore di un polinomio


Ora la procedura dell'algoritmo di Peterson-Gorenstein-Zierler. Aspettiamo di avere almeno 2 t sindromi s c , …, s c +2 t −1 . Sia v = t .
- Inizia generando la matrice con elementi che sono valori di sindrome


- Genera un vettore con elementi


- Lasciate che denotano i coefficienti polinomiali sconosciuti, che sono dati da


- Forma l'equazione della matrice

- Se il determinante della matrice è diverso da zero, allora possiamo effettivamente trovare un inverso di questa matrice e risolvere per i valori di valori sconosciuti .


- Se poi segui

if
then
declare an empty error locator polynomial
stop Peterson procedure.
end
set
continua dall'inizio della decodifica di Peterson rendendolo più piccolo
- Dopo aver ottenuto i valori di , hai il polinomio di localizzazione dell'errore.

- Interrompi la procedura di Peterson.
Polinomio di localizzazione dell'errore del fattore
Ora che hai il polinomio, le sue radici possono essere trovate nella forma con la forza bruta, ad esempio usando l' algoritmo di ricerca di Chien . Le potenze esponenziali dell'elemento primitivo forniranno le posizioni in cui si verificano errori nella parola ricevuta; da qui il nome polinomio 'locatore errore'.



Gli zeri di Λ( x ) sono α − i 1 , …, α − i v .
Calcola i valori di errore
Una volta note le posizioni degli errori, il passaggio successivo consiste nel determinare i valori di errore in tali posizioni. I valori di errore vengono quindi utilizzati per correggere i valori ricevuti in quelle posizioni per recuperare il codice originale.
Per il caso di BCH binario, (con tutti i caratteri leggibili) questo è banale; basta capovolgere i bit per la parola ricevuta in queste posizioni e abbiamo la parola in codice corretta. Nel caso più generale, i pesi di errore possono essere determinati risolvendo il sistema lineare


Algoritmo di Forney
Tuttavia, esiste un metodo più efficiente noto come algoritmo di Forney .
Permettere


E il polinomio valutatore di errore

Finalmente:

dove

Quindi se le sindromi potessero essere spiegate da una parola di errore, che potrebbe essere diversa da zero solo sulle posizioni , allora i valori di errore sono


Per i codici BCH a senso stretto, c = 1, quindi l'espressione si semplifica in:

Spiegazione del calcolo dell'algoritmo di Forney
Si basa sull'interpolazione di Lagrange e sulle tecniche di generazione di funzioni .
Considera e per semplicità supponi per e per Allora







Vogliamo calcolare le incognite e potremmo semplificare il contesto rimuovendo i termini. Questo porta al polinomio valutatore di errore



Grazie a abbiamo


Grazie a (il trucco dell'interpolazione di Lagrange) la somma degenera in un solo addizione per

Per ottenerlo dovremmo semplicemente sbarazzarci del prodotto. Potremmo calcolare il prodotto direttamente dalle radici già calcolate di ma potremmo usare una forma più semplice.



Come derivato formale

otteniamo di nuovo solo una somma in

Quindi finalmente

Questa formula è vantaggiosa quando si calcola la derivata formale della forma


cedendo:

dove

Decodifica basata su algoritmo euclideo esteso
Un processo alternativo per trovare sia il polinomio che il polinomio di localizzazione dell'errore si basa sull'adattamento di Yasuo Sugiyama dell'algoritmo euclideo esteso . Anche la correzione dei caratteri illeggibili potrebbe essere incorporata facilmente nell'algoritmo.
Siano posizioni di caratteri illeggibili. Si crea un polinomio localizzando queste posizioni.
Impostare i valori sulle posizioni illeggibili a 0 e calcolare le sindromi.


Come abbiamo già definito per la formula di Forney poniamo
Eseguiamo l'algoritmo euclideo esteso per localizzare il minimo comun divisore di polinomi e
L'obiettivo non è trovare il minimo comun divisore, ma un polinomio di grado al massimo e polinomi tali che
Basso grado di garanzie, che soddisferebbe condizioni estese (per ) definenti per








Definire e utilizzare al posto di nella formula di Fourney ci darà valori di errore.



Il vantaggio principale dell'algoritmo è che nel frattempo calcola richiesto nella formula di Forney.

Spiegazione del processo di decodifica
L'obiettivo è trovare una parola in codice che differisca il meno possibile dalla parola ricevuta su posizioni leggibili. Quando esprimiamo la parola ricevuta come somma della parola in codice più vicina e della parola di errore, stiamo cercando di trovare la parola di errore con un numero minimo di valori diversi da zero sulle posizioni leggibili. La sindrome limita l'errore parola per condizione


Potremmo scrivere queste condizioni separatamente o potremmo creare un polinomio

e confrontare i coefficienti vicino alle potenze a

Supponiamo che ci sia una lettera illeggibile sulla posizione , potremmo sostituire un insieme di sindromi con un insieme di sindromi definito dall'equazione Supponiamo che per una parola di errore valgano tutte le restrizioni dell'insieme originale di sindromi, che






La nuova serie di sindromi limita il vettore di errore

allo stesso modo in cui l'insieme originale di sindromi limitava il vettore di errore Tranne la coordinata in cui abbiamo an è zero, se Per l'obiettivo di localizzare le posizioni di errore potessimo modificare l'insieme di sindromi in modo simile per riflettere tutti i caratteri illeggibili. Questo accorcia l'insieme delle sindromi di




Nella formulazione polinomiale, la sostituzione di sindromi impostate da sindromi impostate porta a



Perciò,

Dopo la sostituzione di by , si richiederebbe l'equazione per coefficienti vicini alle potenze

Si potrebbe considerare la ricerca di posizioni di errore dal punto di vista dell'eliminazione dell'influenza di determinate posizioni allo stesso modo dei caratteri illeggibili. Se trovassimo posizioni tali che l'eliminazione della loro influenza porti ad ottenere un insieme di sindromi consistenti di tutti zeri, allora esiste un vettore di errore con errori solo su queste coordinate. Se denota il polinomio eliminando l'influenza di queste coordinate, si ottiene



Nell'algoritmo euclideo, cerchiamo di correggere al massimo gli errori (su posizioni leggibili), perché con un numero di errori maggiore potrebbero esserci più parole di codice alla stessa distanza dalla parola ricevuta. Pertanto, per quanto stiamo cercando, l'equazione deve valere per coefficienti prossimi alle potenze a partire da



Nella formula di Forney, potrebbe essere moltiplicato per uno scalare dando lo stesso risultato.

Potrebbe accadere che l'algoritmo euclideo trovi di grado maggiore di avere un numero di radici diverse pari al suo grado, dove la formula di Fourney sarebbe in grado di correggere errori in tutte le sue radici, tuttavia correggere così tanti errori potrebbe essere rischioso (soprattutto con nessun altro restrizioni sulla parola ricevuta). Solitamente dopo aver conseguito il titolo di studio superiore, decidiamo di non correggere gli errori. La correzione potrebbe fallire nel caso in cui abbia radici con una molteplicità maggiore o il numero di radici sia inferiore al suo grado. L'errore potrebbe essere rilevato anche dalla formula di Forney che restituisce un errore al di fuori dell'alfabeto trasmesso.




Correggi gli errori
Utilizzando i valori di errore e la posizione dell'errore, correggere gli errori e formare un vettore di codice corretto sottraendo i valori di errore nelle posizioni dell'errore.
Esempi di decodifica
Decodifica del codice binario senza caratteri illeggibili
Consideriamo un codice BCH in GF(2 4 ) con e . (Questo è usato nei codici QR .) Lascia che il messaggio da trasmettere sia [1 1 0 1 1], o in notazione polinomiale,
I simboli "checksum" sono calcolati dividendo per e prendendo il resto, risultando in o [ 1 0 0 0 0 1 0 1 0 0 ]. Questi vengono aggiunti al messaggio, quindi il codice trasmesso è [ 1 1 0 1 1 1 0 0 0 0 1 0 1 0 0 ].






Ora, immagina che ci siano due errori di bit nella trasmissione, quindi il codice ricevuto è [ 1 0 0 1 1 1 0 0 0 1 1 0 1 0 0 ]. In notazione polinomiale:

Per correggere gli errori, calcolare prima le sindromi. Prendendo abbiamo e
Avanti, applica la procedura di Peterson riducendo per riga la seguente matrice aumentata.



![{\displaystyle \left[S_{3\times 3}|C_{3\times 1}\right]={\begin{bmatrix}s_{1}&s_{2}&s_{3}&s_{4}\\s_ {2}&s_{3}&s_{4}&s_{5}\\s_{3}&s_{4}&s_{5}&s_{6}\end{bmatrix}}={\begin{bmatrix}1011&1001&1011&1101\\1001&1011&1101&0001 \\1011&1101&0001&1001\end{bmatrix}}\Rightarrow {\begin{bmatrix}0001&0000&1000&0111\\0000&0001&1011&0001\\0000&0000&0000&0000\end{bmatrix}}}](/criselda-https-wikimedia.org/api/rest_v1/media/math/render/svg/01ae26421a97007762e7db564652697943f6c6dd)
A causa della riga zero, S 3×3 è singolare, il che non sorprende poiché nel codice sono stati introdotti solo due errori. Tuttavia, l'angolo superiore sinistro della matrice è identico a [ S 2×2 | C 2×1 ] , che dà luogo alla soluzione
Il polinomio di localizzazione dell'errore risultante è che ha zeri in e
Gli esponenti di corrispondono alle posizioni dell'errore. Non è necessario calcolare i valori di errore in questo esempio, poiché l'unico valore possibile è 1.





Decodifica con caratteri illeggibili
Supponiamo lo stesso scenario, ma la parola ricevuta ha due caratteri illeggibili [ 1 0 0 ? 1 1 ? 0 0 1 1 0 1 0 0 ]. Sostituiamo i caratteri illeggibili con zeri durante la creazione del polinomio che riflette le loro posizioni Calcoliamo le sindromi e (Utilizzando la notazione logaritmica che è indipendente dagli isomorfismi GF(2 4 ). Per il controllo del calcolo possiamo usare la stessa rappresentazione per l'addizione usata in precedenza esempio. Descrizione esadecimale delle potenze di sono consecutivamente 1,2,4,8,3,6,C,B,5,A,7,E,F,D,9 con l'addizione basata su xor bit per bit.)




Facciamo la sindrome polinomiale

calcolare

Esegui l'algoritmo euclideo esteso:
![{\displaystyle {\begin{allineato}&{\begin{pmatrix}S(x)\Gamma (x)\\x^{6}\end{pmatrix}}\\[6pt]={}&{\begin {pmatrix}\alpha ^{-7}+\alpha ^{4}x+\alpha ^{-1}x^{2}+\alpha ^{6}x^{3}+\alpha ^{-1} x^{4}+\alpha ^{5}x^{5}+\alpha ^{7}x^{6}+\alpha ^{-3}x^{7}\\x^{6}\ end{pmatrix}}\\[6pt]={}&{\begin{pmatrix}\alpha ^{7}+\alpha ^{-3}x&1\\1&0\end{pmatrix}}{\begin{pmatrix} x^{6}\\\alpha ^{-7}+\alpha ^{4}x+\alpha ^{-1}x^{2}+\alpha ^{6}x^{3}+\alpha ^ {-1}x^{4}+\alpha ^{5}x^{5}+2\alpha ^{7}x^{6}+2\alpha ^{-3}x^{7}\end {pmatrix}}\\[6pt]={}&{\begin{pmatrix}\alpha ^{7}+\alpha ^{-3}x&1\\1&0\end{pmatrix}}{\begin{pmatrix}\ alpha ^{4}+\alpha ^{-5}x&1\\1&0\end{pmatrix}}\\&\qquad {\begin{pmatrix}\alpha ^{-7}+\alpha ^{4}x+\ alfa ^{-1}x^{2}+\alpha ^{6}x^{3}+\alpha ^{-1}x^{4}+\alpha ^{5}x^{5}\\ \alpha ^{-3}+\left(\alpha ^{-7}+\alpha ^{3}\right)x+\left(\alpha ^{3}+\alpha ^{-1}\right)x ^{2}+\left(\alpha ^{-5}+\alpha ^{-6}\right)x^{3}+\left(\alpha ^{3}+\alpha ^{1}\right )x^{4}+2\alpha ^{-6}x^{5}+2x^{6}\end{pmatrix}}\\[6pt]={}&{\begin{ pmatrix}\left(1+\alpha ^{-4}\right)+\left(\alpha ^{1}+\alpha ^{2}\right)x+\alpha ^{7}x^{2}& \alpha ^{7}+\alpha ^{-3}x\\\alpha ^{4}+\alpha ^{-5}x&1\end{pmatrix}}{\begin{pmatrix}\alpha ^{-7 }+\alpha ^{4}x+\alpha ^{-1}x^{2}+\alpha ^{6}x^{3}+\alpha ^{-1}x^{4}+\alpha ^ {5}x^{5}\\\alpha ^{-3}+\alpha ^{-2}x+\alpha ^{0}x^{2}+\alpha ^{-2}x^{3} +\alpha ^{-6}x^{4}\end{pmatrix}}\\[6pt]={}&{\begin{pmatrix}\alpha ^{-3}+\alpha ^{5}x+\ alpha ^{7}x^{2}&\alpha ^{7}+\alpha ^{-3}x\\\alpha ^{4}+\alpha ^{-5}x&1\end{pmatrix}}{ \begin{pmatrix}\alpha ^{-5}+\alpha ^{-4}x&1\\1&0\end{pmatrix}}\\&\qquad {\begin{pmatrix}\alpha ^{-3}+\ alpha ^{-2}x+\alpha ^{0}x^{2}+\alpha ^{-2}x^{3}+\alpha ^{-6}x^{4}\\\left(\ alpha ^{7}+\alpha ^{-7}\right)+\left(2\alpha ^{-7}+\alpha ^{4}\right)x+\left(\alpha ^{-5}+ \alpha ^{-6}+\alpha ^{-1}\right)x^{2}+\left(\alpha ^{-7}+\alpha ^{-4}+\alpha ^{6}\ destra)x^{3}+\sinistra(\alpha ^{4}+\alpha ^{-6}+\alpha ^{-1}\destra)x^{4}+2\alpha ^{5}x ^{5}\end{pmatrix}}\\[6pt]={}&{\begin{pmatrix}\alpha ^{7}x+\alpha ^{ 5}x^{2}+\alpha ^{3}x^{3}&\alpha ^{-3}+\alpha ^{5}x+\alpha ^{7}x^{2}\\\alpha ^{3}+\alpha ^{-5}x+\alpha ^{6}x^{2}&\alpha ^{4}+\alpha ^{-5}x\end{pmatrix}}{\begin{ pmatrix}\alpha ^{-3}+\alpha ^{-2}x+\alpha ^{0}x^{2}+\alpha ^{-2}x^{3}+\alpha ^{-6} x^{4}\\\alpha ^{-4}+\alpha ^{4}x+\alpha ^{2}x^{2}+\alpha ^{-5}x^{3}\end{pmatrix }}.\end{allineato}}}](/criselda-https-wikimedia.org/api/rest_v1/media/math/render/svg/34d562bd03e10536d5a5c4f55c8b831b7dfec00f)
Abbiamo raggiunto il polinomio di grado al massimo 3, e come

noi abbiamo

Perciò,

Let Non ti preoccupare che Find con la forza bruta una radice di Le radici sono e (dopo aver trovato per esempio possiamo dividere da corrispondenti Monom e la radice del conseguente Monom potrebbe essere trovato facilmente).








Permettere

Cerchiamo i valori di errore usando la formula

dove sono le radici di We get



In effetti , questo non dovrebbe sorprendere.

Il codice corretto è quindi [ 1 1 0 1 1 1 0 0 0 0 1 0 1 0 0].
Decodifica con caratteri illeggibili con un piccolo numero di errori
Mostriamo il comportamento dell'algoritmo per il caso con un piccolo numero di errori. Lascia che la parola ricevuta sia [ 1 0 0 ? 1 1 ? 0 0 0 1 0 1 0 0 ].
Di nuovo, sostituisci i caratteri illeggibili con zeri mentre crei il polinomio che riflette le loro posizioni
Calcola le sindromi e
Crea il polinomio della sindrome




Eseguiamo l'algoritmo euclideo esteso:

Abbiamo raggiunto il polinomio di grado al massimo 3, e come

noi abbiamo

Perciò,

Lasciate Non ti preoccupare che la radice di IS


Permettere

Cerchiamo i valori di errore usando la formula dove sono le radici del polinomio


Noi abbiamo

Il fatto non dovrebbe sorprendere.

Il codice corretto è quindi [ 1 1 0 1 1 1 0 0 0 0 1 0 1 0 0].
citazioni
Riferimenti
Fonti primarie
-
Hocquenghem, A. (settembre 1959), "Codes Correcteurs d'erreurs", Chiffres (in francese), Paris, 2 : 147-156
-
Bose, RC ; Ray-Chaudhuri, DK (marzo 1960), "On A Class of Error Correcting Binary Group Codes" (PDF) , Informazioni e controllo , 3 (1): 68–79, doi : 10.1016/s0019-9958(60)90287- 4 , ISSN 0890-5401
Fonti secondarie
-
Gill, John (nd), EE387 Notes #7, Handout #28 (PDF) , Stanford University, pp. 42–45 , recuperato il 21 aprile 2010Apparentemente le note del corso sono in fase di rifacimento per il 2012: http://www.stanford.edu/class/ee387/
-
Gorenstein, Daniel ; Peterson, W. Wesley ; Zierler, Neal (1960), "I codici di correzione di due errori Bose-Chaudhuri sono quasi perfetti", Informazione e controllo , 3 (3): 291–294, doi : 10.1016/s0019-9958(60)90877-9
-
Lidl, Rodolfo; Pilz, Günter (1999), Algebra astratta applicata (2a ed.), John Wiley
-
Reed, Irving S. ; Chen, Xuemin (1999), Codifica per il controllo degli errori per reti di dati , Boston, MA: Kluwer Academic Publishers , ISBN 0-7923-8528-4
Ulteriori letture
-
Blahut, Richard E. (2003), Codici algebrici per la trasmissione dei dati (2a ed.), Cambridge University Press , ISBN 0-521-55374-1
-
Gilbert, WJ; Nicholson, WK (2004), Algebra moderna con applicazioni (2a ed.), John Wiley
-
Lin, S.; Costello, D. (2004), Codifica per il controllo degli errori: Fondamenti e applicazioni , Englewood Cliffs, NJ: Prentice-Hall
-
MacWilliams, FJ; Sloane, NJA (1977), La teoria dei codici di correzione degli errori , New York, NY: North-Holland Publishing Company
-
Rudra, Atri, CSE 545, Error Correcting Codes: Combinatorics, Algorithms and Applications , University at Buffalo, archiviato dall'originale il 02-07-2010 , recuperato il 21 aprile 2010