From 9dd27f1f6ce9934371260559c9d27c5b11438dff Mon Sep 17 00:00:00 2001 From: jnin Date: Fri, 20 May 2011 17:13:26 +0200 Subject: [PATCH 01/14] Changed geometry distribution on profling-reference. Added short piece of documentation on the setup for the profiling. --- src/lte/doc/source/lte-user.rst | 10 +++++++ ...me-reference.cc => profiling-reference.cc} | 27 ++++++++++++------- src/lte/examples/wscript | 4 +-- 3 files changed, 29 insertions(+), 12 deletions(-) rename src/lte/examples/{execution-time-reference.cc => profiling-reference.cc} (85%) diff --git a/src/lte/doc/source/lte-user.rst b/src/lte/doc/source/lte-user.rst index eaa8d8c6b..2e739049e 100644 --- a/src/lte/doc/source/lte-user.rst +++ b/src/lte/doc/source/lte-user.rst @@ -68,3 +68,13 @@ Example simulation program lena.ActivateEpsBearer (ueDevs, bearer); +Performance evaluation +********************** + +Execution time and memory consumption +------------------------------------- + +In order to provide an running time and memory consumption estimation a reference simulation script has been developed, ``src/lte/examples/profiling-reference``. The scenario is composed by a set of eNodeBs, each one of them with a constant number of UEs attached. All eNodeBs have the same number of attached UEs. 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. Simulated time is set to 60s. + +With this considerations, the execution time and the memory consumtpion has been obtained for a certain number of UEs attached to each eNodeB and number of eNodeBs. The reference hardware platform is a Intel Core2 Duo E8400 3.00GHz with 512 MB of RAM memory running a Fedora Core 10 with kernel 2.6.27.5. It scenarios considered range the number of eNodeBs between 1 and 15 and the UEs per eNodeB in 1, 5 and 10. The performance figures obtained show follows. + diff --git a/src/lte/examples/execution-time-reference.cc b/src/lte/examples/profiling-reference.cc similarity index 85% rename from src/lte/examples/execution-time-reference.cc rename to src/lte/examples/profiling-reference.cc index 21f143e4d..0cb9f0619 100644 --- a/src/lte/examples/execution-time-reference.cc +++ b/src/lte/examples/profiling-reference.cc @@ -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 lena = CreateObject (); + lena->EnableLogComponents (); // Create Nodes: eNodeB and UE NodeContainer enbNodes; @@ -79,25 +81,30 @@ int main (int argc, char *argv[]) // Position of eNBs Ptr positionAlloc = CreateObject (); - 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 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 ueDevs; diff --git a/src/lte/examples/wscript b/src/lte/examples/wscript index d73403add..aa22a6e8f 100644 --- a/src/lte/examples/wscript +++ b/src/lte/examples/wscript @@ -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' From 8ce76b6165f0d5b29694be16bac1e6266257ac27 Mon Sep 17 00:00:00 2001 From: Manuel Requena Date: Fri, 20 May 2011 17:21:15 +0200 Subject: [PATCH 02/14] clean only generated files --- src/lte/doc/Makefile | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/lte/doc/Makefile b/src/lte/doc/Makefile index ba00dd98c..0bb8b3d0e 100644 --- a/src/lte/doc/Makefile +++ b/src/lte/doc/Makefile @@ -72,7 +72,8 @@ help: clean: -rm -rf $(BUILDDIR)/* - -rm -rf $(SOURCE) + -rm -f $(IMAGES_PNG) + -rm -f $(IMAGES_PDF) frag: pickle @if test ! -d $(BUILDDIR)/frag; then mkdir $(BUILDDIR)/frag; fi From 0fbb1e39d1c9935869efd4c0619cc8adfab25a6d Mon Sep 17 00:00:00 2001 From: Nicola Baldo Date: Fri, 20 May 2011 18:42:04 +0200 Subject: [PATCH 03/14] updated documentation --- src/lte/doc/source/lte-design.rst | 36 ++++++++---------------------- src/lte/doc/source/lte-testing.rst | 13 ----------- src/lte/doc/source/lte-user.rst | 6 +++-- 3 files changed, 13 insertions(+), 42 deletions(-) diff --git a/src/lte/doc/source/lte-design.rst b/src/lte/doc/source/lte-design.rst index 06e585d91..47cd0f96d 100644 --- a/src/lte/doc/source/lte-design.rst +++ b/src/lte/doc/source/lte-design.rst @@ -128,16 +128,16 @@ Proportional Fair (PF) Scheduler Here we describe the PF scheduler that we implement, providing references from the literature. - -LTE Spectrum Model -~~~~~~~~~~~~~~~~~~ - -Here we describe how the LTE spectrum model works and what it allows to do. - +Spectrum Model Physical layer ~~~~~~~~~~~~~~ +The usage of the radio spectrum by eNBs and UEs in LTE is described in [TS36.101]_. + +In the simulator, we model it as follow. for communications 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 create a corresponding spectrum model using the `ns3::Spectrum`` framework of [Baldo2009]_. All these LTE-specific spectrum models are used to simulate different spectrum usage policies in the same simulation, for example allowing the simulation of cognitive radio / dynamic spectrum access strategies for LTE. + The physical layer model provided in this LTE simulator model supports Frequency Division Duplex (FDD) only. @@ -146,11 +146,11 @@ Propagation Loss Models ~~~~~~~~~~~~~~~~~~~~~~~ NOTE: this information refers to the GSoC model, which as of this writing is not working anymore. -A proper propagation loss model has been developed for the LTE E-UTRAN interface (see [2]_ and [3]_). +A proper propagation loss model has been developed for the LTE E-UTRAN interface (see [TS25.814]_ and [Piro2010]_). It is used by the PHY layer to compute the loss due to the propagation. The LTE propagation loss model is composed by 4 different models (shadowing, multipath, -penetration loss and path loss) [2]_: +penetration loss and path loss) [TS25.814]_: * Pathloss: :math:`PL = 128.1 + (37.6 * log10 (R))`, where R is the distance between the UE and the eNB in Km. @@ -162,25 +162,7 @@ penetration loss and path loss) [2]_: * Shadowing: log-normal distribution (mean=0dB, standard deviation=8dB) Every time that the ``LteSpectrumPHY::StartRx ()`` function is called, the -``SpectrumInterferenceModel`` is used to computed the SINR, as proposed in [3]_. Then, +``SpectrumInterferenceModel`` is used to computed the SINR, as proposed in [Piro2010]_. Then, the network device uses the AMC module to map the SINR to a proper CQI and to send it to the eNB using the ideal control channel. - -References -********** - -.. [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). - -.. [2] 3GPP TS 25.814 ( http://www.3gpp.org/ftp/specs/html-INFO/25814.htm ) - -.. [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 ) diff --git a/src/lte/doc/source/lte-testing.rst b/src/lte/doc/source/lte-testing.rst index 6cba1e916..8b00e9a72 100644 --- a/src/lte/doc/source/lte-testing.rst +++ b/src/lte/doc/source/lte-testing.rst @@ -145,17 +145,4 @@ Let :math:`Ri` the estimation done by PFS of the throughput of the :math:`i` UE 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. -References -********** -.. [TS36.213] 3GPP TS 36.213 "LTE Physical layer procedures" - -.. [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", 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) - -.. [R1-081483] 3GPP R1-081483 "Conveying MCS and TB size via PDCCH" diff --git a/src/lte/doc/source/lte-user.rst b/src/lte/doc/source/lte-user.rst index 2e739049e..fe526326b 100644 --- a/src/lte/doc/source/lte-user.rst +++ b/src/lte/doc/source/lte-user.rst @@ -74,7 +74,9 @@ Performance evaluation Execution time and memory consumption ------------------------------------- -In order to provide an running time and memory consumption estimation a reference simulation script has been developed, ``src/lte/examples/profiling-reference``. The scenario is composed by a set of eNodeBs, each one of them with a constant number of UEs attached. All eNodeBs have the same number of attached UEs. 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. Simulated time is set to 60s. +In order to provide an running time and memory consumption estimation a reference simulation program has been developed, ``src/lte/examples/profiling-reference``. 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. -With this considerations, the execution time and the memory consumtpion has been obtained for a certain number of UEs attached to each eNodeB and number of eNodeBs. The reference hardware platform is a Intel Core2 Duo E8400 3.00GHz with 512 MB of RAM memory running a Fedora Core 10 with kernel 2.6.27.5. It scenarios considered range the number of eNodeBs between 1 and 15 and the UEs per eNodeB in 1, 5 and 10. The performance figures obtained show follows. +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 consumtpion by looking at the information in ``/proc/{pid}/statm``. The reference hardware platform is a Intel Core2 Duo E8400 3.00GHz with 512 MB of RAM memory running a Fedora Core 10 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 the figures below. We note that the memory usage primarily depends on the number of eNBs, and is in general quite low. The execution time depends significantly on both the number of eNBs and the number of UEs per eNB, and in the largest experiment that we ran (12 eNBs and 10 UEs per eNB) it corresponds to 30 times the simulation time. From fb30a3566f3308b95b1ede5a5da495fada4de135 Mon Sep 17 00:00:00 2001 From: Nicola Baldo Date: Mon, 23 May 2011 09:37:48 +0200 Subject: [PATCH 04/14] added lte-reference.rst --- src/lte/doc/source/lte-references.rst | 37 +++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) create mode 100644 src/lte/doc/source/lte-references.rst diff --git a/src/lte/doc/source/lte-references.rst b/src/lte/doc/source/lte-references.rst new file mode 100644 index 000000000..2adc5e2b2 --- /dev/null +++ b/src/lte/doc/source/lte-references.rst @@ -0,0 +1,37 @@ + + + + + +.. [Baldo2009] 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). + + +.. [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 ( draft version is available on + http://telematics.poliba.it/index.php?option=com_jombib&task=showbib&id=330 ) + + + +.. [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", 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) + + + +.. [TS36.101] 3GPP TS 36.101 + +.. [TS36.213] 3GPP TS 36.213 "LTE Physical layer procedures" + +.. [TS25.814] 3GPP TS 25.814 ( http://www.3gpp.org/ftp/specs/html-INFO/25814.htm ) + + +.. [R1-081483] 3GPP R1-081483 "Conveying MCS and TB size via PDCCH" available at + http://www.3gpp.org/ftp/tsg_ran/WG1_RL1/TSGR1_52b/Docs/R1-081483.zip From 24a144210e2886a335e608f24dab222e4ae998d6 Mon Sep 17 00:00:00 2001 From: Manuel Requena Date: Tue, 24 May 2011 12:07:43 +0200 Subject: [PATCH 05/14] pdf and png files not needed anymore for eps figures --- src/lte/doc/Makefile | 22 +++++++++++++++---- src/lte/doc/source/figures/lte-mcs-index.pdf | Bin 4450 -> 0 bytes src/lte/doc/source/figures/lte-mcs-index.png | Bin 13640 -> 0 bytes 3 files changed, 18 insertions(+), 4 deletions(-) delete mode 100644 src/lte/doc/source/figures/lte-mcs-index.pdf delete mode 100644 src/lte/doc/source/figures/lte-mcs-index.png diff --git a/src/lte/doc/Makefile b/src/lte/doc/Makefile index 0bb8b3d0e..a5006bef8 100644 --- a/src/lte/doc/Makefile +++ b/src/lte/doc/Makefile @@ -11,7 +11,11 @@ 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 # rescale figures as necessary @@ -38,6 +42,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 @@ -74,13 +86,15 @@ clean: -rm -rf $(BUILDDIR)/* -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." @@ -134,14 +148,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 diff --git a/src/lte/doc/source/figures/lte-mcs-index.pdf b/src/lte/doc/source/figures/lte-mcs-index.pdf deleted file mode 100644 index 6f5c1969fa3ef7ad4611724f2541d2642570afe4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4450 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 From 89291777fd5f334bf1ea35577ed728aeeae3cc55 Mon Sep 17 00:00:00 2001 From: Nicola Baldo Date: Tue, 24 May 2011 15:55:58 +0200 Subject: [PATCH 06/14] indicating MCS corresponding to distance in lte-test-pf-ff-mac-scheduler.cc --- src/lte/test/lte-test-pf-ff-mac-scheduler.cc | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/src/lte/test/lte-test-pf-ff-mac-scheduler.cc b/src/lte/test/lte-test-pf-ff-mac-scheduler.cc index d40ebfe0d..b6fdb64a7 100644 --- a/src/lte/test/lte-test-pf-ff-mac-scheduler.cc +++ b/src/lte/test/lte-test-pf-ff-mac-scheduler.cc @@ -152,11 +152,11 @@ LenaTestPfFfMacSchedulerSuite::LenaTestPfFfMacSchedulerSuite () // Test Case 2: fairness check std::vector 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 estThrPfDl; estThrPfDl.push_back (89000); // User 0 estimated TTI throughput from PF estThrPfDl.push_back (55000); // User 1 estimated TTI throughput from PF From 4f9408df0d1506631d81d578e1d03a07b06ff393 Mon Sep 17 00:00:00 2001 From: Nicola Baldo Date: Thu, 26 May 2011 15:41:01 +0200 Subject: [PATCH 07/14] added a few comments to lte-amc --- src/lte/model/lte-amc.cc | 9 --------- src/lte/model/lte-amc.h | 11 ++--------- 2 files changed, 2 insertions(+), 18 deletions(-) diff --git a/src/lte/model/lte-amc.cc b/src/lte/model/lte-amc.cc index 4f25c7f81..53b355bb3 100644 --- a/src/lte/model/lte-amc.cc +++ b/src/lte/model/lte-amc.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) { diff --git a/src/lte/model/lte-amc.h b/src/lte/model/lte-amc.h index dba6e5dc1..539da4108 100644 --- a/src/lte/model/lte-amc.h +++ b/src/lte/model/lte-amc.h @@ -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); From c7ac3153af62db44353f9a26a977f8750871dad8 Mon Sep 17 00:00:00 2001 From: Nicola Baldo Date: Thu, 26 May 2011 18:02:33 +0200 Subject: [PATCH 08/14] updated design doc: FF API & resource alloc --- src/lte/doc/source/lte-design.rst | 224 +++++++++++++++++++------- src/lte/doc/source/lte-references.rst | 43 ++--- 2 files changed, 186 insertions(+), 81 deletions(-) diff --git a/src/lte/doc/source/lte-design.rst b/src/lte/doc/source/lte-design.rst index 47cd0f96d..a7e3ac7bd 100644 --- a/src/lte/doc/source/lte-design.rst +++ b/src/lte/doc/source/lte-design.rst @@ -13,103 +13,205 @@ 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 (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. -#. 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. Module Architecture ~~~~~~~~~~~~~~~~~~~ +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 overall architecture of the LTE module is represented in the following figures. + +.. _fig-lte-enb-architecture: + .. figure:: figures/lte-enb-architecture.* - :align: right - The architecture of the LTE eNB + Architecture of the LTE eNB + + + +.. _fig-lte-ue-architecture: .. figure:: figures/lte-ue-architecture.* - :align: right - The architecture of the LTE UE + Architecture of the LTE UE -Detailed description of the components -************************************** .. _ff-mac-sched-api: The FemtoForum MAC Scheduler Interface -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +++++++++++++++++++++++++++++++++++++++ -This section describes the ns-3 specific version of the `FemtoForum LTE MAC Scheduler Interface Specification v1.11 `_ +This section describes the ns-3 specific version of the LTE MAC +Scheduler Interface Specification published by the FemtoForum [FFAPI]_. -The goals of the definition of this MAC scheduler API in the |ns3| network simulator are: +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: -* 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. - -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 ``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. + + +Resource Allocation Model ++++++++++++++++++++++++++ + + +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. + + MAC Scheduler Implementations ~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ diff --git a/src/lte/doc/source/lte-references.rst b/src/lte/doc/source/lte-references.rst index 2adc5e2b2..5eca68cac 100644 --- a/src/lte/doc/source/lte-references.rst +++ b/src/lte/doc/source/lte-references.rst @@ -1,37 +1,40 @@ +.. [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. -.. [Baldo2009] 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). - - -.. [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 ( draft version is available on - http://telematics.poliba.it/index.php?option=com_jombib&task=showbib&id=330 ) - +.. [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", Wns3 2011 - (in conjunction with SimuTOOLS 2011), March 2011, Barcelona (Spain) +.. [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) +.. [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.101] 3GPP TS 36.101 +.. [TS36.213] 3GPP TS 36.213 "E-UTRA Physical layer procedures" -.. [TS36.213] 3GPP TS 36.213 "LTE Physical layer procedures" - -.. [TS25.814] 3GPP TS 25.814 ( http://www.3gpp.org/ftp/specs/html-INFO/25814.htm ) +.. [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" available at +.. [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 From 60c29c0de73a2422ca6e0f56147b59fbcc197e15 Mon Sep 17 00:00:00 2001 From: Nicola Baldo Date: Thu, 26 May 2011 18:31:24 +0200 Subject: [PATCH 09/14] finished updating design doc --- src/lte/doc/source/lte-design.rst | 179 ++++++++++++++++++++------ src/lte/doc/source/lte-references.rst | 9 +- 2 files changed, 139 insertions(+), 49 deletions(-) diff --git a/src/lte/doc/source/lte-design.rst b/src/lte/doc/source/lte-design.rst index a7e3ac7bd..3e77422e2 100644 --- a/src/lte/doc/source/lte-design.rst +++ b/src/lte/doc/source/lte-design.rst @@ -64,8 +64,8 @@ have been considered: 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 + 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 @@ -192,7 +192,9 @@ 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 +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 @@ -201,7 +203,9 @@ 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 +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 @@ -211,60 +215,151 @@ 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: -MAC Scheduler Implementations -~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ +.. math:: -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. + \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 ++++++++++++++++++++++++++ -Here we describe the RR scheduler that we implement, providing references from the literature. +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 ++++++++++++++++++++++++++++++++ -Here we describe the PF scheduler that we implement, providing references from the literature. +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:: + + 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 + +.. math:: + + \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:: + + 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:: + + \widehat{M}_j(t) = \min_{k: \widehat{i}_{k}(t) = j}{M_{j,k}(t)} + +then we determine the total number :math:`\widehat{B}_j(t)` of RBs allocated to user +:math:`j`: + +.. math:: + + \widehat{B}_j(t) = \left| \{ k : \widehat{i}_{k}(t) = j \} \right| + +where :math:`|\cdot|` indicates the cardinality of the set; finally, + +.. math:: + + \widehat{T}_{j}(t) = \frac{S\left( \widehat{M}_j(t), \widehat{B}_j(t) + \right)}{\tau} + + + + +RRC and RLC Models +++++++++++++++++++++++++++++++ + +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. + +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 different spectrum usage policies in the same +simulation, such as for example the spectrum licensing policies that are +discussed in [Ofcom2.6GHz]_. + -Spectrum Model Physical layer -~~~~~~~~~~~~~~ -The usage of the radio spectrum by eNBs and UEs in LTE is described in [TS36.101]_. +++++++++++++++ -In the simulator, we model it as follow. for communications 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 create a corresponding spectrum model using the `ns3::Spectrum`` framework of [Baldo2009]_. All these LTE-specific spectrum models are used to simulate different spectrum usage policies in the same simulation, for example allowing the simulation of cognitive radio / dynamic spectrum access strategies for LTE. - -The physical layer model provided in this LTE simulator model supports Frequency Division Duplex (FDD) only. - - - -Propagation Loss Models -~~~~~~~~~~~~~~~~~~~~~~~ -NOTE: this information refers to the GSoC model, which as of this writing is not working anymore. - -A proper propagation loss model has been developed for the LTE E-UTRAN interface (see [TS25.814]_ and [Piro2010]_). -It is used by the PHY layer to compute the loss due to the propagation. - -The LTE propagation loss model is composed by 4 different models (shadowing, multipath, -penetration loss and path loss) [TS25.814]_: - -* Pathloss: :math:`PL = 128.1 + (37.6 * log10 (R))`, where R is the distance between the - UE and the eNB in Km. - -* Multipath: Jakes model - -* PenetrationLoss: 10 dB - -* Shadowing: log-normal distribution (mean=0dB, standard deviation=8dB) - -Every time that the ``LteSpectrumPHY::StartRx ()`` function is called, the -``SpectrumInterferenceModel`` is used to computed the SINR, as proposed in [Piro2010]_. Then, -the network device uses the AMC module to map the SINR to a proper CQI and to send it -to the eNB using the ideal control channel. +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). diff --git a/src/lte/doc/source/lte-references.rst b/src/lte/doc/source/lte-references.rst index 5eca68cac..0d88ff796 100644 --- a/src/lte/doc/source/lte-references.rst +++ b/src/lte/doc/source/lte-references.rst @@ -2,17 +2,14 @@ .. [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", @@ -30,11 +27,9 @@ .. [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" +.. [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 +.. [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 From 4e1d002ccced112d2dd2429ec4a8beab6ec2bf71 Mon Sep 17 00:00:00 2001 From: Nicola Baldo Date: Thu, 26 May 2011 18:59:15 +0200 Subject: [PATCH 10/14] updated testing doc --- src/lte/doc/Makefile | 4 +- .../doc/source/figures/lenaThrTestCase1.eps | 1212 +++++++++++++++++ .../doc/source/figures/lenaThrTestCase2.eps | 927 +++++++++++++ src/lte/doc/source/lte-testing.rst | 195 ++- 4 files changed, 2295 insertions(+), 43 deletions(-) create mode 100644 src/lte/doc/source/figures/lenaThrTestCase1.eps create mode 100644 src/lte/doc/source/figures/lenaThrTestCase2.eps diff --git a/src/lte/doc/Makefile b/src/lte/doc/Makefile index a5006bef8..369c75d96 100644 --- a/src/lte/doc/Makefile +++ b/src/lte/doc/Makefile @@ -15,7 +15,9 @@ IMAGES_EPS = \ # specify figures for build process (all eps figures) GRAPHS_EPS = \ - $(FIGURES)/lte-mcs-index.eps + $(FIGURES)/lte-mcs-index.eps \ + $(FIGURES)/lenaThrTestCase1.eps \ + $(FIGURES)/lenaThrTestCase2.eps # rescale figures as necessary diff --git a/src/lte/doc/source/figures/lenaThrTestCase1.eps b/src/lte/doc/source/figures/lenaThrTestCase1.eps new file mode 100644 index 000000000..81202a803 --- /dev/null +++ b/src/lte/doc/source/figures/lenaThrTestCase1.eps @@ -0,0 +1,1212 @@ +%!PS-Adobe-2.0 EPSF-2.0 +%%Title: lenaThrTestCase1.eps +%%Creator: gnuplot 4.2 patchlevel 6 +%%CreationDate: Thu May 19 13:31:08 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 -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 (lenaThrTestCase1.eps) + /Subject (gnuplot plot) + /Creator (gnuplot 4.2 patchlevel 6 ) + /Author (Marco Miozzo,,,) +% /Producer (gnuplot) +% /Keywords () + /CreationDate (Thu May 19 13:31:08 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 +1045 608 M +5870 0 V +stroke +LTb +1045 608 M +63 0 V +5807 0 R +-63 0 V +stroke +931 608 M +[ [(Times) 190.0 0.0 true true 0 (0.1)] +] -63.3 MRshow +1.000 UL +LTb +1.000 UL +LTa +1045 1019 M +5870 0 V +stroke +LTb +1045 1019 M +63 0 V +5807 0 R +-63 0 V +stroke +LTa +1045 1259 M +5870 0 V +stroke +LTb +1045 1259 M +63 0 V +5807 0 R +-63 0 V +stroke +LTa +1045 1430 M +5870 0 V +stroke +LTb +1045 1430 M +63 0 V +5807 0 R +-63 0 V +stroke +LTa +1045 1562 M +5870 0 V +stroke +LTb +1045 1562 M +63 0 V +5807 0 R +-63 0 V +stroke +LTa +1045 1670 M +5870 0 V +stroke +LTb +1045 1670 M +63 0 V +5807 0 R +-63 0 V +stroke +LTa +1045 1762 M +5870 0 V +stroke +LTb +1045 1762 M +63 0 V +5807 0 R +-63 0 V +stroke +LTa +1045 1841 M +5870 0 V +stroke +LTb +1045 1841 M +63 0 V +5807 0 R +-63 0 V +stroke +LTa +1045 1911 M +5870 0 V +stroke +LTb +1045 1911 M +63 0 V +5807 0 R +-63 0 V +stroke +LTa +1045 1973 M +5870 0 V +stroke +LTb +1045 1973 M +63 0 V +5807 0 R +-63 0 V +stroke +931 1973 M +[ [(Times) 190.0 0.0 true true 0 (1)] +] -63.3 MRshow +1.000 UL +LTb +1.000 UL +LTa +1045 2384 M +5870 0 V +stroke +LTb +1045 2384 M +63 0 V +5807 0 R +-63 0 V +stroke +LTa +1045 2625 M +5870 0 V +stroke +LTb +1045 2625 M +63 0 V +5807 0 R +-63 0 V +stroke +LTa +1045 2795 M +5870 0 V +stroke +LTb +1045 2795 M +63 0 V +5807 0 R +-63 0 V +stroke +LTa +1045 2928 M +3958 0 V +1798 0 R +114 0 V +stroke +LTb +1045 2928 M +63 0 V +5807 0 R +-63 0 V +stroke +LTa +1045 3036 M +3958 0 V +1798 0 R +114 0 V +stroke +LTb +1045 3036 M +63 0 V +5807 0 R +-63 0 V +stroke +LTa +1045 3127 M +3958 0 V +1798 0 R +114 0 V +stroke +LTb +1045 3127 M +63 0 V +5807 0 R +-63 0 V +stroke +LTa +1045 3206 M +3958 0 V +1798 0 R +114 0 V +stroke +LTb +1045 3206 M +63 0 V +5807 0 R +-63 0 V +stroke +LTa +1045 3276 M +3958 0 V +1798 0 R +114 0 V +stroke +LTb +1045 3276 M +63 0 V +5807 0 R +-63 0 V +stroke +LTa +1045 3339 M +3958 0 V +1798 0 R +114 0 V +stroke +LTb +1045 3339 M +63 0 V +5807 0 R +-63 0 V +stroke +931 3339 M +[ [(Times) 190.0 0.0 true true 0 (10)] +] -63.3 MRshow +1.000 UL +LTb +1.000 UL +LTa +1045 3750 M +3958 0 V +1798 0 R +114 0 V +stroke +LTb +1045 3750 M +63 0 V +5807 0 R +-63 0 V +stroke +LTa +1045 3990 M +3958 0 V +1798 0 R +114 0 V +stroke +LTb +1045 3990 M +63 0 V +5807 0 R +-63 0 V +stroke +LTa +1045 4161 M +3958 0 V +1798 0 R +114 0 V +stroke +LTb +1045 4161 M +63 0 V +5807 0 R +-63 0 V +stroke +LTa +1045 4293 M +3958 0 V +1798 0 R +114 0 V +stroke +LTb +1045 4293 M +63 0 V +5807 0 R +-63 0 V +stroke +LTa +1045 4401 M +3958 0 V +1798 0 R +114 0 V +stroke +LTb +1045 4401 M +63 0 V +5807 0 R +-63 0 V +stroke +LTa +1045 4492 M +3958 0 V +1798 0 R +114 0 V +stroke +LTb +1045 4492 M +63 0 V +5807 0 R +-63 0 V +stroke +LTa +1045 4572 M +3958 0 V +1798 0 R +114 0 V +stroke +LTb +1045 4572 M +63 0 V +5807 0 R +-63 0 V +stroke +LTa +1045 4641 M +3958 0 V +1798 0 R +114 0 V +stroke +LTb +1045 4641 M +63 0 V +5807 0 R +-63 0 V +stroke +LTa +1045 4704 M +3958 0 V +1798 0 R +114 0 V +stroke +LTb +1045 4704 M +63 0 V +5807 0 R +-63 0 V +stroke +931 4704 M +[ [(Times) 190.0 0.0 true true 0 (100)] +] -63.3 MRshow +1.000 UL +LTb +1.000 UL +LTa +1045 608 M +0 4204 V +stroke +LTb +1045 608 M +0 63 V +0 4141 R +0 -63 V +stroke +1045 418 M +[ [(Times) 190.0 0.0 true true 0 ( 1)] +] -63.3 MCshow +1.000 UL +LTb +1.000 UL +LTa +2547 608 M +0 4204 V +stroke +LTb +2547 608 M +0 63 V +0 4141 R +0 -63 V +stroke +2547 418 M +[ [(Times) 190.0 0.0 true true 0 ( 2)] +] -63.3 MCshow +1.000 UL +LTb +1.000 UL +LTa +3426 608 M +0 4204 V +stroke +LTb +3426 608 M +0 63 V +0 4141 R +0 -63 V +stroke +3426 418 M +[ [(Times) 190.0 0.0 true true 0 ( 3)] +] -63.3 MCshow +1.000 UL +LTb +1.000 UL +LTa +4050 608 M +0 4204 V +stroke +LTb +4050 608 M +0 63 V +0 4141 R +0 -63 V +stroke +4050 418 M +[ [(Times) 190.0 0.0 true true 0 ( 4)] +] -63.3 MCshow +1.000 UL +LTb +1.000 UL +LTa +4534 608 M +0 4204 V +stroke +LTb +4534 608 M +0 63 V +0 4141 R +0 -63 V +stroke +4534 418 M +[ [(Times) 190.0 0.0 true true 0 ( 5)] +] -63.3 MCshow +1.000 UL +LTb +1.000 UL +LTa +4929 608 M +0 4204 V +stroke +LTb +4929 608 M +0 63 V +0 4141 R +0 -63 V +stroke +4929 418 M +[ [(Times) 190.0 0.0 true true 0 ( 6)] +] -63.3 MCshow +1.000 UL +LTb +1.000 UL +LTa +5263 608 M +0 2241 V +0 1900 R +0 63 V +stroke +LTb +5263 608 M +0 63 V +0 4141 R +0 -63 V +stroke +5263 418 M +[ [(Times) 190.0 0.0 true true 0 ( 7)] +] -63.3 MCshow +1.000 UL +LTb +1.000 UL +LTa +5552 608 M +0 2241 V +0 1900 R +0 63 V +stroke +LTb +5552 608 M +0 63 V +0 4141 R +0 -63 V +stroke +5552 418 M +[ [(Times) 190.0 0.0 true true 0 ( 8)] +] -63.3 MCshow +1.000 UL +LTb +1.000 UL +LTa +5808 608 M +0 2241 V +0 1900 R +0 63 V +stroke +LTb +5808 608 M +0 63 V +0 4141 R +0 -63 V +stroke +5808 418 M +[ [(Times) 190.0 0.0 true true 0 ( 9)] +] -63.3 MCshow +1.000 UL +LTb +1.000 UL +LTa +6036 608 M +0 2241 V +0 1900 R +0 63 V +stroke +LTb +6036 608 M +0 63 V +0 4141 R +0 -63 V +stroke +6036 418 M +[ [(Times) 190.0 0.0 true true 0 ( 10)] +] -63.3 MCshow +1.000 UL +LTb +1.000 UL +LTb +1045 4812 N +0 -4204 V +5870 0 V +0 4204 V +-5870 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 [Mbps])] +] -63.3 MCshow +grestore +LTb +LCb setrgbcolor +3980 133 M +[ [(Times) 190.0 0.0 true true 0 (no. of users)] +] -63.3 MCshow +LTb +1.400 UP +1.000 UL +LTb +1.400 UP +1.000 UL +LT0 +LTb +6029 4654 M +[ [(Times) 190.0 0.0 true true 0 (RR MCS 28)] +] -63.3 MRshow +LT0 +6143 4654 M +544 0 V +1045 3636 M +3426 2998 L +4929 2585 L +6431 2169 L +484 -133 V +1045 3636 BoxF +3426 2998 BoxF +4929 2585 BoxF +6431 2169 BoxF +6915 2036 BoxF +6415 4654 BoxF +1.400 UP +1.000 UL +LT0 +LTb +6029 4464 M +[ [(Times) 190.0 0.0 true true 0 (RR MCS 22)] +] -63.3 MRshow +LT0 +6143 4464 M +544 0 V +1045 3362 M +3426 2721 L +4929 2306 L +6431 1877 L +484 -133 V +1045 3362 CircleF +3426 2721 CircleF +4929 2306 CircleF +6431 1877 CircleF +6915 1744 CircleF +6415 4464 CircleF +1.400 UP +1.000 UL +LT0 +LTb +6029 4274 M +[ [(Times) 190.0 0.0 true true 0 (RR MCS 16)] +] -63.3 MRshow +LT0 +6143 4274 M +544 0 V +1045 3109 M +3426 2473 L +4929 2056 L +6431 1634 L +484 -133 V +1045 3109 TriUF +3426 2473 TriUF +4929 2056 TriUF +6431 1634 TriUF +6915 1501 TriUF +6415 4274 TriUF +1.400 UP +1.000 UL +LT0 +LTb +6029 4084 M +[ [(Times) 190.0 0.0 true true 0 (RR MCS 12)] +] -63.3 MRshow +LT0 +6143 4084 M +544 0 V +1045 2864 M +3426 2218 L +4929 1786 L +6431 1357 L +484 -133 V +1045 2864 TriDF +3426 2218 TriDF +4929 1786 TriDF +6431 1357 TriDF +6915 1224 TriDF +6415 4084 TriDF +1.400 UP +1.000 UL +LT0 +LTb +6029 3894 M +[ [(Times) 190.0 0.0 true true 0 (RR MCS 6)] +] -63.3 MRshow +LT0 +6143 3894 M +544 0 V +1045 2474 M +3426 1811 L +4929 1382 L +6431 907 L +6915 776 L +1045 2474 DiaF +3426 1811 DiaF +4929 1382 DiaF +6431 907 DiaF +6915 776 DiaF +6415 3894 DiaF +1.400 UP +1.000 UL +LT2 +LTb +6029 3704 M +[ [(Times) 190.0 0.0 true true 0 (PF MCS 28)] +] -63.3 MRshow +LT2 +6143 3704 M +544 0 V +1045 3641 M +3426 2989 L +4929 2580 L +6431 2169 L +484 -136 V +1045 3641 Box +3426 2989 Box +4929 2580 Box +6431 2169 Box +6915 2033 Box +6415 3704 Box +1.400 UP +1.000 UL +LT2 +LTb +6029 3514 M +[ [(Times) 190.0 0.0 true true 0 (PF MCS 22)] +] -63.3 MRshow +LT2 +6143 3514 M +544 0 V +1045 3367 M +3426 2715 L +4929 2306 L +6431 1895 L +484 -136 V +1045 3367 Circle +3426 2715 Circle +4929 2306 Circle +6431 1895 Circle +6915 1759 Circle +6415 3514 Circle +1.400 UP +1.000 UL +LT2 +LTb +6029 3324 M +[ [(Times) 190.0 0.0 true true 0 (PF MCS 16)] +] -63.3 MRshow +LT2 +6143 3324 M +544 0 V +1045 3114 M +3426 2462 L +4929 2053 L +6431 1642 L +484 -136 V +1045 3114 TriU +3426 2462 TriU +4929 2053 TriU +6431 1642 TriU +6915 1506 TriU +6415 3324 TriU +1.400 UP +1.000 UL +LT2 +LTb +6029 3134 M +[ [(Times) 190.0 0.0 true true 0 (PF MCS 12)] +] -63.3 MRshow +LT2 +6143 3134 M +544 0 V +1045 2869 M +3426 2217 L +4929 1808 L +6431 1397 L +484 -135 V +1045 2869 TriD +3426 2217 TriD +4929 1808 TriD +6431 1397 TriD +6915 1262 TriD +6415 3134 TriD +1.400 UP +1.000 UL +LT2 +LTb +6029 2944 M +[ [(Times) 190.0 0.0 true true 0 (PF MCS 6)] +] -63.3 MRshow +LT2 +6143 2944 M +544 0 V +1045 2479 M +3426 1827 L +4929 1417 L +6431 1006 L +6915 872 L +1045 2479 Dia +3426 1827 Dia +4929 1417 Dia +6431 1006 Dia +6915 872 Dia +6415 2944 Dia +1.000 UL +LTb +1045 4812 N +0 -4204 V +5870 0 V +0 4204 V +-5870 0 V +Z stroke +1.400 UP +1.000 UL +LTb +stroke +grestore +end +showpage +%%Trailer +%%DocumentFonts: Times diff --git a/src/lte/doc/source/figures/lenaThrTestCase2.eps b/src/lte/doc/source/figures/lenaThrTestCase2.eps new file mode 100644 index 000000000..01f77cb19 --- /dev/null +++ b/src/lte/doc/source/figures/lenaThrTestCase2.eps @@ -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 diff --git a/src/lte/doc/source/lte-testing.rst b/src/lte/doc/source/lte-testing.rst index 8b00e9a72..82305d207 100644 --- a/src/lte/doc/source/lte-testing.rst +++ b/src/lte/doc/source/lte-testing.rst @@ -40,29 +40,62 @@ Unit Tests SINR calculation in the Downlink -------------------------------- -The test suite ``lte-downlink-sinr`` checks that the SINR calculation in downlink is performed correctly. The SINR in the downlink is calculated for each Resource Block assigned to data transmissions by dividing the power of the intended signal from the considered eNB by the sum of the noise power plus all the transmissions on the same RB coming from other eNBs (the interference signals). +The test suite ``lte-downlink-sinr`` +checks that the SINR calculation in +downlink is performed correctly. The SINR in the downlink is calculated for each +RB assigned to data transmissions by dividing the power of the +intended signal from the considered eNB by the sum of the noise power plus all +the transmissions on the same RB coming from other eNBs (the interference +signals): .. math:: \gamma = \frac{ P_\mathrm{signal} }{ P_\mathrm{noise} + \sum P_\mathrm{interference} } -In general, different signals can be active during different periods of time. We define a *chunk* as the time interval between any two events of type either start or end of a waveform. In other words, a chunk identifies a time interval during which the set of active waveforms does not change. Let :math:`i` be the generic chunk, :math:`T_i` its duration and :math:`\mathrm{SINR_i}` its SINR, calculated with the above equation. The calculation of the average SINR :math:`\overline{\gamma}` to be used for CQI feedback reporting uses the following formula: +In general, different signals can be active during different periods +of time. We define a *chunk* as the time interval between any two +events of type either start or end of a waveform. In other words, a +chunk identifies a time interval during which the set of active +waveforms does not change. Let :math:`i` be the generic chunk, +:math:`T_i` its duration and :math:`\mathrm{SINR_i}` its SINR, +calculated with the above equation. The calculation of the average +SINR :math:`\overline{\gamma}` to be used for CQI feedback reporting +uses the following formula: .. math:: \overline{\gamma} = \frac{ \sum_i {\gamma}_i T_i }{ \sum_i T_{i} } -The test suite checks that the above calculation is performed correctly in the simulator. The test vectors are obtained offline by an Octave script that implements the above equation, and that recreates a number of random transmitted signals and interference signals that mimic a scenario where an UE is trying to decode a signal from an eNB while facing interference from other eNBs. The test passes if the calculated values are equal to the test vector within a tolerance of :math:`10^{-7}`. The tolerance is meant to account for the approximation errors typical of floating point arithmetic. +The test suite checks that the above calculation is performed +correctly in the simulator. The test vectors are obtained offline by +an Octave script that implements the above equation, and that +recreates a number of random transmitted signals and interference +signals that mimic a scenario where an UE is trying to decode a signal +from an eNB while facing interference from other eNBs. The test passes +if the calculated values are equal to the test vector within a +tolerance of :math:`10^{-7}`. The tolerance is meant to account for +the approximation errors typical of floating point arithmetic. SINR calculation in the Uplink ------------------------------ -The test suite ``lte-uplink-sinr`` checks that the SINR calculation in uplink is performed correctly. This test suite is identical to ``lte-downlink-sinr`` described in the previous section, with the difference than both the signal and the interference now refer to transmissions by the UEs, and reception is performed by the eNB. -This test suite recreates a number of random transmitted signals and interference signals to mimic a scenario where an eNB is trying to decode the signal from several UEs simultaneously (the ones in the cell of the eNB) while facing interference from other UEs (the ones belonging to other cells). +The test suite ``lte-uplink-sinr`` checks that the SINR calculation in +uplink is performed correctly. This test suite is identical to +``lte-downlink-sinr`` described in the previous section, with the +difference than both the signal and the interference now refer to +transmissions by the UEs, and reception is performed by the eNB. +This test suite recreates a number of random transmitted signals and +interference signals to mimic a scenario where an eNB is trying to +decode the signal from several UEs simultaneously (the ones in the +cell of the eNB) while facing interference from other UEs (the ones +belonging to other cells). -The test vectors are obtained by a dedicated Octave script. The test passes if the calculated values are equal to the test vector within a tolerance of :math:`10^{-7}` which, as for the downlink SINR test, deals with floating point arithmetic approximation issues. +The test vectors are obtained by a dedicated Octave script. The test +passes if the calculated values are equal to the test vector within a +tolerance of :math:`10^{-7}` which, as for the downlink SINR test, +deals with floating point arithmetic approximation issues. System Tests @@ -71,78 +104,156 @@ System Tests Adaptive Modulation and Coding ------------------------------ -The test suite ``lte-link-adaptation`` provides system tests recreating a scenario with a single eNB and a single UE. Different test cases are created corresponding to different SINR values perceived by the UE. The aim of the test is to check that in each test case the chosen MCS corresponds to the values in a known test vector. +The test suite ``lte-link-adaptation`` provides system tests recreating a +scenario with a single eNB and a single UE. Different test cases are created +corresponding to different SINR values perceived by the UE. The aim of the test +is to check that in each test case the chosen MCS corresponds to some known +reference values. These reference values are obtained by re-implementing the +model described in Section~\ref{sec:amc} in Octave. The resulting test vector is +represented in Figure :ref:`fig-lte-mcs-index`. -The test vector is obtained with the model described in [Piro2011]_ which cites [Seo2004]_. Here we described how this model works. Let :math:`i` denote the generic user, and let :math:`\gamma_i` be its SINR. We get the spectral efficiency :math:`\eta_i` of user :math:`i` using the following equations: - -.. math:: - - \mathrm{BER} = 0.00005 - -.. math:: - - \Gamma = \frac{ -\ln{ (5 * \mathrm{BER}) } }{ 1.5 } - -.. math:: - - \eta_i = \log_2 { \left( 1 + \frac{ {\gamma}_i }{ \Gamma } \right) } - -Then, 3GPP [R1-081483]_ document (its XLS sheet annexed file) is used to get the corresponding MCS scheme. The spectral efficiency is quantized based on the CQI (rounding to the lowest value) and is mapped to the corresponding MCS scheme (i.e. the MCS index that appears on the same line looking at the MCS table on the right). Note that the quantization of the CQI is coarser than the spectral efficiency reported in the CQI table. - -Finally, note that there are some discrepancies between the MCS index in [R1-081483]_ and that indicated by the standard: [TS36.213]_ Table 7.1.7.1-1 says that the MCS index goes from 0 to 31, and 0 appears to be a valid MCS scheme (TB size is not 0) but in [R1-081483]_ the first useful MCS index is 1. Hence to get the value as intended by the standard we need to subtract 1 from the index reported in [R1-081483]_. - -The test passes if both the following conditions are verified: - - #. the SINR calculated by the UE corresponds to the value intended for the given test case within a tolerance of :math:`10^{-7}`. The tolerance is meant to account for the approximation errors typical of floating point arithmetic. This test condition acts as a system test of the SINR calculation. This is needed because the other test suites that deal with the SINR calculation are unit tests, and hence might not be able to detect system-level bugs in the SINR calculation. - #. the MCS index chosen by the scheduler matches exactly with the MCS index in the test vector, determined using the above described procedure. - -In the following figure, we see the modulation to be used depending on the MCS index. This mapping is defined in [R1-081483]_. +.. _fig-lte-mcs-index: .. figure:: figures/lte-mcs-index.* :align: center - Modulation depending on the SINR and MCS index + Test vector for Adaptive Modulation and Coding Round Robin scheduler performance --------------------------------- -The test suite ``lte-rr-ff-mac-scheduler`` creates different test cases with a single eNB and several UEs, all having the same Radio Bearer specification. In each test case, the UEs see the same SINR from the eNB; different test cases are implemented by using different distance among UEs and the eNB (i.e., therefore having different SINR values) and different numbers of UEs. The test consists on checking that the obtained throughput performance is equal among users and matches a reference throughput value obtained according to the SINR perceived within a given tolerance. -The test vector is obtained according to the values of transport block size reported in table 7.1.7.2.1-1 of [TS36.213]_, considering an equal distribution of the physical resource block among the users using Resource Allocation Type 0 as defined in Section 7.1.6.1 of [TS36.213]_. Let :math:`\tau` be the TTI duration, :math:`N` be the number of UEs, :math:`B` the transmission bandwidth configuration in number of RBs, :math:`G` the RBG size, :math:`M` the modulation and coding scheme in use at the given SINR and :math:`S(M, B)` be the transport block size in bits as defined by 3GPP TS 36.213. We first calculate the number :math:`L` of RBGs allocated to each user as +The test suite ``lte-rr-ff-mac-scheduler`` creates different test cases with +a single eNB and several UEs, all having the same Radio Bearer specification. In +each test case, the UEs see the same SINR from the eNB; different test cases are +implemented by using different distance among UEs and the eNB (i.e., therefore +having different SINR values) and different numbers of UEs. The test consists on +checking that the obtained throughput performance is equal among users and +matches a reference throughput value obtained according to the SINR perceived +within a given tolerance. + +The test vector is obtained according to the values of transport block +size reported in table 7.1.7.2.1-1 of [TS36.213]_, considering an +equal distribution of the physical resource block among the users +using Resource Allocation Type 0 as defined in Section 7.1.6.1 of +[TS36.213]_. Let :math:`\tau` be the TTI duration, :math:`N` be the +number of UEs, :math:`B` the transmission bandwidth configuration in +number of RBs, :math:`G` the RBG size, :math:`M` the modulation and +coding scheme in use at the given SINR and :math:`S(M, B)` be the +transport block size in bits as defined by 3GPP TS 36.213. We first +calculate the number :math:`L` of RBGs allocated to each user as .. math:: L = \left\lfloor \frac{B}{NG} \right\rfloor -The reference throughput (in bytes per second) :math:`T` in bps achieved by each UE is then calculated as +The reference throughput :math:`T` in bit/s achieved by each UE is then calculated as .. math:: T = \frac{S(M, L G)}{8 \; \tau} -The test passes if the measured throughput matches with the reference throughput within a relative tolerance of 0.1. This tolerance is needed to account for the transient behavior at the beginning of the simulation (e.g., CQI feedback is only available after a few subframes) as well as for the accuracy of the estimator of the average throughput performance over the chosen simulation time (0.04s). We note that a lower value of the tolerance can be achieved by making each test case running longer simulations; we chose not to do this in order to keep the total execution time of this test suite as low as possible in spite of the high number of test cases. +The test passes if the measured throughput matches with the reference throughput +within a relative tolerance of 0.1. This tolerance is needed to account for the +transient behavior at the beginning of the simulation (e.g., CQI feedback is +only available after a few subframes) as well as for the accuracy of the +estimator of the average throughput performance over the chosen simulation time +(0.4s). This choice of the simulation time is justified by the need to +follow the ns-3 guidelines of keeping the total execution time of the test +suite low, in spite of the high number of test cases. In any case, we note that +a lower value of the tolerance can be used when longer simulations are +run. +In Figure `fig-lenaThrTestCase1`_, the curves labeled "RR" represent the test values +calculated for the RR scheduler test, as a function of the number of UEs and of +the MCS index being used in each test case. +.. _fig-lenaThrTestCase1: + +.. figure:: figures/lenaThrTestCase1.* + :align: center + + Test vectors for the RR and PF Scheduler in the downlink in a + scenario where all UEs use the same MCS. Proportional Fair scheduler performance --------------------------------------- -The test suite ``lte-pf-ff-mac-scheduler`` creates different test cases with a single eNB, using the Proportional Fair (PF) scheduler, and several UEs, all having the same Radio Bearer specification. The test cases are grouped in two categories in order to evaluate both the performance in terms of adaptation to channel condition and from fairness perspective. +The test suite ``lte-pf-ff-mac-scheduler`` creates different test cases with +a single eNB, using the Proportional Fair (PF) scheduler, and several UEs, all +having the same Radio Bearer specification. The test cases are grouped in two +categories in order to evaluate the performance both in terms of the adaptation +to the channel condition and from a fairness perspective. -In the first category of test cases, the UEs are all placed at the same distance from the eNB, and hence all placed in order to have the same SINR. Different test cases are implemented by using a different SINR value and a different number of UEs. The test consists on checking that the obtained throughput performance matches with the known reference throughput up to a given tolerance. The expected behavior of the PF scheduler when all UEs have the same SNR is that each UE should get an equal fraction of the throughput obtainable by a single UE when using all the resources. We calculate the reference throughput value by dividing the throughput achievable by a single UE at the given SNR by the total number of UEs. Let :math:`\tau` be the TTI duration, :math:`B` the transmission bandwidth configuration in number of RBs, :math:`M` the modulation and coding scheme in use at the given SINR and :math:`S(M, B)` be the transport block size as defined in [TS36.213]_. The reference throughput :math:`T` achieved by each UE is calculated as +In the first category of test cases, the UEs are all placed at the +same distance from the eNB, and hence all placed in order to have the +same SINR. Different test cases are implemented by using a different +SINR value and a different number of UEs. The test consists on +checking that the obtained throughput performance matches with the +known reference throughput up to a given tolerance. The expected +behavior of the PF scheduler when all UEs have the same SNR is that +each UE should get an equal fraction of the throughput obtainable by a +single UE when using all the resources. We calculate the reference +throughput value by dividing the throughput achievable by a single UE +at the given SNR by the total number of UEs. +Let :math:`\tau` be the TTI duration, :math:`B` the transmission +bandwidth configuration in number of RBs, :math:`M` the modulation and +coding scheme in use at the given SINR and :math:`S(M, B)` be the +transport block size as defined in [TS36.213]_. The reference +throughput :math:`T` in bit/s achieved by each UE is calculated as .. math:: T = \frac{S(M,B)}{\tau N} -The second category of tests is aimed at verify the fairness behavior in presence of UEs with different SINRs (and therefore different estimated throughput from PFS). The test consists of checking whether the throughput obtained by each UE over the whole simulation matches with the steady-state throughput expected by the PF scheduler according to the theory (see for instance [Kushner2004]_). -Let :math:`Ri` the estimation done by PFS of the throughput of the :math:`i` UE for the next TTI according to the CQIs received and :math:`Ti` the throughput preceived by the :math:`i` UE . The test verifies that the ratio of the obtained throughput value respect to the global one (i.e. the sum of the ones of all users) is equal to the steady-state throughput of the PFS, that is +The curves labeled "PF" in Figure `fig-lenaThrTestCase1`_ represent the test values +calculated for the PF scheduler tests of the first category, that we just described. + +The second category of tests aims at verifying the fairness of the PF +scheduler in a more realistic simulation scenario where the UEs have a +different SINR (constant for the whole simulation). In these conditions, the PF +scheduler will give to each user a share of the system bandwidth that is +proportional to the capacity achievable by a single user alone considered its +SINR. In detail, let :math:`M_i` be the modulation and coding scheme being used by +each UE (which is a deterministic function of the SINR of the UE, and is hence +known in this scenario). Based on the MCS, we determine the achievable +rate :math:`R_i` for each user :math:`i` using the +procedure described in Section~\ref{sec:pfs}. We then define the +achievable rate ratio :math:`\rho_{R,i}` of each user :math:`i` as .. math:: + \rho_{R,i} = \frac{R_i}{\sum_{j=1}^N R_j} - K = \frac{Ri}{\sum_{k=1}^N Ri} = \frac{Ti}{\sum_{k=1}^N Ti} +Let now :math:`T_i` be the throughput actually achieved by the UE :math:`i` , which +is obtained as part of the simulation output. We define the obtained throughput +ratio :math:`\rho_{R,i}` of UE :math:`i` as -The test passes if the measured throughput matches with the reference throughput within a relative tolerance of 0.1. The choice of this tolerance has the same motivations already discussed for the Round Robin scheduler test suite. +.. math:: + \rho_{T,i} = \frac{T_i}{\sum_{j=1}^N T_j} + +The test consists of checking that the following condition is verified: + +.. math:: + \rho_{R,i} = \rho_{T,i} + +if so, it means that the throughput obtained by each UE over the whole +simulation matches with the steady-state throughput expected by the PF scheduler +according to the theory (see for instance [Kushner2004]_). +Figure :ref:`fig-lenaThrTestCase2` presents the results obtained in a test case with +UEs :math:`i=1,\dots,5` that are located at a distance from the base +station such that they will use respectively the MCS index :math:`28, 24, 16, 12, +6`. From the figure, we note that, as expected, the obtained throughput is +proportional to the achievable rate. In other words, the PF scheduler assign +more resources to the users that use a higher MCS index. + + +.. _fig-lenaThrTestCase2: + +.. figure:: figures/lenaThrTestCase2.* + :align: center + + Throughput ratio evaluation for the PF scheduler in a scenario + where the UEs have MCS index :math:`28, 24, 16, 12, 6` From 4377203b59f58c9ec798bea4957a8f226a089a6b Mon Sep 17 00:00:00 2001 From: Nicola Baldo Date: Fri, 27 May 2011 13:16:26 +0200 Subject: [PATCH 11/14] finished testing documentation --- src/lte/doc/source/lte-testing.rst | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/lte/doc/source/lte-testing.rst b/src/lte/doc/source/lte-testing.rst index 82305d207..371467eed 100644 --- a/src/lte/doc/source/lte-testing.rst +++ b/src/lte/doc/source/lte-testing.rst @@ -171,7 +171,7 @@ the MCS index being used in each test case. .. _fig-lenaThrTestCase1: -.. figure:: figures/lenaThrTestCase1.* +.. figure:: figures/lenaThrTestCase1.* :align: center Test vectors for the RR and PF Scheduler in the downlink in a From cd2c5b853100ede1575db3abb9a53ab1fdceae83 Mon Sep 17 00:00:00 2001 From: Nicola Baldo Date: Fri, 27 May 2011 16:04:31 +0200 Subject: [PATCH 12/14] updated perf doc; allinone pdf doc --- src/lte/doc/Makefile | 5 +- src/lte/doc/source/conf.py | 8 +- src/lte/doc/source/figures/memoryUsage.eps | 863 +++++++++++++++ src/lte/doc/source/figures/simulationTime.eps | 997 ++++++++++++++++++ src/lte/doc/source/lte-design.rst | 7 +- src/lte/doc/source/lte-references.rst | 6 +- src/lte/doc/source/lte-user.rst | 52 +- src/lte/doc/source/lte.rst | 9 +- 8 files changed, 1923 insertions(+), 24 deletions(-) create mode 100644 src/lte/doc/source/figures/memoryUsage.eps create mode 100644 src/lte/doc/source/figures/simulationTime.eps diff --git a/src/lte/doc/Makefile b/src/lte/doc/Makefile index 369c75d96..c7c5cd6a5 100644 --- a/src/lte/doc/Makefile +++ b/src/lte/doc/Makefile @@ -17,8 +17,9 @@ IMAGES_EPS = \ GRAPHS_EPS = \ $(FIGURES)/lte-mcs-index.eps \ $(FIGURES)/lenaThrTestCase1.eps \ - $(FIGURES)/lenaThrTestCase2.eps - + $(FIGURES)/lenaThrTestCase2.eps \ + $(FIGURES)/simulationTime.eps \ + $(FIGURES)/memoryUsage.eps # rescale figures as necessary $(FIGURES)/testbed.pdf_width = 5in diff --git a/src/lte/doc/source/conf.py b/src/lte/doc/source/conf.py index 7363aebeb..7e5c0789a 100644 --- a/src/lte/doc/source/conf.py +++ b/src/lte/doc/source/conf.py @@ -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 diff --git a/src/lte/doc/source/figures/memoryUsage.eps b/src/lte/doc/source/figures/memoryUsage.eps new file mode 100644 index 000000000..ff44fdabf --- /dev/null +++ b/src/lte/doc/source/figures/memoryUsage.eps @@ -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 diff --git a/src/lte/doc/source/figures/simulationTime.eps b/src/lte/doc/source/figures/simulationTime.eps new file mode 100644 index 000000000..4a2d8ff38 --- /dev/null +++ b/src/lte/doc/source/figures/simulationTime.eps @@ -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 diff --git a/src/lte/doc/source/lte-design.rst b/src/lte/doc/source/lte-design.rst index 3e77422e2..3c711360c 100644 --- a/src/lte/doc/source/lte-design.rst +++ b/src/lte/doc/source/lte-design.rst @@ -6,9 +6,6 @@ ++++++++++++++++++++++++++ -An overview of the LTE module -***************************** - Design Criteria ~~~~~~~~~~~~~~~ @@ -346,8 +343,8 @@ 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 different spectrum usage policies in the same -simulation, such as for example the spectrum licensing policies that are +This allows to simulate dynamic spectrum access policies, such as for +example the spectrum licensing policies that are discussed in [Ofcom2.6GHz]_. diff --git a/src/lte/doc/source/lte-references.rst b/src/lte/doc/source/lte-references.rst index 0d88ff796..dacae06c1 100644 --- a/src/lte/doc/source/lte-references.rst +++ b/src/lte/doc/source/lte-references.rst @@ -1,7 +1,8 @@ -.. [Sesia2009] S. Sesia, I. Toufik and M. Baker, "LTE - The UMTS Long Term Evolution - from theory to practice", Wiley, 2009 +.. [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. @@ -10,7 +11,8 @@ 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 +.. [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) diff --git a/src/lte/doc/source/lte-user.rst b/src/lte/doc/source/lte-user.rst index fe526326b..8243a4278 100644 --- a/src/lte/doc/source/lte-user.rst +++ b/src/lte/doc/source/lte-user.rst @@ -5,9 +5,6 @@ LTE User Documentation +++++++++++++++++++++++++ -EUTRA stack diagram -******************* - Usage ***** @@ -74,9 +71,52 @@ Performance evaluation Execution time and memory consumption ------------------------------------- -In order to provide an running time and memory consumption estimation a reference simulation program has been developed, ``src/lte/examples/profiling-reference``. 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. +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 consumtpion by looking at the information in ``/proc/{pid}/statm``. The reference hardware platform is a Intel Core2 Duo E8400 3.00GHz with 512 MB of RAM memory running a Fedora Core 10 with kernel 2.6.27.5. The simulator build used in this experiment was configured with the options ``-d optimized --enable-static``. +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. -The results are reported in the figures below. We note that the memory usage primarily depends on the number of eNBs, and is in general quite low. The execution time depends significantly on both the number of eNBs and the number of UEs per eNB, and in the largest experiment that we ran (12 eNBs and 10 UEs per eNB) it corresponds to 30 times the simulation time. diff --git a/src/lte/doc/source/lte.rst b/src/lte/doc/source/lte.rst index 75c3a11a7..b0cd86d5b 100644 --- a/src/lte/doc/source/lte.rst +++ b/src/lte/doc/source/lte.rst @@ -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 From 1c3edc5d446bec2e36975031ac45bf7f49bcd40f Mon Sep 17 00:00:00 2001 From: Nicola Baldo Date: Fri, 27 May 2011 18:13:52 +0200 Subject: [PATCH 13/14] updated user documentation --- src/lte/doc/source/lte-design.rst | 2 +- src/lte/doc/source/lte-references.rst | 4 + src/lte/doc/source/lte-testing.rst | 2 +- src/lte/doc/source/lte-user.rst | 291 ++++++++++++++++++++++---- 4 files changed, 252 insertions(+), 47 deletions(-) diff --git a/src/lte/doc/source/lte-design.rst b/src/lte/doc/source/lte-design.rst index 3c711360c..86b23773d 100644 --- a/src/lte/doc/source/lte-design.rst +++ b/src/lte/doc/source/lte-design.rst @@ -2,7 +2,7 @@ ++++++++++++++++++++++++++ - LTE Design Documentation + Design Documentation ++++++++++++++++++++++++++ diff --git a/src/lte/doc/source/lte-references.rst b/src/lte/doc/source/lte-references.rst index dacae06c1..279a24c70 100644 --- a/src/lte/doc/source/lte-references.rst +++ b/src/lte/doc/source/lte-references.rst @@ -35,3 +35,7 @@ .. [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/ diff --git a/src/lte/doc/source/lte-testing.rst b/src/lte/doc/source/lte-testing.rst index 371467eed..18ee8887d 100644 --- a/src/lte/doc/source/lte-testing.rst +++ b/src/lte/doc/source/lte-testing.rst @@ -2,7 +2,7 @@ +++++++++++++++++++++++++++ - LTE Testing Documentation + Testing Documentation +++++++++++++++++++++++++++ diff --git a/src/lte/doc/source/lte-user.rst b/src/lte/doc/source/lte-user.rst index 8243a4278..15120d0df 100644 --- a/src/lte/doc/source/lte-user.rst +++ b/src/lte/doc/source/lte-user.rst @@ -1,68 +1,269 @@ .. include:: replace.txt -+++++++++++++++++++++++++ - LTE User Documentation -+++++++++++++++++++++++++ ++++++++++++++++++++++++++++++++++ + User Documentation ++++++++++++++++++++++++++++++++++ + + +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 lena = CreateObject (); + + 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 lena = CreateObject (); + + // 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 From 6fa5db80924c7b80e95ea84217f5540a7ee9732a Mon Sep 17 00:00:00 2001 From: Nicola Baldo Date: Fri, 27 May 2011 18:20:28 +0200 Subject: [PATCH 14/14] fixed code snippet formatting in user doc --- src/lte/doc/source/lte-user.rst | 20 ++++++++++---------- 1 file changed, 10 insertions(+), 10 deletions(-) diff --git a/src/lte/doc/source/lte-user.rst b/src/lte/doc/source/lte-user.rst index 15120d0df..2eea80e6b 100644 --- a/src/lte/doc/source/lte-user.rst +++ b/src/lte/doc/source/lte-user.rst @@ -46,16 +46,16 @@ 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[]) - { + + #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 a LenaHelper object::