merge
This commit is contained in:
@@ -11,8 +11,15 @@ IMAGES_EPS = \
|
||||
$(FIGURES)/ff-mac-saps.eps \
|
||||
$(FIGURES)/ff-example.eps \
|
||||
$(FIGURES)/lte-enb-architecture.eps \
|
||||
$(FIGURES)/lte-ue-architecture.eps \
|
||||
$(FIGURES)/lte-ue-architecture.eps
|
||||
|
||||
# specify figures for build process (all eps figures)
|
||||
GRAPHS_EPS = \
|
||||
$(FIGURES)/lte-mcs-index.eps \
|
||||
$(FIGURES)/lenaThrTestCase1.eps \
|
||||
$(FIGURES)/lenaThrTestCase2.eps \
|
||||
$(FIGURES)/simulationTime.eps \
|
||||
$(FIGURES)/memoryUsage.eps
|
||||
|
||||
# rescale figures as necessary
|
||||
$(FIGURES)/testbed.pdf_width = 5in
|
||||
@@ -38,6 +45,14 @@ IMAGES = $(IMAGES_EPS) $(IMAGES_PNG) $(IMAGES_PDF)
|
||||
%.png : %.dia; $(DIA) -t png $< -e $@
|
||||
%.pdf : %.eps; $(EPSTOPDF) $< -o=$@; if test x$($@_width) != x; then TMPFILE=`mktemp`; ./rescale-pdf.sh $($@_width) $@ $${TMPFILE} && mv $${TMPFILE} $@; fi
|
||||
|
||||
GRAPHS_PNG = ${GRAPHS_EPS:.eps=.png}
|
||||
GRAPHS_PDF = ${GRAPHS_EPS:.eps=.pdf}
|
||||
|
||||
GRAPHS = $(GRAPHS_EPS) $(GRAPHS_PNG) $(GRAPHS_PDF)
|
||||
|
||||
%.png : %.eps; $(CONVERT) $< $@
|
||||
%.pdf : %.eps; $(EPSTOPDF) $< -o=$@; if test x$($@_width) != x; then TMPFILE=`mktemp`; ./rescale-pdf.sh $($@_width) $@ $${TMPFILE} && mv $${TMPFILE} $@; fi
|
||||
|
||||
# You can set these variables from the command line.
|
||||
SPHINXOPTS =
|
||||
SPHINXBUILD = sphinx-build
|
||||
@@ -72,14 +87,17 @@ help:
|
||||
|
||||
clean:
|
||||
-rm -rf $(BUILDDIR)/*
|
||||
-rm -rf $(SOURCE)
|
||||
-rm -f $(IMAGES_PNG)
|
||||
-rm -f $(IMAGES_PDF)
|
||||
-rm -f $(GRAPHS_PNG)
|
||||
-rm -f $(GRAPHS_PDF)
|
||||
|
||||
frag: pickle
|
||||
@if test ! -d $(BUILDDIR)/frag; then mkdir $(BUILDDIR)/frag; fi
|
||||
pushd $(BUILDDIR)/frag && ../../pickle-to-xml.py ../pickle/index.fpickle > navigation.xml && popd
|
||||
cp -r $(BUILDDIR)/pickle/_images $(BUILDDIR)/frag
|
||||
|
||||
html: $(IMAGES)
|
||||
html: $(IMAGES) ${GRAPHS}
|
||||
$(SPHINXBUILD) -b html $(ALLSPHINXOPTS) $(BUILDDIR)/html
|
||||
@echo
|
||||
@echo "Build finished. The HTML pages are in $(BUILDDIR)/html."
|
||||
@@ -133,14 +151,14 @@ epub: $(IMAGES)
|
||||
@echo
|
||||
@echo "Build finished. The epub file is in $(BUILDDIR)/epub."
|
||||
|
||||
latex: $(IMAGES)
|
||||
latex: $(IMAGES) ${GRAPHS}
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo
|
||||
@echo "Build finished; the LaTeX files are in $(BUILDDIR)/latex."
|
||||
@echo "Run \`make' in that directory to run these through (pdf)latex" \
|
||||
"(use \`make latexpdf' here to do that automatically)."
|
||||
|
||||
latexpdf: $(IMAGES)
|
||||
latexpdf: $(IMAGES) ${GRAPHS}
|
||||
$(SPHINXBUILD) -b latex $(ALLSPHINXOPTS) $(BUILDDIR)/latex
|
||||
@echo "Running LaTeX files through pdflatex..."
|
||||
make -C $(BUILDDIR)/latex all-pdf
|
||||
|
||||
@@ -178,10 +178,10 @@ html_theme = 'default'
|
||||
# Grouping the document tree into LaTeX files. List of tuples
|
||||
# (source start file, target name, title, author, documentclass [howto/manual]).
|
||||
latex_documents = [
|
||||
('lte-testing', 'lena-testing.tex', u'LENA Testing Documentation', u'CTTC', 'manual'),
|
||||
('lte-design', 'lena-design.tex', u'LENA Design Documentation', u'CTTC', 'manual'),
|
||||
('lte-user', 'lena-user.tex', u'LENA User Documentation', u'CTTC', 'manual'),
|
||||
|
||||
# ('lte-testing', 'lte-doc-testing.tex', u'LTE Simulator Testing Documentation', u'Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)', 'manual'),
|
||||
# ('lte-design', 'lte-doc-design.tex', u'LTE Simulator Design Documentation', u'Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)', 'manual'),
|
||||
# ('lte-user', 'lte-doc-user.tex', u'LTE Simulator User Documentation', u'Centre Tecnologic de Telecomunicacions de Catalunya (CTTC)', 'manual'),
|
||||
('lte', 'lte-sim-doc.tex', u'LTE Simulator Documentation', u'Centre Tecnològic de Telecomunicacions de Catalunya (CTTC)', 'manual'),
|
||||
]
|
||||
|
||||
# The name of an image file (relative to this directory) to place at the top of
|
||||
|
||||
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
|
||||
Binary file not shown.
Binary file not shown.
|
Before Width: | Height: | Size: 13 KiB |
863
src/lte/doc/source/figures/memoryUsage.eps
Normal file
863
src/lte/doc/source/figures/memoryUsage.eps
Normal file
@@ -0,0 +1,863 @@
|
||||
%!PS-Adobe-2.0 EPSF-2.0
|
||||
%%Title: ../figures/memoryUsage.eps
|
||||
%%Creator: gnuplot 4.2 patchlevel 6
|
||||
%%CreationDate: Fri May 27 14:35:30 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 false 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 -46 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 (../figures/memoryUsage.eps)
|
||||
/Subject (gnuplot plot)
|
||||
/Creator (gnuplot 4.2 patchlevel 6 )
|
||||
/Author (Nicola Baldo,,,)
|
||||
% /Producer (gnuplot)
|
||||
% /Keywords ()
|
||||
/CreationDate (Fri May 27 14:35:30 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
|
||||
(Helvetica) findfont 140 scalefont setfont
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
686 448 M
|
||||
6304 0 V
|
||||
stroke
|
||||
LTb
|
||||
686 448 M
|
||||
63 0 V
|
||||
6241 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
602 448 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 0)]
|
||||
] -46.7 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
686 1001 M
|
||||
6304 0 V
|
||||
stroke
|
||||
LTb
|
||||
686 1001 M
|
||||
63 0 V
|
||||
6241 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
602 1001 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 1)]
|
||||
] -46.7 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
686 1554 M
|
||||
6304 0 V
|
||||
stroke
|
||||
LTb
|
||||
686 1554 M
|
||||
63 0 V
|
||||
6241 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
602 1554 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 2)]
|
||||
] -46.7 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
686 2107 M
|
||||
6304 0 V
|
||||
stroke
|
||||
LTb
|
||||
686 2107 M
|
||||
63 0 V
|
||||
6241 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
602 2107 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 3)]
|
||||
] -46.7 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
686 2660 M
|
||||
6304 0 V
|
||||
stroke
|
||||
LTb
|
||||
686 2660 M
|
||||
63 0 V
|
||||
6241 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
602 2660 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 4)]
|
||||
] -46.7 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
686 3213 M
|
||||
6304 0 V
|
||||
stroke
|
||||
LTb
|
||||
686 3213 M
|
||||
63 0 V
|
||||
6241 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
602 3213 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 5)]
|
||||
] -46.7 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
686 3766 M
|
||||
6304 0 V
|
||||
stroke
|
||||
LTb
|
||||
686 3766 M
|
||||
63 0 V
|
||||
6241 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
602 3766 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 6)]
|
||||
] -46.7 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
686 4319 M
|
||||
84 0 V
|
||||
1659 0 R
|
||||
4561 0 V
|
||||
stroke
|
||||
LTb
|
||||
686 4319 M
|
||||
63 0 V
|
||||
6241 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
602 4319 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 7)]
|
||||
] -46.7 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
686 4872 M
|
||||
6304 0 V
|
||||
stroke
|
||||
LTb
|
||||
686 4872 M
|
||||
63 0 V
|
||||
6241 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
602 4872 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 8)]
|
||||
] -46.7 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
686 448 M
|
||||
0 4424 V
|
||||
stroke
|
||||
LTb
|
||||
686 448 M
|
||||
0 63 V
|
||||
0 4361 R
|
||||
0 -63 V
|
||||
stroke
|
||||
686 308 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 0)]
|
||||
] -46.7 MCshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
1737 448 M
|
||||
0 3731 V
|
||||
0 630 R
|
||||
0 63 V
|
||||
stroke
|
||||
LTb
|
||||
1737 448 M
|
||||
0 63 V
|
||||
0 4361 R
|
||||
0 -63 V
|
||||
stroke
|
||||
1737 308 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 2)]
|
||||
] -46.7 MCshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
2787 448 M
|
||||
0 4424 V
|
||||
stroke
|
||||
LTb
|
||||
2787 448 M
|
||||
0 63 V
|
||||
0 4361 R
|
||||
0 -63 V
|
||||
stroke
|
||||
2787 308 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 4)]
|
||||
] -46.7 MCshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
3838 448 M
|
||||
0 4424 V
|
||||
stroke
|
||||
LTb
|
||||
3838 448 M
|
||||
0 63 V
|
||||
0 4361 R
|
||||
0 -63 V
|
||||
stroke
|
||||
3838 308 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 6)]
|
||||
] -46.7 MCshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
4889 448 M
|
||||
0 4424 V
|
||||
stroke
|
||||
LTb
|
||||
4889 448 M
|
||||
0 63 V
|
||||
0 4361 R
|
||||
0 -63 V
|
||||
stroke
|
||||
4889 308 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 8)]
|
||||
] -46.7 MCshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
5939 448 M
|
||||
0 4424 V
|
||||
stroke
|
||||
LTb
|
||||
5939 448 M
|
||||
0 63 V
|
||||
0 4361 R
|
||||
0 -63 V
|
||||
stroke
|
||||
5939 308 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 10)]
|
||||
] -46.7 MCshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
6990 448 M
|
||||
0 4424 V
|
||||
stroke
|
||||
LTb
|
||||
6990 448 M
|
||||
0 63 V
|
||||
0 4361 R
|
||||
0 -63 V
|
||||
stroke
|
||||
6990 308 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 12)]
|
||||
] -46.7 MCshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTb
|
||||
686 4872 N
|
||||
686 448 L
|
||||
6304 0 V
|
||||
0 4424 V
|
||||
-6304 0 V
|
||||
Z stroke
|
||||
LCb setrgbcolor
|
||||
280 2660 M
|
||||
currentpoint gsave translate 90 rotate 0 0 moveto
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 (Memory usage [MB])]
|
||||
] -46.7 MCshow
|
||||
grestore
|
||||
LTb
|
||||
LCb setrgbcolor
|
||||
3838 98 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 (Number of eNBs)]
|
||||
] -46.7 MCshow
|
||||
LTb
|
||||
1.000 UP
|
||||
1.000 UL
|
||||
LTb
|
||||
1.500 UP
|
||||
2.000 UL
|
||||
LT2
|
||||
0.63 0.13 0.94 C LTb
|
||||
1337 4704 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 1 UE per eNB)]
|
||||
] -46.7 MLshow
|
||||
LT2
|
||||
0.63 0.13 0.94 C 854 4704 M
|
||||
399 0 V
|
||||
1211 2218 M
|
||||
526 166 V
|
||||
525 110 V
|
||||
525 166 V
|
||||
526 166 V
|
||||
525 166 V
|
||||
525 110 V
|
||||
526 166 V
|
||||
525 166 V
|
||||
525 166 V
|
||||
526 166 V
|
||||
525 111 V
|
||||
1211 2218 Pls
|
||||
1737 2384 Pls
|
||||
2262 2494 Pls
|
||||
2787 2660 Pls
|
||||
3313 2826 Pls
|
||||
3838 2992 Pls
|
||||
4363 3102 Pls
|
||||
4889 3268 Pls
|
||||
5414 3434 Pls
|
||||
5939 3600 Pls
|
||||
6465 3766 Pls
|
||||
6990 3877 Pls
|
||||
1054 4704 Pls
|
||||
1.500 UP
|
||||
2.000 UL
|
||||
LT1
|
||||
1.00 0.00 0.00 C LTb
|
||||
1337 4494 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 5 UE per eNB)]
|
||||
] -46.7 MLshow
|
||||
LT1
|
||||
1.00 0.00 0.00 C 854 4494 M
|
||||
399 0 V
|
||||
1211 2218 M
|
||||
526 166 V
|
||||
525 165 V
|
||||
525 166 V
|
||||
526 166 V
|
||||
525 166 V
|
||||
525 221 V
|
||||
526 166 V
|
||||
525 166 V
|
||||
525 221 V
|
||||
526 332 V
|
||||
525 111 V
|
||||
1211 2218 Crs
|
||||
1737 2384 Crs
|
||||
2262 2549 Crs
|
||||
2787 2715 Crs
|
||||
3313 2881 Crs
|
||||
3838 3047 Crs
|
||||
4363 3268 Crs
|
||||
4889 3434 Crs
|
||||
5414 3600 Crs
|
||||
5939 3821 Crs
|
||||
6465 4153 Crs
|
||||
6990 4264 Crs
|
||||
1054 4494 Crs
|
||||
1.500 UP
|
||||
2.000 UL
|
||||
LT3
|
||||
0.00 0.00 1.00 C LTb
|
||||
1337 4284 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 (10 UE per eNB)]
|
||||
] -46.7 MLshow
|
||||
LT3
|
||||
0.00 0.00 1.00 C 854 4284 M
|
||||
399 0 V
|
||||
1211 2328 M
|
||||
526 166 V
|
||||
525 166 V
|
||||
525 221 V
|
||||
526 111 V
|
||||
525 221 V
|
||||
525 332 V
|
||||
526 166 V
|
||||
525 221 V
|
||||
525 276 V
|
||||
526 222 V
|
||||
525 166 V
|
||||
1211 2328 Star
|
||||
1737 2494 Star
|
||||
2262 2660 Star
|
||||
2787 2881 Star
|
||||
3313 2992 Star
|
||||
3838 3213 Star
|
||||
4363 3545 Star
|
||||
4889 3711 Star
|
||||
5414 3932 Star
|
||||
5939 4208 Star
|
||||
6465 4430 Star
|
||||
6990 4596 Star
|
||||
1054 4284 Star
|
||||
1.000 UL
|
||||
LTb
|
||||
686 4872 N
|
||||
686 448 L
|
||||
6304 0 V
|
||||
0 4424 V
|
||||
-6304 0 V
|
||||
Z stroke
|
||||
1.000 UP
|
||||
1.000 UL
|
||||
LTb
|
||||
stroke
|
||||
grestore
|
||||
end
|
||||
showpage
|
||||
997
src/lte/doc/source/figures/simulationTime.eps
Normal file
997
src/lte/doc/source/figures/simulationTime.eps
Normal file
@@ -0,0 +1,997 @@
|
||||
%!PS-Adobe-2.0 EPSF-2.0
|
||||
%%Title: ../figures/simulationTime.eps
|
||||
%%Creator: gnuplot 4.2 patchlevel 6
|
||||
%%CreationDate: Fri May 27 14:35:30 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 false 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 -46 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 (../figures/simulationTime.eps)
|
||||
/Subject (gnuplot plot)
|
||||
/Creator (gnuplot 4.2 patchlevel 6 )
|
||||
/Author (Nicola Baldo,,,)
|
||||
% /Producer (gnuplot)
|
||||
% /Keywords ()
|
||||
/CreationDate (Fri May 27 14:35:30 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
|
||||
(Helvetica) findfont 140 scalefont setfont
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
938 448 M
|
||||
6052 0 V
|
||||
stroke
|
||||
LTb
|
||||
938 448 M
|
||||
63 0 V
|
||||
5989 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
854 448 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 0)]
|
||||
] -46.7 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
938 940 M
|
||||
6052 0 V
|
||||
stroke
|
||||
LTb
|
||||
938 940 M
|
||||
63 0 V
|
||||
5989 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
854 940 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 200)]
|
||||
] -46.7 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
938 1431 M
|
||||
6052 0 V
|
||||
stroke
|
||||
LTb
|
||||
938 1431 M
|
||||
63 0 V
|
||||
5989 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
854 1431 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 400)]
|
||||
] -46.7 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
938 1923 M
|
||||
6052 0 V
|
||||
stroke
|
||||
LTb
|
||||
938 1923 M
|
||||
63 0 V
|
||||
5989 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
854 1923 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 600)]
|
||||
] -46.7 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
938 2414 M
|
||||
6052 0 V
|
||||
stroke
|
||||
LTb
|
||||
938 2414 M
|
||||
63 0 V
|
||||
5989 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
854 2414 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 800)]
|
||||
] -46.7 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
938 2906 M
|
||||
6052 0 V
|
||||
stroke
|
||||
LTb
|
||||
938 2906 M
|
||||
63 0 V
|
||||
5989 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
854 2906 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 1000)]
|
||||
] -46.7 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
938 3397 M
|
||||
6052 0 V
|
||||
stroke
|
||||
LTb
|
||||
938 3397 M
|
||||
63 0 V
|
||||
5989 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
854 3397 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 1200)]
|
||||
] -46.7 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
938 3889 M
|
||||
6052 0 V
|
||||
stroke
|
||||
LTb
|
||||
938 3889 M
|
||||
63 0 V
|
||||
5989 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
854 3889 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 1400)]
|
||||
] -46.7 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
938 4380 M
|
||||
84 0 V
|
||||
3087 0 R
|
||||
2881 0 V
|
||||
stroke
|
||||
LTb
|
||||
938 4380 M
|
||||
63 0 V
|
||||
5989 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
854 4380 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 1600)]
|
||||
] -46.7 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
938 4872 M
|
||||
6052 0 V
|
||||
stroke
|
||||
LTb
|
||||
938 4872 M
|
||||
63 0 V
|
||||
5989 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
854 4872 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 1800)]
|
||||
] -46.7 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
938 448 M
|
||||
0 4424 V
|
||||
stroke
|
||||
LTb
|
||||
938 448 M
|
||||
0 63 V
|
||||
0 4361 R
|
||||
0 -63 V
|
||||
stroke
|
||||
938 308 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 0)]
|
||||
] -46.7 MCshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
1947 448 M
|
||||
0 3521 V
|
||||
0 840 R
|
||||
0 63 V
|
||||
stroke
|
||||
LTb
|
||||
1947 448 M
|
||||
0 63 V
|
||||
0 4361 R
|
||||
0 -63 V
|
||||
stroke
|
||||
1947 308 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 2)]
|
||||
] -46.7 MCshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
2955 448 M
|
||||
0 3521 V
|
||||
0 840 R
|
||||
0 63 V
|
||||
stroke
|
||||
LTb
|
||||
2955 448 M
|
||||
0 63 V
|
||||
0 4361 R
|
||||
0 -63 V
|
||||
stroke
|
||||
2955 308 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 4)]
|
||||
] -46.7 MCshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
3964 448 M
|
||||
0 3521 V
|
||||
0 840 R
|
||||
0 63 V
|
||||
stroke
|
||||
LTb
|
||||
3964 448 M
|
||||
0 63 V
|
||||
0 4361 R
|
||||
0 -63 V
|
||||
stroke
|
||||
3964 308 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 6)]
|
||||
] -46.7 MCshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
4973 448 M
|
||||
0 4424 V
|
||||
stroke
|
||||
LTb
|
||||
4973 448 M
|
||||
0 63 V
|
||||
0 4361 R
|
||||
0 -63 V
|
||||
stroke
|
||||
4973 308 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 8)]
|
||||
] -46.7 MCshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
5981 448 M
|
||||
0 4424 V
|
||||
stroke
|
||||
LTb
|
||||
5981 448 M
|
||||
0 63 V
|
||||
0 4361 R
|
||||
0 -63 V
|
||||
stroke
|
||||
5981 308 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 10)]
|
||||
] -46.7 MCshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
6990 448 M
|
||||
0 4424 V
|
||||
stroke
|
||||
LTb
|
||||
6990 448 M
|
||||
0 63 V
|
||||
0 4361 R
|
||||
0 -63 V
|
||||
stroke
|
||||
6990 308 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 12)]
|
||||
] -46.7 MCshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTb
|
||||
938 4872 N
|
||||
938 448 L
|
||||
6052 0 V
|
||||
0 4424 V
|
||||
-6052 0 V
|
||||
Z stroke
|
||||
LCb setrgbcolor
|
||||
280 2660 M
|
||||
currentpoint gsave translate 90 rotate 0 0 moveto
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 (Execution time [s])]
|
||||
] -46.7 MCshow
|
||||
grestore
|
||||
LTb
|
||||
LCb setrgbcolor
|
||||
3964 98 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 (Number of eNBs)]
|
||||
] -46.7 MCshow
|
||||
LTb
|
||||
1.000 UP
|
||||
1.000 UL
|
||||
LTb
|
||||
1.500 UP
|
||||
2.000 UL
|
||||
LT2
|
||||
0.63 0.13 0.94 C LTb
|
||||
1589 4704 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 1 UE per eNB)]
|
||||
] -46.7 MLshow
|
||||
LT2
|
||||
0.63 0.13 0.94 C 1106 4704 M
|
||||
399 0 V
|
||||
1442 488 M
|
||||
505 3 V
|
||||
504 23 V
|
||||
504 25 V
|
||||
505 28 V
|
||||
504 31 V
|
||||
504 35 V
|
||||
505 41 V
|
||||
504 45 V
|
||||
504 43 V
|
||||
505 54 V
|
||||
504 66 V
|
||||
1442 488 Pls
|
||||
1947 491 Pls
|
||||
2451 514 Pls
|
||||
2955 539 Pls
|
||||
3460 567 Pls
|
||||
3964 598 Pls
|
||||
4468 633 Pls
|
||||
4973 674 Pls
|
||||
5477 719 Pls
|
||||
5981 762 Pls
|
||||
6486 816 Pls
|
||||
6990 882 Pls
|
||||
1306 4704 Pls
|
||||
1.500 UP
|
||||
2.000 UL
|
||||
LT1
|
||||
1.00 0.00 0.00 C LTb
|
||||
1589 4494 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 ( 5 UE per eNB)]
|
||||
] -46.7 MLshow
|
||||
LT1
|
||||
1.00 0.00 0.00 C 1106 4494 M
|
||||
399 0 V
|
||||
1442 503 M
|
||||
505 63 V
|
||||
504 78 V
|
||||
504 99 V
|
||||
505 119 V
|
||||
504 154 V
|
||||
504 180 V
|
||||
505 212 V
|
||||
504 250 V
|
||||
504 263 V
|
||||
505 294 V
|
||||
504 312 V
|
||||
1442 503 Crs
|
||||
1947 566 Crs
|
||||
2451 644 Crs
|
||||
2955 743 Crs
|
||||
3460 862 Crs
|
||||
3964 1016 Crs
|
||||
4468 1196 Crs
|
||||
4973 1408 Crs
|
||||
5477 1658 Crs
|
||||
5981 1921 Crs
|
||||
6486 2215 Crs
|
||||
6990 2527 Crs
|
||||
1306 4494 Crs
|
||||
1.500 UP
|
||||
2.000 UL
|
||||
LT3
|
||||
0.00 0.00 1.00 C LTb
|
||||
1589 4284 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 (10 UE per eNB)]
|
||||
] -46.7 MLshow
|
||||
LT3
|
||||
0.00 0.00 1.00 C 1106 4284 M
|
||||
399 0 V
|
||||
1442 542 M
|
||||
505 113 V
|
||||
504 162 V
|
||||
504 197 V
|
||||
505 258 V
|
||||
504 334 V
|
||||
504 386 V
|
||||
505 442 V
|
||||
504 487 V
|
||||
504 527 V
|
||||
505 577 V
|
||||
504 602 V
|
||||
1442 542 Star
|
||||
1947 655 Star
|
||||
2451 817 Star
|
||||
2955 1014 Star
|
||||
3460 1272 Star
|
||||
3964 1606 Star
|
||||
4468 1992 Star
|
||||
4973 2434 Star
|
||||
5477 2921 Star
|
||||
5981 3448 Star
|
||||
6486 4025 Star
|
||||
6990 4627 Star
|
||||
1306 4284 Star
|
||||
3.000 UL
|
||||
LT0
|
||||
0.00 0.00 0.00 C LTb
|
||||
1589 4074 M
|
||||
[ [(Helvetica) 140.0 0.0 true true 0 (y = 10.756x)]
|
||||
[(Helvetica) 112.0 70.0 true true 0 (2)]
|
||||
[(Helvetica) 140.0 0.0 true true 0 ( + 11.274x + 16.249)]
|
||||
] -60.7 MLshow
|
||||
LT0
|
||||
0.00 0.00 0.00 C 1106 4074 M
|
||||
399 0 V
|
||||
938 488 M
|
||||
61 4 V
|
||||
61 4 V
|
||||
61 6 V
|
||||
62 6 V
|
||||
61 6 V
|
||||
61 8 V
|
||||
61 8 V
|
||||
61 10 V
|
||||
61 10 V
|
||||
61 10 V
|
||||
61 12 V
|
||||
62 12 V
|
||||
61 13 V
|
||||
61 14 V
|
||||
61 15 V
|
||||
61 15 V
|
||||
61 16 V
|
||||
61 17 V
|
||||
61 18 V
|
||||
62 18 V
|
||||
61 20 V
|
||||
61 20 V
|
||||
61 21 V
|
||||
61 21 V
|
||||
61 23 V
|
||||
61 23 V
|
||||
62 24 V
|
||||
61 24 V
|
||||
61 26 V
|
||||
61 26 V
|
||||
61 27 V
|
||||
61 28 V
|
||||
61 29 V
|
||||
61 29 V
|
||||
62 30 V
|
||||
61 31 V
|
||||
61 32 V
|
||||
61 32 V
|
||||
61 34 V
|
||||
61 34 V
|
||||
61 35 V
|
||||
62 35 V
|
||||
61 37 V
|
||||
61 37 V
|
||||
61 38 V
|
||||
61 38 V
|
||||
61 40 V
|
||||
61 40 V
|
||||
61 41 V
|
||||
62 42 V
|
||||
61 42 V
|
||||
61 44 V
|
||||
61 44 V
|
||||
61 45 V
|
||||
61 46 V
|
||||
61 46 V
|
||||
61 47 V
|
||||
62 48 V
|
||||
61 49 V
|
||||
61 50 V
|
||||
61 50 V
|
||||
61 51 V
|
||||
61 52 V
|
||||
61 53 V
|
||||
62 53 V
|
||||
61 55 V
|
||||
61 55 V
|
||||
61 55 V
|
||||
61 57 V
|
||||
61 57 V
|
||||
61 58 V
|
||||
61 59 V
|
||||
62 60 V
|
||||
61 60 V
|
||||
61 62 V
|
||||
61 62 V
|
||||
61 62 V
|
||||
61 64 V
|
||||
61 64 V
|
||||
62 65 V
|
||||
61 66 V
|
||||
61 67 V
|
||||
61 67 V
|
||||
61 69 V
|
||||
61 69 V
|
||||
61 69 V
|
||||
61 71 V
|
||||
62 71 V
|
||||
61 72 V
|
||||
61 73 V
|
||||
61 74 V
|
||||
61 74 V
|
||||
61 76 V
|
||||
61 76 V
|
||||
61 76 V
|
||||
62 78 V
|
||||
61 78 V
|
||||
61 79 V
|
||||
61 80 V
|
||||
stroke
|
||||
1.000 UL
|
||||
LTb
|
||||
938 4872 N
|
||||
938 448 L
|
||||
6052 0 V
|
||||
0 4424 V
|
||||
-6052 0 V
|
||||
Z stroke
|
||||
1.000 UP
|
||||
1.000 UL
|
||||
LTb
|
||||
stroke
|
||||
grestore
|
||||
end
|
||||
showpage
|
||||
%%Trailer
|
||||
%%DocumentFonts: Helvetica
|
||||
@@ -2,176 +2,330 @@
|
||||
|
||||
|
||||
++++++++++++++++++++++++++
|
||||
LTE Design Documentation
|
||||
Design Documentation
|
||||
++++++++++++++++++++++++++
|
||||
|
||||
|
||||
An overview of the LTE module
|
||||
*****************************
|
||||
|
||||
|
||||
Design Criteria
|
||||
~~~~~~~~~~~~~~~
|
||||
|
||||
The LTE module has the long term objective of supporting the evaluation of the following aspects of LTE systems:
|
||||
|
||||
* LTE Radio Resource Management
|
||||
* QoS-aware Packet Scheduling
|
||||
* Call Admission Control
|
||||
* Inter-cell Interference Coordination
|
||||
* Load Balancing
|
||||
* Mobility
|
||||
The LTE module has been designed to support the evaluation of the following aspects of LTE systems:
|
||||
|
||||
* Radio Resource Management
|
||||
* QoS-aware Packet Scheduling
|
||||
* Inter-cell Interference Coordination
|
||||
* Dynamic Spectrum Access
|
||||
|
||||
In order to model LTE systems to a level of detail that is sufficient to allow a correct evaluation of the above mentioned aspects, the following assumptions have been made:
|
||||
In order to model LTE systems to a level of detail that is sufficient to allow a
|
||||
correct evaluation of the above mentioned aspects, the following requirements
|
||||
have been considered:
|
||||
|
||||
#. At the radio level, the granularity of the model should be at least that of the Resource Block. In fact, this is the fundamental unit being used for resource allocation. Without this minimum level of granularity, it is not possible to model accurately, for example, packet scheduling and inter-cell-interference solutions. Note that this design choice rules out system level simulator, which work at the granularity of call / bearer establishment.
|
||||
#. The simulator should scale up to tens of eNBs and hundreds of UEs. This rules out the use of a link level simulator, i.e., a simulator whose radio interface is modeled with a granularity up to the symbol level. This is becaise a symbol layer model needs to implement all the PHY layer signal processing, whose huge complexity severely limits scalability in terms of number of eNBs and UEs. In fact, link-level simulators are normally limited to a single eNB and one or a few UEs.
|
||||
#. MAC-level KPIs (e.g., per-UE and per-bearer throughput, delay and loss rate measured at the RLC PDU level) are probably the most straightforward KPIs that can be extracted by the simulator. Still, these KPIs cannot be mapped directly to the Quality of Experience (QoE) perceived by the end user, at least without some gross approximation. Hence, to allow a proper evaluation of the QoE, the LTE user plane protocol stack should be modeled accurately. In particular, the RLC protocol should be modeled: in fact, since the RLC takes care of fragmentation, concatenation & fragment retransmission of user-plane IP packets, it
|
||||
#. While it is acceptable to idealize some aspects of the control plane for ease of simulations, there are some other aspects that need to be modeled in order to obtain accurate simulation results. For example, control signaling consumes radio resources and can be the cause of a limitation in the user-perceived performance; furthermore, the correct or erroneous reception of the control signalling affects important aspects of LTE such as cell selection by the UEs and the neighbor relation function of the eNBs.
|
||||
#. At the radio level, the granularity of the model should be at least that
|
||||
of the Resource Block (RB). In fact, this is the fundamental unit being used for
|
||||
resource allocation. Without this minimum level of granularity, it is not
|
||||
possible to model accurately packet scheduling and
|
||||
inter-cell-interference.
|
||||
The reason is that, since packet scheduling is done on
|
||||
a per-RB basis, an eNB might transmit on a subset only of all the available
|
||||
RBs, hence interfering with other eNBs only on those RBs where it is
|
||||
trasmitting.
|
||||
Note that this requirement rules out the adoption of a system lever simulation
|
||||
approach, which evaluates resource allocation only at the granularity of
|
||||
call/bearer establishment.
|
||||
#. The simulator should scale up to tens of eNBs and hundreds of User
|
||||
Equipments (UEs). This
|
||||
rules out the use of a link level simulator, i.e., a simulator whose radio
|
||||
interface is modeled with a granularity up to the symbol level. This is because
|
||||
to have a symbol level model it is necessary to implement all the PHY
|
||||
layer signal processing, whose huge computational complexity severely limits
|
||||
simulation. In fact, link-level simulators are normally limited to a single eNB
|
||||
and one or a few UEs.
|
||||
#. It should be possible within the simulation to configure different cells
|
||||
so that they use different carrier frequencies and system bandwidths. The
|
||||
bandwidth used by different cells should be allowed to overlap, in order to
|
||||
support dynamic spectrum licensing solutions such as those described in
|
||||
in~\cite{ofcom2.6GHz, RealWireless}. The calculation of interference should
|
||||
handle appropriately this case.
|
||||
#. To be more representative of the LTE standard, as well as to be as
|
||||
close as possible to real-world implementations, the simulator
|
||||
should support the MAC Scheduler API published by the FemtoForum
|
||||
[FFAPI]_. This interface is expected to be used by femtocell manufacturers
|
||||
for the implementation of scheduling and Radio Resource Management
|
||||
(RRM) algorithms. By introducing support for this interface in the
|
||||
simulator, we make it possible for LTE equipment vendors and
|
||||
operators to test in a simulative environment exactly the same
|
||||
algorithms that would be deployed in a real system.
|
||||
#. The LTE simulation module should contain its own implementation of
|
||||
the API defined in [FFAPI]_. Neither
|
||||
binary nor data structure compatibility with vendor-specific implementations
|
||||
of the same interface are expected; hence, a compatibility layer should be
|
||||
interposed whenever a vendor-specific MAC scheduler is to be used
|
||||
with the simulator. This requirement is necessary to allow the
|
||||
simulator to be independent from vendor-specific implementations of this
|
||||
interface specification. We note that [FFAPI]_ is a logical
|
||||
specification only, and its implementation (e.g., translation to some specific
|
||||
programming language) is left to the vendors.
|
||||
|
||||
|
||||
Module Architecture
|
||||
~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
|
||||
The overall architecture of the LTE module is represented in the following figures.
|
||||
|
||||
.. figure:: figures/lte-enb-architecture.*
|
||||
:align: right
|
||||
The overall architecture of the LTE module is represented in the
|
||||
figures :ref:`fig-lte-enb-architecture` and :ref:`fig-lte-ue-architecture`, which
|
||||
deal respectively with the eNB and the UE. A detailed description of the most
|
||||
important components are provided in the following sections.
|
||||
|
||||
The architecture of the LTE eNB
|
||||
|
||||
.. figure:: figures/lte-ue-architecture.*
|
||||
:align: right
|
||||
|
||||
The architecture of the LTE UE
|
||||
.. _fig-lte-enb-architecture:
|
||||
|
||||
.. figure:: figures/lte-enb-architecture.*
|
||||
|
||||
Architecture of the LTE eNB
|
||||
|
||||
|
||||
|
||||
Detailed description of the components
|
||||
**************************************
|
||||
.. _fig-lte-ue-architecture:
|
||||
|
||||
.. _ff-mac-sched-api:
|
||||
.. figure:: figures/lte-ue-architecture.*
|
||||
|
||||
The FemtoForum MAC Scheduler Interface
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
This section describes the ns-3 specific version of the `FemtoForum LTE MAC Scheduler Interface Specification v1.11 <http://www.femtoforum.org/femto/technical.php>`_
|
||||
|
||||
The goals of the definition of this MAC scheduler API in the |ns3| network simulator are:
|
||||
|
||||
* to let MAC's developers to implement its own MAC schedulers allowing these developers to provide the standard MAC scheduler API.
|
||||
* to let MAC's users to use different MAC schedulers using always the same standard MAC scheduler API.
|
||||
Architecture of the LTE UE
|
||||
|
||||
Design
|
||||
++++++
|
||||
|
||||
The MAC Scheduler interface is **specified** or defined as **abstract classes**. The MAC Scheduler interface is **implemented** as **derived classes** from the abstract classes. We have splitted the MAC Scheduler interface into 4 abstract classes:
|
||||
|
||||
* SCHED SAP API
|
||||
|
||||
* Provider Side is specified in the ``FfMacSchedSapProvider`` class
|
||||
* User Side is specified in the ``FfMacSchedSapUser`` class
|
||||
|
||||
* CSCHED SAP API
|
||||
|
||||
* Provider Side is specified in the ``FfMacCschedSapProvider`` class
|
||||
* User Side is specified in the ``FfMacCschedSapUser`` class
|
||||
The FemtoForum MAC Scheduler Interface
|
||||
++++++++++++++++++++++++++++++++++++++
|
||||
|
||||
This section describes the ns-3 specific version of the LTE MAC
|
||||
Scheduler Interface Specification published by the FemtoForum [FFAPI]_.
|
||||
|
||||
We implemented the ns-3 specific version of the FemtoForum MAC Scheduler
|
||||
Interface [FFAPI]_ as a set of C++ abstract
|
||||
classes; in particular, each primitive is translated to a C++ method of a
|
||||
given class. The term *implemented* here is used with the same
|
||||
meaning adopted in [FFAPI]_, and hence refers to the process of translating
|
||||
the logical interface specification to a particular programming language.
|
||||
The primitives in [FFAPI]_ are grouped in two groups: the CSCHED
|
||||
primitives, which deal with scheduler configuration, and the SCHED primitives,
|
||||
which deal with the execution of the scheduler. Furthermore, [FFAPI]_
|
||||
defines primitives of two different kinds: those of type REQ go from the MAC to
|
||||
the Scheduler, and those of type IND/CNF go from the scheduler to the MAC. To
|
||||
translate these characteristics into C++, we define the following abstract
|
||||
classes that implement Service Access Points (SAPs) to be used to issue the
|
||||
primitives:
|
||||
|
||||
* the ``FfMacSchedSapProvider`` class defines all the C++ methods that
|
||||
correspond to SCHED primitives of type REQ;
|
||||
* the ``FfMacSchedSapUser`` class defines all the C++ methods that
|
||||
correspond to SCHED primitives of type CNF/IND;
|
||||
* the ``FfMacCschedSapProvider`` class defines all the C++ methods that
|
||||
correspond to CSCHED primitives of type REQ;
|
||||
* the ``FfMacCschedSapUser`` class defines all the C++ methods that
|
||||
correspond to CSCHED primitives of type CNF/IND;
|
||||
|
||||
|
||||
There are 3 blocks involved in the MAC Scheduler interface: Control block, Subframe block and Scheduler block. Each of these blocks provide one part of the MAC Scheduler interface. The following figure shows the relationship between the blocks and the Service Access Points they provide.
|
||||
There are 3 blocks involved in the MAC Scheduler interface: Control block,
|
||||
Subframe block and Scheduler block. Each of these blocks provide one part of the
|
||||
MAC Scheduler interface. The figure below shows the relationship
|
||||
between the blocks and the SAPs defined in our implementation of the MAC
|
||||
Scheduler Interface.
|
||||
|
||||
.. figure:: figures/ff-mac-saps.*
|
||||
|
||||
Implementation details
|
||||
++++++++++++++++++++++
|
||||
In addition to the above principles, the following design choices have been
|
||||
taken:
|
||||
|
||||
This subsection details the criteria adopted during the development of the FF MAC API:
|
||||
|
||||
* The definition of the MAC Scheduler interface follows the naming conventions of the |ns3| Coding Style. In particular, we follow the CamelCase convention for the primitive names. For example, the primitive **CSCHED_CELL_CONFIG_REG** is translated to ``CschedCellConfigReg`` in the |ns3| code.
|
||||
|
||||
* The same naming conventions are followed for the primitive parameters. As the primitive parameters are member variables of classes, they are also prefixed with a ``m_``.
|
||||
|
||||
* FF MAC API is a C-based oriented API but |ns3| network simulator is written in C++. So, STL vectors (``std::vector``) are used, instead of using C arrays as the FF MAC API document suggests.
|
||||
|
||||
* In C++, members with constructors and destructors are not allow in ``unions``. These ``unions`` have been converted to ``structs``.
|
||||
|
||||
|
||||
|
||||
Usage in the ns-3 LTE module
|
||||
++++++++++++++++++++++++++++
|
||||
|
||||
To clarify how the MAC Scheduler Interface is used within the eNB, we consider the example of the Round Robin Scheduler which is depicted in the figure below. To interact with the MAC of the eNB, the Round Robin scheduler implements the Provider side of the SCHED SAP and CSCHED SAP interfaces. The MAC of the eNB implements the provider side of the SCHED SAP and CSCHED SAP interfaces. A similar approach is If you plan to develop your own scheduler, we advise to create your own class taking inspiration from the Round Robin scheduler.
|
||||
|
||||
|
||||
The User side of both the CSCHED SAP and the SCHED SAP are implemented in the file ``lte-enb-mac.cc``. You are normally not expected to modify these files in order to implement your own scheduler.
|
||||
* The definition of the MAC Scheduler interface classes follows the naming
|
||||
conventions of the |ns3| Coding Style. In particular, we follow the
|
||||
CamelCase convention for the primitive names. For example, the primitive
|
||||
``CSCHED_CELL_CONFIG_REG`` is translated to ``CschedCellConfigReg``
|
||||
in the |ns3| code.
|
||||
* The same naming conventions are followed for the primitive parameters. As
|
||||
the primitive parameters are member variables of classes, they are also prefixed
|
||||
with a ``m_``.
|
||||
* regarding the use of vectors and lists in data structures, we note
|
||||
that [FFAPI]_ is a pretty much C-oriented API. However, considered that
|
||||
C++ is used in ns-3, and that the use of C arrays is discouraged, we used STL
|
||||
vectors (``std::vector``) for the implementation of the MAC Scheduler
|
||||
Interface, instead of using C arrays as implicitly suggested by the
|
||||
way [FFAPI]_ is written.
|
||||
* In C++, members with constructors and destructors are not allow in
|
||||
``unions``. Hence all those data structures that are said to be
|
||||
``unions`` in [FFAPI]_ have been defined as ``structs`` in our code.
|
||||
|
||||
The figure below shows how the MAC Scheduler Interface is
|
||||
used within the eNB.
|
||||
|
||||
.. figure:: figures/ff-example.*
|
||||
|
||||
The User side of both the CSCHED SAP and the SCHED SAP are
|
||||
implemented within the eNB MAC, i.e., in the file ``lte-enb-mac.cc``.
|
||||
The eNB MAC can be used with different scheduler implementations without
|
||||
modifications. The same figure also shows, as an example, how the Round Robin
|
||||
Scheduler is implemented: to interact with the MAC of the eNB, the Round Robin
|
||||
scheduler implements the Provider side of the SCHED SAP and CSCHED
|
||||
SAP interfaces. A similar approach can be used to implement other schedulers as
|
||||
well. A description of all the scheduler implementations that we provide as
|
||||
part of our LTE simulation module will be given in
|
||||
the following.
|
||||
|
||||
MAC Scheduler Implementations
|
||||
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
|
||||
|
||||
In this section we describe the features of the MAC Scheduler Implementations that are included with the simulator. Both these models are well-known from the literature. The reason for their inclusion is twofold: first, they can be used as starting code base for the development of more advanced schedulers; second, they can be used as reference algorithm when doing performance evaluation. With this latter respect, we stress that the use of a publicly available scheduler implementation as the reference for a performance evaluation study is beneficial to the authoritativeness of the study itself.
|
||||
Resource Allocation Model
|
||||
+++++++++++++++++++++++++
|
||||
|
||||
Before describing the schedulers, we would like introduce a bit the problem of resource allocation in LTE. The scheduler is in charge of generating specific structures calles Data Control Indication (DCI) by which communicates to the users connected the resource allocation per subframe basis. In doing this in the downlink direction, the scheduler has to fill some specific fields of the DCI structure with all the information, such as: MCS, TB size and the allocation bitmap. The latter bitmap can be coded in different manner, in this implementation we considered the "allocation Type 0" [36.213], which implies the aggregation of the RB in group of different size as function of the bandwidth in use. This implies that for certain bandwidth values not all the RBs are usable, since the group size is not a common divisor of the group. This is for instance the case when system bandwith is equal to 25 RBs, which results in a RBG size of 2 RBs and therefore 1 RB will result not addressable.
|
||||
In uplink the structure of the DCIs changes and since it uses only adjacent RBs allows the use of all RBs in all the configurations.
|
||||
|
||||
On this matter, another constaint of LTE is represented by the assumption that the scheduler can allocate only one transport channel to a user. This implies that the control of the scheduler is only per users basis and the different LCs have to be multiplxed in the same transport block.
|
||||
We now briefly describe how resource allocation is handled in LTE,
|
||||
clarifying how it is implemented in the simulator. The scheduler is in
|
||||
charge of generating specific structures calles Data Control Indication (DCI)
|
||||
which are then transmitted by the PHY of the eNB to the connected UEs, in order
|
||||
to inform them of the resource allocation on a per subframe basis. In doing this
|
||||
in the downlink direction, the scheduler has to fill some specific fields of the
|
||||
DCI structure with all the information, such as: the Modulation and Coding
|
||||
Scheme (MCS) to be used, the MAC Transport Block (TB) size, and the allocation
|
||||
bitmap which identifies which RBs will contain the data
|
||||
tranmitted by the eNB to each user.
|
||||
|
||||
For the mapping of resources to
|
||||
physical RBs, we adopt a *localized mapping* approach
|
||||
(see [Sesia2009]_, Section 9.2.2.1);
|
||||
hence in a given subframe each RB is always allocated to the same user in both
|
||||
slots.
|
||||
The allocation bitmap can be coded in
|
||||
different formats; in this implementation, we considered the *Allocation
|
||||
Type 0* defined in [TS36.213]_, according to which the RBs are grouped in
|
||||
Resource Block Groups (RBG) of different size determined as a function of the
|
||||
Transmission Bandwidth Configuration in use.
|
||||
|
||||
For certain bandwidth
|
||||
values not all the RBs are usable, since the
|
||||
group size is not a common divisor of the group. This is for instance the case
|
||||
when the bandwith is equal to 25 RBs, which results in a RBG size of 2 RBs, and
|
||||
therefore 1 RB will result not addressable.
|
||||
In uplink the format of the DCIs is different, since only adjacent RBs
|
||||
can be used because of the SC-FDMA modulation. As a consequence, all
|
||||
RBs can be allocated by the eNB regardless of the bandwidth
|
||||
configuration.
|
||||
|
||||
Adaptive Modulation and Coding
|
||||
++++++++++++++++++++++++++++++
|
||||
|
||||
The Adaptive Modulation and Coding (AMC) model that we provide in the
|
||||
simulator is a modified version of the model described in [Piro2011]_,
|
||||
which in turn is inspired from [Seo2004]_. Our version is described in the
|
||||
following. 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
|
||||
|
||||
\Gamma = \frac{ -\ln{ (5 * \mathrm{BER}) } }{ 1.5}
|
||||
|
||||
\eta_i = \log_2 { \left( 1 + \frac{ {\gamma}_i }{ \Gamma } \right)}
|
||||
|
||||
The procedure described in [R1-081483]_ 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.
|
||||
|
||||
Finally, wenote 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]_.
|
||||
|
||||
|
||||
Round Robin (RR) Scheduler
|
||||
++++++++++++++++++++++++++
|
||||
|
||||
The RR scheduler is one of the simpliest solution in literature. It divides the available resources among the active flows, which means all the logical channels that has something in the queues. In case the number of active flows is greater then the number of RBGs available, the RR scheduler allocates the users in a round robin fashion within multiples subframes (i.e., users that cannot be allocated in a subframe will be allocated in the subsequents ones). The evaluation of the MCS to be adopted for each user is done according to the received wideband CQIs.
|
||||
The Round Robin (RR) scheduler is probably the simplest scheduler found in the literature. It works by dividing the
|
||||
available resources among the active flows, i.e., those logical channels which have a non-empty RLC queue. If the number of RBGs is greater than the number of active flows, all the flows can be allocated in the same subframe. Otherwise, if the number of active flows is greater than the number of RBGs, not all the flows can be scheduled in a given subframe; then, in the next subframe the allocation will start from the last flow that was not allocated. The MCS to be adopted for each user is done according to the received wideband CQIs.
|
||||
|
||||
|
||||
Proportional Fair (PF) Scheduler
|
||||
++++++++++++++++++++++++++++++++
|
||||
|
||||
The PF scheduler[5]_ philosophy is to schedule a user when its instantaneous channel quality is high relative to its own average channel condition over time. In formula this implies that a user :math:`k` is allocated to a rb :math:`m` in a subframe :math:`f` when it is the one that maximizes the formula
|
||||
:math:`\hat{k_{m}} = \underset{k`=1,...,k}{\operatorname{argmax}}\frac{ R_\mathrm{k`}(m,f) }{ T_\mathrm{k`}(f) }\end{split}\notag`
|
||||
where :math:`T_{k}(f)` is the long-term average througput perceived by the user :math:`k` during the subframe :math:`f` and :math:`R_{k}(m,f)` is the achievable rate evaluated by the PFS during the subframe :math:`f`. The latter is evaluated by estimating the MCS to be used according to the the inband CQIs of the user :math:`k` in RB :math:`m` and therefore computing the TB size as function of the MCS considering the transmission of a single RB. The long-term average user throughputs are computed each subframe by
|
||||
The Proportional Fair (PF) scheduler [Sesia2009]_ works by scheduling a user
|
||||
when its
|
||||
instantaneous channel quality is high relative to its own average channel
|
||||
condition over time. Let :math:`i,j` denote generic users; let :math:`t` be the
|
||||
subframe index, and :math:`k` be the resource block index; let :math:`M_{i,k}(t)` be MCS
|
||||
usable by user :math:`i` on resource block :math:`k` according to what reported by the AMC
|
||||
model (see `Adaptive Modulation and Coding`_); finally, let :math:`S(M, B)` be the TB
|
||||
size in bits as defined in [TS36.213]_ for the case where a number :math:`B` of
|
||||
resource blocks is used. The achievable rate :math:`R_{i}(k,t)` in bit/s for user :math:`i`
|
||||
on resource block :math:`k` at subframe :math:`t` is defined as
|
||||
|
||||
:math:`T_\mathrm{k}(f) = (1-\frac{1}{t_\mathrm{c}})T_{k}(f-1)+\frac{1}{t_\mathrm{c}}\sum{i}^{M}_{m = 1}R_\mathrm{k}(m,f)\Phi(\hat{k_{m}}=k\end{split})\notag
|
||||
%\begin{split}T_\mathrm{k}(f) = (1-\frac{1}{t_\mathrm{c}})T_{k}(f-1)+\frac{1}{t_\mathrm{c}\sum{i}^{M}_{m = 1}R_\mathrm{k}(m,f)\I\{\hat{k_\matrm{m}}=k\}`
|
||||
.. math::
|
||||
|
||||
where :math:`t_c` is the time window over which the fairness is imposed and :math:`\Phi(\cdot)` is the indicator function equal to one if :math:`\hat{k_m}=k` and zero otherwise. According to this allocation scheme a user can be allocated to different RBGs either undjacents as function of the actual condition of the channel and its past history in terms of throughput.
|
||||
R_{i}(k,t) = \frac{S\left( M_{i,k}(t), 1\right)}{\tau}
|
||||
|
||||
where :math:`\tau` is the TTI duration.
|
||||
At the start of each subframe :math:`t`, all the RBs are assigned to a certain user.
|
||||
In detail, the index :math:`\widehat{i}_{k}(t)` to which RB :math:`k` is assigned at time
|
||||
:math:`t` is determined as
|
||||
|
||||
LTE Spectrum Model
|
||||
~~~~~~~~~~~~~~~~~~
|
||||
.. math::
|
||||
|
||||
Here we describe how the LTE spectrum model works and what it allows to do.
|
||||
\widehat{i}_{k}(t) = \underset{j=1,...,N}{\operatorname{argmax}}
|
||||
\left( \frac{ R_{j}(k,t) }{ T_\mathrm{j}(t) } \right)
|
||||
|
||||
where :math:`T_{j}(t)` is the past througput performance perceived by the
|
||||
user :math:`j`.
|
||||
According to the above scheduling algorithm, a user can be allocated to
|
||||
different RBGs, which can be either adjacent or not, depending on the current
|
||||
condition of the channel and the past throughput performance :math:`T_{j}(t)`. The
|
||||
latter is determined at the end of the subframe :math:`t` using the following
|
||||
exponential moving average approach:
|
||||
|
||||
.. math::
|
||||
|
||||
Physical layer
|
||||
~~~~~~~~~~~~~~
|
||||
The physical layer model provided in this LTE simulator model supports Frequency Division Duplex (FDD) only.
|
||||
T_{j}(t) =
|
||||
(1-\frac{1}{\alpha})T_{j}(t-1)
|
||||
+\frac{1}{\alpha} \widehat{T}_{j}(t)
|
||||
|
||||
where :math:`\alpha` is the time constant (in number of subframes) of
|
||||
the exponential moving average, and :math:`\widehat{T}_{j}(t)` is the actual
|
||||
throughput achieved by the user :math:`i` in the subframe :math:`t`. :math:`\widehat{T}_{j}(t)`
|
||||
is measured according to the following procedure. First we
|
||||
determine the MCS :math:`\widehat{M}_j(t)` actually used by user
|
||||
:math:`j`:
|
||||
|
||||
.. math::
|
||||
|
||||
Propagation Loss Models
|
||||
~~~~~~~~~~~~~~~~~~~~~~~
|
||||
NOTE: this information refers to the GSoC model, which as of this writing is not working anymore.
|
||||
\widehat{M}_j(t) = \min_{k: \widehat{i}_{k}(t) = j}{M_{j,k}(t)}
|
||||
|
||||
A proper propagation loss model has been developed for the LTE E-UTRAN interface (see [2]_ and [3]_).
|
||||
It is used by the PHY layer to compute the loss due to the propagation.
|
||||
then we determine the total number :math:`\widehat{B}_j(t)` of RBs allocated to user
|
||||
:math:`j`:
|
||||
|
||||
The LTE propagation loss model is composed by 4 different models (shadowing, multipath,
|
||||
penetration loss and path loss) [2]_:
|
||||
.. math::
|
||||
|
||||
* Pathloss: :math:`PL = 128.1 + (37.6 * log10 (R))`, where R is the distance between the
|
||||
UE and the eNB in Km.
|
||||
\widehat{B}_j(t) = \left| \{ k : \widehat{i}_{k}(t) = j \} \right|
|
||||
|
||||
* Multipath: Jakes model
|
||||
where :math:`|\cdot|` indicates the cardinality of the set; finally,
|
||||
|
||||
* PenetrationLoss: 10 dB
|
||||
.. math::
|
||||
|
||||
* Shadowing: log-normal distribution (mean=0dB, standard deviation=8dB)
|
||||
\widehat{T}_{j}(t) = \frac{S\left( \widehat{M}_j(t), \widehat{B}_j(t)
|
||||
\right)}{\tau}
|
||||
|
||||
|
||||
Every time that the ``LteSpectrumPHY::StartRx ()`` function is called, the
|
||||
``SpectrumInterferenceModel`` is used to computed the SINR, as proposed in [3]_. Then,
|
||||
@@ -179,22 +333,43 @@ the network device uses the AMC module to map the SINR to a proper CQI and to se
|
||||
to the eNB using the ideal control channel.
|
||||
|
||||
|
||||
References
|
||||
**********
|
||||
RRC and RLC Models
|
||||
++++++++++++++++++++++++++++++
|
||||
|
||||
.. [1] N. Baldo and M. Miozzo, Spectrum-aware Channel and PHY layer modeling for ns3, Proceedings
|
||||
of ICST NSTools 2009, Pisa, Italy. The framework is designed to simulate only data
|
||||
transmissions. For the transmission of control messages (such as CQI feedback, PDCCH,
|
||||
etc..) will be used an ideal control channel).
|
||||
At the time of this writing, the RRC and the RLC models implemented in the simulator are not comprehensive of all the funcionalities defined
|
||||
by the 3GPP standard. The RRC mainly includes the procedures for managing the connection of the UEs to the eNBs, and to setup and release the Radio Bearers. The RLC model takes care of the generation of RLC PDUs in response to the notification of transmission opportunities, which are notified by the scheduler using the primitives specified in~\cite{ffapi}. The current RLC implementation simulates saturation conditions, i.e., it assumes that the RLC buffer is always full and can generate a new PDU whenever notified by the scheduler. We note that, although this is an unrealistic traffic model, it still allows for the correct simulation of scenarios with flow belonging to different QoS classes in order to test the QoS performance obtained by different schedulers. This can be done since it is the task of the Scheduler to assign transmission resources based on the characteristics of each Radio Bearer which are specified upon the creation of each Bearer at the start of the simulation.
|
||||
|
||||
.. [2] 3GPP TS 25.814 ( http://www.3gpp.org/ftp/specs/html-INFO/25814.htm )
|
||||
LTE Spectrum Model
|
||||
++++++++++++++++++
|
||||
|
||||
The usage of the radio spectrum by eNBs and UEs in LTE is described in
|
||||
[TS36.101]_. In the simulator, radio spectrum usage is modeled as follows.
|
||||
Let :math:`f_c` denote the LTE Absolute Radio Frequency Channel Number, which
|
||||
identifies the carrier frequency on a 100 kHz raster; furthermore, let :math:`B` be
|
||||
the Transmission Bandwidth Configuration in number of Resource Blocks. For every
|
||||
pair :math:`(f_c,B)` used in the simulation we define a corresponding spectrum
|
||||
model using the Spectrum framework framework described
|
||||
in [Baldo2009]_. :math:`f_c` and :math:`B` can be configured for every eNB instantiated
|
||||
in the simulation; hence, each eNB can use a different spectrum model. Every UE
|
||||
will automatically use the spectrum model of the eNB it is attached to. Using
|
||||
the MultiModelSpectrumChannel described in [Baldo2009]_, the interference
|
||||
among eNBs that use different spectrum models is properly accounted for.
|
||||
This allows to simulate dynamic spectrum access policies, such as for
|
||||
example the spectrum licensing policies that are
|
||||
discussed in [Ofcom2.6GHz]_.
|
||||
|
||||
.. [3] Giuseppe Piro, Luigi Alfredo Grieco, Gennaro Boggia, and Pietro Camarda", A Two-level
|
||||
Scheduling Algorithm for QoS Support in the Downlink of LTE Cellular Networks", Proc. of
|
||||
European Wireless, EW2010, Lucca, Italy, Apr., 2010 ( draft version is available on
|
||||
http://telematics.poliba.it/index.php?option=com_jombib&task=showbib&id=330 )
|
||||
|
||||
.. [4] 3GPP R1-081483 (available on
|
||||
http://www.3gpp.org/ftp/tsg_ran/WG1_RL1/TSGR1_52b/Docs/R1-081483.zip )
|
||||
|
||||
.. [5] S. Sesia, I. Toufik and M. Baker, “LTE – The UMTS Long Term Evolution”, Ed Wiley, 2009.
|
||||
|
||||
Physical layer
|
||||
++++++++++++++
|
||||
|
||||
The physical layer model provided in this LTE simulator is based on
|
||||
the one described in [Piro2011]_, with the following modifications. The model now includes the
|
||||
inter cell intereference calculation and the simulation of uplink traffic, including both packet transmission and CQI generation. Regarding CQIs in particular, their evaluation
|
||||
has been refined to comply with the scheduler interface specification [FFAPI]_. In detail, we considered the generation
|
||||
of periodic wideband CQI (i.e., a single value of channel state that is deemed representative of all RBs
|
||||
in use) and inband CQIs (i.e., a set of value representing the channel state for each RB).
|
||||
|
||||
|
||||
41
src/lte/doc/source/lte-references.rst
Normal file
41
src/lte/doc/source/lte-references.rst
Normal file
@@ -0,0 +1,41 @@
|
||||
|
||||
|
||||
|
||||
.. [Sesia2009] S. Sesia, I. Toufik and M. Baker, "LTE - The UMTS Long Term Evolution - from theory to practice",
|
||||
Wiley, 2009
|
||||
|
||||
.. [Baldo2009] N. Baldo and M. Miozzo, "Spectrum-aware Channel and PHY layer modeling for ns3",
|
||||
Proceedings of ICST NSTools 2009, Pisa, Italy.
|
||||
|
||||
.. [Piro2010] Giuseppe Piro, Luigi Alfredo Grieco, Gennaro Boggia, and Pietro Camarda, A Two-level
|
||||
Scheduling Algorithm for QoS Support in the Downlink of LTE Cellular Networks", Proc. of
|
||||
European Wireless, EW2010, Lucca, Italy, Apr., 2010
|
||||
|
||||
.. [Kushner2004] H.J. Kushner and P.A. Whiting, "Convergence of proportional-fair sharing algorithms under general conditions",
|
||||
IEEE Trans. on Wireless Communications, July 2004
|
||||
|
||||
.. [Piro2011] G. Piro, N. Baldo. M. Miozzo, "An LTE module for the ns-3 network simulator",
|
||||
in Proc. of Wns3 2011 (in conjunction with SimuTOOLS 2011), March 2011, Barcelona (Spain)
|
||||
|
||||
.. [Seo2004] H. Seo, B. G. Lee. "A proportional-fair power allocation scheme for fair and efficient multiuser OFDM systems",
|
||||
in Proc. of IEEE GLOBECOM, December 2004. Dallas (USA)
|
||||
|
||||
.. [Ofcom2.6GHz] Ofcom, "Consultation on assessment of future mobile
|
||||
competition and proposals for the award of 800 MHz and 2.6 GHz
|
||||
spectrum and related issues", March 2011
|
||||
|
||||
|
||||
.. [TS36.101] 3GPP TS 36.101 "E-UTRA User Equipment (UE) radio transmission and reception"
|
||||
|
||||
.. [TS36.213] 3GPP TS 36.213 "E-UTRA Physical layer procedures"
|
||||
|
||||
.. [TS25.814] 3GPP TS 25.814 "Physical layer aspect for evolved Universal Terrestrial Radio Access"
|
||||
|
||||
|
||||
.. [R1-081483] 3GPP R1-081483 "Conveying MCS and TB size via PDCCH" http://www.3gpp.org/ftp/tsg_ran/WG1_RL1/TSGR1_52b/Docs/R1-081483.zip
|
||||
|
||||
.. [FFAPI] FemtoForum LTE MAC Scheduler Interface Specification v1.11 http://www.femtoforum.org/femto/technical.php
|
||||
|
||||
.. [ns3tutorial] The ns-3 Tutorial http://www.nsnam.org/docs/tutorial/html/
|
||||
|
||||
.. [ns3manual] The ns-3 Tutorial http://www.nsnam.org/docs/manual/html/
|
||||
@@ -2,7 +2,7 @@
|
||||
|
||||
|
||||
+++++++++++++++++++++++++++
|
||||
LTE Testing Documentation
|
||||
Testing Documentation
|
||||
+++++++++++++++++++++++++++
|
||||
|
||||
|
||||
@@ -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,91 +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}
|
||||
|
||||
References
|
||||
**********
|
||||
The test consists of checking that the following condition is verified:
|
||||
|
||||
.. [TS36.213] 3GPP TS 36.213 "LTE Physical layer procedures"
|
||||
.. math::
|
||||
\rho_{R,i} = \rho_{T,i}
|
||||
|
||||
.. [Kushner2004] H.J. Kushner and P.A. Whiting, "Convergence of proportional-fair sharing algorithms under general conditions", IEEE Trans. on Wireless Communications, July 2004
|
||||
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]_).
|
||||
|
||||
.. [Piro2011] G. Piro, N. Baldo. M. Miozzo, "An LTE module for the ns-3 network simulator", Wns3 2011
|
||||
(in conjunction with SimuTOOLS 2011), March 2011, Barcelona (Spain)
|
||||
|
||||
.. [Seo2004] H. Seo, B. G. Lee. "A proportional-fair power allocation scheme for fair and efficient multiuser
|
||||
OFDM systems", In Proc. of IEEE GLOBECOM, December 2004. Dallas (USA)
|
||||
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.
|
||||
|
||||
.. [R1-081483] 3GPP R1-081483 "Conveying MCS and TB size via PDCCH"
|
||||
|
||||
.. _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`
|
||||
|
||||
@@ -1,70 +1,323 @@
|
||||
.. include:: replace.txt
|
||||
|
||||
|
||||
+++++++++++++++++++++++++
|
||||
LTE User Documentation
|
||||
+++++++++++++++++++++++++
|
||||
+++++++++++++++++++++++++++++++++
|
||||
User Documentation
|
||||
+++++++++++++++++++++++++++++++++
|
||||
|
||||
EUTRA stack diagram
|
||||
*******************
|
||||
|
||||
Background
|
||||
**********
|
||||
|
||||
|
||||
|
||||
We assume the reader is already familiar with how to use the ns-3
|
||||
simulator to run generic simulation programs. If this is not the case,
|
||||
we strongly recommend the reader to consult [ns3tutorial]_.
|
||||
|
||||
|
||||
Usage
|
||||
*****
|
||||
Usage Overview
|
||||
**************
|
||||
|
||||
Users interact with the LTE model through the LENA helper API and through the publicly visible methods of the model. The helper API is defined in ``src/lte/helper/lena-helper.h``.
|
||||
The ns-3 LTE model is a software library that allows the simulation of
|
||||
LTE networks. The process of performing such simulations typically involves the following
|
||||
steps:
|
||||
|
||||
The ``src/lte/examples/`` directory contains some basic examples that shows how to set up the LTE model in order to simulate an EUTRA downlink transmission.
|
||||
1. *Define the scenario* to be simulated
|
||||
2. *Write a simulation program* that recreates the desired scenario
|
||||
topology/architecture. This is done accessing the ns-3 LTE model
|
||||
libraryusing the ``ns3::LenaHelper`` API defined in ``src/lte/helper/lena-helper.h``.
|
||||
3. *Specify configuration parameters* of the objects that are being
|
||||
used for the simulation. This can be done using input files (via the
|
||||
``ns3::ConfigStore``) or directly within the simulation program.
|
||||
4. *Configure the desired output* to be produced by the simulator
|
||||
5. *Run* the simulation.
|
||||
|
||||
Example simulation program
|
||||
--------------------------
|
||||
|
||||
``src/lte/examples/lena-first-sim.cc`` shows how to build a simple but complete simulation with one LTE eNB and one LTE UE. The detail explanation of the code follows:
|
||||
|
||||
#. Declare the helper. This helper keeps together all the LTE components::
|
||||
|
||||
LenaHelper lena;
|
||||
All these aspects will be explained in the following sections by means
|
||||
of practical examples.
|
||||
|
||||
|
||||
#. Enable the logs in the LTE components::
|
||||
|
||||
lena.EnableLogComponents ();
|
||||
Basic simulation program
|
||||
------------------------
|
||||
|
||||
Here is the minimal simulation program that is needed to do an LTE simulation.
|
||||
|
||||
.. highlight:: none
|
||||
|
||||
#. Initial boilerplate::
|
||||
|
||||
#include "ns3/core-module.h"
|
||||
#include "ns3/network-module.h"
|
||||
#include "ns3/mobility-module.h"
|
||||
#include "ns3/lte-module.h"
|
||||
|
||||
using namespace ns3;
|
||||
|
||||
int main (int argc, char *argv[])
|
||||
{
|
||||
|
||||
|
||||
#. Create eNB and UE. They are created in its own node container::
|
||||
#. Create a LenaHelper object::
|
||||
|
||||
NodeContainer enbNodes;
|
||||
NodeContainer ueNodes;
|
||||
enbNodes.Create (1);
|
||||
ueNodes.Create (1);
|
||||
Ptr<LenaHelper> lena = CreateObject<LenaHelper> ();
|
||||
|
||||
This will instantiate some common
|
||||
objects (e.g., the Channel object) and provide the methods to add
|
||||
eNBs and UEs and configure them.
|
||||
|
||||
#. Create Node objects for the eNB(s) and the UEs::
|
||||
|
||||
NodeContainer enbNodes;
|
||||
enbNodes.Create (1);
|
||||
NodeContainer ueNodes;
|
||||
ueNodes.Create (2);
|
||||
|
||||
Note that the above Node instances at this point still don't have
|
||||
an LTE protocol stack installed; they're just empty nodes.
|
||||
|
||||
#. Configure the Mobility model for all the nodes::
|
||||
|
||||
MobilityHelper mobility;
|
||||
mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
|
||||
mobility.Install (enbNodes);
|
||||
mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
|
||||
mobility.Install (ueNodes);
|
||||
|
||||
The above will place all nodes at the coordinates (0,0,0). Please
|
||||
refer to the documentation of the ns-3 mobility model for how to
|
||||
set your own position or configure node movement.
|
||||
|
||||
#. Install an LTE protocol stack on the eNB(s)::
|
||||
|
||||
NetDeviceContainer enbDevs;
|
||||
enbDevs = lena->InstallEnbDevice (enbNodes);
|
||||
|
||||
#. Install an LTE protocol stack on the UEs::
|
||||
|
||||
NetDeviceContainer ueDevs;
|
||||
ueDevs = lena->InstallUeDevice (ueNodes);
|
||||
|
||||
|
||||
#. Install mobility models to eNB and UE. This has to be done before devices are created and installed::
|
||||
|
||||
MobilityHelper mobility;
|
||||
mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
|
||||
mobility.Install (enbNodes);
|
||||
mobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
|
||||
mobility.Install (ueNodes);
|
||||
|
||||
|
||||
#. Create devices and install them to the eNB and UE::
|
||||
|
||||
NetDeviceContainer enbDevs;
|
||||
NetDeviceContainer ueDevs;
|
||||
enbDevs = lena.InstallEnbDevice (enbNodes);
|
||||
ueDevs = lena.InstallUeDevice (ueNodes);
|
||||
|
||||
|
||||
#. Attach a UE to a eNB. It will also create a RRC connection between them and configure the UE::
|
||||
|
||||
lena.Attach (ueDevs, enbDevs.Get (0));
|
||||
#. Attach the UEs to an eNB. This will configure each UE according to
|
||||
the eNB configuration, and create an RRC connection between them::
|
||||
|
||||
lena->Attach (ueDevs, enbDevs.Get (0));
|
||||
|
||||
#. Activate an EPS Bearer including the setup of the Radio Bearer between an eNB and its attached UE::
|
||||
|
||||
enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
|
||||
EpsBearer bearer (q);
|
||||
lena.ActivateEpsBearer (ueDevs, bearer);
|
||||
enum EpsBearer::Qci q = EpsBearer::GBR_CONV_VOICE;
|
||||
EpsBearer bearer (q);
|
||||
lena->ActivateEpsBearer (ueDevs, bearer);
|
||||
|
||||
In the current version of the ns-3 LTE model, the activation of an
|
||||
EPS Bearer will also activate two saturation traffic generators for
|
||||
that bearer, one in uplink and one in downlink.
|
||||
|
||||
#. Set the stop time::
|
||||
|
||||
Simulator::Stop (Seconds (0.005));
|
||||
|
||||
This is needed otherwise the simulation will last forever, because
|
||||
(among others) the start-of-subframe event is scheduled repeatedly, and the
|
||||
ns-3 simulator scheduler will hence never run out of events.
|
||||
|
||||
#. Run the simulation::
|
||||
|
||||
Simulator::Run ();
|
||||
|
||||
#. Cleanup and exit::
|
||||
|
||||
|
||||
Simulator::Destroy ();
|
||||
return 0;
|
||||
}
|
||||
|
||||
For how to compile and run simulation programs, please refer to [ns3tutorial]_.
|
||||
|
||||
|
||||
Configuration of LTE model parameters
|
||||
--------------------------------------
|
||||
|
||||
All the relevant LTE model parameters are managed through the ns-3
|
||||
attribute system. Please refer to the [ns3tutorial]_ and [ns3manual]_
|
||||
for detailed information on all the possible methods to do it
|
||||
(environmental variables, C++ API, GtkConfigStore...).
|
||||
|
||||
In the following, we just briefly summarize
|
||||
how to do it using input files together with the ns-3 ConfigStore.
|
||||
First of all, you need to put the following in your simulation
|
||||
program, right after ``main ()`` starts::
|
||||
|
||||
CommandLine cmd;
|
||||
cmd.Parse (argc, argv);
|
||||
ConfigStore inputConfig;
|
||||
inputConfig.ConfigureDefaults ();
|
||||
// parse again so you can override default values from the command line
|
||||
cmd.Parse (argc, argv);
|
||||
|
||||
for the above to work, make sure you also ``#include "ns3/config-store.h"``.
|
||||
Now create a text file named (for example) ``input-defaults.txt``
|
||||
specifying the new default values that you want to use for some attributes::
|
||||
|
||||
default ns3::LenaHelper::Scheduler "ns3::PfFfMacScheduler"
|
||||
default ns3::LenaHelper::PropagationModel "ns3::FriisSpectrumPropagationLossModel"
|
||||
default ns3::LteEnbNetDevice::UlBandwidth "25"
|
||||
default ns3::LteEnbNetDevice::DlBandwidth "25"
|
||||
default ns3::LteEnbNetDevice::DlEarfcn "100"
|
||||
default ns3::LteEnbNetDevice::UlEarfcn "18100"
|
||||
default ns3::LteUePhy::TxPower "10"
|
||||
default ns3::LteUePhy::NoiseFigure "9"
|
||||
default ns3::LteEnbPhy::TxPower "30"
|
||||
default ns3::LteEnbPhy::NoiseFigure "5"
|
||||
|
||||
Supposing your simulation program is called
|
||||
``src/lte/examples/lte-sim-with-input``, you can now pass these
|
||||
settings to the simulation program in the following way::
|
||||
|
||||
./waf --command-template="%s --ns3::ConfigStore::Filename=input-defaults.txt --ns3::ConfigStore::Mode=Load --ns3::ConfigStore::FileFormat=RawText" --run src/lte/examples/lte-sim-with-input
|
||||
|
||||
|
||||
Furthermore, you can generate a template input file with the following
|
||||
command::
|
||||
|
||||
./waf --command-template="%s --ns3::ConfigStore::Filename=input-defaults.txt --ns3::ConfigStore::Mode=Save --ns3::ConfigStore::FileFormat=RawText" --run src/lte/examples/lte-sim-with-input
|
||||
|
||||
note that the above will put in the file ``input-defaults.txt`` *all*
|
||||
the default values that are registered in your particular build of the
|
||||
simulator, including lots of non-LTE attributes.
|
||||
|
||||
|
||||
Simulation Output
|
||||
-----------------
|
||||
|
||||
The ns-3 LTE model currently supports the output to file of both MAC and RLC
|
||||
level Key Performance Indicators (KPIs). You can enable it in the following way::
|
||||
|
||||
Ptr<LenaHelper> lena = CreateObject<LenaHelper> ();
|
||||
|
||||
// configure all the simulation scenario here...
|
||||
|
||||
lena->EnableMacTraces ();
|
||||
lena->EnableRlcTraces ();
|
||||
|
||||
Simulator::Run ();
|
||||
|
||||
|
||||
RLC KPIs are calculated over a time interval and stored on two ASCII
|
||||
files, one for uplink and one for downlink. The time interval duration
|
||||
and the name of the files can be controlled using the attributes
|
||||
``ns3::RlcStatsCalculator::EpochDuration``,
|
||||
``ns3::RlcStatsCalculator::DlOutputFilename`` and
|
||||
``ns3::RlcStatsCalculator::UlOutputFilename``.
|
||||
The content of the columns of these files is the following (the same
|
||||
for uplink and downlink):
|
||||
|
||||
1. start time of measurement interval in seconds since the start of simulation
|
||||
2. end time of measurement interval in seconds since the start of simulation
|
||||
3. unique UE ID
|
||||
4. RNTI
|
||||
5. Logical Channel ID
|
||||
6. Number of transmitted PDUs
|
||||
7. Total bytes transmitted.
|
||||
8. Number of received PDUs
|
||||
9. Total bytes received
|
||||
10. Average PDU delay in seconds
|
||||
11. Standard deviation of the PDU delay
|
||||
12. Minimum value of the PDU delay
|
||||
13. Maximum value of the PDU delay
|
||||
14. Average PDU size, in bytes
|
||||
15. Standard deviation of the PDU size
|
||||
16. Minimum PDU size
|
||||
17. Maximum PDU size
|
||||
|
||||
MAC KPIs are basically a trace of the resource allocation reported by
|
||||
the scheduler upon the start of every subframe. They are stored in
|
||||
ASCII files. For downlink MAC KPIs the format is the following:
|
||||
|
||||
1. Simulation time in seconds at which the allocation is indicated by the scheduler
|
||||
2. Cell Identifier
|
||||
3. Frame number
|
||||
4. Subframe number
|
||||
5. RNTI
|
||||
6. MCS of TB 1
|
||||
7. size of TB 1
|
||||
8. MCS of TB 2 (0 if not present)
|
||||
9. size of TB 2 (0 if not present)
|
||||
|
||||
while for uplink MAC KPIs the format is:
|
||||
|
||||
1. Simulation time in seconds at which the allocation is indicated by the scheduler
|
||||
2. Frame number
|
||||
3. Subframe number
|
||||
4. RNTI
|
||||
5. MCS of TB
|
||||
6. size of TB
|
||||
|
||||
The names of the files used for MAC KPI output can be customized via
|
||||
the ns-3 attributes ``ns3::MacStatsCalculator::DlOutputFilename`` and
|
||||
``ns3::MacStatsCalculator::UlOutputFilename``.
|
||||
|
||||
|
||||
Further Reading
|
||||
---------------
|
||||
|
||||
The directory ``src/lte/examples/`` contains some example simulation programs that
|
||||
show how to simulate different LTE scenarios.
|
||||
|
||||
|
||||
Performance evaluation
|
||||
**********************
|
||||
|
||||
Execution time and memory consumption
|
||||
-------------------------------------
|
||||
|
||||
In order to provide an evaluation of the execution time and
|
||||
memory consumption, a
|
||||
reference simulation program (``examples/profiling-reference``) has been
|
||||
developed. This program simulates a scenario
|
||||
composed by a set of eNodeBs, and a set of UEs attached to each eNB. All eNodeBs
|
||||
have the same number of attached UEs. Communications are performed both in the
|
||||
dowlink and in the uplink using a saturation model (i.e., each RLC instance
|
||||
always has a PDU to transmit). The UEs are all in the same position than its
|
||||
eNodeB and the eNodeBs are distributed in a line, each one 140m away from the
|
||||
previous one. The total simulation time is set to 60s.
|
||||
|
||||
Using this simulation program, we ran a simulation campaign varying the number
|
||||
of eNBs as well as the number of UEs per eNB. For each simulation, we measured
|
||||
the execution time using the ``time`` shell command in linux, and the memory
|
||||
consumption by looking at the information in ``/proc/\{pid\}/statm``. The
|
||||
reference hardware platform is an Intel Core2 Duo E8400 3.00GHz with 512 MB of
|
||||
RAM memory running a Fedora Core 10 distribution with kernel
|
||||
2.6.27.5. The simulator build used in this
|
||||
experiment was configured with the options ``-d optimized
|
||||
--enable-static``.
|
||||
|
||||
The results are reported in `fig-simulationTime`_ and `fig-memoryUsage`_.
|
||||
We note that the memory usage, as expected,
|
||||
primarily depends on the number of eNBs, however is in general quite low. The
|
||||
execution time depends significantly on both the number of eNBs and the number
|
||||
of UEs per eNB. For the case of 10 UEs per eNB, we also show that the
|
||||
experimental data can be fitted quite accurately by a quadratic function. We
|
||||
suggest that this behavior is due to the fact that the
|
||||
interference calculations have a computational complexity which is quadratic with
|
||||
respect to the number of eNBs, and which is the dominant contribution in the overall
|
||||
computational load.
|
||||
|
||||
|
||||
.. _fig-simulationTime:
|
||||
|
||||
.. figure:: figures/simulationTime.*
|
||||
:align: center
|
||||
|
||||
Execution time of the reference program for a simulation duration of 60s.
|
||||
|
||||
|
||||
.. _fig-memoryUsage:
|
||||
|
||||
.. figure:: figures/memoryUsage.*
|
||||
:align: center
|
||||
|
||||
Memory usage of the reference program.
|
||||
|
||||
|
||||
|
||||
@@ -1,11 +1,9 @@
|
||||
|
||||
########################
|
||||
LTE Module
|
||||
########################
|
||||
####################################
|
||||
LTE Simulator Documentation
|
||||
####################################
|
||||
|
||||
|
||||
This chapter describes the ns-3 LTE module located in ``src/lte``.
|
||||
|
||||
|
||||
|
||||
.. toctree::
|
||||
@@ -13,6 +11,7 @@ This chapter describes the ns-3 LTE module located in ``src/lte``.
|
||||
lte-design
|
||||
lte-user
|
||||
lte-testing
|
||||
lte-references
|
||||
|
||||
|
||||
|
||||
|
||||
@@ -38,6 +38,7 @@ int main (int argc, char *argv[])
|
||||
double radius = 0.0;
|
||||
uint32_t nEnb = 1;
|
||||
uint32_t nUe = 1;
|
||||
double enbDist = 100;
|
||||
CommandLine cmd;
|
||||
|
||||
cmd.AddValue ("nEnb", "Number of eNodeBs", nEnb);
|
||||
@@ -64,6 +65,7 @@ int main (int argc, char *argv[])
|
||||
<< "_rngRun" << std::setw(3) << std::setfill('0') << runValue.Get () ;
|
||||
*/
|
||||
Ptr<LenaHelper> lena = CreateObject<LenaHelper> ();
|
||||
lena->EnableLogComponents ();
|
||||
|
||||
// Create Nodes: eNodeB and UE
|
||||
NodeContainer enbNodes;
|
||||
@@ -79,25 +81,30 @@ int main (int argc, char *argv[])
|
||||
|
||||
// Position of eNBs
|
||||
Ptr<ListPositionAllocator> positionAlloc = CreateObject<ListPositionAllocator> ();
|
||||
positionAlloc->Add (Vector (0.0, 0.0, 0.0));
|
||||
for (uint32_t i = 0; i < nEnb; i++)
|
||||
{
|
||||
positionAlloc->Add (Vector (enbDist*i, enbDist*i, 0.0));
|
||||
}
|
||||
|
||||
MobilityHelper enbMobility;
|
||||
enbMobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
|
||||
enbMobility.SetPositionAllocator (positionAlloc);
|
||||
enbMobility.Install (enbNodes);
|
||||
|
||||
// Position of UEs attached to eN
|
||||
MobilityHelper ueMobility;
|
||||
ueMobility.SetPositionAllocator ("ns3::UniformDiscPositionAllocator",
|
||||
"X", DoubleValue (0.0),
|
||||
"Y", DoubleValue (0.0),
|
||||
"rho", DoubleValue (radius));
|
||||
ueMobility.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
|
||||
// Position of UEs attached to eNB
|
||||
vector<MobilityHelper> ueMobility;
|
||||
for (uint32_t i = 0; i < nEnb; i++)
|
||||
{
|
||||
ueMobility.Install (ueNodes[i]);
|
||||
MobilityHelper ueMob;
|
||||
ueMob.SetPositionAllocator ("ns3::UniformDiscPositionAllocator",
|
||||
"X", DoubleValue (enbDist*i),
|
||||
"Y", DoubleValue (enbDist*i),
|
||||
"rho", DoubleValue (radius));
|
||||
ueMob.SetMobilityModel ("ns3::ConstantPositionMobilityModel");
|
||||
ueMobility.push_back (ueMob);
|
||||
ueMobility[i].Install (ueNodes[i]);
|
||||
}
|
||||
|
||||
|
||||
// Create Devices and install them in the Nodes (eNB and UE)
|
||||
NetDeviceContainer enbDevs;
|
||||
vector<NetDeviceContainer> ueDevs;
|
||||
@@ -10,6 +10,6 @@ def build(bld):
|
||||
obj = bld.create_ns3_program('lena-rlc-calculator',
|
||||
['lte'])
|
||||
obj.source = 'lena-rlc-calculator.cc'
|
||||
obj = bld.create_ns3_program('execution-time-reference',
|
||||
obj = bld.create_ns3_program('profiling-reference',
|
||||
['lte'])
|
||||
obj.source = 'execution-time-reference.cc'
|
||||
obj.source = 'profiling-reference.cc'
|
||||
|
||||
@@ -228,15 +228,6 @@ LteAmc::GetMcsFromCqi (int cqi)
|
||||
return mcs;
|
||||
}
|
||||
|
||||
|
||||
// int
|
||||
// LteAmc::GetTbSizeFromMcs (int mcs)
|
||||
// {
|
||||
// NS_LOG_FUNCTION (mcs);
|
||||
// NS_LOG_FUNCTION (mcs << TransportBlockSize[mcs]);
|
||||
// return TransportBlockSize[mcs];
|
||||
// }
|
||||
|
||||
int
|
||||
LteAmc::GetTbSizeFromMcs (int mcs, int nprb)
|
||||
{
|
||||
|
||||
@@ -51,18 +51,11 @@ public:
|
||||
*/
|
||||
static int GetMcsFromCqi (int cqi);
|
||||
|
||||
// /**
|
||||
// * \brief Get the Transport Block Size for a selected MCS
|
||||
// * \param mcs the mcs index
|
||||
// * \return the TBs value
|
||||
// */
|
||||
// static int GetTbSizeFromMcs (int mcs);
|
||||
|
||||
/**
|
||||
* \brief Get the Transport Block Size for a selected MCS and number of PRB (table 7.1.7.2.1-1 of 36.213)
|
||||
* \param mcs the mcs index
|
||||
* \param nprb the no. of PRB
|
||||
* \return the TBs value
|
||||
* \return the Transport Block Size in bits
|
||||
*/
|
||||
static int GetTbSizeFromMcs (int mcs, int nprb);
|
||||
|
||||
@@ -70,7 +63,7 @@ public:
|
||||
* \brief Get the spectral efficiency value associated
|
||||
* to the received CQI
|
||||
* \param cqi the cqi value
|
||||
* \return the spectral efficiency value
|
||||
* \return the spectral efficiency in (bit/s)/Hz
|
||||
*/
|
||||
static double GetSpectralEfficiencyFromCqi (int cqi);
|
||||
|
||||
|
||||
@@ -152,11 +152,11 @@ LenaTestPfFfMacSchedulerSuite::LenaTestPfFfMacSchedulerSuite ()
|
||||
// Test Case 2: fairness check
|
||||
|
||||
std::vector<uint16_t> dist;
|
||||
dist.push_back (0); // User 0 distance
|
||||
dist.push_back (3000); // User 1 distance
|
||||
dist.push_back (6000); // User 2 distance
|
||||
dist.push_back (9000); // User 3 distance
|
||||
dist.push_back (15000); // User 4 distance
|
||||
dist.push_back (0); // User 0 distance --> MCS 28
|
||||
dist.push_back (3000); // User 1 distance --> MCS 24
|
||||
dist.push_back (6000); // User 2 distance --> MCS 16
|
||||
dist.push_back (9000); // User 3 distance --> MCS 12
|
||||
dist.push_back (15000); // User 4 distance --> MCS 6
|
||||
std::vector<uint32_t> estThrPfDl;
|
||||
estThrPfDl.push_back (89000); // User 0 estimated TTI throughput from PF
|
||||
estThrPfDl.push_back (55000); // User 1 estimated TTI throughput from PF
|
||||
|
||||
Reference in New Issue
Block a user