Codifica di Reed-Solomon per un modem digitale a 64 kbps in

Transcript

Codifica di Reed-Solomon per un modem digitale a 64 kbps in
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
Università degli Studi di Roma "La Sapienza"
Stefano Rinauro
Codifica di Reed-Solomon
per un modem digitale a 64 kbps
in banda HF
Tesi svolta per il conseguimento
della laurea di primo livello in
Ingegneria delle Telecomunicazioni
Relatore:
Chiar.mo Prof. Roberto Cusani
Sessione di Laurea:
Dicembre 2003
Indice
1
Introduzione.......................................................................................................... 2
2
I codici di Reed Solomon ..................................................................................... 3
2.1
Generalità.......................................................................................................... 3
2.2
I campi di Galois .............................................................................................. 5
2.3
Codifica ............................................................................................................ 7
2.4
Decodifica......................................................................................................... 9
3 Dimensionamento del codice RS per un modem HF a 64 kbps ......................... 17
3.1
Il modem HF a 64 kbps e la relativa codifica RS........................................... 17
3.2
Realizzazione SW della procedura di co-decodifica RS ................................ 21
3.3
Risultati e dimensionamento del codice RS ................................................... 24
4 Conclusioni......................................................................................................... 30
5
Bibliografia......................................................................................................... 30
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
1 Introduzione
Lo scopo del presente studio è il dimensionamento di un codice di Reed Solomon,
inserito nella strategia di codifica per la protezione dei dati nell’ambito del progetto di
un modem a 64 kbps in corso presso il Dip. Infocom.
Il codice RS opera come stadio di codifica esterna nell’ambito di una codifica
concatenata, nella quale si ha come codice interno un convoluzionale.
La mansione principale della codifica esterna consiste nell’attivare un opportuno
protocollo ARQ nel caso in cui la trama ricevuta risulti corrotta dagli errori introdotti
dal canale di trasmissione. A tal fine svolge un ruolo determinante la rivelazione degli
errori, più che la loro correzione. Il dimensionamento è dunque orientato
fondamentalmente a minimizzare il numero di trame errate non rilevate, non tanto a
massimizzare quelle corrette, mediante l’introduzione di una ridondanza più contenuta
rispetto ad un codice di tipo FEC.
La scelta di un Reed Solomon come codice esterno è dettata dal fatto che tali codici
ben si adattano a trattare configurazioni di errori a raffica (ovvero a burst), quali quelle
tipicamente introdotte dal decoder convoluzionale (algoritmo di Viterbi).
Nel presente documento sono in primo luogo esposti i principi e gli algoritmi di
codifica/decodifica più comuni relativi a questa classe di codici. Successivamente sono
riportati i risultati e le considerazioni relative al dimensionamento del codice nel caso in
esame.
Lo studio sul dimensionamento è stato effettuato via software. Il programma
utilizzato genera delle trame e le codifica. Gli errori sono poi aggiunti leggendo le loro
posizioni dai risultati di un cospicuo numero di simulazioni (24 canali, ovvero 24
supertrame da 72 blocchi di 6 kbit ciascuno) svolte sul codice interno. Segue poi la fase
di decodifica e sono riportati i risultati in termini del numero di trame corrette, trame
errate rilevate, e trame errate non rilevate.
Codifica di Reed-Solomon per un modem HF a 64 kbps
2 I codici di Reed Solomon
2.1 Generalità
I codici di Reed Solomon sono codici ciclici non binari, orientati cioè ad un alfabeto
di q simboli. Tipicamente si sceglie una cardinalità potenza di due e si considerano i
simboli come composti da sequenze di m bit, con m intero positivo maggiore di 1 in
modo da applicare tale codifica a flussi di dati binari.
Data la dimensione dei simboli si ha che esiste un codice di Reed Solomon RS (n, k)
per ogni n e k tali che:
0 < k < n < 2m +2
dove k è il numero di simboli di informazione da proteggere e n è il numero di simboli
totali che compongono la parola di codice. Nonostante il limite superiore imposto ad n
sia dato da 2m+2 la struttura maggiormente usata per i Reed Solomon prevede una
lunghezza di codeword pari a 2m –1.
La capacità di correzione t dipende invece dal rapporto di codifica ed è pari a
n−k
.
2
Stante tale rapporto tra il numero dei simboli di ridondanza e la capacità di correzione i
Reed Solomon appartengono alla classe dei codici MDS (Maximum Distance
Separable), ovvero conseguono la massima distanza minima ottenibile rispetto ad altri
codici lineari a blocchi a parità di n e k.
La capacità di correzione delle cancellazioni è data da (n-k). Per quanto riguarda
invece la correzione simultanea di errori e cancellazioni la capacità del codice può
esprimersi come:
2err + canc < n-k
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
L’errore sul simbolo si verifica quando anche uno solo dei bit che lo compongono
risulta errato. Ciò comporta che un codice di Reed Solomon può correggere, nel
peggiore dei casi, fino a t bit errati (se ognuno dei t simboli presenta un solo bit errato),
e nel migliore dei casi fino a tm (se gli t simboli sono completamente errati). Per questo
motivo i codici di Reed Solomon sono particolarmente adatti a correggere errori a
raffica ovvero a burst.
Gli algoritmi di decodifica permettono di correggere errori (fino ad un massimo di t)
e cancellazioni (fino ad un massimo di 2t). All’atto della decodifica si hanno tre casi
possibili: se il numero di errori e cancellazioni non eccede 2t la codeword verrà corretta,
altrimenti il decoder rileverà la presenza di errori oppure commetterà un errore in
decodifica nel caso in cui il pattern di errori abbia trasformato una codeword trasmessa
in un’altra codeword valida. Le probabilità di questi eventi dipendono dal rate del
codice in relazione alla distribuzione degli errori. (Vedi[2.])
4
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
2.2
I campi di Galois
Per comprendere i principi alla base delle operazioni di codifica e decodifica è
necessario conoscere la teoria dei campi a elementi finiti – detti anche campi di Galois sulla quale si basano i codici ciclici, e quindi anche i Reed Solomon.
Per ogni numero primo q, esiste un campo di Galois GF(q) composto da q elementi.
Tale campo può essere esteso nel campo GF(qm) con m intero maggiore di 1. Per i
codici di Reed Solomon ci si riferisce tipicamente al campo GF(2m), estensione del
campo GF(2).
Un campo di Galois è in effetti un insieme finito di elementi sul quale sono definite
le operazioni di somma e prodotto e che gode delle seguenti proprietà:
a) chiusura rispetto alle suddette operazioni
b) associatività, commutatività, distributività
c) esistenza dell’elemento neutro rispetto alla somma (0) e rispetto al prodotto (1)
d) esistenza, per ogni elemento u, del corrispettivo elemento –u (al fine di definire
l’operazione di differenza) e, per u ≠ 0, dell’elemento u-1 (al fine di definire la
divisione).
Oltre agli elementi 0 e 1, presenti per definizione, nel campo GF(2m), esiste
sicuramente un ulteriore elemento α - detto elemento primitivo - tale che ogni elemento
non nullo del campo può rappresentarsi come potenza di α.
In tal modo, a partire dalla terna di numeri 0, 1, α, è possibile costruire un insieme
infinito di elementi. Per ottenere un insieme finito di cardinalità 2m, che oltretutto goda
delle proprietà viste è necessario imporre un’ulteriore condizione. Tale condizione è
data dalla seguente espressione:
α (2
m
−1)
=1=α0
5
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
In tal modo ogni elemento dell’insieme che risulti da una potenza di α maggiore di
2m – 1 può ridursi ad un altro elemento che risulti da una potenza di α minore, ad
esempio:
α (2
m
+n)
= α (2
m
−1)
⋅ α ( n +1) = α ( n +1)
La condizione espressa riflette peraltro una proprietà dell’elemento primitivo.
Definito infatti ordine di un elemento β, il più piccolo esponente e per il quale, β e = 1 ,
si ha che l’elemento primitivo ha ordine 2 m − 1 ovvero il maggiore possibile.
L’elemento primitivo α è una delle radici del cosiddetto polinomio primitivo p(x)
che è in effetti la funzione che definisce un campo di Galois. Un polinomio di grado m è
primitivo se è irriducibile e se il più piccolo intero n per cui risulta divisore di x n + 1 è
2 m − 1 .(vedi[2.])
Il legame tra la teoria dei campi ad elementi finiti ed i codici di Reed Solomon sta
nel fatto che si pongono in corrispondenza biunivoca i q simboli da m bit dell’alfabeto
del codice, con gli elementi di un campo GF(2m). D’ora in poi quindi ci si riferirà
indifferentemente agli elementi del campo o ai simboli del codice.
Esistono due modalità di rappresentazione degli elementi del campo di Galois.
La prima – detta index form – è una rappresentazione in termini dell’esponente di α, del
tutto simile alla rappresentazione in decibel. In questo senso si avrà che:
β (index form ) = log α β
Per 0 si considera 0 = α −1 .
Si possono anche rappresentare gli elementi per mezzo di m-ple binarie (polynomial
form) del tipo (00…0) per 0, (00…1) per 1, (100…0) per α m−1 . Per gli elementi
successivi l’m-pla corrispondente si ottiene dalla divisione in modulo per il polinomio
primitivo, considerando i coefficienti del resto in termini di α 0 Lα m −1 .
6
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
Le operazione aritmetiche su GF(2m) sono leggermente differenti da quelle
ordinarie. L’addizione viene svolta mediante l’operatore logico or esclusivo ovvero xor
tra le due m-ple rappresentanti gli addendi.
La sottrazione, a causa della natura dello xor, risulta analoga.
Per il prodotto risulta invece più conveniente la index form, dove il risultato è dato
dalla somma degli elementi, nella rappresentazione logaritmica. Se si volesse realizzare
il prodotto in forma polinomiale sarebbe necessaria la costruzione di una opportuna
look-up table.
Tali procedure permettono di ricavare delle tavole che diano una descrizione
esaustiva del risultato della somma e del prodotto di ciascun elemento per ogni altro
elemento del campo.
Tale risultato è importante in quanto gli algoritmi di codifica e decodifica si basano
su operazioni algebriche compiute sui simboli delle parole – visti come elementi di un
opportuno campo di Galois.
2.3
Codifica
Come detto la forma più usata dei codici di Reed Solomon risulta essere la
RS ( 2 m − 1 , 2 m − 1 − 2t ) , dove 2t rappresenta il numero di simboli di ridondanza e t
indica la capacità di correzione del codice.
Il polinomio generatore per un RS è definito come:
g ( x) = ( x − α j 0 ) ⋅ ( x − α j 0+1 ) ⋅ ( x − α j 0+ 2 ) ⋅ K ⋅ ( x − α j 0+ 2t −1 ) = g 0 + g1 x + g 2 x 2 + L + g 2t x 2t
in cui j0 ∈ [0, 1].
Il grado del polinomio generatore è uguale al numero di simboli di parità, come
avviene per i codici di Bose, Chaudhuri, Hocquenghem, dei quali i Reed Solomon sono
una sottoclasse.
Poniamo che il messaggio da codificare – la dataword – sia (d1 , d 2 , L , d k ) in cui
ognuno dei di è un numero composto da m bit, e può essere rappresentato da un
7
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
elemento del campo GF (2m). Possiamo pensare a questi simboli come ad i coefficienti
di un polinomio come nella seguente forma:
d ( x) = d 0 + d1 x + d 2 x 2 + L + d k −1 x k −1
L’algoritmo di codifica consiste fondamentalmente nell’ottenere una codeword –
rappresentata da un polinomio di grado n - 1 che sia divisibile per g(x). Un modo molto
semplice ed intuitivo per ottenere ciò sarebbe quello di ricavare la parola di codice dal
prodotto tra la dataword e il polinomio generatore:
c( x ) = d ( x ) g ( x )
Purtroppo questa semplice implementazione porta ad un codice non sistematico.
Per ottenere una codifica sistematica si considera come codeword:
c( x ) = x 2t d ( x) + p ( x )
con
p ( x) = x 2t d ( x) mod g ( x)
In questo modo effettivamente il polinomio c(x) presenta come coefficienti dei
termini di grado 0….2t i simboli di parità, e come coefficienti dei termini di grado
successivo i simboli di informazione.
Abbiamo così ottenuto una codeword esattamente divisibile per il polinomio
generatore. Qualora il rumore introdotto dal canale vada a modificare i simboli della
codeword, il decoder potrà valutare semplicemente la sua validità andando ad eseguire
la divisione per g(x). L’eventuale presenza di un resto non nullo indica la presenza di un
errore.
8
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
2.4
Decodifica
Poniamo che durante la trasmissione la parola codificata sia stata affetta da errori
introdotti dal canale. Possiamo pensare di rappresentare il pattern di errori anche esso
sotto forma polinomiale nella maniera seguente.
e( x ) = r ( x ) − c ( x )
con r(x) parola ricevuta.
Più in generale e(x) avrà una strutture del tipo:
e( x) = e0 + e1 x + e2 x 2 + L + en −1 x n−1
In cui gli ei appartengono a GF (2m) e indicano il valore dell’errore, mentre il grado
del termine indica la posizione in cui si è verificato l’errore.
E’ importante sottolineare una differenza con i codici binari; in quel caso infatti
l’unica incognita del problema della correzione degli errori era la locazione dell’errore
stesso in quanto nota questa il bit era automaticamente corretto mediante una negazione.
Nel caso non binario invece, al fine di correggere l’errore è necessario conoscere non
solo la posizione del simbolo errato, ma anche il suo valore originario. In questo senso
abbiamo il doppio delle incognite nel problema, e quindi abbiamo bisogno del doppio
delle relazioni per giungere ad una soluzione.
Il primo passo della procedura di decodifica, così come per la maggior parte dei
codici a blocchi, è dato dal calcolo della sindrome associata alla parola ricevuta. Questo
passaggio permette di rilevare la presenza di errori in quanto le sole codeword valide
godono della proprietà di avere sindrome nulla. La presenza di una sindrome diversa da
zero denota la presenza di almeno un errore nella parola ricevuta.
La sindrome S sarà composta di n-k simboli S = {Si} i = 1,2,….,n-k
9
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
La struttura del codice facilita molto il calcolo degli elementi della sindrome. Come
detto infatti ogni codeword valida sarà per definizione proporzionale al polinomio
generatore. In questo senso, essendo α, α2, … ,α2t radici di g(x) dovranno esserlo anche
del polinomio rappresentante una qualunque parola di codice valida. I simboli della
sindrome S associata alla parola r(x) potranno dunque calcolarsi come:
S i = r (α i )
i = 1,2,….,2t
E’ utile ricordare che, essendo:
r ( x ) = c ( x) + e( x )
e che:
c(α i ) = 0
i = 1, 2, … , 2t
di fatto la sindrome è data dal polinomio e(x) rappresentante il pattern di errori
calcolato sulle radici del polinomio generatore.
Poniamo di avere ricevuto una r(x) con ν errori nelle posizioni x j1 , x j 2 , K , x jν ,
cosicché:
e ( x ) = e j 1 x j 1 + e j 2 x j 2 + L + e jν x j ν
dove l’indice i = 1,2,…,ν si riferisce al primo, secondo, … , ν-mo errore, mentre j si
riferisce alla posizione dell’errore. A questo punto è possibile riscrivere l’espressione
per il calcolo dei simboli della sindrome come:
si = r (α i ) = e(α i ) = e j1 β1i + e j 2 β 2i + L + e jν βνi
i = 1,2,….,2t
avendo posto α j1 = β1 .
10
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
Dal momento che non sono note le posizioni degli errori questa forma non può
essere usata per calcolare la sindrome che sarà invece calcolata a partire da r(x) e gli Si
così ottenuti verranno utilizzati come termini noti nel sistema sopradescritto che
presenta, come anticipato, 2t relazioni. Risulta a questo punto chiara la limitazione alla
correzione di soli t errori, in quanto il sistema risulta compatibile solo se ν non eccede t,
caso in cui il sistema presenta appunto 2t incognite.
Purtroppo il sistema risulta non lineare e non è quindi risolubile con le tecniche
usate per i sistemi lineari.
Per ricavare le posizioni degli errori occorsi si introduce il cosiddetto error locator
polynomial, le cui radici indicano le posizioni degli errori nel pattern e(x):
σ ( x ) = x t + σ 1 x t −1 + ... + σ t
Il problema sta nel ricavare i valori dei coefficienti σi a partire dal valore degli elementi
della sindrome.
Calcolando il polinomio σ (x) in una posizione di errore Xk, in modo che si annulli,e
moltiplicandolo per X jk si ha (vedi[1.]):
X kjσ ( X k ) = X kt + j + σ 1 X kt + j −1 + ...σ t X kj = 0
Sommando questa espressione per k = 1, 2, …, t e considerando che (vedi[3.]):
( ) ( )
t
S i = r (α ) = c α + e α = ∑ ek X ki
i
i
i
k =1
si ha:
S t + j + σ 1 S t + j −1 + ... + σ t S j = 0
j = 1, 2, …, t
11
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
Tale sistema di equazioni, dette identità di Newton, ha come soluzione i coefficienti
dell’error locator polynomial. Per codici di piccole dimensioni tale sistema può
risolversi mediante il metodo di Cramer, ma per codici più complessi tale metodo risulta
inefficiente ed è necessario affrontare il problema in altro modo. Tale difficoltà venne
superata nel 1967, quando E. R. Berlekamp propose un algoritmo efficiente per il
calcolo dei coefficienti σi; l’anno seguente inoltre J. L. Massey dimostrò che il problema
è equivalente a quello di sintetizzare il più breve registro a scorrimento a retroazione
lineare capace di generare una data sequenza, e che questo è equivalente all’algoritmo di
Berlekamp. Un tale approccio viene correntemente utilizzato per la decodifica di tali
codici, ed è indicato come algoritmo di Berlekamp-Massey.
Il Circuito mostrato in Figura 1 implementa infatti le equazioni:
S j = −C1 S j −1 − C 2 S j − 2 − ... − C t S j −t
j = t+1, t+2,…
ovvero le identità di Newton, avendo posto σi = Ci.
+
+
x
x
-C1
Sj-1
+
Sj-2
+
x
-C2
Sj-3
x
-C3
x
-Ct-1
Sj-t
-Ct
Sj-t-1, Sj-t-2, ....…
Figura 1 Circuito LFSR
12
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
Detto connection polynomial il polinomio definito come:
t
C (x ) = 1 + ∑ Ci x i
i =1
si ha che il calcolo dei coefficienti dell’error location polynomial equivale a
determinare il polinomio C(x) per un LFSR che generi la sequenza St+1, St+2… con stati
iniziali S1, …St.
Data una determinata sequenza di valori della sindrome vi è un determinato numero di
polinomi C(x) di grado diverso che li può generare. Ciò è consistente con il fatto che
diversi pattern di errori possono dar luogo alla medesima sindrome. La decodifica a
massima verosimiglianza impone di scegliere tra i vari possibili, il pattern con il numero
minimo di errori, che equivale al polinomio di grado minore (cosa che si riflette in una
minore lunghezza del registro).
L’algoritmo di Berlekamp Massey sintetizza il registro a scorrimento a retroazione
lineare di lunghezza minima mediante una routine iterativa che inizia considerando il
più piccolo registro possibile e facendogli generare la sindrome. Gli elementi così
ricavati sono via via confrontati con quelli effettivi. Ogniqualvolta si ha una discrepanza
il registro considerato viene modificato e il procedimento ricomincia fino a quando non
si ottiene tutta la sindrome.
I passi dell’algoritmo sono i seguenti:
a) Inizializza le variabili:
C(x) = 1 (connection polynomial)
D(x) = x (termine di correzione)
L = 0 (lunghezza del registro)
n = 1 (contatore degli elementi della sindrome)
b) Considera il l’elemento successivo della sindrome e calcola la discrepanza:
L
δ = S n + ∑ C i S n −i
i =1
13
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
c) Testa il valore della discrepanza:
se δ = 0 vai al passo h)
altrimenti vai al passo d)
d) Modifica il polinomio C(x):
C*(x) = C(x) - δD(x)
e) Testa la lunghezza del registro:
se 2L ≥ n vai al passo g)
altrimenti vai al passo f)
f) Cambia la lunghezza del registro e modifica il termine di correzione:
L=n-L
D*(x) = C(x)/ δ
g) Aggiorna il polinomio C(x):
C(x) = C*(x)
h) Aggiorna il termine di correzione:
D(x) = xD*(x)
i) Aggiorna il contatore degli elementi della sindrome :
n = n+1
14
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
j) Verifica il numero di elementi della sindrome:
se n < d ricomincia da b)
altrimenti esci.
Il polinomio C(x) così ottenuto è quello del registro di interesse.
Il connection polynomial è in un primo momento posto uguale ad 1 ed è
successivamente modificato in modo da generare correttamente gli elementi della
sindrome in sequenza. D(x) è il termine usato per modificare il polinomio ogni volta che
si riscontri una discrepanza diversa da zero. Ad ogni iterazione tale discrepanza è la
differenza tra il valore dell’elemento della sindrome e quello calcolato dal registro
ottenuto in quella iterazione. E’ da notarsi come alla prima iterazione la discrepanza sia
data da S1 anche se non ci sono elementi precedenti da cui tale valore può essere stato
calcolato.
Ogni volta che la discrepanza è non nulla C(x) è modificato in funzione della
discrepanza stessa e del termine correttivo. Tale modifica è la parte più interessante
dell’intero algoritmo in quanto permette di ottenere un polinomio che annulli la
discrepanza non solo al passo corrente, ma anche nei precedenti. In altre parole la
modifica non è influente per quanto riguarda la generazione degli elementi della
sindrome precedenti. Questo fatto rende molto efficiente l’algoritmo limitando
notevolmente il numero di passi da svolgere.
Evidentemente, essendo t la capacità correttiva del codice, qualora la lunghezza
finale L del registro (che coincide con il grado di C(x) e quindi con il numero di errori)
ecceda tale valore, non è assicurata un’esatta correzione della codeword. (Vedi [1.])
L’algoritmo di Berlekamp Massey è quello implementato dal software con cui si sono
svolte le simulazioni per dimensionare il codice in esame.
Una volta che siano noti tali coefficienti è facile calcolare le radici dell’error locator
polynomial ottenendo così le posizioni degli errori. Un algoritmo usato a questo fine è la
Chien Search, che è in realtà un metodo di ricerca esaustivo. Le radici infatti saranno
uno o più elementi del campo di Galois e l’algoritmo prevede semplicemente di
15
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
calcolare il polinomio in tutti gli elementi del campo GF(2m). Ogni volta che il
polinomio si annulla la radice appena trovata indica la posizione di un errore.
E’
importante
notare
l’arbitrarietà
nell’associazione
della
posizione
all’indicizzazione che nel polinomio e(x) indica il numero dell’errore.
Una volta note le posizioni degli errori si possono ricavare i valore degli errori
risolvendo il sistema di 2t equazioni dato dalle relazioni tra gli elementi della sindrome
e il polinomio e(x) calcolato nelle radici di g(x).
Un metodo più efficiente per l’individuazione del valore degli errori è dato
dall’algoritmo di Forney che definisce un polinomio specifico che mette in relazione la
posizione degli errori e il loro valore. Mediante tale relazione si possono ricavare i
valori, essendo note le posizioni.(Vedi [4.])
Come emerge in molti passi del processo di decodifica, qualora si abbia a che fare
con un polinomio e(x) di grado ν > t – ovvero con pattern da più di t errori – il codice
non è in grado di effettuare la correzione, infatti i sistemi introdotti non risultano
compatibili.
Noti anche i valori ej1,…, ejν è possibile ricostruire il polinomio e’(x) che si suppone
sia occorso e, conseguentemente, correggere la parola ricevuta e considerata errata in
seguito al calcolo della sindrome:
c′( x ) = r ( x ) + e′( x ) = c( x ) + e(x ) + e′(x )
L’operazione di decodifica è verificata se il calcolo della sindrome dà risultato
positivo (S = 0). In caso contrario si può comunque asserire la rivelazione dell’errore
avvenuto.
Come nella maggior parte dei codici a blocchi, la mancata rivelazione di un errore è
dovuta al fatto che il pattern di errore ha trasformato r(x) in una nuova parola di codice
valida e quindi, per definizione, caratterizzata da sindrome nulla.
16
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
3 Dimensionamento del codice RS per un
modem HF a 64 kbps
3.1 Il modem HF a 64 kbps e la relativa codifica RS
Lo studio e la realizzazione del codice RS descritto nel presente documento si
inserisce all’interno di un progetto di ricerca attualmente in corso di svolgimento presso
il Dipartimento Infocom in collaborazione con la Marconi-Selenia, Pomezia (Roma).
Il progetto prevede, nell’arco di tre anni di lavoro, la definizione, la progettazione e
la realizzazione prototipale di un modem digitale operante in banda HF con velocità di
trasmissione sino a 64 kbps in aria. Dopo una fase di studio preliminare sulle
caratteristiche del canale HF e sulle soluzioni tecniche attualmente considerate a livello
mondiale per la trasmissione dati ad alta velocità in HF, il progetto si è orientato per una
soluzione single-tone (e non multi-carrier) con modulazione 16-QAM ed occupazione
di banda intorno ai 25 kHz. Tale scelta è giustificata dalla disponibilità di un
equalizzatore particolarmente potente, detto MAP ridotto (RMAP), mentre per il
codificatore al momento è stato scelto un classico codice convoluzionale, con
interleaving.
In tale ambito rimaneva da definire la codifica a blocchi, oggetto del presente
lavoro.
A tale proposito si è fatto riferimento alla classica soluzione della codifica
concatenata, che prevede due livelli di codifica (Figura 2). Un primo codice detto codice
esterno (outer code), tipicamente un Reed Solomon, introduce un primo livello di
ridondanza; dopodiché le parole di codice così generate costituiscono l’ingresso di un
successivo codificatore – codice interno (inner code) – tipicamente binario.
Il grado di ridondanza introdotto è molto elevato (il rapporto di codifica
complessivo è dato dal prodotto dei rate dei due codici interno ed esterno), ma a
dispetto di ciò i passi di codifica/decodifica sono semplificati in quanto sono eseguiti in
due passi rispetto ad un codice a blocchi che presenti lo stesso rapporto di codifica
totale.
17
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
Data
in
Outer
Coder
Data
out
Inner
Coder
Interleaver
Channel
Deinterleaver
Inner
Decoder
Outer
Decoder
Figura 2 Codice concatenato
Nel progetto in esame la codifica interna è data da un codice convoluzionale con
rate Ri = 3 4 . La finalità di questo passo di codifica è la correzione del maggior numero
possibile di errori introdotti dal canale. Per il codice esterno si è invece scelto un Reed
Solomon. Questa parte di codifica ha invece ha lo scopo di rilevare i blocchi errati al
fine di permettere la ritrasmissione di una trama eventualmente corrotta mediante un
protocollo ARQ. ARQ (Automatic Repeat reQuest) è una tecnica che prevede la
suddivisione dei dati in pacchetti in ognuno dei quali sono presenti dei bit di controllo di
parità mediante i quali è possibile desumere in ricezione se il pacchetto sia o meno
corrotto da errori. Qualora ciò si verifichi il trasmittente provvederà a rinviare il
pacchetto con modalità definite da opportuni protocolli (Stop & Wait, Go back n…).
Stante tale finalità del codice il suo dimensionamento è stato orientato ad introdurre
una ridondanza più limitata rispetto al caso di un codice a correzione. La scelta della
dimensione della parola di dati e della parola di codice ha come fine il minimizzare (e
possibilmente rendere nullo) il numero di trame errate consegnate al ricevitore. In
questa analisi va tuttavia tenuto presente l’impatto sul throughput dell’intero sistema. È
infatti auspicabile – a parità di errori rilevati – ridurre al minimo il numero di
ritrasmissioni necessarie al fine di non rendere troppo frammentato e incostante il flusso
di dati consegnato al ricevitore.
Il sistema di trasmissione prevede l’invio di trame strutturate come segue (Figura 3)
Ad un preambolo di 281 simboli segue un’alternanza di blocchi informativi ( 2048
simboli) e di simboli noti di training – in numero di 120. Tale alternanza si ripete per un
numero di 72 blocchi informativi, dopodiché la struttura si ripete con tale ciclicità.
18
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
La scelta della lunghezza del blocco informativo, anche detto frame, è influenzata da
considerazioni trasmissive. Data la modellizzazione del canale (Rayleigh Fading
Channel) è infatti necessaria una trasmissione continuativa per un determinato periodo
di tempo al fine di permettere al ricevitore di stimare la variabilità del canale. Stante la
modulazione adottata a 2048 simboli corrispondono 8Kbit. Considerando anche la
ridondanza introdotta dal codice interno è necessario che il codificatore convoluzionale
abbia come input dei blocchi da 6Kbit.
Data la struttura del codice concatenato questi blocchi da 6 kbit dovranno essere dati
dalle parole di codice del Reed Solomon.
Trama
RP
RP
M
Blocco Dati
Blocco Dati #1
M
M
Blocco Dati #72
281 simboli di preambolo 8PSK
120 simboli noti 8PSK
2048 simboli informativi 16QAM
Figura 3 Struttura della trama a livello fisico (forma d’onda trasmessa)
Sulla base di tali dati iniziali è stata presa la prima scelta riguardante il
dimensionamento del codice, ovvero quella relativa alla dimensione m in bit dei simboli
dell’alfabeto di codice stabilita nella misura di 8 bit (1 byte). Tale decisione ha più
motivazioni. Innanzitutto il byte risulta un comodo e consueto livello di granularità in
molte applicazioni. Per di più tale scelta porta a parole di codice di 2 8−1 = 255 simboli
(la forma più usata dei codici di Reed Solomon prevede codeword di lunghezza 2 m−1 ).
Questo vincolo risulta essere comodo per due motivi. Infatti non solo i codici RS (255 ,
255 – 2t) sono le implementazioni più usate dei Reed Solomon, ma oltretutto nel nostro
caso, dal momento che 255 byte corrispondono a 2Kbit circa, questa dimensione di
19
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
codeword permette un elegante partizionamento del blocco di 6Kbit in tre parole di
codice.
Possiamo dunque pensare l’ambiente di lavoro strutturato in buona approssimazione
nel modo seguente (Figura 4).
Il flusso di dati generato dalla sorgente viene consegnato segmentato in blocchi da k*m
bit al codificatore esterno (Reed Solomon) che applica un primo livello di ridondanza
aggiungendo ai bit di informazione un campo CRC di 2t*m bit tale che (k+2t)m=2 Kbit.
Lo scopo del lavoro presentato è un opportuno dimensionamento di questo campo
CRC.
B locch i di tra sporto
C od ifica E stern a
Accorp am en to
d ei b locch i
C odifica In tern a R = 3 /4
In terleavin g
Ad attam en to alla
S tru ttu ra di tram a
#1
#3
m * k b it
m * k b it
#1
CRC
#3
CRC
2 K bit
2 K bit
6 k bit
8 k bit
8 k bit
train
16 Q AM
Figura 4 Ambiente di Lavoro
Successivamente tali blocchi vengono inviati sequenzialmente in input al codificatore
interno (convoluzionale). Lo streaming in uscita, opportunamente ridondato dal codice,
viene posto in ingresso all’interleaver. L’interleaving si rende necessario in situazioni in
cui il canale introduce configurazioni di errori a burst, e consiste nel riarrangiare
l’ordine dei bit prima della trasmissione e nel compiere l’operazione inversa in
ricezione. In questo modo si cerca di rendere il più casuale possibile il pattern di errori
20
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
che affligge la sequenza di bit consegnata al decodificatore. Si adotta lo schema di
interleaving riga/colonna di grado 2. Infine il flusso di bit verrà risegmentato in blocchi
da 8 kbit, ovvero da 2048 simboli. Tali simboli verranno quindi calati nella trama sopra
descritta (operazione che comporterà un opportuno compattamento temporale al fine di
inserire i simboli noti) e trasmessi nel canale.
In ricezione le medesime operazioni compiute sono le stesse in ordine inverso.
3.2 Realizzazione SW della procedura di co-decodifica RS
La scelta del tasso di ridondanza del codice è stata svolta mediante una realizzazione
software della procedura di co-decodifica RS.
Un software realizzato in un altro ambito effettua una simulazione del collegamento
comprendente il codice interno (SCCI). Sfruttando tale soluzione già pronta si è pensato
in un primo momento di strutturare il software per la codifica RS aggiungendo al codice
già scritto i blocchi funzionali RS (operazione di codifica) e RS-1 (operazione di
decodifica) così come mostrato nel seguente schema (Figura 5)
Sorgente
Destinazione
RS
SCCI
RS-1
Figura 5 Schema a blocchi della realizzazione software comprendente il SCCI
E’ però opportuno notare che, ai fini del dimensionamento del codice RS nella
realizzazione software usata, la simulazione dell’ambiente di trasmissione è
inessenziale. Se infatti si potesse sostituire l’intero blocco SCCI con un semplice blocco
che, in corrispondenza degli errori commessi dal decoder convoluzionale, andasse a
21
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
negare il bit corrispondente nel blocco codificato, il risultato sarebbe invariato, avendo
però guadagnato in tempo di elaborazione. Questa soluzione è stata infatti applicata
sfruttando dei file di testo in cui il programma SCCI scrive, per ogni blocco da 6 Kbit, il
numero e la posizione degli eventuali bit errati dopo la decodifica convoluzionale. Alla
luce di ciò il programma per la realizzazione è stato semplificato alla seguente struttura
(Figura 6)
SCCI
Disp.
Errori
Sorgente
RS
Destinazione
RS-1
Figura 6 Schema a blocchi della realizzazione software non comprendente il SCCI
Il funzionamento di tale programma è strutturato come segue.
•
Il prima istanza vengono generate tre parole binarie pseudocasuali da k*m bit, dove
k è parametrizzato ed m = 8 .
•
Queste vengono successivamente trasformate in parole di k simboli convertendo
ogni m-pla di bit in un numero in forma decimale.
•
Le parole così ottenute sono quindi codificate.
Le procedure di codifica e decodifica di Reed Solomon sono state prese dal “Reed
Solomon coding/decoding package v1.0” by Phil Karn (Sept 1996). Tale pacchetto
implementa le funzioni di codifica e decodifica avendo come gradi di libertà la
dimensione in bit dei simboli m, e la capacità di correzione t del codice. Sono anche
comprese delle funzioni che inizializzano delle tavole di conversione per le varie
rappresentazioni degli elementi dei campi ad elementi finiti e che generano, a partire da
i valori di m e t, il polinomio generatore del codice.
22
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
•
Una volta effettuata la codifica, le parole di codice così ottenute (di n simboli
ciascuna, ovvero di m*n bit = 2 Kbit) sono nuovamente trasformate in forma binaria
e riunificate in un unico blocco da 6 Kbit.
•
Su tale blocco sono aggiunti gli errori (il pattern di errori per ogni blocco è letto da
un file di testo che contiene i risultati delle simulazioni del codice interno su 24
supertrame (canali) da 72 blocchi da 6 Kbit ciascuno). Naturalmente la maggior
parte dei blocchi non sarà affetta da errori e quindi non modificata da questo
passaggio.
•
Successivamente il blocco affetto da errori viene risegmentato in parole da 2 Kbit
prima e da n simboli poi, mediante una nuova conversione binaria/decimale.
•
Sulle parole così ottenute è applicata la funzione di decodifica.
Per come è strutturato il software che implementa questa funzione si hanno tre
possibili esiti:
a) Il numero di errori è tale da poter essere corretto, nel qual caso la funzione
ritorna il numero di simboli corretti.
b) Il numero di errori eccede la capacità di correzione del codice, e la funzione
ritorna il valore –1, rilevando comunque la codeword come errata.
c) La codeword è riconosciuta come corretta, nel qual caso la funzione ritorna il
valore 0. Come noto questa evenienza è figlia di una effettiva mancanza di
errori, ovvero di un pattern di errori tale da aver trasformato la parola di
codice in un’altra codeword valida.
Per eliminare l’ambiguità legata a quest’ultimo caso, ogni volta che il valore
riportato dalla funzione di decodifica è 0 si esegue un confronto simbolo a simbolo
tra la parola originale e quella decodificata.
Le operazioni precedentemente descritte sono reiterate fino a quando non si arriva alla
fine del file con le configurazioni degli errori. In totale si saranno quindi esaminati:
23
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
•
24 ∗ 72 = 1728 blocchi da 6 Kbit, corrispondenti a 5184 parole da 2 Kbit che
rappresentano la PDU del protocollo ARQ.
3.3 Risultati e dimensionamento del codice RS
Il dimensionamento del tasso di ridondanza del codice esterno si basa sul numero
atteso di errori commessi in fase di decodifica dal codice interno. Per come è
strutturato, il codice di Reed Solomon opera, come livello di granularità più fine, sul
simbolo e non sulla sequenza di bit che lo compone. In tal senso è importante esaminare
come si distribuiscono nelle parole da 2 Kbit in uscita dal decoder convoluzionale i
simboli errati (che avendo posto m=8 si riducono ai byte errati).
A tale scopo è stato realizzato un software per l’analisi dei risultati della
simulazione del collegamento comprendente il codice interno (SCCI) (Figura 7)
SCCI
Disp.
Errori
Software
per l’analisi
Analisi
Statistica
Figura 7 Schema a blocchi del software per l’analisi della disposizione degli errori
Il programma legge da un file di input i risultati della simulazione SCCI che
riportano, per ogni blocco da 6 Kbit, la posizione dei vari errori. Essendo la ricerca
orientata ai blocchi da 2 Kbit, la posizione dell’errore viene normalizzata rispetto a
questo valore, in modo che, ad esempio, due bit errati nelle posizioni 2048 - 2049 del
primo blocco da 6 Kbit, siano considerati come facenti parte di due blocchi da 2 Kbit
diversi. Inoltre si è orientata la statistica al numero di byte errati in ogni parola in modo
che, anche un burst di 8 bit errati, possa essere considerato (sempre se cade nella giusta
posizione) come un solo simbolo errato.
24
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
Nel partizionamento implicito dei blocchi da 6 Kbit non si è fatta distinzione tra i
blocchi in prima, seconda e terza posizione. In effetti data la non stazionarietà del canale
trasmissivo
in esame sarebbe stata opportuna una differenziazione in quanto
presumibilmente bit diversi avranno sperimentato una diversa potenza al ricevitore.
Tuttavia in questo caso l’interleaving interviene a rendere inutile un passaggio del
genere in quanto dei bit consegnati al decoder in un’unica parola sono stati trasmessi in
parole diverse.
L’esito dell’analisi statistica sul campione di errori porta alle seguenti
considerazioni:
•
fino alla soglia di x = 21 byte errati l’andamento del numero di codeword affette da
x errori rimane in buona approssimazione decrescente con una certa continuità da un
massimo di 64 codeword con un errore fino a 4 codeword con 21 errori.
•
Dopo tale soglia l’andamento risulta meno regolare e si hanno delle occorrenze (mai
superiori alle dieci codeword) con un numero di errori fino 35.
•
Oltre tale soglia si ha un caso isolato con 41 errori.
Tali risultati sono riportati nel seguente grafico (Figura 8):
totale blocchi esaminati: 5184 - blocchi con zero errori: 4801 (fuori scala)
100
blocchi da 2kbit = 255byte con errori
90
80
70
60
50
40
30
20
10
0
0
1
2
3
4
5
6
7
8
9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41
numero byte errati in un blocco
Figura 8 Distribuzione degli errori sui byte nei blocchi da 2 kbit
25
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
Tale distribuzione degli errori porta a considerare la necessità di rilevare almeno
tutti i 35 byte errato che possiamo considerare come massimo, tralasciando il caso
peggiore di per sé poco significativo. Del resto è anche necessaria una considerazione in
termini di efficienza di sistema. In effetti la strategia di codifica ha un doppio impatto
sul throughput di sistema. Infatti si ha una perdita di efficienza dovuta alla ridondanza
introdotta, sia dal FEC che dall’ARQ, alla quale va aggiunta l’ulteriore perdita dovuta
ad eventuali ritrasmissioni. La curva dell’efficienza di fatto si trova al di sotto di un
asintoto fissato dal tasso di ridondanza e raggiunto solo qualora non vi siano
ritrasmissioni (ovvero in una situazione di canale particolarmente favorevole). Il
throughput complessivo del sistema dovuto alla sola introduzione della ridondanza
presenterà evidentemente un andamento decrescente; nella fattispecie si avrà:
Th = 0.75(1 − CRC / 255)
dove con CRC si indica il numero di simboli di ridondanza del codice e dove il fattore
0.75 tiene conto del rate Ri = ¾ del codice interno. Ricordando che CRC può essere
solamente una quantità pari (i codici di Reed Solomon sono del tipo RS (255, 255-2t)
con t capacità di correzione) si ha la seguente situazione (Figura 9):
Throughput complessivo del codice
0,76
0,74
Rate
0,72
0,7
0,68
0,66
0,64
0,62
0
10
20
30
40
50
Simboli di ridondanza (CRC)
Figura 9 Andamento del Throughput complessivo del Codice
26
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
Come si nota dal grafico un dimensionamento con un campo di ridondanza pari a 36
simboli (35 non è un valore ammesso) comporterebbe un throughput asintotico pari
all’incirca a 0.65.
E’ interessante però esaminare i risultati delle simulazioni svolte. Tali simulazioni –
eseguite con il software descritto precedentemente – sono state effettuate con uno
svariato numero di valori del campo di ridondanza da un minimo di 2 (se non altro per
amore di completezza) ad un massimo di 42. I risultati mostrati di seguito (Figura 10)
riportano per ogni valore di CRC il numero di parole che il codice è stato in grado di
correggere efficacemente (può infatti capitare che un troppo elevato numero di errori
faccia fallire la correzione che pur sempre si basa sul principio di massima
verosimiglianza), il numero di parole errate rilevate ed il numero di parole
eventualmente consegnate errate agli stadi successivi la decodifica
CRC
Codeword Codeword Codeword
corrette
Rilevate
consegnate
errate
2
4
6
8
10
12
14
16
18
20
22
24
26
28
30
32
34
36
38
40
42
67
128
155
170
189
212
229
247
261
274
281
289
305
318
328
331
339
345
350
352
360
3
131
182
198
190
171
154
136
122
109
102
94
78
65
55
52
44
38
33
31
23
313
124
46
15
4
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
0
Figura 10 Risultati della Realizzazione della co-decodifica RS
27
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
Risulta di particolare interesse il fatto che, nonostante un palese sottodimensionamento,
già un codice con soli dodici simboli di ridondanza, partendo dall’input delle
simulazioni che può comunque considerarsi un esempio significativo di scenario di
trasmissione, assicuri una trasmissione affidabile. Tale risultato già di per sé
interessante, lo diventa ancora di più se si considera il fatto che per gli esempi con ancor
minore ridondanza che presentano degli errori in decodifica, tali errori sono compiuti un
correzione e quindi non accade mai che i pattern di errori varino una parola di codice in
una diversa parola comunque valida, ma avviene che la decodifica a massima
verosimiglianza fallisce essendo troppo limitata la ridondanza. La spiegazione di tale
fenomeno può essere data dal fatto che il codice di Reed Solomon è non binario. In
questo senso assume rilevanza nella valutazione della distanza minima non solo il
numero minimo di simboli per cui differiscono due parole ma anche il “modulo” della
differenza. Da questo punto di vista è possibile che, nonostante in effetti il numero di
errori superi la distanza minima, la possibile scelta tra i simboli fa sì che non si
verifichino ambiguità tra parole valide.
I risultati della tabella precedente sono riportati nei seguenti grafici (Figura 11 e Figura
12)
Codeword consegnate errate al ricevitore
350
300
Codeword
250
200
150
100
50
0
-50 0
10
20
30
40
50
Simboli di ridondanza
Figura 11 Codeword consegnate errate al ricevitore vs simboli di ridondanza
(campo CRC)
28
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
Codeword corrette dal codice
400
350
Codeword
300
250
200
150
100
50
0
0
10
20
30
40
50
Simboli di ridondanza
Codeword rilevate errate (ritrasmissione
richiesta)
250
Codeword
200
150
100
50
0
0
10
20
30
40
50
Simboli di ridondanza
Figura 12 Codeword corrette e Codeword per cui si richiede la ritrasmissione vs
Simboli di Ridondanza (campo CRC)
29
Codifica di Reed-Solomon per un modem digitale a 64 kbps in banda HF
4 Conclusioni
Le analisi svolte nel presente lavoro mostrano come, a partire da una descrizione
relativamente accurata dell’ambiente in cui si troverà ad operare il codice (rappresentata
dai risultati delle simulazioni svolte sul codice convoluzionale comprendenti anche i
passi di modulazione, equalizzazione ecc…), sia possibile avere una trasmissione
affidabile già con una ridondanza molto limitata (12 simboli di ridondanza).
Occorre però evidenziare come questa soluzione, che presenta il vantaggio di avere
un rate decisamente elevato, sia comunque rischiosa e che è forse troppo affetta dalla
particolarità dei pattern di errori presenti nei dati di input alle simulazioni. Un
dimensionamento più corretto prevede un numero di simboli di ridondanza compreso tra
i 30 e i 36. Tale soluzione, a scapito di un rate decisamente più basso del caso
precedente (oscilla tra lo 0.64 e lo 0.66), presenta una affidabilità in media di valore più
generale con il vantaggio di limitare la percentuale di richieste di ritrasmissione ad un
valore inferiore al 2%.
5 Bibliografia
[1.]
M. Michelson, A. H. Lovesque: “Error – Control Techniques for Digital
Communications”, Wiley Interscience, 1985.
[2.]
B. Sklar: “Reed Solomon Codes”
[3.]
Wen Xu: “Implementation and Performance Evaluation of Reed-Solomon
Codes”, Cornell University, 2001
[4.]
S. LeNgoc, T. Banerjee, Y. Ye: “A PC based General Purpose Reed Solomon
Codec Simulator”
[5.]
M. McGregor, J. Watson: “Implementing the Reed Solomon Code: A Case
Study”
30