DECODOR TURBO PENTRU LTE. IMPLEMENTARE PE FPGA [603923]
1 din 49
Universitatea “Politehnica” din București
Facultatea de Electronică, Telecomunicații și Tehnologia Informației
DECODOR TURBO PENTRU LTE. IMPLEMENTARE PE FPGA
Lucrare de disertație
prezentată ca cerință parțială pentru obținerea titlului de
Master în domeniul Telecomunicații
programul de studii de masterat CSIC
Conducător științific Absolvent: [anonimizat].dr.ing. Cristian ANGHEL Albert – Mihail PLOȘNIȚĂ
2017
2 din 49
Universitatea “Politehnica” din București
Facultatea de Electronică, Telecomunicații și Tehnologia Informației
Departamentul Telecomunicații
Aprobat Coordonator program master:
Prof.univ.dr.ing. Teodor PETRESCU
TEMA LUCRĂRII DE DIZERTAȚIE
a masterand: [anonimizat] 421CSIC
1. Titlul temei : Decodor turbo pentru LTE.Implementare pe FPGA
2. Contribuția practică, originală a student: [anonimizat]:
Implementarea unui codor si a unui decodor turbo în Matlab.Se vor verifica
performantele decodorului prin aplicarea codă rii si decodării asupra unui fișier î n Matlab.
Decodorul turbo va fi implementat ș i in VHDL si testat cu ajutorul programului ModelSim ,
urmâ nd apoi programarea unui FPGA.
3. Realizarea practică/ proiectul rămân în proprietatea: UPB
4. Proprietatea intelectuală asupra proiectului aparține: UPB
5. Locul de desfășurare a activității: UPB
6. Data eliberării temei: 1.10.2013
CONDUCĂTOR LUCRARE: STUDENT: [anonimizat]. Cristian Anghel Albert -Mihail PLOȘNIȚĂ
3 din 49
Copyright © 2017, Ploșniță / UPB
Toate drepturile rezervate
Autorul acord ă UPB dreptul de a reproduce și de a distribui public copii pe hîrtie sau
electronice ale acestei lucr ări, în form ă integral ă sau par țială.
4 din 49
Declara ție de onestitate academic ă
Prin prezenta declar c ă lucrarea cu titlul “ Decodor turbo pentru LTE.
Implemmentare pe FPGA ”, prezentată în cadrul Facult ății de Electronic ă, Telecomunica ții și
Tehnologia Informa ției a Universit ății “Politehnica” din Bucure ști ca cerin ță parțială pentru
obținerea titlului de Inginer/ Master în domeniul domeniul** , programul de studii
program*** este scris ă de mine și nu a mai fost prezentat ă niciodat ă la o facultate sau
instituție de înv ățămînt superior din țară sau str ăinătate.
Declar c ă toate sursele utilizate, inclusiv cele de pe Internet, sunt indicate în
lucrare, ca referin țe bibliografice. Fragmentele de text din alte surse, reproduse exact,
chiar și în traducere proprie din alt ă limbă, sunt scrise între ghilimele și fac referin ță la
sursă. Reformularea în cuvinte proprii a textelor scrise de c ătre al ți autori face referin ță la
sursă. Înțeleg c ă plagiatul constituie infrac țiune și se sanc ționeaz ă
conform legilor în vigoare.
Declar c ă toate rezultatele simul ărilor, experimentelor și măsurătorilor pe care
le prezint ca fiind f ăcute de mine, precum și metodele prin care au fost ob ținute, sunt reale
și provin din respectivele simul ări, experimente și măsurători. În țeleg că
falsificarea datelor și rezultatelor constituie fraud ă și se sanc ționeaz ă conform
regulamentelor în vigoare.
Bucure ști, 2017
Absolvent: [anonimizat] – Mihail Ploșniță
5 din 49
Contents
Cap. 1 Introducere ………………………….. ………………………….. ………………………….. ………………………….. ………… 6
Cap. 2 Coduri convoluționare ………………………….. ………………………….. ………………………….. …………………… 7
2.1 Codorul convoluțional ………………………….. ………………………….. ………………………….. ………………………. 8
2.2 Moduri de reprezentarea a codurilor convoluționale ………………………….. ………………………….. ……….. 9
a. Reprezentare sub formă de arbore (tree code) ………………………….. ………………………….. …………… 9
b. Reprezentarea prin diagrama de tranziție a stărilor ………………………….. ………………………….. ….. 10
c. Reprezentarea cu ajutorul diagramei trellis ………………………….. ………………………….. ……………… 11
2.3 Parametrii și structura codorului convoluțio nal ………………………….. ………………………….. …………….. 12
2.4 Tipuri de coduri convoluționale ………………………….. ………………………….. ………………………….. ……….. 14
a. Coduri sistematice/nesistematice ………………………….. ………………………….. ………………………….. ….. 14
b. Coduri recursive/nerecursive ………………………….. ………………………….. ………………………….. …………. 14
2.5 Limitele capacității și potențialul câștig al codării ………………………….. ………………………….. ………….. 15
Cap. 3 Decodarea codurilor convoluționale ………………………….. ………………………….. ………………………….. 17
3.1 Algoritmul Viterbi ………………………….. ………………………….. ………………………….. …………………………. 17
3.1.1 Algoritmul Viterbi cu decizie hard ………………………….. ………………………….. ……………………….. 18
3.1.2 Algoritmul Viterbi cu decizie soft ………………………….. ………………………….. …………………………. 18
Cap. 4 Codorul turbo ………………………….. ………………………….. ………………………….. ………………………….. …. 20
4.1 Coduri turbo convoluționale ………………………….. ………………………….. ………………………….. ………….. 21
4.2 Dispozitivul de întrețesere ………………………….. ………………………….. ………………………….. ……………… 22
4.2.1 Interleaver aleator ………………………….. ………………………….. ………………………….. …………………… 24
4.2.2 Interleaver bloc ………………………….. ………………………….. ………………………….. ……………………….. 24
Cap. 5 Decodorul turbo ………………………….. ………………………….. ………………………….. ………………………….. 26
5.1 Algoritmul BCJR ………………………….. ………………………….. ………………………….. ………………………….. 26
5.2.1 Calculul probabilităților
și
………………………….. ………………………….. ………………………….. 29
5.2 Algoritmul max -log-MAP și log MAP ………………………….. ………………………….. …………………………. 32
Cap. 6 Long Term Evolution (LTE) – codarea de canal ………………………….. ………………………….. ……….. 34
6.1 Codorul turbo LTE ………………………….. ………………………….. ………………………….. ……………………….. 34
6.2 Decodorul turbo LTE ………………………….. ………………………….. ………………………….. ……………………. 35
Cap. 7 Implementarea algoritmului de decodare Max Log MAP ………………………….. ………………………. 41
7.1 Parametrii de intrare ………………………….. ………………………….. ………………………….. …………………….. 41
7.2 Concluzii și direcții de urmat ………………………….. ………………………….. ………………………….. …………. 42
Bibliografie: ………………………….. ………………………….. ………………………….. ………………………….. ………………. 43
ANEXA 1 : Codor convolutional ………………………….. ………………………….. ………………………….. ……………… 44
ANEXA 2: Codorul turbo ………………………….. ………………………….. ………………………….. ………………………. 45
ANEXA 3: Blocul decodor ………………………….. ………………………….. ………………………….. ………………………. 46
6 din 49
ANEXA 4: Decodorul turbo ………………………….. ………………………….. ………………………….. ……………………. 49
Cap. 1 Introducere
Teoria informației se bazează pe ideea ca toate tipurile de comunicații sunt pur digitale,
adică sunt echivalate cu generarea, transmiterea și recepționarea aleatoare digiților binari, sau biți.
Atunci când acești biți sunt transmiși printr -un canal de com unicații, sau stocați într -o memorie,
există o probabilitatea ca aceștia să fie afectați de zgomot. În 1948 [1] Claude E. Shannon, în
lucrarea ”A Mathematical Theory of Communication” propunea ca digiții binari să fie utilizați
pentru măsurarea informației generată, transmisă și recepționată. Mai mult el a demonstrat că
problema informației comunicate de către sursă printr -un canal către destinației poate fi divizată în
două subprobleme: codarea de sursă – o secvență de biți reprezentând eficient ieșirea su rsei, și
codarea de canal – transmiterea biților aleatoriu cu ajutorul canalului. Partea de codare de canal
poate fi implementată independent de partea de codare de sursă, fapt ce simplifică folosirea
canalului de comunicație de diferite surse de informați e.
Fig. 1. 1 Sistem de comunicație digital
Conform teoriei lui Shannon fiecare canal de comunicație este caracterizat parametrul
”capacitatea canalului – Ct ”. Astfel un număr aleatoriu de R t biți per secundă pot fi transmiși
arbitrat prin canalul de co municație doar dacă R t ≤ C t . Definim R t ca fiind rata de transmisie a
datelor, iar R t cât și C t sunt exprimate în biți pe secundă. Shannon a demonstrat că o valoare
specifică a ratei semnal pe zgomot nu este semnificativă atât timp cât este destul de mare, astfel
încât R t ≤ C t ; ceea ce contează este modul de codare a biților de informație. Informa ția nu ar trebui
transmisă bit cu bit, dimpotrivă lungi secvențe de informație ar trebui codate astfel încât un bit de
informație să influențeze mai mulți biți transmiși pe canalul de comunicație.
Controlul erorilor de codare trebuie să protejeze biții de date, de erorile care pot apărea în
timpul transmisiei printr -un canal de comunicație cu zgomot, sau pe perioada stocării într -o
memorie.
Pentru o eficiență cât mai bună din punct de vedere al BER -ului cât și al complexității de
implementare s -au folosit diverse asocieri de coduri elementare. Astfel de asocieri au constat în
concatenarea a două coduri elementare sau concatenarea unui cod convoluțional cu un cod bloc.
Concatenarea a două coduri convoluționale implică ca decodorul să poată furniza decizii p onderate.
Pentru decodarea codurilor convoluționale este utilizat în general algoritmul Viterbi, care
furnizează decizii hard. Au fost propuse mai multe versiuni ale algoritmului Viterbi, ex. Berrou, dar
performanțele acestor soluții sunt departe de limit a teoretică. Astfel s -a pus problema decodării
codurilor convoluționare utilizănd decizii soft la ieșire. Una din cele mai cunoscute propuneri de
decodare soft aparține lui Bahl (BCJR). Acesta a propus decodarea determinând simbolul cel mai
plauzibil. Denu mirea algoritmului este Maximum A -Posteriori (MAP).
7 din 49
Codarea turbo a fost introdusă de Berrou, Glavieux și Thitimajashima, aceștia raportând
rezultate apropiate de limita teoretică. Informația este codată de două ori, între cele două codoare
existând un el ement de întrețesere, astfel cele două secvențe sunt aproape independente din punct
de vedere statistic.
Capitolele 2 și 3 prezintă codurile convoluționale atât din perspectiva codării cât și cea a
decodării. Astfel sunt prezentați parametrii principali a i codurilor convoluționale, modul de
constituire cât și performanțele acestora. Capitolul 3 prezintă moduri de decodare a codurilor
convoluționale, treceând în revistă cei mai importanți algoritmi și modul în care aceștia au evoluat.
Capitolul 4 face o in troducere în teoria codurilor turbo. Sunt prezentați parametrii acestora,
modul de constituire și diferite metode de întrețesere folosite pentru codare.
Capitolul 5 prezintă algoritmul optim de decodare turbo, BCJR, și modul de calcul al
parametrilor aces tuia. Sunt detaliate metodele de calcul atât ale algoritmului BCJR, cât și ale altor
doi algoritmi derivați din acesta : Max -log-MAP și log -MAP.
Capitolul 6 descrie sumar modul de codare prezent în cadrul standardului LTE, urmând a
prezenta detalii privind și algoritmul de decodare, urmând ca în capitolul 7 să fie prezentate
performanțele rezultate în urma implementării și simulării a algoritmului Max -log-MAP.
Cap. 2 Coduri convoluționare
Codurile convoluționare au fost introduse pri ma dată de Elias în 1 955. Prima metodă de
decodare pentru acest tip de codoare a fost decodarea secvențială, propusă în 1957 de către
Wozencraft. Această metodă a fost apoi dezvoltată de Fano care în 1963 propu ne un algoritm de
decodare . În 1967 Viterbi publică algoritmul cu a celași nume, ca o metodă demonstrată și îl
prezintă ca pe un nou algoritm probabilistic nesecvențial. Forney a trasat pentru prima dată o
diagramă trellis , care a dus la o înțelegere mai ușoară a algoritmului Viterbi cât și a naturii sale
probabilistice. T ot Forney a descoperit că algoritmul Viterbi era un algoritm optim, dar Heller a
realizat că este un algoritm practic. Mai târziu Omura a observat că algoritmul Viterbi poate fi
folosit pentru decodarea codurilor convoluț ional e.
Codurile LDPC de tip block au fost descoperite la începutul anilor 1960, de către Gallager,
iar în anii 1980 Tanner a oferit o interpretare dintr -un punct de vedere teoretic al grafurilor. Tot în
acea perioadă Margulis a explicat construcția codurilor prin grafuri. La începutul ani lor 1990
Berrou, Glavieux și Thitimajshima au introdus codurile turbo , deschizând calea către investigarea
codurilor prin grafuri și decodarea iterativă. S -a demonstrat că codurile LDPC bazate pe decodarea
iterativă se pot apropia de limita Shannon. Aceast ă descoperire au făcut din codurile LDPC un
puternic competitor al celorlalte coduri, pentru controlul erorilor în multe sisteme digitale și de
comunicații, atunci când o mare fiabilitate este necesară.
Codurile convoluționale sunt coduri în care codorul codează continuu fluxuri de date
utilizând filtre liniare. Numele de cod/codor convoluțional se datorează faptului că operația de
filtrare poate fi exprimată ca un proces de convoluție.
În funcție de natura filtrului, putem distinge diferite tipuri de codoare convoluționale. Cel
mai comun tip de codor este cel în care operațiile sunt efectuate peste F 2, numinduse codor
convoluțional binar. Filtrele linire pot fi doar pe sensul înainte, codoarele care îl folosesc fiind
codoare convoluționale non -recursiv e, sau pot fi filtre recursive și atunci vorbim de codoare
8 din 49
convoluționale recursive. Filtrele liniare pot avea una sau mai multe intrări de fluxuri de date. La
ieșire, dacă fluxul de date de intrare apare nealterat alături de fluxul de ieșire, codorul conv oluțional
este sistematic.
Cel mai important codor convoluțional în contextul decodării iterative este codorul
convoluțional recursiv sistematic binar, deoarece acesta definește componentele pentru codorul
turbo standard.
Un codor convoluțional recursiv sistematic binar având memoria m și rata 1/2 este definit în
termeni de o funcție rațională binară, G(D) = p(D)/q(D), a memorie m, m = max{deg(p),deg(q)}.
Deși setarea normală ar fi să considerăm coduri care transformă fluxuri de date semi -infinite
în fluxuri semi -infinite codate, pentru aplicații este mult mai convenabil să considerăm fluxuri
finite care au o lungime fixă. Pentru o funcție rațională G și o lungime dată n, n € N, definim un cod
C(G,n) după cum urmează: xs – fluxul de intrare de forma:
xs = (xs1 , …, xsn ,0,…,0),
unde primele n componente sunt elemente arbitrare din F 2 și ultimele m componente sunt 0. Asociat
cu fiecare bit de intrare xs este un bit de ieșire xp, xp = ( xp1 , …, xpn+m) – biți de paritate. Aceștia
sunt rezultatul trecerii fluxului de intrare xs prin filtrul liniar. Pentru primii n pași, filtru este
caracterizat de G(D), iar pentru ultimii m pași de G’(D) = p(D). Aceasta nu este cea mai bună
schemă de terminare a filtrului dar este universal valabilă, desigur fiind multe alte scheme de
terminație dezvoltate în literatură.
2.1 Codorul convoluțional
Codurile convoluț ional e sunt de obicei coduri liniare definite pe câmpuri finite, dar pot fi
tratate și ca coduri de tip block pe câmpuri infinite . În figura următoare este prezentată structura
generală a unui codor convoluțional [2]:
Fig.2.1 Structura generală a unui codor convoluțional
9 din 49
2.2 Moduri de reprezentarea a codurilor convoluționale
Modul de reprezentare a codurilor convoluționale poate fi simplificat prin reprezentări
grafice ale acestora. Una dintre cele mai folosite metode de reprezentare este reprezentarea grafică
sub forma unui trellis sau sub forma unei diagrame de stări.
a. Repre zentare sub formă de arbore (tree code)
O reprezentare convenabilă a cuvintelor de cod ale unui cod convoluțional este cea
sub formă arboresau ramificată (tree code). Diagramele de tip arbore descriu evoluția codorului în
spațiul stărilor cât și în timp. Considerându -se starea inițială a codorului [00], trecerile în
următoarea stare sunt determinate de biții de intrare ‘0’ sau ‘1’. Reprezentarea sub formă de
ramificații a schemei codorului din figura 1 este reprezentată in figura de mai jos. Nodul cel mai
din stânga este numit nod ră dăcină.
Fig.2.2 Codor convoluțional – diagrama arbore [2]
Deoarece codorul doar intrări binare, pornind de la nodul rădăcină se pot trasa două
ramificații pentru fiecare nod. Ramificația superioară a fiecărui nod corespunde bitului de intrare 0,
10 din 49
iar ramificația inferioară corespunde bitului de intrare 1. Deci pentru fiecare ramificație avem doi
biți codați.
Starea unui sistem este o descriere a istoricului acestuia, iar împreună cu specificația din
prezent și intr ările viitoare putem determina prezentele și viitoarele ieșiri.
Dacă secvența informațională are o lungime de
L biți, atunci diagrama va avea
2L ramuri,
ceea ce reprezintă un dezavantaj, preferându -se utilizarea diagramei trellis.
b. Reprezentarea prin diagrama de tranziție a stărilor
În cazul codurilor convoluționare este utilă trasarea diagramei de tranziție a stărilor. În
această reprezentare nu sunt reținute decât diferitele stări ale codorului și m odul de interacționare
dintre acestea, această reprezentare fiind determinată din diagrama trellis.
Codoarele sunt descrise sub formă de diagrame de tranziție astfel:
a. Stările – sunt determinate de conținutul celulelor registrului de deplasare;
b. Ramurile – sunt definite de tranzițiile dintre stări (se reprezintă cu linie punctată intrările
egale cu 0 și cu linie continuă cele egale cu 1). Pe fiecare ramură se găsește specificat
secvența de ieșire corespunzătoare.
În figura următoare este prezentat un exemplu de diagram ă a stărilor de tranziție pentru
codorul convoluțional. Codorul prezentat are patru stări diferite, iar 2 biți de intrare consecutivi
sunt de ajuns pentru a parcurge toate stările codorului.
Fig.2.3 Cod or convoluțional – diagrama stărilor [2]
11 din 49
c. Reprezentarea cu ajutorul diagramei trellis
Diagrama trellis permite vi zualizarea stărilor codorului cât și a evoluției acestuia în timp. Se
reprezintă toate stările codorului la fiecare moment de timp pe vertic ală și utilizându -se aceeași
notație ca la diagrama stărilor putem vizualiza secvența de date codată, găsită deasupra liniilor
parcurse.
Cu cât avansăm în structura trellis, la fiecare pas putem păstra un singur nod, obținând astfel
o structură ca cea din figura următoare. Astfel se poate trasa o cale de la nodul original până la un
nod terminal, această cale reprezentând un cuvânt de cod.
Fig. 2.4 Codor convoluțional – diagrama trellis [2]
Acest tip de diagram este cel mai des utilizat datorită faptului că este o reprezentare mai
convenabilă, fiind foarte ușor de construit din diagrama de stări. Codul convoluțional este de obicei
numit cod trellis.
Avantajul structurii trellis este că poate fi foarte ușor folosită pentru decodarea prin
principiul probabilității maxime (maximum likelihood -ML). Astfel minimizează numărul de poziții
în care cuvântul de cod și secvența recepționată diferă. Pentru a găsi cuvântul de cod cel mai
apropiat de secven ța recepționată trebuie să parcurgem diagrama trellis de la stânga la dreapta,
eliminând toate căile care nu se apropie de cuvântul de cod .
12 din 49
2.3 Parametrii și structura codorului convoluțional
Codurile convoluționale sunt descrise de obicei de trei parametrii principali: n – numărul de
biți de la ieșire, k – numărul biților de intrare și m – numărul registrelor de memorie. Raportul
dintre numărul biților de intrare și numărul biților de ieșire, k/n, este numit rata codului, și
reprezintă o măsură a eficienței acestuia.
Principiul c odorului este prezentat în Fig.2 .5. Codorul este constituit din:
– m registre de întârziere, cu o capacitate de k biți;
– o mulțime de funcții liniare generatoare a blocurilor de n simboluri de la ieșire;
– un conver tor paralel – serie;
Fig. 2.5 Principiul de realizare a unui codor convoluțional [3]
Funcția care descrie codorul convoluțional este de forma următoare:
Prin transformarea C, fiecare matrice de forma:
2.4
i se atașează o matrice de forma:
13 din 49
2.5
Luând în considerare reprezentarea polinomială, matricile I și V se pot scrie sub forma:
2.6
Considerând matricea I sub forma
01 02 0 11… …k i i i i , aceasta fiind matricea biților de informație,
iar matricea V, secvența codată
01 02 0 11… …k a a a a . Dacă
,0js jsa i j , și
1:sk , codul este
sistematic.
Având în vedere notațiile de mai sus, relația de codare poate f i scrisă sub forma:
2.7
unde G(D) se numește matrice generatoare a codului și are următoarea formă:
2.8
14 din 49
2.4 Tipuri de coduri convoluționale
În funcție de criteriul adoptat și forma polinoamelor
()jsgD codurile convoluționale se
clasifică astfel:
a. Coduri sistematice/nesistematice
Simbolurile de informație de la intrarea codorului se regăsesc explicit la începutul sau la
sfârșitul cuvântului de cod. Astfel dacă primele k linii din matricea G(D) formează matri cea unitate
de ordinul k, Ik, atunci codurile sunt sistematice.
În cazul codurilor nesistematice toți biții matricii V sunt combinații liniare ale biților
matricii I.
b. Coduri recursive/nerecursive
În cazul în care polinoamele generatoare
()jsgD sunt finite, codul este nerecursiv;
Dacă forma polinoamelor generatoare
()jsgD este de forma:
()
()js
js
jsaDgbD
2.9
unde
jsa și
jsb sunt finite, și există un polinom
( ) 1jsbD , atunci codul este recursiv.
Un alt parametru care definește codurile convoluționale este lungimea de constrângere,
parametru definit de forma de mai jos:
1 max { ( ), ( )}js js K grad a D b D
2.10
Fig. 2.6 Codor convoluțional nerecursiv, nesistematic [3]
15 din 49
2.5 Limitele capacității și potențialul câștig al codării
Considerăm formula lui Shannon pentru capacitatea și limitarea benzii canalului
Gaussian [10]:
0log 1 /W
tSC W biti sNW
(2.11)
-unde W este banda canalului.
Presupunem că transmitem respectând rata Nyquist (rata de transmisie de
2W
eșantioane pe secundă) și ca folosim o rată de transfer
/ R K N . Dacă transmitem
K biți
de informație pe parcursul a
secunde, atunci avem
2NW eșantioane per cuvânt de
cod, iar rata de transmisie va fi :
/ 2 / 2tR K WK N WR
biți/s (2.12)
În acest fel obținem:
002bRE S
WN N
(2.13)
Pentru comunicație sigură trebuie ca
W
ttRC , astfel:
022 log 1b
tRER WR WNW
(2.14)
-sau echivalent:
2
021
2R
bE
NR
(2.15)
Observăm că partea dreaptă e inegalității crește odată cu
R , ceea ce înseamnă că
pentru a atinge limita Shannon,
1,6dB , trebuie ca atât rata informației,
tR cât și rat codului
R
apropiate de zero. Mai mult, dacă folosim un code cu rata
1/ 2R , atunci conform
formulei 8 raportul semnal/zgomot este:
0/ 1 0bE N dB
În graficul din figura 6 sunt prezentate limitele codării conform formulei 2.15 și
regiunile potențiale ale câștigului codării pentru diferite rate de cod
R .
Atunci când determinăm limitele codării prin formula ( 2.16) presupunem că
probabilitatea erorilor arbitrare
bP este apropiată de zero. Dacă tolerăm o anumită
probabilitate a erorii
bP , atunci putem obține un câștig mai mare al codării. Conform teoriei
distorsiunilor datorit[ ratei a lui Shannon, dacă transmitem ieșirea unei surse binare
simetrice și tolerăm o distorsiune medie
bKP pentru
K simboluri de informație, atunci
putem reprezenta
tR biți de informație pe secundă cu doar
1tbR h P biți pe secundă,
unde
h• este funcția de entropie.
Acești
1tbR h P biți/secundă vor fi transmiși pe canal cu o probabilitate de
eroare apropiată de zero. Astfel formula (7) devine:
16 din 49
021 2 1 log 1b
t b bRER h P WR h P WN
(2.16)
sau echivalent :
21
021
2b R h P
bE
NR
(2.17)
Fig.6 Limitele codării și potențialele câștiguri de codare pentru diferite rate de
codare
R [10]
În fig . 6 sunt prezentate limitele de codare conform formulei (10) și regiunile cu
potențial de câștig pentru diferite rate de codare
R atunci când putem tolera o probabilitate
de eroare
bP .
17 din 49
Cap. 3 Decodarea codurilor convoluționale
Decodarea informației la recepție [2] se realizează prin estimarea secvenței de informație de
la intrarea codorului, adică estimarea traiectoriei codorului prin diagrama trellis. Secvenței de date
codată îi corespunde o cale unică prin diagrama trellis, existând o relație biunivocă între secvența
de la intrarea codorului și cea codată. Având secvența de date recepționată decodarea se realizează
cunoscând structura codului cât și probabilitățile de tranziție asociate cana lului.
Presupunând că sursa de informație este ideală, simbolurile sunt egal probabile și
independente, ieșirea codorului va fi:
,0 ,1 ,2 ,[ … …]m m m m m jx x x x x
3.1
Considerăm secvența de la recepție de forma:
0 1 2[ … …]mjy y y y y
3.2
Probabilitatea de a recepționa
my , în contextul transmisiterii pe canalul de comunicație a
secvenței
mx este:
,
0( | ) ( | )m j m j
jp y x p y x
3.3
Formula 3.3 se mai poate scrie și sub formă logaritmică, această reprezentare fiind utilă
datorită unei implementări hardware și software mai simplificate.
,
0ln[ ( | )] ln[ ( | )m k m k
kp y x p y x
3.4
Decizia se ia cu maximum de probabilitate aposteriori, astfel:
( | ) ( )( | ) max ( | ) max()ii
m m iiiP x y P xx x P y x P y xPy
3.5
Dacă probabilitățile datelor
ix sunt aceleași pentru toate valorile posibile, atunci obținem
legea de decizie cu maxim de plauzibilitate:
( | ) ( )( | ) max ( | ) max max ( | )()ii
m m i ii i iP x y P xx x P y x P y x P x yPy
3.6
Cele două detectoare determină metrica tuturor căilor din di agrama trellis, maximizând
metrica de decizie.
3.1 Algoritmul Viterbi
Algoritmul a fost dezvoltat de Andrew Viterbi in anul 1966, și este folosit în sistemele de
comunicații wireless sau prin satelit, cât și în recunoașterea vocală. Acesta se bazează pe calculul
18 din 49
distanței Hamming dintre secvența recepționată și secvența căutată pe trellis. Secvența de pe trellis
cu distanța cea mai mică este secvența cea mai probabilă.
Algoritmul Viterbi poate fi implementat atât cu decizie hard cât și soft. O variantă a
algoritmului Viterbi este SOVA (Soft Output Viterbi Algoritm). În decodarea codurilor turbo se
mai folosesc algoritmii : MAP, log -MAP, Max -log-MAP, prezentați în cap.5 pentru decodarea
codurilor turbo.
3.1.1 Algoritmul Viterbi cu dec izie hard
Dacă considerăm un canal binar simetric, pe diagrama trellis în fiecare moment există două
căi diferite care converg spre fiecare nod al trelli -ului. Calea cu distanța Hamming cea mai mică
față de secvența recepționată este cea mai probabilă, numită cale s upraviețuitoare [3]. De obicei
decodoarele Viterbi folosesc o fereastră de decodare, W, [3] ce păstrează o porțiune finită a trellis –
ului. Astfel se elimină întâzierile datorate așteptării recepției. Durata intervalului de timp este dată
de relația :
(4 5) WK
3.7
Erorile produse de alegerea memorie după formula 3.7 sunt neglijabile comparativ cu
utilizarea unei memorii infinite [3].
3.1.2 Algoritmul Viterbi cu decizie soft
Utilizarea algoritmului Viterbi cu decizie ponderată aduce un plus în decodarea codurilor
convoluționale. Utilizarea deciziilor ponderate înlocuiește distanțele Hamming cu distanțele
euclidiene. Dacă considerăm ieșirile codorului
1a și
2a , respectiv intrările decodorului
1w și
2w,
atunci metrica ramurii va fi de forma [3]:
22
1kk
kbm w a
3.8
19 din 49
Fig. 3.1 Tranziția pe diagrama trellis pentru un decodor Viterbi cu
1/ 2R [3]
Metrica pentru nodul b din figura 3.1 este [3]:
22
2 1 2 1 2 [ 1][ ] [ ][ ]jj pm j b pm j x w a w a
3.9
De asemenea se calculează și informația de înlănțuire înapoi, care indică starea anterioară, și
avem :
[ 1][ ]
[ 1][ ]cb j b x
cb j c x
3.10
Algoritmul Viterbi cu ieșire soft prezentat se numește SOVA. Ieșirile soft ale decodoarelor
sunt de obicei date de rapoartele de plauzibilitate logaritmice (LLR), și sunt de forma [3]:
( 1)( ) ln( 1)k
k
kPuLuPu
3.11
unde
( 1)kPu este probabilitatea ca bitul
ku recep ționat să fie
1 , iar
( 1)kPu este probabilitatea
ca bitul
ku să fie
1 .
Algoritmul cel mai cunoscut care folosește rapoartele de plauzibilitate pentru a decoda codurile
convoluționale este algoritmul BCJR, sau Maximum A Posteori, prezentat în cadrul capitolului 5.
20 din 49
Cap. 4 Codorul turbo
Codurile turbo sunt o metodă de corecție a erorilor care se apropie cel mai mult de limita
Shannon [3], limita teoretică a ratei maxime de transfer a informației printr -un canal zgomotos.
Datorită performanțelor foarte bune codurile turbo sunt folosite în multe tipuri de sisteme de
comunicații.
Codorul turbo e ste de cele mai multe ori reprezentat prin concatenarea în paralel (PCCC –
Parallel Concatenated Convolutional Code) a două sau mai multe coduri convoluționale recursive
sistematice (RSC – Recursive Sistematic Codes). Această structură folosește un întrețe sător propriu
pentru fiecare codor în parte, astfel încât codoarele componente vor genera biți de paritate diferiți,
chiar dacă prelucrază aceeași informație.
Fig. 4.1 Codor turbo convoluțional concaten at în paralel cu rata de
1/ ( 1)n [3]
Lungimea de constrângere a codurilor convoluționale folosite de codurile turbo este de
obicei mică, aproximativ 3,5 [3]. Lungimea mare de constrângere duce la creșterea complexității
calculelor și întârzierea decodării în cazul codurilor turbo.
Codorul turbo poate fi realizat și prin concatenarea în serie a două sau mai multe codoare
convoluționale (SCCC – Serial Concatenated Convolutional Code). În cazul codurilor SCC nu este
necesar ca toate codurile componente să fie de tipul RSC, doar codul d e la intrare. Performanțele
codurilor SCC sunt bune atunci când raportul semnal pe zgomot este mare.
Fig. 4.2 Codor turbo realizat prin concatenare serie [2]
Pe lângă aceste două modele de coduri turbo mai sunt modele hibride și un tip de codor
turbo nu mit codor turbo produs (TPC – Turbo Product Code) care are o structură foarte diferită de
21 din 49
modelel prezentate în figurile 4.1 și 4.2 .Codul TP folosește coduri bloc în loc de coduri
convoluționale.
Fig. 4.3 Codor turbo hibrid [2]
Utilizarea codurilor de tip RSC cât și prezența interleaver -ului în componența codurilor
turbo conduce la îmbunătățiri consoderabile a performanțelor acestora în contextul unui raport
semnal/zgomot (SNR) mic. În literatura de specialitate se explică dependența performanțelor
codu rilor turbo de prezența interleaver -ului, ajungându -se la concluzia că, codurile turbo pot avea
un câștig al performanței proporțional cu lungimea interleaver -ului utilizat. Un dezavantaj al
folosirii interleaver -elor de lungimi mari se observă în cazul ap licațiilor de transmisie vocală,
datorită întârzierilor rezultate.
4.1 Coduri turbo convoluționale
La baza formării codorului turbo convoluțional stau două codoare convoluționale
sistematice recursive, care sunt conectate în paralel, și un dispozitiv de întrețesere.
Fig. 4.4 Codorul turbo [2]
22 din 49
Matricea generatoare pentru codorul din fig. 4.4 se poate scrie sub forma:
unde g 0(D), g 1(D) sunt polinoame corespunzătoare reacției negative și pozitive a celor două coduri
componente.
Folosirea codurilor de tipul RSC trellisul nu poate fi adus în starea ‘0’ prin introducerea a k
biți de ‘0’, ci prin introducearea a k biți de final care depind de starea în care a rămas codorul după
introducerea biților de informație. De obicei primul codor este forțat să ajungă în starea ‘0’.
Terminarea codorului al doilea în ‘0’ nu influențează performanțele codului turbo în ansamblu,
astfel surplusul de biți nu este justificabil. Un exemplu de forțare în starea ‘0’ a unui codor
convoluțional este reprezentat în figura 4.5 .
Fig. 4.5 Terminația trellis [2]
Comutatorul în poziția ‘1’ permite codarea celor N biți de date, iar după ter minarea acestora
trece în poziția ‘2’ timp de k intervale de tact, când se introduc biții corespunzători stării sale finale,
până când codorul ajunge în starea ‘0’.
Dezavantajul principal al codării turbo este rata codului, aceasta fiind de 1/3, față de c ea a
codorului convoluțional, care este ½. Un artificiu care se face este operația de puncturare [2] a
biților de paritate de la ieșirea codorului turbo. În acest fel rata codorului devine ½. Prin operația de
puncturare nu este afectată decodarea în cazul în care aven un canal de transmisie ideal,
nezgomotos. Probabilitatea de eroare crește dacă canalul de comunicației introduce la rândul său
erori, iar raportul semnal pe zgomot este foarte redus.
4.2 Dispozitivul de întrețesere
Prin dispozitive de întrețesere se schimbă ordinea biților secvenței informaționale de la
intrarea codorului. Această tehnică crește capacitatea de corecție a erorii de codare, fiind des
23 din 49
folosită împreună cu codarea controlată a erorilor pentru canalele cu erori în rafală [3] (canal cu
fading multicale).
În cadrul codării turbo, dispozitivele de întrețesere(interleaver) se folosesc la cel de -al
doilea codor convoluțional. Lungimea dispozitivelor de întrețesere este mai mare decât memoria
codului, rolul ac estuia fiind de a construi un cod bloc lung pentru coduri convoluționale cu
memorie mică.
Interleaver -ul amestecă biții de informație de la intrarea celui de -al doilea codor
convoluțional și decorelează intrările decodoarelor de la recepție. Pe baza schim bului de informație
de la recepție dintre cele două decodoare se pot folosi algoritmi de decodare sub -optimali iterativi.
Astfel erorile necorectate de primul decodor pot fi împrăștiate de interleaver și apoi corectate de cel
de-al doilea decodor, eliminân d astfel prezența erorilor în rafală. Dacă vom crește numărul de astfel
de iterații probabilitatea erorii de bit se apropie de capacitatea canalului.
Interleaver -ul realizarează o permutare a unei secvențe de numere de forma:
,cu unde
, 4.1
unde N este lungimea secvenței ce trebuie amestecată. Refacerea ordinii secvenței inițiale se
realizează cu ajutorul unui dispozitiv pereche, care implementează funcția inversă:
,cu . 4.2
Performanța interleaver -ului este descrisă de doi parametr i: distanța minimă de întrețesere și
gradul de împrăștiere. Considerând funcția interleaver -ului dată de formula de mai sus, atunci
distața de întrețesere dintre pozițiile i și j este dată de relația:
4.3
iar distața minimă va fi :
4.4
În funcție de parametrii canalului, raportul semnal zgomot și cerințele de întârziere impuse
de aplicațiile folosite de utilizator, au fost dezvoltate mai multe tehnici de întrețesere. Sunt două
categorii genelale de interleavere: dispozitive de întrețeser e cu structură regulată și dispozitive de
întrețesere de tip aleatoriu . Interleaver -ele de tip regulat asigură o distață minimă de valoare foarte
mare, în timp ce interleaver -ele de tip aleatoriu asigură o împrăștiere bună.
24 din 49
4.2.1 Interleaver aleator
Interleaver -ul aleatoriu [3] este simplu de realizat și oferă o bună împrăștiere a secvenței
inițiale, dar are valoare mică a distanței minime, de obicei dmin = 2. Interleaver -ul aleatoriu se
bazează pe împrăștierea secvenței de intrare în mod aleatoriu , fără a putea fi reprodusă. Pentru că
funcția de aleatorizare nu poate fi reprodusă aceasta trebuie memorată.
Fig. 4.6 Interleaver aleatoriu [3]
4.2.2 Interleaver bloc
Interleaver -ul de tip rectangular, sau bloc, este o structură foarte simplă, a cărui lungime
este dată de relația:
, 4.5
unde X și Y sunt numere naturale apropiate ca valoare. Funcția interlever -ului bloc este dată de
relația:
4.6
, 4.7
Oricare doi biți, situați inițial la o distanță mai mică decât dmin=min(I,J), vor fi situați după
amestecare la o distanță superioară lui dmin..
25 din 49
Fig. 4.7 Performanțele interleaver -elor tip aleatoriu și bloc [2]
26 din 49
Cap. 5 Decodorul turbo
5.1 Algoritmul BCJR
Algoritmul BCJR, mai este cunoscut sub denumirea de maximum a -poste riori (MAP), sau
algoritmul forward – backward , se bazează pe determinarea probabilităților a -poste riori ale stărilor
și tranzițiilor unei surse afectată de zgomot [3]. Cu alte cuvinte pentru fieca re simbol de informație
decodorul calculează probabilitatea acestuia condiționată de întreaga secvență recepționată. Dacă la
această schemă adăugăm o regulă de decizie în privința celui mai probabil simbol de informație,
vom avea la ieșire secvența cu cele mai probabile simboluri de informație. Algoritmul MAP
analizează toate căile posibile prin trellis -ul decodorului convoluțional ceea ce duce la o
complexitate crescută a acestuia.
Pentru fiecare bit
ku algoritmul generează probabilitatea să fie +1 sau -1, luând în
considerare secvența de simboluri y. Astfel putem defini raportul logaritmic de probabilitate (log –
likelihood ratio – LLR):
( 1)( ) ln( 1)k
k
kPuLuPu
5.1
Acest raport este egal cu zero atunci când biții de intrare au probabilități egale.
Dacă considerăm că o secvență codată
x este transmisă printr -un canal fără memorie și de
tipul AWGN (additive white gaussian noise), la recepție vom avea o secvență de tip ul
12…N y y y y
precum cea din fig. 5.1.
Fig. 5.1 Diagrama simplificată a unui sistem de comunicații [4]
Pe baza secvenței
y recepționată se estimează secvența de biți
ku originală, pentru care
algoritmul calculează rapoartele LLR, definite astfel:
( 1| )( | ) ln( 1| )k
k
kP u yL u yP u y
5.2
27 din 49
Semnul pozitiv sau negativ al lui
( | )kL u y , indică care bit,
1 sau
1 , a fost codat la momentul de
timp
k . Cu cât este mai mare sau mai mic față de zero acest raport cu atât mai mult crește
încrederea în decizia luată. Adică, dacă
( | ) 0kL u y , decodorul estimează că
1ku , este bitul
transmis, altfel va estima că
1ku , pentru
( | ) 0kL u y .
Considerăm un cod convoluțional cu rata
1/ 2, 2 n , cu patru stări,
4 M iar S este de
forma
{0,1, 2,3}S , si un trellis asociat ca cel din figura 5.2 . În figura 5.2 este reprezentată o
secvență de trellis, care reprezintă un exemplu evoluție dintr -o stare la momentul
1k , la
momentul
k . Fiecare ramură are asociat doi biți de cod
kx , iar linia punctată înseamnă că ramura a
fost generată de un bit
1 , și ramura cu linie continua a fost generată de un bit
1 ( pentru
simplificare biții
1 corespund biților
0 ).
Fig. 5.2 Exemplu de tranziție a stărilor prin diagrama trellis [4 ]
28 din 49
Considerăm starea actuală
kSs și starea anteriaoară
1'kSs , unde
k reprezintă
momentul de timp, iar simbolul recepționat este
ky . Dacă considerăm secvența
y de forma:
1 2 1 1… …
kkk k k N k k k
yyy y y y y y y y y y
5.3
cu notațiile aferente din relația 5.3, se poate scrie raportul a -poste riori LLR astfel:
11
001
1( ', , ) ( ') ( ', ) ( )
( | ) ln ln( ', , ) ( ') ( ', ) ( )k k k
RR
k
k k k
RRP s s y s s s s
L u yP s s y s s s s
5.4
unde
( ', , )P s s y reprezintă probabilitatea recepționării secvenței
y fiind în starea
's la momentul
1k
, și în starea
s la momentul
k . La numărător suma este realizeată pe domeniul
1R , adică
însumarea se realizează pe tr anzițile din starea
's în starea
s atunci când biții mesajului sunt
1ku
. De asemenea
0R reprezintă toate ramurile care sunt determinate de biții
1ku .
1( ')ks
este probabilitatea ca secvența recepționată la momentul
1k în starea
's , să fie
ky .
()ks
este probabilitat ea ca după starea
s din momentul
k , să fie recepționată secvența
ky .
( ', )kss
este probabilitatea ca din starea
's la momentul
1k , să treacă în starea
s la momentul
k
, tranziție determinată de recepționarea secvenței
ky .
5.2 Calculul probabilității individuale
( ', , )P s s y
Acestă probabilitate poate fi compusă din alte trei probabilități :
1 ( ', , ) ( ') ( ', ) ( )k k k P s s y s s s s
5.5
unde cele trei probabilități sunt definite astfel :
1( ') ( ', )kks P s y
5.6
( ', ) ( , | ')kks s P y s s
5.7
( ) ( | )kks P y s
5.8
Dacă luăm ca punct de referință momentul de timp
k , cele trei probabilități,
,
, și
,
reprezintă trecutul, prezentul și viitorul secvenței
y .
29 din 49
5.2.1 Calculul coeficienților
Probabilitatea
( ', ) ( , | ')kks s P y s s reprezintă probabilitatea condiționată de recepția
simbolului
ky , la momentul
k și starea
kSs , știind că starea anterioară a fost
1'kSs . Astfel
această probabilitate poate fi scrisă :
( ', ) ( | ) ( )k k k ks s P y x P u
5.9
Dacă luăm în calcul un canal de comunicație de tip AWGN, atunci expresia devine:
( )/2
1( ', ) exp2kkn
u L u c
k k kl kl
lLs s C e x y
5.10
unde
kC este un factor care nu ține cont de semnul bitului
ku , acesta fiind eliminat la compunerea
LLR -urilor.
cL reprezintă valoarea de încredere a canalului, fiind de forma:
0044cb
ccEEL a aRNN
5.11
0N
este densitatea spectrală de putere a zgomotului,
a este amplitudinea fadingului (pentru canale
fără fading
1a ),
cE și
bE sunt energia transmisă per bit codat și bit de mesaj, iar
cR este rata
codului.
5.2.2 Calculul probabilităților
și
Probabilitățile
și
sunt calculate recursiv astfel:
1
'( ) ( ') ( ', )k k k
ss s y s s
5.12
1( ') ( ) ( ', )k k k
ss s y s s
5.13
Condițiile inițiale pentru fiecare probabilitate în parte sunt:
010()00sss
5.14
10()00Nsss
5.15
Probabilitatea
()ks este calculată ca fiind suma de pe toate stările
1'kSs care converg la
starea
s , în timp ce
1( ')ks este însumată peste toate stările
kSs la care se ajunge din starea
's .
30 din 49
Probabilitatea
este calculată în timp ce secvența
y este recepționată, în timp ce probabilitatea
este calculată după recepționarea secvenței
y , mergând recursiv de la sfârșit către începutul
diagramei trellis. Valorile inițiale
0()s și
()Ns înseamnă că diagrama trellis este terminată,
adică începe și se termină în starea
0 .
Datorită calculului iterativ al algoritmului se poate ajunge la situații nedorite de depășire.
Pentru a preveni aceste depășiri trebuie să le contracarăm cu ajutorul măsurilor de normalizare. ]n
acest sens definim
și
sub forma :
1
'' ( ) ( ') ( ', )k k k
ss s y s s
5.16
1' ( ') ( ) ( ', )k k k
ss s y s s
5.17
După ce au fost calculate un număr de
M valori și însumate astfel:
' ( )k
ss
și
'' ( ')k
ss 5.18
putem normaliza
și
divizându -le cu aceste sume :
' ( )()' ( )k
k
k
ssss
5.19
1
1
'' ( ')( ')' ( ')k
k
k
ssss
5.20
De asemenea după un număr de
2M produse de tipul
1( ') ( ', ) ( )k k ks s s s , au fost calculate
sumele de pe fiecare ramură de la momentul
k astfel:
0 1 0 11 1 1
,( ') ( ', ) ( ) ( ') ( ', ) ( ) ( ') ( ', ) ( )
kk k k k k k k k k P
R R R Rs y s s s s y s s s s y s s s
5.21
Cu ajutorul sumei din ecuația 5.21 putem normaliza
( ', , )P s s y :
( ', , )( ', , )
knorm
PP s s yP s s y
5.22
În acest fel putem garanta că valoarea maximă a fiecărei probabilit ăți va fi
1 , aceste
normalizări neafectând rata LLR -ului .
31 din 49
11
00( ', , ) ( ', , )
( | ) ln ln( ', , ) ( ', , )norm
RR
k
norm
RRP s s y P s s y
L u yP s s y P s s y
5.23
5.3 Calculul probabilităților
și
cu ajutorul diagramei trellis
Figura 5.2 ilustrează tranzițiile din starea
's la momentul de timp
1k , în starea
s la
momentul de timp
k . Conform [1] pe baza acestor tranziții putem calcula probabilitățile
și
,
cât și probabilitatea
.
Fig. 5.3 Calculul probabilităților pe baza diagramei trellis [4]
Conform [4] fiecare ramură din diagrama trellis corespunde probabilităților
( ', )kss ,
calculate conform ecuației 5.10. Fiecărui nod de stare îi corespunde o valoare pentru
()ks ,
calculată conform relațiilor 5.12 și 5.19, și o valoare pentru
()ks calculată conform relațiilor 5.13
și 5.20, plecând de la condițiile inițiale definite în relațiile 5.14 și 5.15 .
Presupunând că cunoaștem
1( ')ks , conform [ 4], probabilitatea
' ( )ks este obținută prin
însumarea produselor dintre
1( ')ks și
( ', )kss asociate fiecărei ramuri care converge din starea
's
în starea
s . Procesul este repetat până la finalul secvenței recepționate și ajungem să calculăm
32 din 49
(0)N, diagrama trellis terminându -se în starea 0. Suma tuturor produselor corespunzătoare
tranzițiilor din starea
's în starea
s este prezentată în figura 5.4.
Fig. 5.4 Calculul recursiv al probabilitățilo r
și
[4]
Probabilitatea
poate fi calculată recursiv doar după recepționarea întregii secvențe
y .
Cunoscând valoarea
()ks , conform [ 4], valoarea
1( ')ks este calculată similar ca și
()ks .
Procesul este repetat până la calculul lui
0(0) .
După calculul valorilor
,
și
, putem calcula valoare probabilității individuale
( ', , )P s s y
și a LLR – ului
( | )kL u y , cu ajutorul relațiilor 5.5, 5.22 și 5.23, redate mai jos:
1 ( ', , ) ( ') ( ', ) ( )k k k P s s y s s s s
( ', , )( ', , )
knorm
PP s s yP s s y
11
00( ', , ) ( ', , )
( | ) ln ln( ', , ) ( ', , )norm
RR
k
norm
RRP s s y P s s y
L u yP s s y P s s y
5.4 Algoritmul max -log-MAP și log MAP
Un dezavantaj major al algoritmului BCJR [4] este numărul mare de multiplicări pe care
trebuie să le întreprindă, ceea ce duce la o complexitate crescută din punctul de vedere al calculului
computațional. Astfel diverse versiuni simplificate au apărut tocmai pentru a scădea timpul și
resursele necesa re pentru implementarea algoritmului. Două dintre versiunile apărute sunt algoritmi
33 din 49
log-MAP și max -log-MAP. Cei doi algoritmi transformă operațiile de multiplicare în operații de
însumare, definind astfel trei noi variabile :
1()( ', ) ln( ( ', )) ln22n
k k c
k k k kl kl
lu L u Ls s s s C x y
5.24
1
'( ) ln( ( )) * ( ') ( ', ) max k k k k
ss s s s s
5.25
11( ') ln( ( ')) ( ) ( ', ) max* k k k k
ss s s s s
5.26
Unde :
||max( , ) ln(1 ) logmax*( , )
max( , ) max logaba b e MAPab
a b MAP
5.27
Valorile func ției
||ln(1 )abe sunt stocate de obicei într -o tabelă de tip look -up table. Astfel
LLR -ul este dat de următoarea expresie :
1011 ( | ) ( ') ( ', ) ( ) ( ') ( ', ) ( ) max* max* k k k k k k k
RRL u y A s s s s A s s s s
5.28
34 din 49
Cap. 6 Long Term Evolution (LTE) – codarea de canal
LTE [ 5] este rezultatul îmbinării unor standarde de telecomunicații naționale și
internaționale, de către 3GPP(Third Generation Partnership Project) și este văzut ca fiind
arhitectura standard pentru 4G [6]. LTE a apărut ca o soluție pentru cerințele din ce în ce mai mari
pentru traficul de date la nivel global. Prin noile tehnologii implementate, LTE oferă rate mari de
trafic de date printr -o capacitate a canalului crescută, dar aduce și o îmbunătățire a acoperirii radio.
Pentru a putea oferi servicii la un grad înalt de calitate, standardul de LTE trebuie să pr evadă soluții
pentru a minimiza rata erorii de bit (BER) în contextul unui canal de comunicație cu un raport
semnal pe zgomot foarte mic.
6.1 Codorul turbo LTE
Standardul LTE folosește [7] un codor turbo de tipul PCCC (Parallel Concatenated
Convolutional Code) constituit din două codoare convolutionale cu opt stări, și un interleaver. Rata
codorului turbo este
1/ 3 , iar structura codului [3GPP] este ilustrată în figura x.1.
Fig. 6.1 Codorul turbo pentru LTE [7]
35 din 49
Funcția de transfer [3GPP] asociată acestui codor este:
1
0()( ) 1,()gDGDgD
6.1
Unde:
23
0( ) 1g D D D
6.2
3
1( ) 1g D D D
6.3
Valoare inițială a regiștrilor celor două codoare este zero. Ieșirea codorului turbo este
formată din
kx ,
kz,
'kz și biții corespunzători forțării celor două codoare în starea inițială. Astfel
combinând ieșirile celor două codoare cu biții sistematici obținem secvența următoare [8]:
1 1 1 2 2 2, , ' , , ' ,… , , 'k k k x z z x z z x z z
. Pentru a forța revenirea celor două codoare în starea inițială,
comutatoarele din fig. 6.1 sunt mutate în poziția complementară. Fiindcă starea finală a celor două
codoare este diferită una de cealaltă [ 8] se vor obține biți de coadă pentru fiecare codor în parte, biți
ce trebuie transmiși împreună cu biții sistematici și cei de paritate. Astfel rezultă secvența de final
[8] de form a următoare:
1 1 2 2 3 3 1 1 2 2 3 3, , , , , , ' , ' , ' , ' ' , 'k k k k k k k k k k k kx z x z x z x z x z x z
.
Standardul LTE introduce un modul particular de interleaver. Rela ția dintre biții de intrare
și cei de ieșire [7][8] este de forma:
() ' , 0,1,…,( 1)iic c i K
6.4
unde func ția interleaver -ului aplicată este de forma :
2
12 ( ) ( ) modi f i f i K
6.5
Valorile coeficienților
1f și
2f sunt dependente de lungimea blocului de biți
K de la
intrare, acestea fiind date în tabelul 5.1.3 -3 din [ 7]. Lungimea lui
K varia ză între 40 și 6144 de biți.
6.2 Decodorul turbo LTE
În figura 6.2 este prezentată schema de decodare pentru sistemele LTE. Sunt folosite două
decodoare tip RSC (Recursive Systematic Convolutional) despărțite de câte un interleaver. Astfel a
fi în acord cu schema de codare, ieșirea primului decodor este trec ută printr -un interleaver și
constitue intrare pentru decodorul al doilea. Fiecare decodor RSC în parte poate folosi algoritmul
MAP pentru decodare, sau diferite variante ale acestuia [9], cum ar fi log -MAP, max -log-MAP.
36 din 49
Fig. 6.2 Decodor turbo pentru sis teme LTE [9]
Algoritmul MAP [9] are cele mai bune performanțe de decodare, dar are o complexitate
crescută de implementare. Datorită acestui inconvenient diferiți algoritmi sub -optimali au fost
studiați [9], cei mai comuni fiind log -MAP și max -log-MAP.
În cadrul acestei lucrări au fost studiate performanțele algoritmului max -log-MAP,
folosindu -se schema de decodare din figura 6.2. acest algoritm are o complexitate scăzută și un
control mai bun al gamei dinamice, dar suferă de o degradare a performanțelor comparativ cu
algoritmul MAP [9]. Astfel în acord cu ecuația 5.27 [9] avem următoarea relație :
max*( , ) ln(e e ) max( , ) ln(1 e ) max( , )yx xyx y x y x y
6.6
Ecuațiile algoritmului max -log-MAP sunt scrise folosind diagrama trellis a decodorului
turbo. Această diagramă conține opt stări, fiecare stare având două intrări și două ieșiri. Diagrama
trellis este prezentată în figura 6.3.
37 din 49
Fig. 6.3 Diagrama trellis pentru decodorul RSC [7]
Metrica leg ăturii dintre starea
iS și starea
jS este dată de relația [ 9]:
V , ,i
ij k k X X i j Z Z i j
6.7
Unde
,X i j reprezintă biții de date, iar
,Z i j reprezintă biții de paritate.
i
kZ este LLR -ul
biților de paritate, fiind definit astfel [Elmar]:
1
'
21
'V W ,forSISO1
V
V IL W ,forSISO 2
,forSISO1
,forSISO 2i
k k k
k o
k k k
i
ki
k i
kX X X
X
X X X
Z
Z
Z
6.8
În cazul codorului turbo pentru sistemele LTE legăturile dintre două stări ale trellis -ului pot
avea patru valori posibile [9]:
0
1
2
3
4
5
6
70
1
2
3
4
5
6
70/0
1/1
1/1
0/0
1/0
0/1
0/1
1/0
0/1
1/0
1/0
0/1
1/1
0/0
0/0
1/10
1
2
3
4
5
6
70
1
2
3
4
5
6
70/0
1/1
1/1
0/0
1/0
0/1
0/1
1/0
0/1
1/0
1/0
0/1
1/1
0/0
0/0
1/1
k k+1 k+2
38 din 49
0
1
2
30
V
Vk
i
k
i
kkX
Z
XZ
6.9
Procesul de decodare se bazează pe calculul coeficienților
,
și
. Acest proces este
implementat prin parcurgerea diagramei trellis înainte și inapoi.
Relațiile din subcapitolul 5.2 sunt rescrise pentru schema de decodare din figura 6.2.
a. Calculul coeficienților
Folosind notațiile 6.9 pentru fiecare tranziție de stări putem scrie cele opt relații astfel [ 9]:
00 0 04 3
10 3 14 0
21 1 25 2
31 2 35 1
42 2 46 1
52 1 56 2
63 3 67 0
73 0 77 3;
;
;
;
;
;
;
;
6.10
b. Calculul coeficienților
Pentru calculul coeficienților
se parcurge diagrama trellis în sens invers. Relațiile care
descriu acest proces pleacă de la
3 kK și se compun până la
2k , astfel :
11 2 1 1 2ˆ( ) max{( ( )} () () ) ,i k i k j ij kj j S S S
6.11
0ˆˆ ( ) ( ) ( )k i k i kS S S
6.12
Unde
()kiS este metrica normalizată pe sensul invers al trellis -ului, în starea
iS , la momentul
k ,
iar
23kK și
07i .
ˆ()kiS este metrica nenormalizată. Condițiile ințiale de la care pleacă
calculul lui
sunt [ 9]:
30
3( ) 0
( ) 0, 0K
KiS
Si
6.13
Luând în calcul coeficienții
calculați la punctul a, relațiile de calcul pentru
ˆ devin[ 9]:
39 din 49
0 00 4 04
0 10 4 14
1 21 5 25
1 31 5 30 1 1
1 1 1
2 1 1
3 1 1
415
2 42 6 46
21
5 1 1 52 6ˆ max ( ),( )
ˆ max ( ),( )
ˆ max ( ),( )
ˆ max ( ),( )
ˆ max ( ),( )
ˆ max ( ),(k k k
k k k
k k k
k k k
k k k
k k kS S S
S S S
S S S
S S S
S S S
S S S
56
3 63 7 67 61
3 73 71
71 77 1)
ˆ max ( ),( )
ˆ max ( ),( )k k k
k k kS S S
S S S
6.14
Valorile acestora sunt normalizate conform ecua ției 6.12.
c. Calculul coeficienților
Calculul coeficienților
se realizează prin parcurgerea diagramei trellis pe sensul înainte.
Se calculează încă odată metrica tranzițiilor gamma, pe sensul înainte, apoi calculându -se
coeficienții alpha. Notăm metrica înainte pentru starea
iS , la momentul
k cu
i kS , în condițiile
01kK
și
07i . Starea inițială de la care se compune metrica este:
00
00
0, 0iS
Si
6.15
Plecând de la
1k și mergând până la
kK pe diagrama trellis, metrica nenormalizată
este dată de relația următoare [ 9]:
11 1 1 2 2ˆ max ( ),( )ii k j k k j i i j S S S
6.16
Unde
1iS și
2iS sunt două stări de la momentul
1k , care fac tranziția în starea
jS la momentul
k .
Folosind expresiile din relația 6.10, vom obține [9]:
0 00 1 10
2 21 3 31
4 42 5 52
6 63 7 70 1 1
1 1 1
2 1 1
3 1 1
413
0 04 1 14
21
5 1 1 25 3ˆ max ( ),( )
ˆ max ( ),( )
ˆ max ( ),( )
ˆ max ( ),( )
ˆ max ( ),( )
ˆ max ( ),(k k k
k k k
k k k
k k k
k k k
k k kS S S
S S S
S S S
S S S
S S S
S S S
35
4 46 5 56 61
6 67 71
71 77 1)
ˆ max ( ),( )
ˆ max ( ),( )k k k
k k kS S S
S S S
6.17
După calculul valorilor
0ˆkS , metricile sunt normalizate astfel [ 9]:
40 din 49
0ˆˆk i k i k S S S 6.18
Având calculațe metricile betha și alpha, cât și tranzițiile gamma, pe cele două sensuri ale
diagramei trellis, putem estima LLR-ul pentru biții de date
kx . Pentru estmarea LLR -ului se
calculează probabilitatea tranzițiilor din starea
iS la momentul
1k , în starea
jS la momentul
k
[9]:
1 ,
k i ij j kk i j S S
6.19
Tranzițiile dintre o stare în alta pe diagrama trellis sunt determinate de intrarea unui bit de
0
sau a unui bit de
1 . Astfel tranzițiile determinate de un bit de
0 sunt:
0 00 0
1 14 4
2 25 5
3 31 1
4 42 2
5 56 6
6 670
1
0
1
0
1
0
1
0
1
0
1
0
1
0
17
7 73 30,0
1,4
2,5
3,1
4,2
5,6
6,7
7,3k
k
k
k
k
k
k
kkk
kk
kk
kk
kk
kk
kk
kkSS
SS
SS
SS
SS
SS
SS
SS
6.20
Similar pentru tranzițiile determinate de un bit de
1, relațiile de calcul sunt:
0 04 4
1 10 0
2 21 1
3 35 5
4 46 6
5 52 2
6 631
1
1
1
1
1
1
1
1
1
1
1
1
1
1
13
7 77 70,4
1,0
2,1
3,5
4,6
5,2
6,3
7,7k
k
k
k
k
k
k
kkk
kk
kk
kk
kk
kk
kk
kkSS
SS
SS
SS
SS
SS
SS
SS
6.21
Probabilitatea de a avea un bit egal cu
0 sau cu
1 este descris de Jacobi -anul logaritmat al
tuturor ramurilor corespunde cu
0 sau cu
1, astfel:
10
( ): 1 ( ): 0max { , } max { , }
i j i i j io
k k kS S X S S XX i j i j
6.22
41 din 49
Cap. 7 Implementarea algoritmului de decodare Max L og MAP
7.1 Parametrii de intrare
Implementarea codorului și a decodorului sau realizat în Matlab, unde s -a realizat și
simularea performanțelor acestuia. Astfel plecând de la scema de codare din fig. 6.1 s -a întocmit
programul de simulare al codorului turbo. Codorul turbo este un codor tip PCCC, compu s din două
codoare convoluționale. Rata codorului turbo este
1/ 3 . Lungimea blocului de intrare este în
conformitate cu tabelul 5.1.3 -3 din [7].
Pentru decodarea informa ției s-a implementat algoritmul Max -log-MAP, conform schemei din fig.
6.3. Tipul de modulație considerat a fost BPSK, iar canalul de transmisie considerat a fost de tipul AWGN,
fără a lua în calcul apariție fenomenului de fading.
Fig. 7.1 Perfomanța algoritm pentru BPSK, 3 iterații
42 din 49
Fig. 7.2 Performanța algoritm în funcție de numărul de iterații
7.2 Concluzii și direcții de urmat
Această lucrare a implementat și simulat parametrii algoritmului Max -log-MAP în condiții de
zgomot alb gaussian. S -a constat o implementare facilă a acestui algoritm, chiar dacă performanțele sale
sunt mai scăzute față de algoritmul din care a deri vat, respectiv algoritmul MAP. Î n continuare o direcție de
urmat este implementarea acestuia folosind diferite scheme de modulație, câ t și simularea performanțelor
acestuia în condiții de fading, luând în calcul modele de canal consacrate (Hata -Okumura, Cost -231, etc.).
Pentru o creștere a ratei de transmisie se poate folosi tehnica de “puncturing” în condiții de raport semnal
pe zgomot plus interferențe crescut.
43 din 49
Bibliografie:
1. C. E. Shannon, „A mathematical theory of communication”, The Bell System Technical
Journal, vol.27, pp.379 -423, 1948.
2. C. Vlădeanu, „Coduri convoluționale și turbo ”,
http://calin.comm.pub.ro/Didactice/Proiect3/Materiale2010/CoduriTurboConvol/ , 2009.
3. Maria Kovaci, „Contribuții la analiza și îmbunătățirea performanțelor turbo codur ilor în
canale cu fading plat ”, teza doctorat, 2009.
4. Bernard Sklar, „Fundamentals of Turbo Codes”,
http://www.informit.com/articles/article.aspx?p=25936 , Mar. 15,2002.
5. Christopher Cocs, „An introduction to LTE: LTE, LTE -Advanced, SAE, VoLTE and 4G
Mobile Communication, 2nd Edition” , John Wiley & Sons, 2014.
6. Jean-Gabriel Remy, Charlotte Letamendia, “LTE Standards”, Wiley -ISTE, 2014.
7. 3GPP TS 36.212 version 12.2.0 (2014 -10) Technical Specification, „LTE; Evolved
Universal Terrestrial Radio Access (E -UTRA); Multiplexing and channel coding (Release
12)”.
8. Cristian Anghel, Valentin Stanciu, Cristian Stanciu, and Constantin Paleologu, „CTC Turbo
Decoding Architecture for LTE Systems Impleme nted on FPGA”, IARIA ICN 2012,
Reunion, France, 2012.
9. C. Anghel, C. Paleologu, C. Stanciu, „Performances evaluation of a CTC turbo decoder for
LTE systems”, Elmar, 2015.
10. R. Johannesson, K. Sh. Zigangirov, „Fundamentals of Convolutional Coding”, second
edition, IEEE Press, 2015.
11. T. Richardson, R. Urbanke, „Modern Coding Theory”, Cambridge University Press, 2007.
12. Silvio A. Abrantes, „From BCJR to turbo decoding:MAP algoritms made easier”,
Information and Telecommunication Technology Center, 2004.
13. Li Liang, „A nalysis of low power implementational issue of turbo -like codes in body area
network”, University of Southampton, 2009.
14. M.C. Valenti, J. Sun, „The UMTS turbo code and an efficient decoder implementation
suitable for software – defined radios”, Internationa l Journal of Wireless Information
Networks, vol.8, no.4, oct.2001.
15. M. Taskaldiran, Richard C. S. Morling, and I. Kale, „The modified Max -log-MAP turbo
decoding algorithm by extrinsic information scaling for wireless aplications”, Wireless
technology: applications, management and security. Lecture notes in electrical engineering
(44), Springer, ISBN 9780387717869.
16. Albert Serra Pagès, “A Long Term Evolution link level simulator”, master thesis,
Universitat Politècnica de Catalunya, February 2009.
17. Patel S. Bhanubhai, Mary G. Shajan, Upena D. Dalal, “Performance of turbo encoder and
turbo decoder for LTE”, International Journal of Engineering and Innovative Technology
(IJEIT), vol.2, issue 6, October 2012.
44 din 49
ANEXA 1: Codor convolutional
function [datc,tail] = rsc(data)
k = length(data);
s1 = 0;
s2 = 0;
s3 = 0;
for i = 1 : k + 3
if i <= k
s23 = xor(s2,s3);
s1p = xor(data(i),s23);
s2p = s1;
s3p = s2;
s12 = xor(s1,s2);
dc(i) = xor(s1p,s12);
else
j = 1;
s1p = 0;
s2p = s1;
s3p = s2;
ek(j) = xor(s2,s3);
s13 = xor(s1,s3);
ck(j) = xor(0,s13);
j = j + 1;
end
s1 = s1p;
s2 = s2p;
s3 = s3p;
end
tail = zeros(2,3);
tail(1,:) = ck;
tail(2,:) = ek;
tail = reshape(tail,[1,6]);
datc = dc;
end
45 din 49
ANEXA 2: Codorul turbo
function dc = cturbo(data)
k = length(data);
dc = zeros(3,k);
tail = zeros(2,6);
dc(1,:) = data;
[dc(2,:),tail(1,:)] = rsc(data);
datai = interleaver_mat(d ata);
[dc(3,:),tail(2,:)] = rsc(datai);
dc = reshape(dc,[1,3*k]);
tail = reshape(tail,[1,12]);
dc = [dc tail];
end
46 din 49
ANEXA 3: Blocul decodor
function [llr] = siso(vk,zk)
k = length(vk) – 3;
%intrarea gama
g0 = zeros(1,k + 3);
g1 = vk;
g2 = zk;
g3 = vk + zk;
g00 = g0;
g04 = g3;
g10 = g3;
g14 = g0;
g21 = g1;
g25 = g2;
g31 = g2;
g35 = g1;
g42 = g2;
g46 = g1;
g52 = g1;
g56 = g2;
g63 = g3;
g67 = g0;
g73 = g0;
g77 = g3;
% initializam betha cu 0 pt toate starile
betha_s0 = zeros(1,k + 3);
betha_s1 = zeros(1,k + 3);
betha_s2 = zeros(1,k + 3);
betha_s3 = zeros(1,k + 3);
betha_s4 = zeros(1,k + 3);
betha_s5 = zeros(1,k + 3);
betha_s6 = zeros(1,k + 3);
betha_s7 = zeros(1,k + 3);
% initializam alpha cu 0 pt toate starile
alpha_s0 = zeros(1,k);
alpha_s1 = zeros(1,k);
alpha_s2 = zeros(1,k);
alpha_s3 = zeros(1,k);
alpha_s4 = zeros(1,k);
alpha_s5 = zeros(1,k);
alpha_s6 = zeros(1,k);
alpha_s7 = zeros(1,k);
47 din 49
for i = k + 2 : -1 : 2
betha_s0(i) = max((betha_s0(i + 1) + g00(i)),(betha_s4(i + 1) + g04(i)));
betha_s1(i) = max((betha_s0(i + 1) + g10(i)),(betha_s4(i + 1) + g14(i)));
betha_s2(i) = max((betha_s1(i + 1) + g21(i)),(betha_s5(i + 1) + g25(i)));
betha_s3(i) = max((betha_s1(i + 1) + g31(i)),(betha_s5(i + 1) + g35(i)));
betha_s4(i) = max((betha_s2(i + 1) + g42(i)),(betha_s6(i + 1) + g46(i)));
betha_s5(i) = max((betha_s2(i + 1) + g52(i)),(betha_s6(i + 1) + g56(i)));
betha_s6(i) = max((betha_s3(i + 1) + g63(i)),(betha_s7(i + 1) + g67(i)));
betha_s7(i) = max((betha_s3(i + 1) + g73(i)),(betha_s7(i + 1) + g77(i)));
%normalizare betha
bethaN_s0(i) = betha_s0(i) – betha_s0(i);
bethaN_s1(i) = betha_s1(i) – betha_s0(i);
bethaN_s2(i) = betha_s2(i) – betha_s0(i);
bethaN_s3(i) = betha_s3(i) – betha_s0(i);
bethaN_s4(i) = betha_s4(i) – betha_s0(i);
bethaN_s5(i) = betha_s5(i) – betha_s0(i);
bethaN_s6(i) = betha_s6(i) – betha_s0(i);
bethaN_s7(i) = betha_s7(i) – betha_s0(i);
end
alpha_s0(1) = max((alpha_s0(1) + g00(i)),(alpha_s1(1) + g10(i)));
alpha_s1(1) = max((alpha_s2(1) + g21(i)),(alpha_s3(1) + g31(i)));
alpha_s2(1) = max((alpha_s4(1) + g42(i)),(alpha_s5(1) + g52(i)));
alpha_s3(1) = max((alpha_s6(1) + g63(i)),(alpha_s7(1) + g73( i)));
alpha_s4(1) = max((alpha_s0(1) + g04(i)),(alpha_s1(1) + g14(i)));
alpha_s5(1) = max((alpha_s2(1) + g25(i)),(alpha_s3(1) + g35(i)));
alpha_s6(1) = max((alpha_s4(1) + g46(i)),(alpha_s5(1) + g56(i)));
alpha_s7(1) = max((alpha_s6(1) + g67 (i)),(alpha_s7(1) + g77(i)));
for i = 2 : k
alpha_s0(i) = max((alpha_s0(i – 1) + g00(i)),(alpha_s1(i – 1) + g10(i)));
alpha_s1(i) = max((alpha_s2(i – 1) + g21(i)),(alpha_s3(i – 1) + g31(i)));
alpha_s2(i) = max((alpha_s4(i – 1) + g42(i )),(alpha_s5(i – 1) + g52(i)));
alpha_s3(i) = max((alpha_s6(i – 1) + g63(i)),(alpha_s7(i – 1) + g73(i)));
alpha_s4(i) = max((alpha_s0(i – 1) + g04(i)),(alpha_s1(i – 1) + g14(i)));
alpha_s5(i) = max((alpha_s2(i – 1) + g25(i)),(alpha_s3(i – 1) + g35(i)));
alpha_s6(i) = max((alpha_s4(i – 1) + g46(i)),(alpha_s5(i – 1) + g56(i)));
alpha_s7(i) = max((alpha_s6(i – 1) + g67(i)),(alpha_s7(i – 1) + g77(i)));
%normalizare alpha
alphaN_s0(i) = alpha_s0(i) – alpha_s0(i);
alphaN_s1(i) = alpha_s1(i) – alpha_s0(i);
alphaN_s2(i) = alpha_s2(i) – alpha_s0(i);
alphaN_s3(i) = alpha_s3(i) – alpha_s0(i);
alphaN_s4(i) = alpha_s4(i) – alpha_s0(i);
alphaN_s5(i) = alpha_s5(i) – alpha_s0(i);
alphaN_s6(i) = alpha_s6(i) – alpha_s0(i);
alphaN_s7(i) = alpha_s7(i) – alpha_s0(i);
end
48 din 49
for i = 2 : k + 1
% pt llr det de bitul 0
llr0_s00(i) = alphaN_s0(i – 1) + g00(i -1) + bethaN_s0(i);
llr0_s14(i) = alphaN_s1(i – 1) + g14(i -1) + bethaN_s4(i);
llr0_s25(i) = alphaN_s2(i – 1) + g25(i -1) + bethaN_s5(i);
llr0_s31(i) = alphaN_s3(i – 1) + g31(i -1) + bethaN_s1(i);
llr0_s42(i) = alphaN_s4(i – 1) + g42(i -1) + bethaN_s2(i);
llr0_s56(i) = alphaN_s5(i – 1) + g56(i -1) + bethaN_s6(i);
llr0_s67(i) = alphaN_s6(i – 1) + g67(i -1) + bethaN_s7(i);
llr0_s73(i) = alphaN_s7(i – 1) + g73(i -1) + bethaN_s3(i);
llr0(i – 1,:) = [llr0_s00(i);llr0_s14(i);llr0_s25(i);llr0_s31(i); …
llr0_s42(i);llr0_s56(i);llr0_s67(i);llr0_s73(i)];
% pt llr det de bitul 1
llr1_s04(i) = alphaN_s0(i – 1) + g04(i -1) + bethaN_s4(i);
llr1_s10(i) = alphaN_s1(i – 1) + g10(i -1) + bethaN_s0(i);
llr1_s21(i) = alphaN_s2(i – 1) + g21(i -1) + bethaN_s1(i);
llr1_s35(i) = alphaN_s3(i – 1) + g35(i -1) + bethaN_s5(i);
llr1_s46(i) = alphaN_s4(i – 1) + g46(i -1) + bethaN_s6(i);
llr1_s52(i) = alphaN_s5(i – 1) + g52(i -1) + bethaN_s2(i);
llr1_s63(i) = alphaN_s6(i – 1) + g63(i -1) + bethaN_s3(i);
llr1_s77(i) = alphaN_s7(i – 1) + g77(i -1) + bethaN_s 7(i);
llr1(i – 1,:) = [llr1_s04(i);llr1_s10(i);llr1_s21(i);llr1_s35(i); …
llr1_s46(i);llr1_s52(i);llr1_s63(i);llr1_s77(i)];
end
for i = 1 : k
llr(i) = max(llr1(i,:)) – max(llr0(i,:));
if llr(i) >= 0
llr(i) = 1;
else
llr(i) = 0;
end
end
end
49 din 49
ANEXA 4: Decodorul turbo
function dat = dturbo(data,iter)
k = length(data);
d = data(1:k -12);
t = data(k -11:k);
t1 = t(1:6);
t2 = t(7:12);
xk = d(1:3:end);
zk = d(2:3:end);
zkp = d(3:3:end);
xkt = t1(1:2:end);
zkt = t1(2:2:end);
xkpt = t2(1:2:end);
zkpt = t2(2:2:end);
xk = [xk xkt];
zk = [zk zkt];
zkp = [zkp zkpt];
n = length(xk);
w = zeros(1,n);
v1 = zeros(1,n -3);
v2 = zeros(1,n -3);
v2i = zeros(1,n -3);
llr2d = zeros(1,n -3);
for i = 1:iter
v1 = xk + w;
llr1 = siso(v1,zk);
v2 = llr1 – w(1:n-3);
v2i = interleaver_mat(v2);
v2i = [v2i zeros(1,3)];
llr2 = siso(v2i,zkp);
llr2d = deinterleaver(llr2);
w(1:n-3) = llr2d + v2;
end
for i = 1:n-3
if llr2d(i) <= 0
dat(i) = 0;
else
dat(i) = 1;
end
end
end
Copyright Notice
© Licențiada.org respectă drepturile de proprietate intelectuală și așteaptă ca toți utilizatorii să facă același lucru. Dacă consideri că un conținut de pe site încalcă drepturile tale de autor, te rugăm să trimiți o notificare DMCA.
Acest articol: DECODOR TURBO PENTRU LTE. IMPLEMENTARE PE FPGA [603923] (ID: 603923)
Dacă considerați că acest conținut vă încalcă drepturile de autor, vă rugăm să depuneți o cerere pe pagina noastră Copyright Takedown.
