La codifica dei dati

 

La codifica é l'operazione che associa ad un carattere alfanumerico della trasmissione dati una stringa di bit.

Il codice deve essere riconosciuto da tutti gli utenti inseriti in rete si debbono allora verificare alcune regole:

il codice deve essere caratterizzato da un fissato numero n di bit che dá origine a m = 2n combinazioni logiche cioé simboli;

m si chiama capacitá di rappresentazione del codice

il legame tra codice ed informazione si chiama alfabeto (un numero finito di simboli)

alcuni alfabeti per aumentare le capacitá di rappresentazione impiegano il sistema dello scambio, che associa alla stessa stringa di bit 2 significati distinti a seconda che due caratteri di controllo, (UP SHIFT, DOWN SHIFT), siano attivati

gli alfabeti devono essere regolamentati da organismi internazionali (CCITT)

l'insieme dei simboli costituenti l'alfabeto da trasmettere si chiama alfabeto sorgente, dopo la codifica (in stringhe o parole binarie) si chiama alfabeto codificato, alfabeto pronto per essere trasmesso.

 

 

 

 

 

 

Codice BAUDOT (CCITT n 2)

Tipico delle telescriventi (TTY o RTTY) per sistemi telegrafici o telex é un codice costituito da n = 5 [bit]. Siccome m = 32, 26 combinazioni sono associate a caratteri, e 5 sono riservate a comandi funzionali (00000 non viene utilizzato).

Visto il basso numero di combinazioni l'alfabeto codificato viene espanso con la tecnica dello scambio, cioé i simboli trasmessi dopo il simbolo CFRS, (cifre), assumono un secondo significato, si torna al significati consueto trasmettendo prima il simbolo LTRS, (lettere). Alcune combinazioni sono non associate (CCITT S.4) oppure sono comandi per la periferica ricevente (tipo WRU per i simboli CFRS,4 e Bell per i simboli CFRS,10).

La raccomandazione CCITT S.3 definisce le modalitá di trasmissione:

velocitá = 50, 75, 100 [bit/s]

trasmissione seriale start/stop

la stringa é formata da 1 carattere di durata T di start, 5 caratteri codice BAUDOT lunghi T ciascuno, 1 carattere di stop lungo 1,5T

la sequenza ZCZC indica l'inizio messaggio

la sequenza NNNN indica la fine del messaggio

 

Codice ASCII (CCITT n 5)

L'American Standard Code for Information and Interchange é uno dei piú vecchi codici emanati dall'American Standard Association.

É composto da n = 7 [bit] per cui consente m = 128 simboli.

Ogni combinazione identifica un simbolo in un'ipotetica tabella dove le colonne rappresentano rispettivamente: caratteri di controllo, caratteri alfanumerici, caratteri grafici; e le righe indicano i simboli veri e propri. Le colonne vengono indicate dai primi tre bit piú significativi della stringa, mentre le righe sono indicate dai quattro meno significativi bit.

Il CCITT nella norma V.3 raccomanda l'impiego del codice ASCII per calcolatori, ed impone inoltre che il bit MSB (b7) sia l'ultimo ad essere trasmesso nelle trasmissioni seriali.

Questo codice é adottato per trasmissioni sincrone ed asincrone; nel secondo caso la sequenza é composta da 1 bit di start, 7 bit di codice, 1 bit di paritá, 1 o 2 bit di stop a secondo dello standard utilizzato (a 10 od 11 bit).

 

 

Codice USASCII

Questo codice é un'estensione del precedente; n = 8 [bit] per cui m = 256 simboli.

 

 

Codice EBCDIC

Molto simile al codice USASCII é l'Extended Binary Code Decimal Interchange Code sviluppato dall'IBM. Questo codice é composto ancora da n = 8 [bit] con significato simile all'ASCII ma con diversa codifica (ad ogni simbolo viene associata una stringa ad 8 bit diversa da quella adottata nel codice ASCII, ne consegue che i due codici, pur essendo lunghi uguali, non sono compatibili).

 

 

Codice SIX BIT TRANSCODE

Codice sviluppato dall'IBM per le trasmissioni sincrone ed asincrone start/stop é composto da n = 6 bit quindi m = 26 = 64 simboli.

Nella trasmissione sincrona la sequenza é composta da 1 bit di start, i 6 bit di codice, 1 bit di paritá, 1 bit di stop

 

Controllo degli errori

Per la trasmissione analogica ci sono 2 gravi fenomeni che danneggiano il segnale: la distorsione in banda del segnale da parte del mezzo trasmissivo, ed il rumore. Anche nella trasmissione digitale questi fenomeni disturbano, distorcendo la forma d'onda del segnale ricevuto e inducendo in errore le stazioni di rigenerazione:

