Supertech ha detto:
No...
Era una discussione nella quale, se non erro, rispondevo a Khomeini...
Mi sa che mi tocca rifare lo spiegone...
Come ha anticipato Giovax esistono due tipi di codici:
1) I codici di scrambling permettono di distinguere i segnali provenienti da NodeB diversi
2) I codici di spreading permettono di separare gli utenti della stessa cella
E questo risponde in effetti alla domanda di Kuka.
------------------
Per chi vuole farsi del male....
Questi due tipi di codici hanno proprieta’ diverse anche se il fine ultimo e’ il medesimo, ovvero rendere separabili i segnali dei singoli utenti che condividono la stessa banda garantendo a ciascuno un opportuno rapporto segnale/rumore. I codici di scrampling sono sequenze pseudo-casuali quasi-ortogonali, mentre i codici di spreading sono codici “ortogonali”. Detto cosi’ non si capisce una mina per cui occorre fare un esempio molto semplice.
Immaginate di avere 2 utenti che vogliono trasmettere dei dati, ovvero una sequenza di zeri ed uni (stiamo ovviamento perlando di trasmissioni digitali) alla velocita’ di 3 bit al secondo.
Il primo utente vuole trasmettere la sequenza 0 1 1
Il secondo utente vuole trasmettere la sequenza 1 0 0
Chiaramente, siccome la velocita’ di trasmissione e’ di 3 bit al secondo, questo vuol dire che il tempo occupato da ciascuno dei 3 bit e’ di 1/3 di secondo. La banda occupata sara’ di circa 3 Hz.
Gli utenti utilizzano la stessa banda di frequenza per cui se non ci fosse un opportuno meccanismo che rende i due flussi “distinguibili” il node-B non capirebbe una fava in quanto riceverebbe una sorta di segnale “somma” del quale non riuscirebbe a ricostruire gli addendi, ovvero i segnali di partenza dei due utenti
A questo punto entrano in gioco i codici di spreading. Si tratta di pre-moltiplicare ciascuno di questi bit per un particolare “codice” che altro non e’ che una sequenza di zeri ed uni dotati di certe proprieta’.
Al primo utente e’ assegnato il codice 1 0 1 0, mentre al secondo utente il codice 1 1 1 1.
Si tratta di codici “ortogonali” nel senso che se moltiplicate bit a bit i due codici (interpretando come -1 il valore 0) ,sommate i 4 valori e dividete per 4, il risultato sara’ 0.
La moltiplicazione obbedisce alla seguente regola
0*0 = 1
1*0 = 0 (-1)
0*1 = 0 (-1)
1*1= 1
Ovvero se i due bit sono uguali il risultato e’ 1 altrimenti e’ 0 (-1).
Verifichiamo:
1 0 1 0*
1 1 1 1=
1 -1 1 -1 =0 (sommando i 4 termini e dividendo per 4)
Utilizziamo i due codici per “trattare” il segnale dei due utenti.
Le sequenza del primo utente 0 1 1 moltiplicando ciascuno dei suoi 3 bit per il codice 1010 si trasforma in
0101-1010-1010
Mentre la sequenza 1 0 0 (del secondo utente) moltiplicando ciascuno dei suoi 3 bit per il codice 1 1 1 1 diventa
1111-0000-0000
Chiaramente, siccome il tempo di trasmissione rimane 1 secondo, questo vuol dire che devono essere trasmessi 12 bit al secondo (che indicheremo per evitare confusione con il termine chip) per cui questa moltiplicazione porta con se un’espansione di banda. La banda richiesta e’ di 12 Hz. Il rapporto 12/3 = 4 e’ il cosiddetto spreading factor e indica pertanto di quanto volte e’ necessario “espandere” la banda.
Al ricevitore arrivano i due segnali (le due sequenze) che si sommano “chip” a “chip” con la seguente regola
1+0=1
1+1=1
0+1=1
0+0=0
Ne risulta la seguente seguenza somma 1111 1010 1010
di cui il ricevitore deve poter “separare” i singoli” addendi per poter distinguere le sequenze dei due utenti
A questo punto entra in gioco un procedimento di “correlazione”, che consiste in una successione di moltiplicazioni e somme “chip” a “chip” della sequenza arrivata per il codice dei due utenti (stesso procedimento visto per verificare che i codici erano ortogonali), dividendo per 4 il risultato
Moltiplichiamo la sequenza arrivata 1111 - 1010 - 1010 per il codice per primo utente 1010
La sequenza e’ fatta di 12 “chip” per cui li dividiamo in 3 blocchi da 4 chip
1010*1111= (+1 -1 +1 -1 )/4 = 0
1010*1010 =(1+1+1+1)/4 =1
1010*1010 =(1+1+1+1)/4 =1
E come vedete si riottiene la sequenza del primo utente
Per il secondo utente
1111 *1111 = (1+1+1+1)/4 = 1
1111* 1010 = (1 -1 +1-1)/4 = 0
1111* 1010 = (1 -1 +1-1)/4 = 0
Ed ecco la sequenza del secondo utente
Quanto si capisce? Poco suppongo…