Wednesday 19 February 2014

LTE (Long Term Evaluation ) Network in NS2


Introduction:

LTE is designed for frequency reuse 1 (To maximize spectrum efficiency), which means that all the neighbor cells are using same frequency channels and therefore there is no cell-planning to deal with the interference issues  There is a high probability that a resource block scheduled to cell edge user, is also being transmitted by neighbor cell, resulting in high interference, eventually low throughput or call drops (see figure)  Traffic channel can sustain upto 10% of BLER in low SINR but control channels cannot. Neighbor interference can result in radio link failures at cell edge.  Heterogeneous networks require some sort of interference mitigation, since pico-cells/femto cells and macro-cells are overlapping in many scenarios

LTE in NS2:



---------Steps for patching LTE module in NS-2-------



Step 1:



Download  the LTE patch tk-8.4-lastevent.patch


Step 2:

put the LTE patch in ns-allinone-2.33/tk8.4.18/


Step 3:


cd ns-allinone-2.33/tk8.4.18/


Step 4:

patch -p0 < tk-8.4-lastevent.patch
cd ../


Step 5:

./install


Step 6:

cd ns-2.33/ && mv ns ns233 && make clean && mv Makefile Makefile.org


Step 7:

svn checkout http://lte-model.googlecode.com/svn/trunk/ lte-model-read-only


Step 8:

mkdir project

cd lte-model-read-only/


Step 9:

sh checkin
cd ../


Step 10:

Edit the new Makefile , lines 41, 67, 82 to actual location in ns-allinone-2.33/ns-2.33/ 


Step 11:

    make


