updated testing doc
This commit is contained in:
@@ -15,7 +15,9 @@ IMAGES_EPS = \
|
||||
|
||||
# specify figures for build process (all eps figures)
|
||||
GRAPHS_EPS = \
|
||||
$(FIGURES)/lte-mcs-index.eps
|
||||
$(FIGURES)/lte-mcs-index.eps \
|
||||
$(FIGURES)/lenaThrTestCase1.eps \
|
||||
$(FIGURES)/lenaThrTestCase2.eps
|
||||
|
||||
|
||||
# rescale figures as necessary
|
||||
|
||||
1212
src/lte/doc/source/figures/lenaThrTestCase1.eps
Normal file
1212
src/lte/doc/source/figures/lenaThrTestCase1.eps
Normal file
File diff suppressed because it is too large
Load Diff
927
src/lte/doc/source/figures/lenaThrTestCase2.eps
Normal file
927
src/lte/doc/source/figures/lenaThrTestCase2.eps
Normal file
@@ -0,0 +1,927 @@
|
||||
%!PS-Adobe-2.0 EPSF-2.0
|
||||
%%Title: lenaThrTestCase2.eps
|
||||
%%Creator: gnuplot 4.2 patchlevel 6
|
||||
%%CreationDate: Mon May 23 12:59:45 2011
|
||||
%%DocumentFonts: (atend)
|
||||
%%BoundingBox: 50 50 410 302
|
||||
%%EndComments
|
||||
%%BeginProlog
|
||||
/gnudict 256 dict def
|
||||
gnudict begin
|
||||
%
|
||||
% The following 6 true/false flags may be edited by hand if required
|
||||
% The unit line width may also be changed
|
||||
%
|
||||
/Color true def
|
||||
/Blacktext false def
|
||||
/Solid false def
|
||||
/Dashlength 1 def
|
||||
/Landscape false def
|
||||
/Level1 false def
|
||||
/Rounded false def
|
||||
/TransparentPatterns false def
|
||||
/gnulinewidth 5.000 def
|
||||
/userlinewidth gnulinewidth def
|
||||
%
|
||||
/vshift -63 def
|
||||
/dl1 {
|
||||
10.0 Dashlength mul mul
|
||||
Rounded { currentlinewidth 0.75 mul sub dup 0 le { pop 0.01 } if } if
|
||||
} def
|
||||
/dl2 {
|
||||
10.0 Dashlength mul mul
|
||||
Rounded { currentlinewidth 0.75 mul add } if
|
||||
} def
|
||||
/hpt_ 31.5 def
|
||||
/vpt_ 31.5 def
|
||||
/hpt hpt_ def
|
||||
/vpt vpt_ def
|
||||
Level1 {} {
|
||||
/SDict 10 dict def
|
||||
systemdict /pdfmark known not {
|
||||
userdict /pdfmark systemdict /cleartomark get put
|
||||
} if
|
||||
SDict begin [
|
||||
/Title (lenaThrTestCase2.eps)
|
||||
/Subject (gnuplot plot)
|
||||
/Creator (gnuplot 4.2 patchlevel 6 )
|
||||
/Author (Marco Miozzo,,,)
|
||||
% /Producer (gnuplot)
|
||||
% /Keywords ()
|
||||
/CreationDate (Mon May 23 12:59:45 2011)
|
||||
/DOCINFO pdfmark
|
||||
end
|
||||
} ifelse
|
||||
%
|
||||
% Gnuplot Prolog Version 4.2 (August 2006)
|
||||
%
|
||||
/M {moveto} bind def
|
||||
/L {lineto} bind def
|
||||
/R {rmoveto} bind def
|
||||
/V {rlineto} bind def
|
||||
/N {newpath moveto} bind def
|
||||
/Z {closepath} bind def
|
||||
/C {setrgbcolor} bind def
|
||||
/f {rlineto fill} bind def
|
||||
/vpt2 vpt 2 mul def
|
||||
/hpt2 hpt 2 mul def
|
||||
/Lshow {currentpoint stroke M 0 vshift R
|
||||
Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
|
||||
/Rshow {currentpoint stroke M dup stringwidth pop neg vshift R
|
||||
Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
|
||||
/Cshow {currentpoint stroke M dup stringwidth pop -2 div vshift R
|
||||
Blacktext {gsave 0 setgray show grestore} {show} ifelse} def
|
||||
/UP {dup vpt_ mul /vpt exch def hpt_ mul /hpt exch def
|
||||
/hpt2 hpt 2 mul def /vpt2 vpt 2 mul def} def
|
||||
/DL {Color {setrgbcolor Solid {pop []} if 0 setdash}
|
||||
{pop pop pop 0 setgray Solid {pop []} if 0 setdash} ifelse} def
|
||||
/BL {stroke userlinewidth 2 mul setlinewidth
|
||||
Rounded {1 setlinejoin 1 setlinecap} if} def
|
||||
/AL {stroke userlinewidth 2 div setlinewidth
|
||||
Rounded {1 setlinejoin 1 setlinecap} if} def
|
||||
/UL {dup gnulinewidth mul /userlinewidth exch def
|
||||
dup 1 lt {pop 1} if 10 mul /udl exch def} def
|
||||
/PL {stroke userlinewidth setlinewidth
|
||||
Rounded {1 setlinejoin 1 setlinecap} if} def
|
||||
% Default Line colors
|
||||
/LCw {1 1 1} def
|
||||
/LCb {0 0 0} def
|
||||
/LCa {0 0 0} def
|
||||
/LC0 {1 0 0} def
|
||||
/LC1 {0 1 0} def
|
||||
/LC2 {0 0 1} def
|
||||
/LC3 {1 0 1} def
|
||||
/LC4 {0 1 1} def
|
||||
/LC5 {1 1 0} def
|
||||
/LC6 {0 0 0} def
|
||||
/LC7 {1 0.3 0} def
|
||||
/LC8 {0.5 0.5 0.5} def
|
||||
% Default Line Types
|
||||
/LTw {PL [] 1 setgray} def
|
||||
/LTb {BL [] LCb DL} def
|
||||
/LTa {AL [1 udl mul 2 udl mul] 0 setdash LCa setrgbcolor} def
|
||||
/LT0 {PL [] LC0 DL} def
|
||||
/LT1 {PL [4 dl1 2 dl2] LC1 DL} def
|
||||
/LT2 {PL [2 dl1 3 dl2] LC2 DL} def
|
||||
/LT3 {PL [1 dl1 1.5 dl2] LC3 DL} def
|
||||
/LT4 {PL [6 dl1 2 dl2 1 dl1 2 dl2] LC4 DL} def
|
||||
/LT5 {PL [3 dl1 3 dl2 1 dl1 3 dl2] LC5 DL} def
|
||||
/LT6 {PL [2 dl1 2 dl2 2 dl1 6 dl2] LC6 DL} def
|
||||
/LT7 {PL [1 dl1 2 dl2 6 dl1 2 dl2 1 dl1 2 dl2] LC7 DL} def
|
||||
/LT8 {PL [2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 2 dl2 2 dl1 4 dl2] LC8 DL} def
|
||||
/Pnt {stroke [] 0 setdash gsave 1 setlinecap M 0 0 V stroke grestore} def
|
||||
/Dia {stroke [] 0 setdash 2 copy vpt add M
|
||||
hpt neg vpt neg V hpt vpt neg V
|
||||
hpt vpt V hpt neg vpt V closepath stroke
|
||||
Pnt} def
|
||||
/Pls {stroke [] 0 setdash vpt sub M 0 vpt2 V
|
||||
currentpoint stroke M
|
||||
hpt neg vpt neg R hpt2 0 V stroke
|
||||
} def
|
||||
/Box {stroke [] 0 setdash 2 copy exch hpt sub exch vpt add M
|
||||
0 vpt2 neg V hpt2 0 V 0 vpt2 V
|
||||
hpt2 neg 0 V closepath stroke
|
||||
Pnt} def
|
||||
/Crs {stroke [] 0 setdash exch hpt sub exch vpt add M
|
||||
hpt2 vpt2 neg V currentpoint stroke M
|
||||
hpt2 neg 0 R hpt2 vpt2 V stroke} def
|
||||
/TriU {stroke [] 0 setdash 2 copy vpt 1.12 mul add M
|
||||
hpt neg vpt -1.62 mul V
|
||||
hpt 2 mul 0 V
|
||||
hpt neg vpt 1.62 mul V closepath stroke
|
||||
Pnt} def
|
||||
/Star {2 copy Pls Crs} def
|
||||
/BoxF {stroke [] 0 setdash exch hpt sub exch vpt add M
|
||||
0 vpt2 neg V hpt2 0 V 0 vpt2 V
|
||||
hpt2 neg 0 V closepath fill} def
|
||||
/TriUF {stroke [] 0 setdash vpt 1.12 mul add M
|
||||
hpt neg vpt -1.62 mul V
|
||||
hpt 2 mul 0 V
|
||||
hpt neg vpt 1.62 mul V closepath fill} def
|
||||
/TriD {stroke [] 0 setdash 2 copy vpt 1.12 mul sub M
|
||||
hpt neg vpt 1.62 mul V
|
||||
hpt 2 mul 0 V
|
||||
hpt neg vpt -1.62 mul V closepath stroke
|
||||
Pnt} def
|
||||
/TriDF {stroke [] 0 setdash vpt 1.12 mul sub M
|
||||
hpt neg vpt 1.62 mul V
|
||||
hpt 2 mul 0 V
|
||||
hpt neg vpt -1.62 mul V closepath fill} def
|
||||
/DiaF {stroke [] 0 setdash vpt add M
|
||||
hpt neg vpt neg V hpt vpt neg V
|
||||
hpt vpt V hpt neg vpt V closepath fill} def
|
||||
/Pent {stroke [] 0 setdash 2 copy gsave
|
||||
translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
|
||||
closepath stroke grestore Pnt} def
|
||||
/PentF {stroke [] 0 setdash gsave
|
||||
translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
|
||||
closepath fill grestore} def
|
||||
/Circle {stroke [] 0 setdash 2 copy
|
||||
hpt 0 360 arc stroke Pnt} def
|
||||
/CircleF {stroke [] 0 setdash hpt 0 360 arc fill} def
|
||||
/C0 {BL [] 0 setdash 2 copy moveto vpt 90 450 arc} bind def
|
||||
/C1 {BL [] 0 setdash 2 copy moveto
|
||||
2 copy vpt 0 90 arc closepath fill
|
||||
vpt 0 360 arc closepath} bind def
|
||||
/C2 {BL [] 0 setdash 2 copy moveto
|
||||
2 copy vpt 90 180 arc closepath fill
|
||||
vpt 0 360 arc closepath} bind def
|
||||
/C3 {BL [] 0 setdash 2 copy moveto
|
||||
2 copy vpt 0 180 arc closepath fill
|
||||
vpt 0 360 arc closepath} bind def
|
||||
/C4 {BL [] 0 setdash 2 copy moveto
|
||||
2 copy vpt 180 270 arc closepath fill
|
||||
vpt 0 360 arc closepath} bind def
|
||||
/C5 {BL [] 0 setdash 2 copy moveto
|
||||
2 copy vpt 0 90 arc
|
||||
2 copy moveto
|
||||
2 copy vpt 180 270 arc closepath fill
|
||||
vpt 0 360 arc} bind def
|
||||
/C6 {BL [] 0 setdash 2 copy moveto
|
||||
2 copy vpt 90 270 arc closepath fill
|
||||
vpt 0 360 arc closepath} bind def
|
||||
/C7 {BL [] 0 setdash 2 copy moveto
|
||||
2 copy vpt 0 270 arc closepath fill
|
||||
vpt 0 360 arc closepath} bind def
|
||||
/C8 {BL [] 0 setdash 2 copy moveto
|
||||
2 copy vpt 270 360 arc closepath fill
|
||||
vpt 0 360 arc closepath} bind def
|
||||
/C9 {BL [] 0 setdash 2 copy moveto
|
||||
2 copy vpt 270 450 arc closepath fill
|
||||
vpt 0 360 arc closepath} bind def
|
||||
/C10 {BL [] 0 setdash 2 copy 2 copy moveto vpt 270 360 arc closepath fill
|
||||
2 copy moveto
|
||||
2 copy vpt 90 180 arc closepath fill
|
||||
vpt 0 360 arc closepath} bind def
|
||||
/C11 {BL [] 0 setdash 2 copy moveto
|
||||
2 copy vpt 0 180 arc closepath fill
|
||||
2 copy moveto
|
||||
2 copy vpt 270 360 arc closepath fill
|
||||
vpt 0 360 arc closepath} bind def
|
||||
/C12 {BL [] 0 setdash 2 copy moveto
|
||||
2 copy vpt 180 360 arc closepath fill
|
||||
vpt 0 360 arc closepath} bind def
|
||||
/C13 {BL [] 0 setdash 2 copy moveto
|
||||
2 copy vpt 0 90 arc closepath fill
|
||||
2 copy moveto
|
||||
2 copy vpt 180 360 arc closepath fill
|
||||
vpt 0 360 arc closepath} bind def
|
||||
/C14 {BL [] 0 setdash 2 copy moveto
|
||||
2 copy vpt 90 360 arc closepath fill
|
||||
vpt 0 360 arc} bind def
|
||||
/C15 {BL [] 0 setdash 2 copy vpt 0 360 arc closepath fill
|
||||
vpt 0 360 arc closepath} bind def
|
||||
/Rec {newpath 4 2 roll moveto 1 index 0 rlineto 0 exch rlineto
|
||||
neg 0 rlineto closepath} bind def
|
||||
/Square {dup Rec} bind def
|
||||
/Bsquare {vpt sub exch vpt sub exch vpt2 Square} bind def
|
||||
/S0 {BL [] 0 setdash 2 copy moveto 0 vpt rlineto BL Bsquare} bind def
|
||||
/S1 {BL [] 0 setdash 2 copy vpt Square fill Bsquare} bind def
|
||||
/S2 {BL [] 0 setdash 2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
|
||||
/S3 {BL [] 0 setdash 2 copy exch vpt sub exch vpt2 vpt Rec fill Bsquare} bind def
|
||||
/S4 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
|
||||
/S5 {BL [] 0 setdash 2 copy 2 copy vpt Square fill
|
||||
exch vpt sub exch vpt sub vpt Square fill Bsquare} bind def
|
||||
/S6 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill Bsquare} bind def
|
||||
/S7 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt vpt2 Rec fill
|
||||
2 copy vpt Square fill Bsquare} bind def
|
||||
/S8 {BL [] 0 setdash 2 copy vpt sub vpt Square fill Bsquare} bind def
|
||||
/S9 {BL [] 0 setdash 2 copy vpt sub vpt vpt2 Rec fill Bsquare} bind def
|
||||
/S10 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt Square fill
|
||||
Bsquare} bind def
|
||||
/S11 {BL [] 0 setdash 2 copy vpt sub vpt Square fill 2 copy exch vpt sub exch vpt2 vpt Rec fill
|
||||
Bsquare} bind def
|
||||
/S12 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill Bsquare} bind def
|
||||
/S13 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
|
||||
2 copy vpt Square fill Bsquare} bind def
|
||||
/S14 {BL [] 0 setdash 2 copy exch vpt sub exch vpt sub vpt2 vpt Rec fill
|
||||
2 copy exch vpt sub exch vpt Square fill Bsquare} bind def
|
||||
/S15 {BL [] 0 setdash 2 copy Bsquare fill Bsquare} bind def
|
||||
/D0 {gsave translate 45 rotate 0 0 S0 stroke grestore} bind def
|
||||
/D1 {gsave translate 45 rotate 0 0 S1 stroke grestore} bind def
|
||||
/D2 {gsave translate 45 rotate 0 0 S2 stroke grestore} bind def
|
||||
/D3 {gsave translate 45 rotate 0 0 S3 stroke grestore} bind def
|
||||
/D4 {gsave translate 45 rotate 0 0 S4 stroke grestore} bind def
|
||||
/D5 {gsave translate 45 rotate 0 0 S5 stroke grestore} bind def
|
||||
/D6 {gsave translate 45 rotate 0 0 S6 stroke grestore} bind def
|
||||
/D7 {gsave translate 45 rotate 0 0 S7 stroke grestore} bind def
|
||||
/D8 {gsave translate 45 rotate 0 0 S8 stroke grestore} bind def
|
||||
/D9 {gsave translate 45 rotate 0 0 S9 stroke grestore} bind def
|
||||
/D10 {gsave translate 45 rotate 0 0 S10 stroke grestore} bind def
|
||||
/D11 {gsave translate 45 rotate 0 0 S11 stroke grestore} bind def
|
||||
/D12 {gsave translate 45 rotate 0 0 S12 stroke grestore} bind def
|
||||
/D13 {gsave translate 45 rotate 0 0 S13 stroke grestore} bind def
|
||||
/D14 {gsave translate 45 rotate 0 0 S14 stroke grestore} bind def
|
||||
/D15 {gsave translate 45 rotate 0 0 S15 stroke grestore} bind def
|
||||
/DiaE {stroke [] 0 setdash vpt add M
|
||||
hpt neg vpt neg V hpt vpt neg V
|
||||
hpt vpt V hpt neg vpt V closepath stroke} def
|
||||
/BoxE {stroke [] 0 setdash exch hpt sub exch vpt add M
|
||||
0 vpt2 neg V hpt2 0 V 0 vpt2 V
|
||||
hpt2 neg 0 V closepath stroke} def
|
||||
/TriUE {stroke [] 0 setdash vpt 1.12 mul add M
|
||||
hpt neg vpt -1.62 mul V
|
||||
hpt 2 mul 0 V
|
||||
hpt neg vpt 1.62 mul V closepath stroke} def
|
||||
/TriDE {stroke [] 0 setdash vpt 1.12 mul sub M
|
||||
hpt neg vpt 1.62 mul V
|
||||
hpt 2 mul 0 V
|
||||
hpt neg vpt -1.62 mul V closepath stroke} def
|
||||
/PentE {stroke [] 0 setdash gsave
|
||||
translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
|
||||
closepath stroke grestore} def
|
||||
/CircE {stroke [] 0 setdash
|
||||
hpt 0 360 arc stroke} def
|
||||
/Opaque {gsave closepath 1 setgray fill grestore 0 setgray closepath} def
|
||||
/DiaW {stroke [] 0 setdash vpt add M
|
||||
hpt neg vpt neg V hpt vpt neg V
|
||||
hpt vpt V hpt neg vpt V Opaque stroke} def
|
||||
/BoxW {stroke [] 0 setdash exch hpt sub exch vpt add M
|
||||
0 vpt2 neg V hpt2 0 V 0 vpt2 V
|
||||
hpt2 neg 0 V Opaque stroke} def
|
||||
/TriUW {stroke [] 0 setdash vpt 1.12 mul add M
|
||||
hpt neg vpt -1.62 mul V
|
||||
hpt 2 mul 0 V
|
||||
hpt neg vpt 1.62 mul V Opaque stroke} def
|
||||
/TriDW {stroke [] 0 setdash vpt 1.12 mul sub M
|
||||
hpt neg vpt 1.62 mul V
|
||||
hpt 2 mul 0 V
|
||||
hpt neg vpt -1.62 mul V Opaque stroke} def
|
||||
/PentW {stroke [] 0 setdash gsave
|
||||
translate 0 hpt M 4 {72 rotate 0 hpt L} repeat
|
||||
Opaque stroke grestore} def
|
||||
/CircW {stroke [] 0 setdash
|
||||
hpt 0 360 arc Opaque stroke} def
|
||||
/BoxFill {gsave Rec 1 setgray fill grestore} def
|
||||
/Density {
|
||||
/Fillden exch def
|
||||
currentrgbcolor
|
||||
/ColB exch def /ColG exch def /ColR exch def
|
||||
/ColR ColR Fillden mul Fillden sub 1 add def
|
||||
/ColG ColG Fillden mul Fillden sub 1 add def
|
||||
/ColB ColB Fillden mul Fillden sub 1 add def
|
||||
ColR ColG ColB setrgbcolor} def
|
||||
/BoxColFill {gsave Rec PolyFill} def
|
||||
/PolyFill {gsave Density fill grestore grestore} def
|
||||
/h {rlineto rlineto rlineto gsave closepath fill grestore} bind def
|
||||
%
|
||||
% PostScript Level 1 Pattern Fill routine for rectangles
|
||||
% Usage: x y w h s a XX PatternFill
|
||||
% x,y = lower left corner of box to be filled
|
||||
% w,h = width and height of box
|
||||
% a = angle in degrees between lines and x-axis
|
||||
% XX = 0/1 for no/yes cross-hatch
|
||||
%
|
||||
/PatternFill {gsave /PFa [ 9 2 roll ] def
|
||||
PFa 0 get PFa 2 get 2 div add PFa 1 get PFa 3 get 2 div add translate
|
||||
PFa 2 get -2 div PFa 3 get -2 div PFa 2 get PFa 3 get Rec
|
||||
gsave 1 setgray fill grestore clip
|
||||
currentlinewidth 0.5 mul setlinewidth
|
||||
/PFs PFa 2 get dup mul PFa 3 get dup mul add sqrt def
|
||||
0 0 M PFa 5 get rotate PFs -2 div dup translate
|
||||
0 1 PFs PFa 4 get div 1 add floor cvi
|
||||
{PFa 4 get mul 0 M 0 PFs V} for
|
||||
0 PFa 6 get ne {
|
||||
0 1 PFs PFa 4 get div 1 add floor cvi
|
||||
{PFa 4 get mul 0 2 1 roll M PFs 0 V} for
|
||||
} if
|
||||
stroke grestore} def
|
||||
%
|
||||
/languagelevel where
|
||||
{pop languagelevel} {1} ifelse
|
||||
2 lt
|
||||
{/InterpretLevel1 true def}
|
||||
{/InterpretLevel1 Level1 def}
|
||||
ifelse
|
||||
%
|
||||
% PostScript level 2 pattern fill definitions
|
||||
%
|
||||
/Level2PatternFill {
|
||||
/Tile8x8 {/PaintType 2 /PatternType 1 /TilingType 1 /BBox [0 0 8 8] /XStep 8 /YStep 8}
|
||||
bind def
|
||||
/KeepColor {currentrgbcolor [/Pattern /DeviceRGB] setcolorspace} bind def
|
||||
<< Tile8x8
|
||||
/PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke}
|
||||
>> matrix makepattern
|
||||
/Pat1 exch def
|
||||
<< Tile8x8
|
||||
/PaintProc {0.5 setlinewidth pop 0 0 M 8 8 L 0 8 M 8 0 L stroke
|
||||
0 4 M 4 8 L 8 4 L 4 0 L 0 4 L stroke}
|
||||
>> matrix makepattern
|
||||
/Pat2 exch def
|
||||
<< Tile8x8
|
||||
/PaintProc {0.5 setlinewidth pop 0 0 M 0 8 L
|
||||
8 8 L 8 0 L 0 0 L fill}
|
||||
>> matrix makepattern
|
||||
/Pat3 exch def
|
||||
<< Tile8x8
|
||||
/PaintProc {0.5 setlinewidth pop -4 8 M 8 -4 L
|
||||
0 12 M 12 0 L stroke}
|
||||
>> matrix makepattern
|
||||
/Pat4 exch def
|
||||
<< Tile8x8
|
||||
/PaintProc {0.5 setlinewidth pop -4 0 M 8 12 L
|
||||
0 -4 M 12 8 L stroke}
|
||||
>> matrix makepattern
|
||||
/Pat5 exch def
|
||||
<< Tile8x8
|
||||
/PaintProc {0.5 setlinewidth pop -2 8 M 4 -4 L
|
||||
0 12 M 8 -4 L 4 12 M 10 0 L stroke}
|
||||
>> matrix makepattern
|
||||
/Pat6 exch def
|
||||
<< Tile8x8
|
||||
/PaintProc {0.5 setlinewidth pop -2 0 M 4 12 L
|
||||
0 -4 M 8 12 L 4 -4 M 10 8 L stroke}
|
||||
>> matrix makepattern
|
||||
/Pat7 exch def
|
||||
<< Tile8x8
|
||||
/PaintProc {0.5 setlinewidth pop 8 -2 M -4 4 L
|
||||
12 0 M -4 8 L 12 4 M 0 10 L stroke}
|
||||
>> matrix makepattern
|
||||
/Pat8 exch def
|
||||
<< Tile8x8
|
||||
/PaintProc {0.5 setlinewidth pop 0 -2 M 12 4 L
|
||||
-4 0 M 12 8 L -4 4 M 8 10 L stroke}
|
||||
>> matrix makepattern
|
||||
/Pat9 exch def
|
||||
/Pattern1 {PatternBgnd KeepColor Pat1 setpattern} bind def
|
||||
/Pattern2 {PatternBgnd KeepColor Pat2 setpattern} bind def
|
||||
/Pattern3 {PatternBgnd KeepColor Pat3 setpattern} bind def
|
||||
/Pattern4 {PatternBgnd KeepColor Landscape {Pat5} {Pat4} ifelse setpattern} bind def
|
||||
/Pattern5 {PatternBgnd KeepColor Landscape {Pat4} {Pat5} ifelse setpattern} bind def
|
||||
/Pattern6 {PatternBgnd KeepColor Landscape {Pat9} {Pat6} ifelse setpattern} bind def
|
||||
/Pattern7 {PatternBgnd KeepColor Landscape {Pat8} {Pat7} ifelse setpattern} bind def
|
||||
} def
|
||||
%
|
||||
%
|
||||
%End of PostScript Level 2 code
|
||||
%
|
||||
/PatternBgnd {
|
||||
TransparentPatterns {} {gsave 1 setgray fill grestore} ifelse
|
||||
} def
|
||||
%
|
||||
% Substitute for Level 2 pattern fill codes with
|
||||
% grayscale if Level 2 support is not selected.
|
||||
%
|
||||
/Level1PatternFill {
|
||||
/Pattern1 {0.250 Density} bind def
|
||||
/Pattern2 {0.500 Density} bind def
|
||||
/Pattern3 {0.750 Density} bind def
|
||||
/Pattern4 {0.125 Density} bind def
|
||||
/Pattern5 {0.375 Density} bind def
|
||||
/Pattern6 {0.625 Density} bind def
|
||||
/Pattern7 {0.875 Density} bind def
|
||||
} def
|
||||
%
|
||||
% Now test for support of Level 2 code
|
||||
%
|
||||
Level1 {Level1PatternFill} {Level2PatternFill} ifelse
|
||||
%
|
||||
/Symbol-Oblique /Symbol findfont [1 0 .167 1 0 0] makefont
|
||||
dup length dict begin {1 index /FID eq {pop pop} {def} ifelse} forall
|
||||
currentdict end definefont pop
|
||||
/MFshow {
|
||||
{ dup 5 get 3 ge
|
||||
{ 5 get 3 eq {gsave} {grestore} ifelse }
|
||||
{dup dup 0 get findfont exch 1 get scalefont setfont
|
||||
[ currentpoint ] exch dup 2 get 0 exch R dup 5 get 2 ne {dup dup 6
|
||||
get exch 4 get {show} {stringwidth pop 0 R} ifelse }if dup 5 get 0 eq
|
||||
{dup 3 get {2 get neg 0 exch R pop} {pop aload pop M} ifelse} {dup 5
|
||||
get 1 eq {dup 2 get exch dup 3 get exch 6 get stringwidth pop -2 div
|
||||
dup 0 R} {dup 6 get stringwidth pop -2 div 0 R 6 get
|
||||
show 2 index {aload pop M neg 3 -1 roll neg R pop pop} {pop pop pop
|
||||
pop aload pop M} ifelse }ifelse }ifelse }
|
||||
ifelse }
|
||||
forall} bind def
|
||||
/MFwidth {0 exch { dup 5 get 3 ge { 5 get 3 eq { 0 } { pop } ifelse }
|
||||
{dup 3 get{dup dup 0 get findfont exch 1 get scalefont setfont
|
||||
6 get stringwidth pop add} {pop} ifelse} ifelse} forall} bind def
|
||||
/MLshow { currentpoint stroke M
|
||||
0 exch R
|
||||
Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
|
||||
/MRshow { currentpoint stroke M
|
||||
exch dup MFwidth neg 3 -1 roll R
|
||||
Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
|
||||
/MCshow { currentpoint stroke M
|
||||
exch dup MFwidth -2 div 3 -1 roll R
|
||||
Blacktext {gsave 0 setgray MFshow grestore} {MFshow} ifelse } bind def
|
||||
/XYsave { [( ) 1 2 true false 3 ()] } bind def
|
||||
/XYrestore { [( ) 1 2 true false 4 ()] } bind def
|
||||
end
|
||||
%%EndProlog
|
||||
gnudict begin
|
||||
gsave
|
||||
50 50 translate
|
||||
0.050 0.050 scale
|
||||
0 setgray
|
||||
newpath
|
||||
(Times) findfont 190 scalefont setfont
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
1159 608 M
|
||||
5756 0 V
|
||||
stroke
|
||||
LTb
|
||||
1159 608 M
|
||||
63 0 V
|
||||
5693 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
1045 608 M
|
||||
[ [(Times) 190.0 0.0 true true 0 (0.01)]
|
||||
] -63.3 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
1159 1241 M
|
||||
5756 0 V
|
||||
stroke
|
||||
LTb
|
||||
1159 1241 M
|
||||
63 0 V
|
||||
5693 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
LTa
|
||||
1159 1611 M
|
||||
5756 0 V
|
||||
stroke
|
||||
LTb
|
||||
1159 1611 M
|
||||
63 0 V
|
||||
5693 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
LTa
|
||||
1159 1874 M
|
||||
5756 0 V
|
||||
stroke
|
||||
LTb
|
||||
1159 1874 M
|
||||
63 0 V
|
||||
5693 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
LTa
|
||||
1159 2077 M
|
||||
5756 0 V
|
||||
stroke
|
||||
LTb
|
||||
1159 2077 M
|
||||
63 0 V
|
||||
5693 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
LTa
|
||||
1159 2244 M
|
||||
5756 0 V
|
||||
stroke
|
||||
LTb
|
||||
1159 2244 M
|
||||
63 0 V
|
||||
5693 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
LTa
|
||||
1159 2384 M
|
||||
5756 0 V
|
||||
stroke
|
||||
LTb
|
||||
1159 2384 M
|
||||
63 0 V
|
||||
5693 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
LTa
|
||||
1159 2506 M
|
||||
5756 0 V
|
||||
stroke
|
||||
LTb
|
||||
1159 2506 M
|
||||
63 0 V
|
||||
5693 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
LTa
|
||||
1159 2614 M
|
||||
5756 0 V
|
||||
stroke
|
||||
LTb
|
||||
1159 2614 M
|
||||
63 0 V
|
||||
5693 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
LTa
|
||||
1159 2710 M
|
||||
5756 0 V
|
||||
stroke
|
||||
LTb
|
||||
1159 2710 M
|
||||
63 0 V
|
||||
5693 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
1045 2710 M
|
||||
[ [(Times) 190.0 0.0 true true 0 (0.1)]
|
||||
] -63.3 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
1159 3343 M
|
||||
5756 0 V
|
||||
stroke
|
||||
LTb
|
||||
1159 3343 M
|
||||
63 0 V
|
||||
5693 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
LTa
|
||||
1159 3713 M
|
||||
5756 0 V
|
||||
stroke
|
||||
LTb
|
||||
1159 3713 M
|
||||
63 0 V
|
||||
5693 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
LTa
|
||||
1159 3976 M
|
||||
5756 0 V
|
||||
stroke
|
||||
LTb
|
||||
1159 3976 M
|
||||
63 0 V
|
||||
5693 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
LTa
|
||||
1159 4179 M
|
||||
5756 0 V
|
||||
stroke
|
||||
LTb
|
||||
1159 4179 M
|
||||
63 0 V
|
||||
5693 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
LTa
|
||||
1159 4346 M
|
||||
5756 0 V
|
||||
stroke
|
||||
LTb
|
||||
1159 4346 M
|
||||
63 0 V
|
||||
5693 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
LTa
|
||||
1159 4486 M
|
||||
3299 0 V
|
||||
2343 0 R
|
||||
114 0 V
|
||||
stroke
|
||||
LTb
|
||||
1159 4486 M
|
||||
63 0 V
|
||||
5693 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
LTa
|
||||
1159 4608 M
|
||||
3299 0 V
|
||||
2343 0 R
|
||||
114 0 V
|
||||
stroke
|
||||
LTb
|
||||
1159 4608 M
|
||||
63 0 V
|
||||
5693 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
LTa
|
||||
1159 4716 M
|
||||
3299 0 V
|
||||
2343 0 R
|
||||
114 0 V
|
||||
stroke
|
||||
LTb
|
||||
1159 4716 M
|
||||
63 0 V
|
||||
5693 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
LTa
|
||||
1159 4812 M
|
||||
5756 0 V
|
||||
stroke
|
||||
LTb
|
||||
1159 4812 M
|
||||
63 0 V
|
||||
5693 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
1045 4812 M
|
||||
[ [(Times) 190.0 0.0 true true 0 (1)]
|
||||
] -63.3 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
2118 608 M
|
||||
0 4204 V
|
||||
stroke
|
||||
LTb
|
||||
2118 608 M
|
||||
0 63 V
|
||||
0 4141 R
|
||||
0 -63 V
|
||||
stroke
|
||||
2118 418 M
|
||||
[ [(Times) 190.0 0.0 true true 0 (1)]
|
||||
] -63.3 MCshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
3078 608 M
|
||||
0 4204 V
|
||||
stroke
|
||||
LTb
|
||||
3078 608 M
|
||||
0 63 V
|
||||
0 4141 R
|
||||
0 -63 V
|
||||
stroke
|
||||
3078 418 M
|
||||
[ [(Times) 190.0 0.0 true true 0 (2)]
|
||||
] -63.3 MCshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
4037 608 M
|
||||
0 4204 V
|
||||
stroke
|
||||
LTb
|
||||
4037 608 M
|
||||
0 63 V
|
||||
0 4141 R
|
||||
0 -63 V
|
||||
stroke
|
||||
4037 418 M
|
||||
[ [(Times) 190.0 0.0 true true 0 (3)]
|
||||
] -63.3 MCshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
4996 608 M
|
||||
0 3761 V
|
||||
0 380 R
|
||||
0 63 V
|
||||
stroke
|
||||
LTb
|
||||
4996 608 M
|
||||
0 63 V
|
||||
0 4141 R
|
||||
0 -63 V
|
||||
stroke
|
||||
4996 418 M
|
||||
[ [(Times) 190.0 0.0 true true 0 (4)]
|
||||
] -63.3 MCshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
5956 608 M
|
||||
0 3761 V
|
||||
0 380 R
|
||||
0 63 V
|
||||
stroke
|
||||
LTb
|
||||
5956 608 M
|
||||
0 63 V
|
||||
0 4141 R
|
||||
0 -63 V
|
||||
stroke
|
||||
5956 418 M
|
||||
[ [(Times) 190.0 0.0 true true 0 (5)]
|
||||
] -63.3 MCshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTb
|
||||
1159 4812 N
|
||||
0 -4204 V
|
||||
5756 0 V
|
||||
0 4204 V
|
||||
-5756 0 V
|
||||
Z stroke
|
||||
LCb setrgbcolor
|
||||
380 2710 M
|
||||
currentpoint gsave translate 90 rotate 0 0 moveto
|
||||
[ [(Times) 190.0 0.0 true true 0 (Throughput Ratio)]
|
||||
] -63.3 MCshow
|
||||
grestore
|
||||
LTb
|
||||
LCb setrgbcolor
|
||||
4037 133 M
|
||||
[ [(Times) 190.0 0.0 true true 0 (User index )]
|
||||
[(Times-Italic) 190.0 0.0 true true 0 (i)]
|
||||
] -63.3 MCshow
|
||||
LTb
|
||||
1.000 UP
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LT0
|
||||
LTb
|
||||
6054 4654 M
|
||||
[ [(Times) 190.0 0.0 true true 0 (measured \()]
|
||||
[(Symbol) 190.0 0.0 true true 0 (r)]
|
||||
[(Times) 152.0 -57.0 true true 0 (T,i)]
|
||||
[(Times) 190.0 0.0 true true 0 (\))]
|
||||
] -44.3 MRshow
|
||||
LT0
|
||||
1.000 6168 4607 519 95 BoxColFill
|
||||
LTb
|
||||
6168 4607 N
|
||||
519 0 V
|
||||
0 94 V
|
||||
-519 0 V
|
||||
0 -94 V
|
||||
Z stroke
|
||||
LT0
|
||||
1.000 1839 608 240 3409 BoxColFill
|
||||
LTb
|
||||
1839 608 N
|
||||
0 3408 V
|
||||
239 0 V
|
||||
0 -3408 V
|
||||
-239 0 V
|
||||
Z stroke
|
||||
LT0
|
||||
1.000 2798 608 241 2976 BoxColFill
|
||||
LTb
|
||||
2798 608 N
|
||||
0 2975 V
|
||||
240 0 V
|
||||
0 -2975 V
|
||||
-240 0 V
|
||||
Z stroke
|
||||
LT0
|
||||
1.000 3757 608 241 2565 BoxColFill
|
||||
LTb
|
||||
3757 608 N
|
||||
0 2564 V
|
||||
240 0 V
|
||||
0 -2564 V
|
||||
-240 0 V
|
||||
Z stroke
|
||||
LT0
|
||||
1.000 4717 608 240 2139 BoxColFill
|
||||
LTb
|
||||
4717 608 N
|
||||
0 2138 V
|
||||
239 0 V
|
||||
0 -2138 V
|
||||
-239 0 V
|
||||
Z stroke
|
||||
LT0
|
||||
1.000 5676 608 241 1501 BoxColFill
|
||||
LTb
|
||||
5676 608 N
|
||||
0 1500 V
|
||||
240 0 V
|
||||
0 -1500 V
|
||||
-240 0 V
|
||||
Z stroke
|
||||
LT0
|
||||
1.000 UL
|
||||
LT1
|
||||
LTb
|
||||
6054 4464 M
|
||||
[ [(Times) 190.0 0.0 true true 0 (expected \()]
|
||||
[(Symbol) 190.0 0.0 true true 0 (r)]
|
||||
[(Times) 152.0 -57.0 true true 0 (R,i)]
|
||||
[(Times) 190.0 0.0 true true 0 (\))]
|
||||
] -44.3 MRshow
|
||||
LT1
|
||||
1.000 6168 4417 519 95 BoxColFill
|
||||
LTb
|
||||
6168 4417 N
|
||||
519 0 V
|
||||
0 94 V
|
||||
-519 0 V
|
||||
0 -94 V
|
||||
Z stroke
|
||||
LT1
|
||||
1.000 2158 608 241 3413 BoxColFill
|
||||
LTb
|
||||
2158 608 N
|
||||
0 3412 V
|
||||
240 0 V
|
||||
0 -3412 V
|
||||
-240 0 V
|
||||
Z stroke
|
||||
LT1
|
||||
1.000 3118 608 240 2973 BoxColFill
|
||||
LTb
|
||||
3118 608 N
|
||||
0 2972 V
|
||||
239 0 V
|
||||
0 -2972 V
|
||||
-239 0 V
|
||||
Z stroke
|
||||
LT1
|
||||
1.000 4077 608 241 2561 BoxColFill
|
||||
LTb
|
||||
4077 608 N
|
||||
0 2560 V
|
||||
240 0 V
|
||||
0 -2560 V
|
||||
-240 0 V
|
||||
Z stroke
|
||||
LT1
|
||||
1.000 5036 608 241 2137 BoxColFill
|
||||
LTb
|
||||
5036 608 N
|
||||
0 2136 V
|
||||
240 0 V
|
||||
0 -2136 V
|
||||
-240 0 V
|
||||
Z stroke
|
||||
LT1
|
||||
1.000 5996 608 240 1504 BoxColFill
|
||||
LTb
|
||||
5996 608 N
|
||||
0 1503 V
|
||||
239 0 V
|
||||
0 -1503 V
|
||||
-239 0 V
|
||||
Z stroke
|
||||
LT1
|
||||
1.000 UL
|
||||
LTb
|
||||
1159 4812 N
|
||||
0 -4204 V
|
||||
5756 0 V
|
||||
0 4204 V
|
||||
-5756 0 V
|
||||
Z stroke
|
||||
1.000 UP
|
||||
1.000 UL
|
||||
LTb
|
||||
stroke
|
||||
grestore
|
||||
end
|
||||
showpage
|
||||
%%Trailer
|
||||
%%DocumentFonts: Symbol Times-Italic Times
|
||||
@@ -40,29 +40,62 @@ Unit Tests
|
||||
SINR calculation in the Downlink
|
||||
--------------------------------
|
||||
|
||||
The test suite ``lte-downlink-sinr`` checks that the SINR calculation in downlink is performed correctly. The SINR in the downlink is calculated for each Resource Block assigned to data transmissions by dividing the power of the intended signal from the considered eNB by the sum of the noise power plus all the transmissions on the same RB coming from other eNBs (the interference signals).
|
||||
The test suite ``lte-downlink-sinr``
|
||||
checks that the SINR calculation in
|
||||
downlink is performed correctly. The SINR in the downlink is calculated for each
|
||||
RB assigned to data transmissions by dividing the power of the
|
||||
intended signal from the considered eNB by the sum of the noise power plus all
|
||||
the transmissions on the same RB coming from other eNBs (the interference
|
||||
signals):
|
||||
|
||||
.. math::
|
||||
|
||||
\gamma = \frac{ P_\mathrm{signal} }{ P_\mathrm{noise} + \sum P_\mathrm{interference} }
|
||||
|
||||
In general, different signals can be active during different periods of time. We define a *chunk* as the time interval between any two events of type either start or end of a waveform. In other words, a chunk identifies a time interval during which the set of active waveforms does not change. Let :math:`i` be the generic chunk, :math:`T_i` its duration and :math:`\mathrm{SINR_i}` its SINR, calculated with the above equation. The calculation of the average SINR :math:`\overline{\gamma}` to be used for CQI feedback reporting uses the following formula:
|
||||
In general, different signals can be active during different periods
|
||||
of time. We define a *chunk* as the time interval between any two
|
||||
events of type either start or end of a waveform. In other words, a
|
||||
chunk identifies a time interval during which the set of active
|
||||
waveforms does not change. Let :math:`i` be the generic chunk,
|
||||
:math:`T_i` its duration and :math:`\mathrm{SINR_i}` its SINR,
|
||||
calculated with the above equation. The calculation of the average
|
||||
SINR :math:`\overline{\gamma}` to be used for CQI feedback reporting
|
||||
uses the following formula:
|
||||
|
||||
.. math::
|
||||
|
||||
\overline{\gamma} = \frac{ \sum_i {\gamma}_i T_i }{ \sum_i T_{i} }
|
||||
|
||||
The test suite checks that the above calculation is performed correctly in the simulator. The test vectors are obtained offline by an Octave script that implements the above equation, and that recreates a number of random transmitted signals and interference signals that mimic a scenario where an UE is trying to decode a signal from an eNB while facing interference from other eNBs. The test passes if the calculated values are equal to the test vector within a tolerance of :math:`10^{-7}`. The tolerance is meant to account for the approximation errors typical of floating point arithmetic.
|
||||
The test suite checks that the above calculation is performed
|
||||
correctly in the simulator. The test vectors are obtained offline by
|
||||
an Octave script that implements the above equation, and that
|
||||
recreates a number of random transmitted signals and interference
|
||||
signals that mimic a scenario where an UE is trying to decode a signal
|
||||
from an eNB while facing interference from other eNBs. The test passes
|
||||
if the calculated values are equal to the test vector within a
|
||||
tolerance of :math:`10^{-7}`. The tolerance is meant to account for
|
||||
the approximation errors typical of floating point arithmetic.
|
||||
|
||||
|
||||
|
||||
SINR calculation in the Uplink
|
||||
------------------------------
|
||||
|
||||
The test suite ``lte-uplink-sinr`` checks that the SINR calculation in uplink is performed correctly. This test suite is identical to ``lte-downlink-sinr`` described in the previous section, with the difference than both the signal and the interference now refer to transmissions by the UEs, and reception is performed by the eNB.
|
||||
This test suite recreates a number of random transmitted signals and interference signals to mimic a scenario where an eNB is trying to decode the signal from several UEs simultaneously (the ones in the cell of the eNB) while facing interference from other UEs (the ones belonging to other cells).
|
||||
The test suite ``lte-uplink-sinr`` checks that the SINR calculation in
|
||||
uplink is performed correctly. This test suite is identical to
|
||||
``lte-downlink-sinr`` described in the previous section, with the
|
||||
difference than both the signal and the interference now refer to
|
||||
transmissions by the UEs, and reception is performed by the eNB.
|
||||
This test suite recreates a number of random transmitted signals and
|
||||
interference signals to mimic a scenario where an eNB is trying to
|
||||
decode the signal from several UEs simultaneously (the ones in the
|
||||
cell of the eNB) while facing interference from other UEs (the ones
|
||||
belonging to other cells).
|
||||
|
||||
The test vectors are obtained by a dedicated Octave script. The test passes if the calculated values are equal to the test vector within a tolerance of :math:`10^{-7}` which, as for the downlink SINR test, deals with floating point arithmetic approximation issues.
|
||||
The test vectors are obtained by a dedicated Octave script. The test
|
||||
passes if the calculated values are equal to the test vector within a
|
||||
tolerance of :math:`10^{-7}` which, as for the downlink SINR test,
|
||||
deals with floating point arithmetic approximation issues.
|
||||
|
||||
|
||||
System Tests
|
||||
@@ -71,78 +104,156 @@ System Tests
|
||||
Adaptive Modulation and Coding
|
||||
------------------------------
|
||||
|
||||
The test suite ``lte-link-adaptation`` provides system tests recreating a scenario with a single eNB and a single UE. Different test cases are created corresponding to different SINR values perceived by the UE. The aim of the test is to check that in each test case the chosen MCS corresponds to the values in a known test vector.
|
||||
The test suite ``lte-link-adaptation`` provides system tests recreating a
|
||||
scenario with a single eNB and a single UE. Different test cases are created
|
||||
corresponding to different SINR values perceived by the UE. The aim of the test
|
||||
is to check that in each test case the chosen MCS corresponds to some known
|
||||
reference values. These reference values are obtained by re-implementing the
|
||||
model described in Section~\ref{sec:amc} in Octave. The resulting test vector is
|
||||
represented in Figure :ref:`fig-lte-mcs-index`.
|
||||
|
||||
The test vector is obtained with the model described in [Piro2011]_ which cites [Seo2004]_. Here we described how this model works. Let :math:`i` denote the generic user, and let :math:`\gamma_i` be its SINR. We get the spectral efficiency :math:`\eta_i` of user :math:`i` using the following equations:
|
||||
|
||||
.. math::
|
||||
|
||||
\mathrm{BER} = 0.00005
|
||||
|
||||
.. math::
|
||||
|
||||
\Gamma = \frac{ -\ln{ (5 * \mathrm{BER}) } }{ 1.5 }
|
||||
|
||||
.. math::
|
||||
|
||||
\eta_i = \log_2 { \left( 1 + \frac{ {\gamma}_i }{ \Gamma } \right) }
|
||||
|
||||
Then, 3GPP [R1-081483]_ document (its XLS sheet annexed file) is used to get the corresponding MCS scheme. The spectral efficiency is quantized based on the CQI (rounding to the lowest value) and is mapped to the corresponding MCS scheme (i.e. the MCS index that appears on the same line looking at the MCS table on the right). Note that the quantization of the CQI is coarser than the spectral efficiency reported in the CQI table.
|
||||
|
||||
Finally, note that there are some discrepancies between the MCS index in [R1-081483]_ and that indicated by the standard: [TS36.213]_ Table 7.1.7.1-1 says that the MCS index goes from 0 to 31, and 0 appears to be a valid MCS scheme (TB size is not 0) but in [R1-081483]_ the first useful MCS index is 1. Hence to get the value as intended by the standard we need to subtract 1 from the index reported in [R1-081483]_.
|
||||
|
||||
The test passes if both the following conditions are verified:
|
||||
|
||||
#. the SINR calculated by the UE corresponds to the value intended for the given test case within a tolerance of :math:`10^{-7}`. The tolerance is meant to account for the approximation errors typical of floating point arithmetic. This test condition acts as a system test of the SINR calculation. This is needed because the other test suites that deal with the SINR calculation are unit tests, and hence might not be able to detect system-level bugs in the SINR calculation.
|
||||
#. the MCS index chosen by the scheduler matches exactly with the MCS index in the test vector, determined using the above described procedure.
|
||||
|
||||
In the following figure, we see the modulation to be used depending on the MCS index. This mapping is defined in [R1-081483]_.
|
||||
.. _fig-lte-mcs-index:
|
||||
|
||||
.. figure:: figures/lte-mcs-index.*
|
||||
:align: center
|
||||
|
||||
Modulation depending on the SINR and MCS index
|
||||
Test vector for Adaptive Modulation and Coding
|
||||
|
||||
|
||||
|
||||
Round Robin scheduler performance
|
||||
---------------------------------
|
||||
|
||||
The test suite ``lte-rr-ff-mac-scheduler`` creates different test cases with a single eNB and several UEs, all having the same Radio Bearer specification. In each test case, the UEs see the same SINR from the eNB; different test cases are implemented by using different distance among UEs and the eNB (i.e., therefore having different SINR values) and different numbers of UEs. The test consists on checking that the obtained throughput performance is equal among users and matches a reference throughput value obtained according to the SINR perceived within a given tolerance.
|
||||
The test vector is obtained according to the values of transport block size reported in table 7.1.7.2.1-1 of [TS36.213]_, considering an equal distribution of the physical resource block among the users using Resource Allocation Type 0 as defined in Section 7.1.6.1 of [TS36.213]_. Let :math:`\tau` be the TTI duration, :math:`N` be the number of UEs, :math:`B` the transmission bandwidth configuration in number of RBs, :math:`G` the RBG size, :math:`M` the modulation and coding scheme in use at the given SINR and :math:`S(M, B)` be the transport block size in bits as defined by 3GPP TS 36.213. We first calculate the number :math:`L` of RBGs allocated to each user as
|
||||
The test suite ``lte-rr-ff-mac-scheduler`` creates different test cases with
|
||||
a single eNB and several UEs, all having the same Radio Bearer specification. In
|
||||
each test case, the UEs see the same SINR from the eNB; different test cases are
|
||||
implemented by using different distance among UEs and the eNB (i.e., therefore
|
||||
having different SINR values) and different numbers of UEs. The test consists on
|
||||
checking that the obtained throughput performance is equal among users and
|
||||
matches a reference throughput value obtained according to the SINR perceived
|
||||
within a given tolerance.
|
||||
|
||||
The test vector is obtained according to the values of transport block
|
||||
size reported in table 7.1.7.2.1-1 of [TS36.213]_, considering an
|
||||
equal distribution of the physical resource block among the users
|
||||
using Resource Allocation Type 0 as defined in Section 7.1.6.1 of
|
||||
[TS36.213]_. Let :math:`\tau` be the TTI duration, :math:`N` be the
|
||||
number of UEs, :math:`B` the transmission bandwidth configuration in
|
||||
number of RBs, :math:`G` the RBG size, :math:`M` the modulation and
|
||||
coding scheme in use at the given SINR and :math:`S(M, B)` be the
|
||||
transport block size in bits as defined by 3GPP TS 36.213. We first
|
||||
calculate the number :math:`L` of RBGs allocated to each user as
|
||||
|
||||
.. math::
|
||||
|
||||
L = \left\lfloor \frac{B}{NG} \right\rfloor
|
||||
|
||||
The reference throughput (in bytes per second) :math:`T` in bps achieved by each UE is then calculated as
|
||||
The reference throughput :math:`T` in bit/s achieved by each UE is then calculated as
|
||||
|
||||
.. math::
|
||||
|
||||
T = \frac{S(M, L G)}{8 \; \tau}
|
||||
|
||||
The test passes if the measured throughput matches with the reference throughput within a relative tolerance of 0.1. This tolerance is needed to account for the transient behavior at the beginning of the simulation (e.g., CQI feedback is only available after a few subframes) as well as for the accuracy of the estimator of the average throughput performance over the chosen simulation time (0.04s). We note that a lower value of the tolerance can be achieved by making each test case running longer simulations; we chose not to do this in order to keep the total execution time of this test suite as low as possible in spite of the high number of test cases.
|
||||
The test passes if the measured throughput matches with the reference throughput
|
||||
within a relative tolerance of 0.1. This tolerance is needed to account for the
|
||||
transient behavior at the beginning of the simulation (e.g., CQI feedback is
|
||||
only available after a few subframes) as well as for the accuracy of the
|
||||
estimator of the average throughput performance over the chosen simulation time
|
||||
(0.4s). This choice of the simulation time is justified by the need to
|
||||
follow the ns-3 guidelines of keeping the total execution time of the test
|
||||
suite low, in spite of the high number of test cases. In any case, we note that
|
||||
a lower value of the tolerance can be used when longer simulations are
|
||||
run.
|
||||
|
||||
In Figure `fig-lenaThrTestCase1`_, the curves labeled "RR" represent the test values
|
||||
calculated for the RR scheduler test, as a function of the number of UEs and of
|
||||
the MCS index being used in each test case.
|
||||
|
||||
.. _fig-lenaThrTestCase1:
|
||||
|
||||
.. figure:: figures/lenaThrTestCase1.*
|
||||
:align: center
|
||||
|
||||
Test vectors for the RR and PF Scheduler in the downlink in a
|
||||
scenario where all UEs use the same MCS.
|
||||
|
||||
Proportional Fair scheduler performance
|
||||
---------------------------------------
|
||||
|
||||
The test suite ``lte-pf-ff-mac-scheduler`` creates different test cases with a single eNB, using the Proportional Fair (PF) scheduler, and several UEs, all having the same Radio Bearer specification. The test cases are grouped in two categories in order to evaluate both the performance in terms of adaptation to channel condition and from fairness perspective.
|
||||
The test suite ``lte-pf-ff-mac-scheduler`` creates different test cases with
|
||||
a single eNB, using the Proportional Fair (PF) scheduler, and several UEs, all
|
||||
having the same Radio Bearer specification. The test cases are grouped in two
|
||||
categories in order to evaluate the performance both in terms of the adaptation
|
||||
to the channel condition and from a fairness perspective.
|
||||
|
||||
In the first category of test cases, the UEs are all placed at the same distance from the eNB, and hence all placed in order to have the same SINR. Different test cases are implemented by using a different SINR value and a different number of UEs. The test consists on checking that the obtained throughput performance matches with the known reference throughput up to a given tolerance. The expected behavior of the PF scheduler when all UEs have the same SNR is that each UE should get an equal fraction of the throughput obtainable by a single UE when using all the resources. We calculate the reference throughput value by dividing the throughput achievable by a single UE at the given SNR by the total number of UEs. Let :math:`\tau` be the TTI duration, :math:`B` the transmission bandwidth configuration in number of RBs, :math:`M` the modulation and coding scheme in use at the given SINR and :math:`S(M, B)` be the transport block size as defined in [TS36.213]_. The reference throughput :math:`T` achieved by each UE is calculated as
|
||||
In the first category of test cases, the UEs are all placed at the
|
||||
same distance from the eNB, and hence all placed in order to have the
|
||||
same SINR. Different test cases are implemented by using a different
|
||||
SINR value and a different number of UEs. The test consists on
|
||||
checking that the obtained throughput performance matches with the
|
||||
known reference throughput up to a given tolerance. The expected
|
||||
behavior of the PF scheduler when all UEs have the same SNR is that
|
||||
each UE should get an equal fraction of the throughput obtainable by a
|
||||
single UE when using all the resources. We calculate the reference
|
||||
throughput value by dividing the throughput achievable by a single UE
|
||||
at the given SNR by the total number of UEs.
|
||||
Let :math:`\tau` be the TTI duration, :math:`B` the transmission
|
||||
bandwidth configuration in number of RBs, :math:`M` the modulation and
|
||||
coding scheme in use at the given SINR and :math:`S(M, B)` be the
|
||||
transport block size as defined in [TS36.213]_. The reference
|
||||
throughput :math:`T` in bit/s achieved by each UE is calculated as
|
||||
|
||||
.. math::
|
||||
|
||||
T = \frac{S(M,B)}{\tau N}
|
||||
|
||||
The second category of tests is aimed at verify the fairness behavior in presence of UEs with different SINRs (and therefore different estimated throughput from PFS). The test consists of checking whether the throughput obtained by each UE over the whole simulation matches with the steady-state throughput expected by the PF scheduler according to the theory (see for instance [Kushner2004]_).
|
||||
Let :math:`Ri` the estimation done by PFS of the throughput of the :math:`i` UE for the next TTI according to the CQIs received and :math:`Ti` the throughput preceived by the :math:`i` UE . The test verifies that the ratio of the obtained throughput value respect to the global one (i.e. the sum of the ones of all users) is equal to the steady-state throughput of the PFS, that is
|
||||
The curves labeled "PF" in Figure `fig-lenaThrTestCase1`_ represent the test values
|
||||
calculated for the PF scheduler tests of the first category, that we just described.
|
||||
|
||||
The second category of tests aims at verifying the fairness of the PF
|
||||
scheduler in a more realistic simulation scenario where the UEs have a
|
||||
different SINR (constant for the whole simulation). In these conditions, the PF
|
||||
scheduler will give to each user a share of the system bandwidth that is
|
||||
proportional to the capacity achievable by a single user alone considered its
|
||||
SINR. In detail, let :math:`M_i` be the modulation and coding scheme being used by
|
||||
each UE (which is a deterministic function of the SINR of the UE, and is hence
|
||||
known in this scenario). Based on the MCS, we determine the achievable
|
||||
rate :math:`R_i` for each user :math:`i` using the
|
||||
procedure described in Section~\ref{sec:pfs}. We then define the
|
||||
achievable rate ratio :math:`\rho_{R,i}` of each user :math:`i` as
|
||||
|
||||
.. math::
|
||||
\rho_{R,i} = \frac{R_i}{\sum_{j=1}^N R_j}
|
||||
|
||||
K = \frac{Ri}{\sum_{k=1}^N Ri} = \frac{Ti}{\sum_{k=1}^N Ti}
|
||||
Let now :math:`T_i` be the throughput actually achieved by the UE :math:`i` , which
|
||||
is obtained as part of the simulation output. We define the obtained throughput
|
||||
ratio :math:`\rho_{R,i}` of UE :math:`i` as
|
||||
|
||||
The test passes if the measured throughput matches with the reference throughput within a relative tolerance of 0.1. The choice of this tolerance has the same motivations already discussed for the Round Robin scheduler test suite.
|
||||
.. math::
|
||||
\rho_{T,i} = \frac{T_i}{\sum_{j=1}^N T_j}
|
||||
|
||||
The test consists of checking that the following condition is verified:
|
||||
|
||||
.. math::
|
||||
\rho_{R,i} = \rho_{T,i}
|
||||
|
||||
if so, it means that the throughput obtained by each UE over the whole
|
||||
simulation matches with the steady-state throughput expected by the PF scheduler
|
||||
according to the theory (see for instance [Kushner2004]_).
|
||||
|
||||
|
||||
Figure :ref:`fig-lenaThrTestCase2` presents the results obtained in a test case with
|
||||
UEs :math:`i=1,\dots,5` that are located at a distance from the base
|
||||
station such that they will use respectively the MCS index :math:`28, 24, 16, 12,
|
||||
6`. From the figure, we note that, as expected, the obtained throughput is
|
||||
proportional to the achievable rate. In other words, the PF scheduler assign
|
||||
more resources to the users that use a higher MCS index.
|
||||
|
||||
|
||||
.. _fig-lenaThrTestCase2:
|
||||
|
||||
.. figure:: figures/lenaThrTestCase2.*
|
||||
:align: center
|
||||
|
||||
Throughput ratio evaluation for the PF scheduler in a scenario
|
||||
where the UEs have MCS index :math:`28, 24, 16, 12, 6`
|
||||
|
||||
Reference in New Issue
Block a user