Un modem, una scheda di rete, o comunque una
unità di comunicazione tra calcolatori elettronici,
trasmettendo un’informazione, a causa di disturbi
esterni, potrebbe variare la stessa in modo
significativo compromettendo tutti i dati trasmessi.
Schematizzando le due unità si riesce meglio a
comprendere come avviene il passaggio di
informazione.
La schematizzazione prevede T come unità trasmettente, R come unità
ricevente, d sono i vari disturbi.
L’esempio del modem è molto semplice da spiegare, poiché l’informazione
viaggia sulla linea telefonica.
Sarà sicuramente capitato a chiunque di sentire durante una telefonata (con
un normale apparecchio telefonico) un fruscio o altre conversazioni di
sottofondo, ciò è dovuto alla presenza di disturbi esterni che grazie alla
sensibilità degli strumenti di ricezione vengono amplificati compromettendo la
comunicazione.
La stessa cosa avviene per la connessioni ad internet,
infatti queste possono essere considerate vere e proprie
telefonate, che vengono trasmesse dai toni che i modem
riescono a codificare in bit e che verranno poi a loro volta
trasmessi all’unità centrale per i controlli che andremo
adesso ad analizzare.
Supponendo che la stringa da trasmettere sia formata da quattro bit,
verranno aggiunti altri tre bit in questo modo:
La stringa da trasmettere è: DCBA tramite la parità pari (un metodo di
correzione che prevede l’aggiunta del bit 1 se il numero di uno è dispari, 0 se è
già pari) si aggiunge il primo bit (P) tra DCB il secondo (S) tra DBA e il terzo
(T)Per
tracorreggere
CBA ottenendo
una stringa
strutturata:
e minimizzare
gli così
errori
le unità di PSTDCBA.
trasmissione modificano
Se l’unità
che riceve
riesce
a calcolaredei
gli bit
stessi
bit dia parità,
la stringa
da inviare
aggiungendo
davanti
quelli dal’informazione
inviare che è
stata ricevuta correttamente,
altrimenti
la nuova parità e
verranno
chiamaticalcolando
bit di parità.
confrontandola con quella ricevuta attraverso determinate tabelle si riesce a
trovare e, quindi, a correggere l’errore.
Ovviamente, il prezzo da pagare è nella dimensione della stringa: infatti
trasmettere 7 bit è certamente meno conveniente che trasmetterne 4.
Esempio numerico:
D C
1 0
B A
0 1
Calcolando la parità, riusciamo a capire che la stringa
da trasmettere sarà:
P S T
1 0 1
D
1
C
0
B A
0 1
Non si può certo chiedere al processore del PC di
calcolare la parità pari di una stringa, difatti si
utilizza una funzione matematica chiamata XOR
(Excusive or).
L’opzione xor calcola la parità tra più numeri
attraverso la seguente funzione algebrica:
Infatti:
X
Y
XOR
0
0
1
1
0
0
1
1
0
1
1
0
0
1
1
1
1
0
0
0
Come si può verificare la funzione espressa restituisce la parità
pari delle variabili immesse.
Passando alla pratica inizializziamo un programma con due
comandi, invia e correggi.
Con il comando invia si creano i bits di parità per la stringa
inserita e tramite la funzione random si sbaglia un bit e si invia al
secondo comando
Dim n As String
Dim stringa As String
Dim fin As String
Dim a, b, c, d, p, s, t, a1, b1, c1, d1, p1, s1, t1
As Integer
Dim r, test1, test2, test3 As Integer
Dim conta, somma, num, err, bin As Integer
Dim errore, sbagl As String
Private Sub Command1_Click()
n = Text1.Text
d = Mid(n, 1, 1)
c = Mid(n, 2, 1)
b = Mid(n, 3, 1)
a = Mid(n, 4, 1)
p = d Xor c Xor b
s = d Xor c Xor a
t = c Xor b Xor a
fin = p & s & t & d & c & b & a
Randomize
r = Int(Rnd() * 7) + 1
If Mid(fin, r, 1) = 1 Then
Mid(fin, r, 1) = 0
Else
Mid(fin, r, 1) = 1
End If
Label2.Caption="La stringa arrivata è " & fin
sbagl = fin
End Sub
Si otterrà così una stringa di nome sbagl, che contiene il numero inviato
completo di bit di parità ed errore già inserito.
Poiché questo programma simula l’errore e non lo crea veramente, utilizziamo
una funzione che generi un numero casuale, questa funzione in ambiente “basic”
assume il nome di Random, tramite questa funzione possiamo dare in uscita un
numero generato tra 1 e 7 (in quanto sono 7 le cifre che compongono la
stringa) che diventerà la posizione dell’errore. Nella funzione già espressa
vediamo che subito dopo la random è inserita una “if”, questa controllerà se in
quella posizione si trova un’ 1 o uno 0 che convertirà da 0 a 1 o da 1 a 0,
simulando così l’errore del disturbo.
Adesso si può passare alla conversione. I due pulsanti inseriti, come già detto,
servono uno per inviare, l’altro per ricevere-correggere; premuto il secondo
pulsante si attueranno 3 test e unendo i risultati si ricaverà il bit errato e sarà
quindi semplice attuare la correzione.
I test che si effettuano si basano ancora una volta sulla funzione matematica
XOR però questa volta si farà un controllo tra il bit di parità arrivati e quelli
che lo hanno creato (il bit P è stato creato facendo xor tra DCB, per il test
faremo xor tra PDCB) se il risultato del test sarà 0 vorrà dire che quei bit
(PDCB) sono arrivati correttamente.
Quindi traducendo in “basic” avremo:
Private Sub Command2_Click()
d1 = Mid(sbagl, 4, 1)
c1 = Mid(sbagl, 5, 1)
b1 = Mid(sbagl, 6, 1)
a1 = Mid(sbagl, 7, 1)
p1 = Mid(sbagl, 1, 1)
s1 = Mid(sbagl, 2, 1)
t1 = Mid(sbagl, 3, 1)
stringa = p1 & s1 & t1 & d1 & c1 & b1 & a1
test1 = p1 Xor d1 Xor c1 Xor b1 *
test2 = s1 Xor d1 Xor c1 Xor a1 *
test3 = t1 Xor c1 Xor b1 Xor a1 *
errore = test1 & test2 & test3
conta = 3
num = 0
Do
bin = Mid(errore, conta, 1)
somma = somma + (bin * 2 ^ num)
conta = conta - 1
num = num + 1
Loop Until conta <= 0
Select Case somma
Case 1
err = 3
Case 2
err = 2
Case 3
err = 7
Case 4
err = 1
Case 5
err = 5
Case 6
err = 4
Case 7
err = 6
End Select
MsgBox "L'errore sta nel " & err & " bit.",
vbOKOnly, "A T T E N Z I O N E"
inverti (err)
Label1.Caption = "la stringa corretta è " &
stringa
End Sub
Private Sub inverti(err)
If Mid(stringa, err, 1) = 1 Then
Mid(stringa, err, 1) = 0
Label1.Caption = stringa
Else
Mid(stringa, err, 1) = 1
End If
End Sub
Per tradurre questo pezzo di programma abbiamo utilizzato una sub esterna e un
select case. La sub esterna ci consente di eseguire una sorta di “sottoprogramma”
che viene attivato solo quando è il programma principale a chiederlo, il select case
invece è una sorta di insieme di “if”, questo al variare della variabile segnalata fa
assumere un valore predefinito ad un’altra variabile; es.
Select case Fame
Case molta
Pasta = 10
Case poca
Pasta = 2
End select
Questa select case verifica se la fame e molta o poca, se è molta fa assumere alla
variabile pasta il valore 10 altrimenti 2 sarebbe come questo blocco if:
if fame= molta then
pasta = 10
elseif fame = poca then
pasta = 2
end if
la differenza è la comodità della scrittura.
Per stabilire questi valori ci serviamo della seguente tabella
Sempl
Test1
Test2
Test 3
Errore
0
0
0
0
No err.
1
0
0
1
T
2
0
1
0
S
3
0
1
1
A
4
1
0
0
P
5
1
0
1
C
6
1
1
0
D
7
1
1
1
B
Nella traduzione in basic, se si osservano per bene i test, ci si renderà conto
che ci sono dei termini che non vengono ripetuti e altri che lo sono, osservando i
risultati si comprenderà che se ad esempio solo il terzo test ha dato risultato 1
l’errore sarà in T, se il secondo e il terzo hanno dato risultato 1 il bit errato
sarà A.
Relazione a cura di
Massarelli
ArcangeloTommaso
Presentazione e layout di
Melle Davide Alverio
Giovedì 22 aprile 2004
Massarelli Tommaso
Melle Davide
3^b liceo scientifico tecnologico I.T.I.S. “Oreste
Del Prete” di Sava (TA)
Docenti di informatica e sistemi:
Prof. Francesco Picca e Prof. Fabio Mariggiò
Scarica

presentazione sui codici a correzione d`errore