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.