TCL Script for LTE network:



 # Define the multicast mechanism  
 set ns [new Simulator -multicast on]  
 # Predefine tracing  
 set f [open out.tr w]  
 $ns trace-all $f  
 #set nf [open out.nam w]  
 #$ns namtrace-all $nf  
 # Set the number of subscribers  
 set number 10  
 # qos_ means whether classfication/scheduling mechanism is used  
 Queue/LTEQueue set qos_ true   
 # flow_control_ is used in the model phase  
 Queue/LTEQueue set flow_control_ false  
 # later HVQ flow control mechanism is used  
 Queue/LTEQueue set HVQ_UE true   
 Queue/LTEQueue set HVQ_eNB false   
 Queue/LTEQueue set HVQ_cell false   
 # Define the LTE topology  
 # UE(i) <--> eNB <--> aGW <--> server  
 # Other configuration parameters see ~ns/tcl/lib/ns-default.tcl  
 # step 1: define the nodes, the order is fixed!!  
 set eNB [$ns node];#node id is 0  
 set aGW [$ns node];#node id is 1  
 set server [$ns node];#node id is 2  
 for { set i 0} {$i<$number} {incr i} {  
  set UE($i) [$ns node];#node id is > 2  
 }  
 # step 2: define the links to connect the nodes  
 for { set i 0} {$i<$number} {incr i} {  
  $ns simplex-link $UE($i) $eNB 10Mb 2ms LTEQueue/ULAirQueue   
  $ns simplex-link $eNB $UE($i) 10Mb 2ms LTEQueue/DLAirQueue   
 }  
 $ns simplex-link $eNB $aGW 1000Mb 2ms LTEQueue/ULS1Queue   
 $ns simplex-link $aGW $eNB 1000Mb 2ms LTEQueue/DLS1Queue   
 # The bandwidth between aGW and server is not the bottleneck.  
 $ns simplex-link $aGW $server 5000Mb 2ms DropTail  
 $ns simplex-link $server $aGW 5000Mb 2ms LTEQueue/DLQueue  
 # step 3: define the traffic, based on TR23.107 QoS concept and architecture  
 #  class id class type simulation application   
 #  -------------------------------------------------  
 #  0: Conversational: Session/RTP/RTPAgent  
 #  1: Streaming: CBR/UdpAgent  
 #  2: Interactive: HTTP/TcpAgent (HTTP/Client, HTTP/Cache, HTTP/Server)  
 #  3: Background: FTP/TcpAgent  
 # step 3.1 define the conversational traffic  
 set mproto DM  
 set mrthandle [$ns mrtproto $mproto {}]  
 for { set i 0} {$i<$number} {incr i} {  
  set s0($i) [new Session/RTP]  
  set s1($i) [new Session/RTP]  
  set group($i) [Node allocaddr]  
  #Adaptive Multi-Rate call bit rates:   
  #AMR: 12.2, 10.2, 7.95, 7.40, 6.70, 5.90, 5.15 and 4.75 kb/s  
  $s0($i) session_bw 12.2kb/s  
  $s1($i) session_bw 12.2kb/s  
  $s0($i) attach-node $UE($i)  
  $s1($i) attach-node $server  
  $ns at 0.4 "$s0($i) join-group $group($i)"  
  $ns at 0.5 "$s0($i) start"  
  $ns at 0.6 "$s0($i) transmit 12.2kb/s"  
  $ns at 0.7 "$s1($i) join-group $group($i)"  
  $ns at 0.8 "$s1($i) start"  
  $ns at 0.9 "$s1($i) transmit 12.2kb/s"  
 }  
 # step 3.2 define the streaming traffic  
 for { set i 0} {$i<$number} {incr i} {  
  set null($i) [new Agent/Null]  
  $ns attach-agent $UE($i) $null($i)  
  set udp($i) [new Agent/UDP]  
  $ns attach-agent $server $udp($i)  
  $ns connect $null($i) $udp($i)  
  $udp($i) set class_ 1  
  set cbr($i) [new Application/Traffic/CBR]  
  $cbr($i) attach-agent $udp($i)  
  $ns at 0.4 "$cbr($i) start"  
  $ns at 40.0 "$cbr($i) stop"  
 }  
 # step 3.3 define the interactive traffic  
 $ns rtproto Session  
 set log [open "http.log" w]  
 # Care must be taken to make sure that every client sees the same set of pages as the servers to which they are attached.  
 set pgp [new PagePool/Math]  
 set tmp [new RandomVariable/Constant] ;# Size generator  
 $tmp set val_ 10240 ;# average page size  
 $pgp ranvar-size $tmp  
 set tmp [new RandomVariable/Exponential] ;# Age generator  
 $tmp set avg_ 4 ;# average page age  
 $pgp ranvar-age $tmp  
 set s [new Http/Server $ns $server]  
 $s set-page-generator $pgp  
 $s log $log  
 set cache [new Http/Cache $ns $aGW]  
 $cache log $log  
 for { set i 0} {$i<$number} {incr i} {  
  set c($i) [new Http/Client $ns $UE($i)]  
  set ctmp($i) [new RandomVariable/Exponential] ;# Poisson process  
  $ctmp($i) set avg_ 1 ;# average request interval  
  $c($i) set-interval-generator $ctmp($i)  
  $c($i) set-page-generator $pgp  
  $c($i) log $log  
 }  
 $ns at 0.4 "start-connection"  
 proc start-connection {} {  
     global ns s cache c number  
  $cache connect $s  
  for { set i 0} {$i<$number} {incr i} {  
      $c($i) connect $cache  
      $c($i) start-session $cache $s  
  }  
 }  
 # step 3.4 define the background traffic  
 # no parameters to be configured by FTP  
 # we can configue TCP and TCPSink parameters here.  
 for { set i 0} {$i<$number} {incr i} {  
  set sink($i) [new Agent/TCPSink]  
  $ns attach-agent $UE($i) $sink($i)  
  set tcp($i) [new Agent/TCP]  
  $ns attach-agent $server $tcp($i)  
  $ns connect $sink($i) $tcp($i)  
  $tcp($i) set class_ 3  
  set ftp($i) [new Application/FTP]  
  $ftp($i) attach-agent $tcp($i)  
  $ns at 0.4 "$ftp($i) start"  
 }  
 # finish tracing  
 $ns at 30 "finish"  
 proc finish {} {  
  global ns f log  
  #global ns f nf log  
  $ns flush-trace  
  flush $log  
  close $log  
  close $f  
  #close $nf  
  #puts "running nam..."  
  #exec nam out.nam &  
  exit 0  
 }  
 # Finally, start the simulation.  
 $ns run  


Outputs:


                                                  Topology Creation:












Data Transmission:








6 comments:

  1. Hello sir I have followed the steps you mentioned in this blog and did survey on some of the paper...and I found this paper

    http://www.google.co.in/url?sa=t&rct=j&q=&esrc=s&source=web&cd=3&cad=rja&uact=8&ved=0CDUQFjAC&url=http%3A%2F%2Flte-model.googlecode.com%2Ffiles%2Flte-model-05-MSN2009.pdf&ei=r146U_r4N8uSrge4_oCQDQ&usg=AFQjCNFuwWxgBYelBmrU3KO_44mUqxpieA


    and the result of the throughput delay and jitter are no where matching...have you made any modification to the standards lte-model-read-only files?? please reply am not getting much documents realted LTE, very thankful to you that you written a blog on LTE

    ReplyDelete
  2. please share if you have any result checking awk files..

    ReplyDelete
  3. Where i can Download the LTE patch tk-8.4-lastevent.patch?? Please help me

    ReplyDelete
  4. Hello Sir. I have to calculate and draw the graphs of throughput,delay and jitter form trace files of UMTS and Wimax networks. How to do it?

    ReplyDelete
  5. sir please provide link to download patch

    ReplyDelete