Nasce l'esigenza di rivelare la presenza d'errori per attuarne la correzione. Questa esigenza viene soddisfatta attraverso un'opportuna codifica dell'informazione. Il codice cosí oltre ad essere studiato per resistere ai disturbi deve essere in grado di segnalare eventuali errori in ricezione.

Parliamo allora di ridondanza del codice ossia introduciamo ulteriori bit all'informazione allo scopo di proteggere la trasmissione.

Ci basiamo sul concetto di Distanza di Hamming tra due parole di un codice cioé il numero di bit differenti tra due parole "adiacenti" di un codice

ad esempio si consideri il codice a 4 bit rappresentante la codifica d'un segnale a 5 livelli (o messaggi):

m1 = 0001

m2 = 0010

m3 = 0100

m4 = 1000

m5 = 1101

ciascun messaggio "dista" almeno due bit da qualsiasi altro.

Se un bit viene ricevuto sbagliato il ricevitore si accorge che qualcosa non va e segnala l'errore:

se trasmetto m3 = 0100 e ricevo 0110, perché il terzo bit é stato disturbato da un'interferenza, il ricevitore s'accorge che la sequenza 0110 non esiste nella codifica e segnala errore.

Nell'esempio si osserva che il codice non puó correggere l'errore perché non sá se é stato trasmesso 0100 o 0010.

Si vede che se d é la distanza di Hamming in un codice é possibile:

rilevare e (d - 1) bit errati

correggere c (d - 1)/2 bit errati

Naturalmente fissato il numero di messaggi m da trasmettere piú aumenta la distanza d piú cresce il numero n di bit da trasmettere per ogni messaggio; (ad es: se m = 16 messaggi servono almeno n = 4 bit ma la distanza d = 1 non si puó ne rilevare ne correggere l'eventuale errore).

Nel caso di correzione d'errore la parola corretta é quella a distanza minore dalla sequenza ricevuta.

Ovviamente al crescere della ridondanza diminuisce la velocitá di trasmissione.

Comunemente si adottano due tipi di ridondanza: quella che aggiunce un bit alla fine di ogni parola (bit di paritá); e quella che aggiunge una stringa di caratteri alla fine di un gruppo di parole.

 

 

 

Ridondanza sul carattere (character mode)

Utilizzata nei sistemi di trasmissione asincroni con codice ASCII a 7 bit la VRC (Vertical Redundancy Check o ridondanza verticale) aggiunge un bit in coda ad ogni parola di valore 1 o 0 in modo che la somma complessiva degli 1 della stringa sia sempre pari (bit di paritá pari) o dispari (bit di paritá dispari) a seconda della convenzione.

 

pregi

difetti

 

d = 2 soltanto

semplicitá

spreco di configurazioni

 

 

 

 

Ridondanza su gruppi di caratteri (block mode)

 

Utilizzata nella trasmissione sincrona la BCC (Block Character Check o ridondanza sui blocchi) questa codifica prevede di considerare blocchi di parole insieme.

di queste tecniche ne esistono molte tra le quali si ricorda:

LRC (Logical Redundancy Check) simile al bit di paritá classico per righe

ad es: configurazione LRC

1100111 1

0011011 0

1011101 1

0001010 0

si trasmette serialmente: 11001111001101101011101100010100

VRC (Vertical Redundancy Check) la paritá é per colonne del blocco

ad es: configurazione

1100111

0011011

1011101

0001010

VRC0010011

si trasmette serialmente: 11001110011011101110100010100010011

(Spesso vengono applicate le due tecniche insieme)

CRC (Cyclic Redundancy Check) consiste nell'aggiungere alla fine di ogni blocco una stringa di bit (12 ~ 16) corrispondenti al resto delle divisione (modulo 2) tra un polinomio associato alla stringa data per un polinomio di riferimento stabilito a priori:

xrM(x)/Gr(x) = Q(x) ed un resto R(x);

in trasmissione: T(x) = xrM(x) - R(x)

in ricezione: se T(x)/Gr(x) = Q(x) e resto 0; allora T(x) privo d'errori se T(x)/Gr(x) = Q(x) e resto 0; allora T(x) errato.

Se il messaggio ricevuto é corretto per estrarre M(x) é sufficiente troncare T(x) ai primi m bit pari al numero di bit di M(x).

Tipiche stringhe generatrici:

CRC-CCITT G(x) = 10001000000100001

CRC-CCITT inverso G(x) = 10001000000010001

CRC-16 G(x) = 10001000000000101

CRC-16 inverso G(x) = 10001000000010001

CRC-12 G(x) = 1100000001111

Nel mondo analogico, per stabilire la qualitá del sistema di comunicazione, si definisce l'SNR; cosí in ambito digitale si definisce il Tasso di errore BER per valutare la bontá del sistema di trasmissione dati:

 

BER = bit ricevuti errati

bit tot. trasmessi

I valori massimi ammissibili e le modalitá di effettuazione della misura vengono stabilite nelle raccomandazioni CCITT V.53 e V.52.