lr-wpan: Add rx Sensitivity configuration support
This commit is contained in:
committed by
Alberto Gallegos
parent
78b939e79f
commit
5d0948a7c7
@@ -34,6 +34,7 @@ Changes from ns-3.37 to ns-3.38
|
||||
* (lr-wpan) Remove the functions `LrWpanCsmaCa::GetUnitBackoffPeriod()` and `LrWpanCsmaCa::SetUnitBackoffPeriod()`, and move the constant `m_aUnitBackoffPeriod` to `src/lr-wpan/model/lr-wpan-constants.h`.
|
||||
* (lr-wpan) Adds beacon payload handle support (MLME-SET.request) in **LrWpanMac**.
|
||||
* (core) Now test-runner exits if no TestSuite is specified.
|
||||
* (lr-wpan) Adds the possibility to modify the Rx sensitivity in **LrWpanPhy**.
|
||||
|
||||
### Changes to build system
|
||||
|
||||
|
||||
@@ -31,6 +31,7 @@ Release 3-dev
|
||||
- (wifi) Implement 802.11ax dual NAV (basic NAV and intra-BSS NAV)
|
||||
- (wifi) Implement 802.11ax Uplink Multi-User Carrier Sense (UL MU CS) mechanism and have it used by non-AP STAs when determining if they can reply to a received Trigger Frame
|
||||
- (wifi) Add support for 802.11ax MU-RTS/CTS protection
|
||||
- (lr-wpan) !1006 - Add rx Sensitivity configuration support.
|
||||
|
||||
### Bugs fixed
|
||||
|
||||
|
||||
File diff suppressed because it is too large
Load Diff
@@ -1,908 +0,0 @@
|
||||
%!PS-Adobe-2.0 EPSF-2.0
|
||||
%%Title: 802.15.4-psr-distance.eps
|
||||
%%Creator: gnuplot 4.4 patchlevel 2
|
||||
%%CreationDate: Tue Oct 4 13:04:05 2011
|
||||
%%DocumentFonts: (atend)
|
||||
%%BoundingBox: 50 50 410 302
|
||||
%%EndComments
|
||||
%%BeginProlog
|
||||
/gnudict 256 dict def
|
||||
gnudict begin
|
||||
%
|
||||
% The following true/false flags may be edited by hand if desired.
|
||||
% The unit line width and grayscale image gamma correction 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
|
||||
/ClipToBoundingBox false def
|
||||
/TransparentPatterns false def
|
||||
/gnulinewidth 5.000 def
|
||||
/userlinewidth gnulinewidth def
|
||||
/Gamma 1.0 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 (802.15.4-psr-distance.eps)
|
||||
/Subject (gnuplot plot)
|
||||
/Creator (gnuplot 4.4 patchlevel 2)
|
||||
/Author (tomh)
|
||||
% /Producer (gnuplot)
|
||||
% /Keywords ()
|
||||
/CreationDate (Tue Oct 4 13:04:05 2011)
|
||||
/DOCINFO pdfmark
|
||||
end
|
||||
} ifelse
|
||||
/doclip {
|
||||
ClipToBoundingBox {
|
||||
newpath 50 50 moveto 410 50 lineto 410 302 lineto 50 302 lineto closepath
|
||||
clip
|
||||
} if
|
||||
} def
|
||||
%
|
||||
% Gnuplot Prolog Version 4.4 (August 2010)
|
||||
%
|
||||
%/SuppressPDFMark true def
|
||||
%
|
||||
/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
|
||||
/g {setgray} bind def
|
||||
/Gshow {show} def % May be redefined later in the file to support UTF-8
|
||||
/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
|
||||
3.8 setmiterlimit
|
||||
% 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 {Gshow} {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} def
|
||||
/Gswidth {dup type /stringtype eq {stringwidth} {pop (n) stringwidth} ifelse} 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 Gswidth pop add} {pop} ifelse} ifelse} forall} 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
|
||||
doclip
|
||||
50 50 translate
|
||||
0.050 0.050 scale
|
||||
0 setgray
|
||||
newpath
|
||||
(Times-BoldItalic) findfont 140 scalefont setfont
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
686 448 M
|
||||
6261 0 V
|
||||
stroke
|
||||
LTb
|
||||
686 448 M
|
||||
63 0 V
|
||||
6198 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
602 448 M
|
||||
[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0)]
|
||||
] -46.7 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
686 1282 M
|
||||
6261 0 V
|
||||
stroke
|
||||
LTb
|
||||
686 1282 M
|
||||
63 0 V
|
||||
6198 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
602 1282 M
|
||||
[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0.2)]
|
||||
] -46.7 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
686 2116 M
|
||||
6261 0 V
|
||||
stroke
|
||||
LTb
|
||||
686 2116 M
|
||||
63 0 V
|
||||
6198 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
602 2116 M
|
||||
[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0.4)]
|
||||
] -46.7 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
686 2951 M
|
||||
6261 0 V
|
||||
stroke
|
||||
LTb
|
||||
686 2951 M
|
||||
63 0 V
|
||||
6198 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
602 2951 M
|
||||
[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0.6)]
|
||||
] -46.7 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
686 3785 M
|
||||
6261 0 V
|
||||
stroke
|
||||
LTb
|
||||
686 3785 M
|
||||
63 0 V
|
||||
6198 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
602 3785 M
|
||||
[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0.8)]
|
||||
] -46.7 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
686 4619 M
|
||||
6261 0 V
|
||||
stroke
|
||||
LTb
|
||||
686 4619 M
|
||||
63 0 V
|
||||
6198 0 R
|
||||
-63 0 V
|
||||
stroke
|
||||
602 4619 M
|
||||
[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 1)]
|
||||
] -46.7 MRshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
686 448 M
|
||||
0 4171 V
|
||||
stroke
|
||||
LTb
|
||||
686 448 M
|
||||
0 63 V
|
||||
0 4108 R
|
||||
0 -63 V
|
||||
stroke
|
||||
686 308 M
|
||||
[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 0)]
|
||||
] -46.7 MCshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
2251 448 M
|
||||
0 4171 V
|
||||
stroke
|
||||
LTb
|
||||
2251 448 M
|
||||
0 63 V
|
||||
0 4108 R
|
||||
0 -63 V
|
||||
stroke
|
||||
2251 308 M
|
||||
[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 50)]
|
||||
] -46.7 MCshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
3816 448 M
|
||||
0 4171 V
|
||||
stroke
|
||||
LTb
|
||||
3816 448 M
|
||||
0 63 V
|
||||
0 4108 R
|
||||
0 -63 V
|
||||
stroke
|
||||
3816 308 M
|
||||
[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 100)]
|
||||
] -46.7 MCshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
5382 448 M
|
||||
0 3968 V
|
||||
0 140 R
|
||||
0 63 V
|
||||
stroke
|
||||
LTb
|
||||
5382 448 M
|
||||
0 63 V
|
||||
0 4108 R
|
||||
0 -63 V
|
||||
stroke
|
||||
5382 308 M
|
||||
[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 150)]
|
||||
] -46.7 MCshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTa
|
||||
6947 448 M
|
||||
0 4171 V
|
||||
stroke
|
||||
LTb
|
||||
6947 448 M
|
||||
0 63 V
|
||||
0 4108 R
|
||||
0 -63 V
|
||||
stroke
|
||||
6947 308 M
|
||||
[ [(Times-BoldItalic) 140.0 0.0 true true 0 ( 200)]
|
||||
] -46.7 MCshow
|
||||
1.000 UL
|
||||
LTb
|
||||
1.000 UL
|
||||
LTb
|
||||
686 4619 N
|
||||
686 448 L
|
||||
6261 0 V
|
||||
0 4171 V
|
||||
-6261 0 V
|
||||
Z stroke
|
||||
LCb setrgbcolor
|
||||
112 2533 M
|
||||
currentpoint gsave translate -270 rotate 0 0 moveto
|
||||
[ [(Times-BoldItalic) 140.0 0.0 true true 0 (Packet Success Rate \(PSR\))]
|
||||
] -46.7 MCshow
|
||||
grestore
|
||||
LTb
|
||||
LCb setrgbcolor
|
||||
3816 98 M
|
||||
[ [(Times-BoldItalic) 140.0 0.0 true true 0 (distance \(m\))]
|
||||
] -46.7 MCshow
|
||||
LTb
|
||||
3816 4829 M
|
||||
[ [(Times-BoldItalic) 140.0 0.0 true true 0 (Packet \(MSDU\) size = 20 bytes; tx power = 0 dBm; channel = 11)]
|
||||
] -46.7 MCshow
|
||||
1.000 UP
|
||||
1.000 UL
|
||||
LTb
|
||||
% Begin plot #1
|
||||
5.000 UL
|
||||
LT0
|
||||
LCb setrgbcolor
|
||||
6296 4486 M
|
||||
[ [(Times-BoldItalic) 140.0 0.0 true true 0 (802.15.4-psr-vs-distance)]
|
||||
] -46.7 MRshow
|
||||
LT0
|
||||
6380 4486 M
|
||||
399 0 V
|
||||
717 4619 M
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 -4 V
|
||||
31 -4 V
|
||||
31 8 V
|
||||
31 0 V
|
||||
32 -13 V
|
||||
31 -4 V
|
||||
31 -16 V
|
||||
32 -30 V
|
||||
31 -41 V
|
||||
31 4 V
|
||||
32 -88 V
|
||||
31 -62 V
|
||||
31 -100 V
|
||||
32 -113 V
|
||||
31 -83 V
|
||||
31 -176 V
|
||||
31 -141 V
|
||||
32 -263 V
|
||||
31 -367 V
|
||||
31 -175 V
|
||||
32 -284 V
|
||||
31 -359 V
|
||||
31 -308 V
|
||||
32 -217 V
|
||||
31 -234 V
|
||||
31 -296 V
|
||||
31 -192 V
|
||||
32 -96 V
|
||||
31 -162 V
|
||||
31 -163 V
|
||||
stroke 3910 640 M
|
||||
32 -34 V
|
||||
31 -41 V
|
||||
31 -42 V
|
||||
32 -46 V
|
||||
31 -12 V
|
||||
31 -13 V
|
||||
32 17 V
|
||||
31 -13 V
|
||||
31 -8 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
31 0 V
|
||||
31 0 V
|
||||
32 0 V
|
||||
% End plot #1
|
||||
stroke
|
||||
1.000 UL
|
||||
LTb
|
||||
686 4619 N
|
||||
686 448 L
|
||||
6261 0 V
|
||||
0 4171 V
|
||||
-6261 0 V
|
||||
Z stroke
|
||||
1.000 UP
|
||||
1.000 UL
|
||||
LTb
|
||||
stroke
|
||||
grestore
|
||||
end
|
||||
showpage
|
||||
%%Trailer
|
||||
%%DocumentFonts: Times-BoldItalic
|
||||
590
src/lr-wpan/doc/802.15.4-psr-distance.eps
Normal file
590
src/lr-wpan/doc/802.15.4-psr-distance.eps
Normal file
@@ -0,0 +1,590 @@
|
||||
%!PS-Adobe-3.0 EPSF-3.0
|
||||
%%Creator: cairo 1.16.0 (https://cairographics.org)
|
||||
%%CreationDate: Tue Feb 7 16:42:56 2023
|
||||
%%Pages: 1
|
||||
%%DocumentData: Clean7Bit
|
||||
%%LanguageLevel: 2
|
||||
%%BoundingBox: 4 1 354 245
|
||||
%%EndComments
|
||||
%%BeginProlog
|
||||
50 dict begin
|
||||
/q { gsave } bind def
|
||||
/Q { grestore } bind def
|
||||
/cm { 6 array astore concat } bind def
|
||||
/w { setlinewidth } bind def
|
||||
/J { setlinecap } bind def
|
||||
/j { setlinejoin } bind def
|
||||
/M { setmiterlimit } bind def
|
||||
/d { setdash } bind def
|
||||
/m { moveto } bind def
|
||||
/l { lineto } bind def
|
||||
/c { curveto } bind def
|
||||
/h { closepath } bind def
|
||||
/re { exch dup neg 3 1 roll 5 3 roll moveto 0 rlineto
|
||||
0 exch rlineto 0 rlineto closepath } bind def
|
||||
/S { stroke } bind def
|
||||
/f { fill } bind def
|
||||
/f* { eofill } bind def
|
||||
/n { newpath } bind def
|
||||
/W { clip } bind def
|
||||
/W* { eoclip } bind def
|
||||
/BT { } bind def
|
||||
/ET { } bind def
|
||||
/BDC { mark 3 1 roll /BDC pdfmark } bind def
|
||||
/EMC { mark /EMC pdfmark } bind def
|
||||
/cairo_store_point { /cairo_point_y exch def /cairo_point_x exch def } def
|
||||
/Tj { show currentpoint cairo_store_point } bind def
|
||||
/TJ {
|
||||
{
|
||||
dup
|
||||
type /stringtype eq
|
||||
{ show } { -0.001 mul 0 cairo_font_matrix dtransform rmoveto } ifelse
|
||||
} forall
|
||||
currentpoint cairo_store_point
|
||||
} bind def
|
||||
/cairo_selectfont { cairo_font_matrix aload pop pop pop 0 0 6 array astore
|
||||
cairo_font exch selectfont cairo_point_x cairo_point_y moveto } bind def
|
||||
/Tf { pop /cairo_font exch def /cairo_font_matrix where
|
||||
{ pop cairo_selectfont } if } bind def
|
||||
/Td { matrix translate cairo_font_matrix matrix concatmatrix dup
|
||||
/cairo_font_matrix exch def dup 4 get exch 5 get cairo_store_point
|
||||
/cairo_font where { pop cairo_selectfont } if } bind def
|
||||
/Tm { 2 copy 8 2 roll 6 array astore /cairo_font_matrix exch def
|
||||
cairo_store_point /cairo_font where { pop cairo_selectfont } if } bind def
|
||||
/g { setgray } bind def
|
||||
/rg { setrgbcolor } bind def
|
||||
/d1 { setcachedevice } bind def
|
||||
/cairo_data_source {
|
||||
CairoDataIndex CairoData length lt
|
||||
{ CairoData CairoDataIndex get /CairoDataIndex CairoDataIndex 1 add def }
|
||||
{ () } ifelse
|
||||
} def
|
||||
/cairo_flush_ascii85_file { cairo_ascii85_file status { cairo_ascii85_file flushfile } if } def
|
||||
/cairo_image { image cairo_flush_ascii85_file } def
|
||||
/cairo_imagemask { imagemask cairo_flush_ascii85_file } def
|
||||
%%EndProlog
|
||||
%%BeginSetup
|
||||
%%BeginResource: font f-0-0
|
||||
%!FontType1-1.1 f-0-0 1.0
|
||||
11 dict begin
|
||||
/FontName /f-0-0 def
|
||||
/PaintType 0 def
|
||||
/FontType 1 def
|
||||
/FontMatrix [0.001 0 0 0.001 0 0] readonly def
|
||||
/FontBBox {-120 -205 917 699 } readonly def
|
||||
/Encoding 256 array
|
||||
0 1 255 {1 index exch /.notdef put} for
|
||||
dup 32 /space put
|
||||
dup 40 /parenleft put
|
||||
dup 41 /parenright put
|
||||
dup 45 /hyphen put
|
||||
dup 46 /period put
|
||||
dup 48 /zero put
|
||||
dup 49 /one put
|
||||
dup 50 /two put
|
||||
dup 52 /four put
|
||||
dup 53 /five put
|
||||
dup 54 /six put
|
||||
dup 55 /seven put
|
||||
dup 56 /eight put
|
||||
dup 57 /nine put
|
||||
dup 59 /semicolon put
|
||||
dup 61 /equal put
|
||||
dup 66 /B put
|
||||
dup 68 /D put
|
||||
dup 77 /M put
|
||||
dup 80 /P put
|
||||
dup 82 /R put
|
||||
dup 83 /S put
|
||||
dup 85 /U put
|
||||
dup 97 /a put
|
||||
dup 98 /b put
|
||||
dup 99 /c put
|
||||
dup 100 /d put
|
||||
dup 101 /e put
|
||||
dup 104 /h put
|
||||
dup 105 /i put
|
||||
dup 107 /k put
|
||||
dup 108 /l put
|
||||
dup 109 /m put
|
||||
dup 110 /n put
|
||||
dup 111 /o put
|
||||
dup 112 /p put
|
||||
dup 114 /r put
|
||||
dup 115 /s put
|
||||
dup 116 /t put
|
||||
dup 117 /u put
|
||||
dup 119 /w put
|
||||
dup 120 /x put
|
||||
dup 121 /y put
|
||||
dup 122 /z put
|
||||
readonly def
|
||||
currentdict end
|
||||
currentfile eexec
|
||||
f983ef0097ece636fb4a96c74d26ab84185f6dfa4a16a7a1c27bbe3f1156aea698df336d20b467
|
||||
b10e7f33846656653c5ac6962759d3056cbdb3190bac614b984bf5a132dc418192443014ba63de
|
||||
800d392b6fea026574bb2535fd7bb5338f35bf15a88ea328fdaa49670c7852e3d060f3c5d6b07f
|
||||
2ef6d0f22646c5d18e19a2ae3ee120390f6dd96f76dcf1e127de5e9299077a00c17c0d71e36e5b
|
||||
9d5ec58fceda57739a6a4214d4b79d6c48d2784b60c320323c7acddddf34db833cac0cf109f799
|
||||
69d114a330d372e5c978a66acc84e3fe5557f6240856a013ffaa0199444e5c5036f775eba4a5c5
|
||||
8cde66cf604b9aca2178431127b8a1ff7ed633a65c04600af5f573483112251ca91d1147e394b8
|
||||
770feb7fd46a77e2961ec91bb9263dc0e43eb9a3b990c9761127f2236d69136be42a8ece293f20
|
||||
5e8c6985d36b970354af6976b59de1a9aee59b1b7c4d57d3e7115622fce48a99cd7903af13d778
|
||||
b61bdf26278782d0626afcd805edf6882452f3ba0b8a06550e5e742680a1db9e9c38aff42a0b05
|
||||
0a9f5f0b9355ad3cd836918714c3f69d1b8ce860e052d6ee0bf9c73c967566711ee88068b4f1e1
|
||||
8e9f1de06e22b50a1802b961bf321e086c078478c600fa019a221bda4d0691a1bb176b02a3095e
|
||||
c2a8437df5f02ae027612189ff9fa60c7236e5bf6cafe3cf2387597370a08fa1249ace038b4c9a
|
||||
ecc6e711908d08521015920bfc534c4cf64bf8005abe859dc2969a27784051abe57be19aba6937
|
||||
c8d9cd449d007816c1381fc06b1f9d0f750dc5eda5f766e4245b5797d2d8e322f2a38ed3880ae7
|
||||
13f2edc17311c12c168e50150fe0e343da65e3f2bd139450022b55e23392a2de02f289617dd4cd
|
||||
f3c47d52ea553d5a2feaf00f8aa0c17f95745f872dce13d2e1a26248be73aef3e76cf72414b24a
|
||||
a796fcf2778035fbd97ad4fc2b916c3a324e4d36cee9fcb580e5d1d9073ae58a01be98418b9425
|
||||
0619218c1fcba7037a689ec83fc42d6dea7d609e3cc45d07e289084a878c33a77c492427e6408f
|
||||
895707f95831bf9c8b230d9aa553f2e62ed301bf822df01c64e122b25bb3e929552940d69d9bea
|
||||
0db22cc1f90a5cf9eb63dd3fd52f41d5c1c8a9ac478b48459e5882b062bc78675aa1e2d6e70326
|
||||
69af62ed53d03ed4c7e7b4c3d5c63878fc98a0f891b0b3f4112f9203b201b4df315d423d009273
|
||||
6dd784bf0eebd9bc9407c803adaa20de750884ade854491b14660b23ce1830344c320cb26e2bd2
|
||||
41b916c30c94de287fd3b8ab8116011e8c5e43c528d22dbc4f1bf6400e422b7f0e02eb53adf5a0
|
||||
8f5a1d4fb192188430efa7dd558329569b4cdf8f07ca29b0f906bdb164ecd6762e55c4113af599
|
||||
e4b4abcdd41d05de6bd6add6fb8f684b0d9583a56602d13c5b64e2e837ec5c238704efe8039f95
|
||||
b5edc8221765f744db766f5224c324cab2ecc72cb20b58b5f19426e5d29f3a5b429cee7b45a71d
|
||||
781ea61d2ce93533201e8706f71d3a9c29b4b2db6398a8a9ecbcf3588ca6da6fca2a72fbe479ad
|
||||
0af932e399f3932445b10b4740fb1d437ccabc5b42701242666828fdc8b131c8ea8eca9e0b822c
|
||||
7f88e9fc49256dc6f6e52fc0a00c38428324478492d15b18959fb09cf28004562bf53b6eca151a
|
||||
7994261c2c3e6fb99fa87fe90500277c32f4d902dc6405f5cf752555994d05bd98c9902a518cc6
|
||||
1b3ac3ffd041ed82d8279a2a1c3c5729aa6dfd811b08ac5715c20fb012eb3ddb611d5aa0386a5d
|
||||
cd8d878e1b90baa9073032eb31ed3f35385621284e8fd6d31b0bdd56f214c324928eb57bbe7b4d
|
||||
24cd67ee34b6a22c77a6d80ff843102c723511c3c261dec9462b6a191384d99d52545a9bbae451
|
||||
89c114aacd395f5d2ed9b9c2b5eab9f109c36c915f36678ee984a1b8a65b38ed6d48ef11648b9a
|
||||
4e21d51bae9df39b17e0cc40a0cd3c453f85bcadcef2210d39d1b3259c3cd7bce8f8da5cc94cdd
|
||||
32201bc55a2f74431d84f5573b59e6e1ac3d7b3b80725961993759f63077b206d987d8f61ab3b2
|
||||
1173653792b1e586728bbfbbd5687d6acac39c5c984ccf92242196b4ab5d5408b6949f35803fc5
|
||||
f4840b0b561802400007802c4467b55610152573415ba53f207b104de7d912c5bf47751d85385d
|
||||
f45b5728f0c7222dd4800d300e92a631f5523738c581300c61c41099563b1cc5d5d75fdfa6a249
|
||||
6e883227020870adfff63688a6d6e32d649e3e802919138035d53be2663efcbafa6f3f01c12dd5
|
||||
e73272506a4e1e0a0ba4ee185c8f2631f1c47991bcd441a3fb971a920a995d56e51abb9273c056
|
||||
ab190ba8b3eab9924dcf25e9eaf74fd2a2adeb0fe586522738c94df776270068587b9e2951285d
|
||||
f961df30828870115939160f7baca86e9b7eeee4778159d4b82acb2b4934970ca8af657637ce28
|
||||
1fc7195fff0c26a35b5763d1c84b75f45df695b55f565e83e72dca59c528fc9c2f9fb8bb1d3836
|
||||
0b3f87cbcd36f96e6680960b5f78d1660180ea3ba73c0df17e9d1b3c4939c8dd8eb4a95277934c
|
||||
a417af85e4f3ceee61bd0d6a18687471d8dec2cfb65d8a1ee30adcd50f6354045e61aa3f1d35d1
|
||||
a5f39c1228be448f4e15fee8a8309d3144e8e494b5483680599ce430e1e7b219b8e156f6dd0049
|
||||
e34e53d0463376b77b365bebaf08f9c1514f7b66520544953582916823f17d70ba3646a8d420e0
|
||||
07cca059a45276212c40599e79d8cd2b1768f964d3a364e65baafd767f43b2ab562de3050724c3
|
||||
0e8e11fd2f429ff7590b97f861f1ee9d19a3cfa66a8c755960b45cb8dfaffd80e3426e5c57e65c
|
||||
f5ea49f3504806bc96527c9b20987e99de44c09e93de6c7dab1bd4a2ba5476fc3209c1b421dfdb
|
||||
a91a8568087d8f7b706b522af6f181829a9ae7266789ff18cbbeaedaaef7f7df4c4ae7873dac2e
|
||||
0f8b1d43cebb6087bc2398837c6b8e6b2aec3e55c66cf3db3293fc371e7d93b32853fed1723b5e
|
||||
ca9932759d854db4dd5069aaa31f51a515bb9ae6342a583080ddfd2173a7b0e9143fca950495d3
|
||||
a90a7ec9bbbfaa2ba03661b05c8e85b6f3edfd82444b1d335b21d502b430f1dbfa2fd93e0f4b3b
|
||||
dc096f564e3d4ab470152b785dd2c05a9d69973665c5b67fc0d81151141a5eb78880086ad276b4
|
||||
ef039c78a77ed5e80044d87a0767a416d5f4739a1735917d99c5b207f9c94fa903d7063c3ff62d
|
||||
c2a2079ed2707d88a77c5c5009dab9d223e0efb33bdc736af0f85564ef88d1853f13343fdeb271
|
||||
fce4d42038c0e0fe544309f063b6f1f3dc9018a0e2893da5f1fb30cf003fb23deb46d13e7b51fb
|
||||
ab4610af7efb3827e5f0a27ed173c385e7a4f03b167971b69d6e57059e5380d6b521090540c8fd
|
||||
706dc8ddfd3397a05db5d030b5cae26330de17394c40234329bec6cba36f5ee51ac0cef01d5c9a
|
||||
186d73e1242855e94eda47507a65de5c8a568ac2ea69c0446ff2faa0615532eae5ef142fe8ce7a
|
||||
c08c058d68db0bf5a1ea72a74c763f76d475ca73eec18bb3de194e564628f7986dabf118d08b49
|
||||
08a26376d508991051ade1dbb85c7188a1c5140b9b874a56d8aa08ea8243404a5c626ad5d989b0
|
||||
0df27dd5fde4d705a87b97f0cf165a4903c32b40d7db2cc9ea2a709992a1804f621468f1f1f25a
|
||||
7301cc4d96574ef8b4fe7113397b378d0650bafec63eca65cda58a490bcc6a7840141503652dd0
|
||||
69e3860d1254aa78438f6d06e702040289f25d6c333df3e938dad48118b155d4a0bd893be04744
|
||||
bc41a02adda4f451785b5f29651a70b520add99694fe534e985df16edbcabfb29fc9f80570c599
|
||||
6bc0311534500bcd860f5e5dd8c3a5595fd0c16c0b4a71e6b19d8c65ec009d85728416e98865b6
|
||||
f732c97849a322d5d15933023627c4c3b493cd25fe787bd8a602c185c58ffed03d9b64b84f68b3
|
||||
7c041eec4d32420af95c174da76b1822d66d98873d7050d124387f9454d11b6b43f978a7dc5893
|
||||
341815d40bf7489a4443acf4e6249d8ed0ac31b2fb85d9a06a9061c180106238213253423d3e16
|
||||
e62c1c035ffa6be588b5e105ccbde9537ddb9e86eb9eee887e01ca91420e20dae0b338c928423d
|
||||
5dcd021828050e57213768c79faa75ba1958d7b43eea506e5fc0683955d0d93903e6510af75c47
|
||||
97d05c1c001252743623028d78a293054bed8847112656cf36567ba99eaff4a09d2e12a7664645
|
||||
38884477d00ebdaf62fc1f110a2b59efd877c9e570c127cd89801d5d2eab8de294085771fa38b6
|
||||
1584efb3877e4edb76957de903b0bc880a703adf57b73628cf6481491360bf081f999a347a3b8c
|
||||
ed28d04a74857774ac390d7b18d0719cd4b7c14a9fea42e80026d96486b29266ad8a2a31557023
|
||||
a581a882c8f8b294bd02bcca17e0cc3b47bee6d9f378323de02482101664a0189c7b69dd1bd91d
|
||||
36d45e95050ba0a29225a9ea038f03c6635840d3c794fbf42c4e2d61d8c25c152d3ebbd52dc5c5
|
||||
8e2d8b6f36136dcfa92b409c80ce96398f9292e48894a435494d72e399b82f87fc6e2a1025371a
|
||||
f68aa5572d8eb827b649e37e6b108c8643bccd73c90aa42bef97e51ca27ff45051056b679a459e
|
||||
c938e3ad5494ef9389a4213589d526bd5cdbe0795bf78b83097b893dfa661faec6214ff7c15896
|
||||
98485ab72a3a314546fd4440dca92cc0c126aed9bc5851aca6ac87b8948cc54023da7d1ebddb67
|
||||
021b357ecad8b8f54aa91b8ffb3ecfe8addce021a7c8454186b56c1c27e720bac49021546acd47
|
||||
6a8ad779af8973e641a47f5c79a86e61a6174aa7b529dbc8c9c1042270c20aff1608ec8fcd53fc
|
||||
bbabcc21985096706d9d313adbf1adf29926fd1dde0d5c688e4b1d7d0d6802824c6c7b7fd0ea98
|
||||
d1d06622520286704add2b5f2370aaeb0533694f9883478a75344fdd3505c7b6c4ad5a37abe943
|
||||
0ae1c3d2550309668dac31d748eb4e956c8894a18d11f387d16934356ec7379494d77d0393b94d
|
||||
5245f1f71d77de7b4d89f5529f6b5b9bd2744df09173be9a5e4c573c4ef5a1096ee82a2a53e883
|
||||
04f379afc6868b0eefd62a5cb2d1d21aba066937639b9fe5b10208da697f40a39e6ee11d621502
|
||||
366c546aac60fc79c6d05cea9d9e8d8ffa67ff442e75f4f28ac62a2660346e329b56fac248f3a4
|
||||
7665157eeba01b807b65c7bc9eba5d059faf5987212330ac3f7a04278de1cfc8e01ebe136443df
|
||||
edc5df38f539f573bed294de93639ffb430dd3f982f4ba760784841dc87ce0df076c1760609276
|
||||
b67f976e226e56fd9a24f5bc442a7a9cc3872f16a3a4647bdef24151c51ea7c2554be9841f5243
|
||||
99a21a28d33dd7cb294976da44ee73e52744c8bfac0581982d7ef27be12cba1d89078051ae1c5b
|
||||
5f2ab4752035faa6bc6de10370a935d9110f47400e08f3235bbeb4ca7cffbb7dac1e6e22ee5a58
|
||||
c7b33e7acf65586470c087594454484186d92f60d3603af307e5169b10e812e344a98555d6bcd9
|
||||
b6befeefbf526274a0f8fab7eedf23f1c5523323b2c0f0e4a9141bfdd3772d02deedd69b3937bf
|
||||
8533a6f205702e6a703446a4c13828f115bd547e59971e050d6b55c176c8e32d3f09338ee665b4
|
||||
a2f6f8692e1613f8168f3dff482fc3462aca3227a0f464aa065a8b97409aecd9b2b86831f190cd
|
||||
d988af54d7e2e6ce2600d74b78473ac42534cb1a4712afae659ecbf12cb11a958609e5a5701cff
|
||||
32acaae52f3423032687119953a0fb7b4c412086e460224d7451ec10effbb707fef8de4e43d9c3
|
||||
b0c2519b1df462943db7b4d1e5cc638021e6a3c1a1a72f3a28cb372b1f639dc74270734f43ba20
|
||||
2a5bcc805421f806e068ba068bdb0ea2b3f481a5dc6d99707caef1dff7ea9359da1b8b82cfd9b7
|
||||
b3a382a2d9eb740c9fed9948bbec3878eaa4ee5f6bbc39af5e39db0af35359e8ad124646b3e786
|
||||
737e06d8d7044d2ef7dbf7fbfd6e7a19d9b236ae7262aafa4c026bdf999aca8ca153e306fafde0
|
||||
5d8ae9d74f13913aed7c6dc3386f348b84e5442cc9fb6049eec5706a79398802772c40b383657b
|
||||
bd5c4b445777e0236710339fa7c57068737504b28d36ee8115d704b5efdd0062f9007f176c85d1
|
||||
3a35a6807d4a4cab3d2a57fa2aa7b4f83f44d734cbcc59ef84e42d8e62df197853570308bff37d
|
||||
f02a7730b82559893bdad5620bd6252f7d6e7a7877968c5736b1d328a2e6e2ddac3f75914ebba7
|
||||
6ed377bdeea8a4dcfce30c81859bc0f192593683311995037b169ee87fb0a2ea898679ee597106
|
||||
3e38185ff9a53be81919b04760a07ca721589b67975e893e12f61e5637c15afddfa1bb5c8a94bd
|
||||
1610e97903f46d34830f3dcd6bc8b925812af6cd30c1889c4429d67ccae457844775e1f4638326
|
||||
f4b4dbd66575fc71b986017406ecc04e89ea26f3a1b457af7aa5c2391899a51f53620549dd9aa5
|
||||
5af140070bcc439d4ec60a749cbd2339cd2405c5223a5e9a517f62e2b50cb00c514e79614e7f9b
|
||||
40c6af1f1a842080c15022b49dd86872db7841166b777df67caf278d22a829f269047b3fe1143c
|
||||
c16f137cb6edf3d9dbb8574e5411a8e69c1fce97fafafe3bce921d280cad1c0d2c3fd3cfd39c2c
|
||||
66f92c5ba458c5bc2baca4d9c4e67d9838827a0b3bb33d1e0bfd981a8b88fb8fa542e4d07956e5
|
||||
5c773b2bcd1fa5f6d0b84bc9f35436cf21004e59c7c4ded8aa8f61fc31b61e9e5cfed76043f697
|
||||
90069da95284172fd4a769f3ac5ead35882eca37bccba6cfe3fd00a1a5320c1e583cea4d338069
|
||||
168b633c2bb960add60699076f9553d65ec1cfcbe15f4696e470bba0d2d20b810bbb94de0e066a
|
||||
53cedc32f5a667d044df997a23d38ab60630bf1ecb4a63ae6e85ddbe826f6c208e8fa013536d67
|
||||
7a57a10237989400d0fb5c5680f40fe842a6d7827eb6dfbefb66d2ffec4a21f3184d9a7b8892dc
|
||||
f1842e755bfe07c3415d50b31650cb2fe423024399e3f1d48e833c6bd1a5882b3d897a48476774
|
||||
7447a56fd2f9f785928dc623b45e04c0534414e458c8084db9c0fb7b869303f03a7db0d24e106f
|
||||
c4569f9ad4f42ef096c1e73197358bc5b79a0140eec788fd815a595d138623d724e9f46bd75c74
|
||||
0c66781572cdd5d8c4b61a71c1de857c6f7e52a0a65413cb461dcfdaec8a7f6d5a527b5da11fbb
|
||||
f0779c15a11f3f2f81f38a02238917e270ff6bb47a21b36a20348a34108f5471f5eca0d2f684f0
|
||||
18ad7ac5f52b67d145963537534e3d5d487b65d38ce310cd1f5464b8d39b904e396b343097761d
|
||||
12ee73ff8fad544bb8ae894a77a71cbb6e0bc0262360f5f2eacdb52640f3fc5071e71ded3eb0f7
|
||||
3150a3afaac2882a0f4a78eb4de7ac732b7c201afcf70a1ff3e49bb4a7e786e1c48860023768ad
|
||||
8c40390bdba129bc40a3accc154a3a55a32b16e8dec5ba2f7a51f3c22821f00e913614955c3c74
|
||||
165f4b84d6e1f43137ed572e4a387bc7dafdcf0c015fc2b7ebaf1cc69c191bae34f569f29d93ec
|
||||
df6d8ce8647b68f96ac1444530b4abd76ace164eee01f6cb07c1457761846cfceb3c7ed3e8dce5
|
||||
b173f356312ed03851a1941dad7ce47f352efd3ebdc8b1a10984fc39408fc765d3ea63e5eee4ac
|
||||
c48969e9d770d53ae1f2afb7a7690063466ef9dfdee47448671dccff63d5139be1b3cf1c33537d
|
||||
5f191a73d3a8a4956a7b8c84828fc1445ff041a84474eaf7b45bf67dc9e621b44119005512e9d8
|
||||
0a89fb10ca9227cce67c6cbfc6f45bde1433a9e389888003a31591f77f7b65727bdefb150a2298
|
||||
66eba692c0a080dc7a926cb27caf77fa352404ece37bc5f69b88a8878f735c0066554b294ac76c
|
||||
e90583a5f0dbbb0c33fd9f52b75ffa450d7aa2e3cd0f7c01874c927eb0d818f4fabddb6c50df24
|
||||
855bf3f9984a0ef65a93e2e3d782794f2ed0262ac86a8ab343fdeda76c787cb5e68dff2b3e6cda
|
||||
3ab1f8b646fe1c9b63176ce5d9721d9e217883a5809f44377c2f61291eb3a8b8d5e4f406343451
|
||||
da9c11ca53ef9eb934f8b1a44f1bb8cd202cb1742d8213735777fdbacf7f0933a0b0bc8fd13084
|
||||
db3410a6736c1acdf9682cd633bfa27714697c08b2b3ae0812bd96b2b14c7d0df99e26dc08598f
|
||||
70d24ee32b43619119bbecb71a1738e95103d9ff1513216077a2cc1c786660f544c31155eca5ff
|
||||
20deb39075b09e281a06df04dea50179e88a2bb1b98d05560b1f1bbf6df981594b47a9035b554d
|
||||
c79b44e9cd91381d2ed71c6bb7eadc4422ee3c27ab678a22a785786904b1bca4919b40cc05ab1c
|
||||
c2faa2f1f2c1da946484660942f5288e5bdb044790c15edc3c979beab118101083e94631b8b9a2
|
||||
ed92c51c056294b7863e76d01cabe5bec973ba40ee485d88196c908d032051bb55144de8966328
|
||||
66de750fb8dc983487507a7b5ec1babf6cf080c6c0dd002b6e305cfdd97c426725fd648ad995e7
|
||||
4bd8d67e4e03d68fc7c789d243a25cff3f52c7bf4ee758bcb62d1c951102c0a81eebb224fceea6
|
||||
522ae93dc8c9af630a13e2382f24bea74c6279859901aca5e1479dd17ca58e635e5768203b7314
|
||||
f7f92e74bde2a7baf3b8acea39f800ebca4b2b2a40fe5cb0a671f836607e86c42d06e51ccba1e2
|
||||
4e14918d443bd792e836edae89639f36825e698eec03b7f649858a10886a900c371c890564d199
|
||||
1a8dc48644381aced59f4e8c8fc388da4911a9d25bde9e47566e54216044a7b08d1cefe9861e6f
|
||||
651357f25b526e9b54ae62c904094616a2285491292de7fb4f95235a3902170601c15d52b9bc85
|
||||
c153bb27d4ab8cd01c80863c6f34b784dc5f28f196c822a0ae59551b92148b7ee92a428a1ac9ed
|
||||
fb51cab977ae915e0c1c80033f22da741fce179cc91b5ebb7a3dd3bf579d7ced93f14f23e09a44
|
||||
954ad9d4cd2fca916a9e444f1ebee056779087ee33dc155a16484e938d38d09a97d551f1e12c62
|
||||
c1f90ac16a297e5f73add55f9606180d34e8e37b28006da4dcfb0e842647a46f6c44df4ef27d96
|
||||
aa8b26441324a228ca896ce8a5cf37b93a6b50f95776835fa5c041069c9d8e9a9edfe302aebb01
|
||||
97756c6fd3d6d3c2d6dae32c8a1148dbde0953a20d4d75489cac0447c3100bd2d15beee4043861
|
||||
c077c7b6ff2742daf44c2562a03d85a3d91d7deddce813f8cbdff39127c94d500900a31f68bee4
|
||||
903187e2defe546dd1d7a4106049c7a902b3abeaae9297d50eecfe2df733004ed34cfb26d7e93d
|
||||
99dff2bf37759d9f75a8b0ba0b85df6fe2e208d1947f5dd2c3c44bfa0348b3484eb3f29c053a1e
|
||||
9aba025c012e85b2b1c153e67ac2dbfe7d5c0d384edf06bb9063b5541956df3990517c7ab6eaaa
|
||||
18d771fac8f1ec9f99c6c3a34a422255498d6254c1601ef1fed76719306b6cc3debf99445c53cc
|
||||
c189d3b4ce6a3b036c58414e6be5df2602a6f7b6df3dc95cbec600c62972f6be5d48ebc2104043
|
||||
b7d7659cfa004c9647f0c1d7429281cec88a51161779c2f9f872aa9a12163acf2f276e3355c102
|
||||
ca4d472167913e2ed8b8d442ac2981d730bee5afcb4f9f06871d24f79f433dea17a6d827b21c7a
|
||||
f81b5d1d58d74cec4e6903c9a5f22ec3280000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
0000000000000000000000000000000000000000000000000000000000000000
|
||||
cleartomark
|
||||
%%EndResource
|
||||
%%EndSetup
|
||||
%%Page: 1 1
|
||||
%%BeginPageSetup
|
||||
%%PageBoundingBox: 4 1 354 245
|
||||
%%EndPageSetup
|
||||
q 4 1 350 244 rectclip
|
||||
1 0 0 -1 0 252 cm q
|
||||
0 g
|
||||
0.25 w
|
||||
0 J
|
||||
0 j
|
||||
[] 0.0 d
|
||||
3.8 M q 1 0 0 -1 0 0 cm
|
||||
34.301 -229.602 m 37.449 -229.602 l 347.352 -229.602 m 344.199 -229.602
|
||||
l S Q
|
||||
BT
|
||||
7 0 0 -7 26.599999 231.935201 Tm
|
||||
/f-0-0 1 Tf
|
||||
(0)Tj
|
||||
ET
|
||||
q 1 0 0 -1 0 0 cm
|
||||
34.301 -187.898 m 37.449 -187.898 l 347.352 -187.898 m 344.199 -187.898
|
||||
l S Q
|
||||
BT
|
||||
7 0 0 -7 21.349999 190.235202 Tm
|
||||
/f-0-0 1 Tf
|
||||
(0.2)Tj
|
||||
ET
|
||||
q 1 0 0 -1 0 0 cm
|
||||
34.301 -146.199 m 37.449 -146.199 l 347.352 -146.199 m 344.199 -146.199
|
||||
l S Q
|
||||
BT
|
||||
7 0 0 -7 21.349999 148.535003 Tm
|
||||
/f-0-0 1 Tf
|
||||
(0.4)Tj
|
||||
ET
|
||||
q 1 0 0 -1 0 0 cm
|
||||
34.301 -104.449 m 37.449 -104.449 l 347.352 -104.449 m 344.199 -104.449
|
||||
l S Q
|
||||
BT
|
||||
7 0 0 -7 21.349999 106.785004 Tm
|
||||
/f-0-0 1 Tf
|
||||
(0.6)Tj
|
||||
ET
|
||||
q 1 0 0 -1 0 0 cm
|
||||
34.301 -62.75 m 37.449 -62.75 l 347.352 -62.75 m 344.199 -62.75 l S Q
|
||||
BT
|
||||
7 0 0 -7 21.349999 65.085005 Tm
|
||||
/f-0-0 1 Tf
|
||||
(0.8)Tj
|
||||
ET
|
||||
q 1 0 0 -1 0 0 cm
|
||||
34.301 -21.051 m 37.449 -21.051 l 347.352 -21.051 m 344.199 -21.051 l S Q
|
||||
BT
|
||||
7 0 0 -7 26.599999 23.385006 Tm
|
||||
/f-0-0 1 Tf
|
||||
(1)Tj
|
||||
ET
|
||||
q 1 0 0 -1 0 0 cm
|
||||
34.301 -229.602 m 34.301 -226.449 l 34.301 -21.051 m 34.301 -24.199 l S Q
|
||||
BT
|
||||
7 0 0 -7 33.424999 238.9352 Tm
|
||||
/f-0-0 1 Tf
|
||||
(0)Tj
|
||||
ET
|
||||
q 1 0 0 -1 0 0 cm
|
||||
65.602 -229.602 m 65.602 -226.449 l 65.602 -21.051 m 65.602 -24.199 l S Q
|
||||
BT
|
||||
7 0 0 -7 62.974998 238.9352 Tm
|
||||
/f-0-0 1 Tf
|
||||
(20)Tj
|
||||
ET
|
||||
q 1 0 0 -1 0 0 cm
|
||||
96.898 -229.602 m 96.898 -226.449 l 96.898 -21.051 m 96.898 -24.199 l S Q
|
||||
BT
|
||||
7 0 0 -7 94.274998 238.9352 Tm
|
||||
/f-0-0 1 Tf
|
||||
(40)Tj
|
||||
ET
|
||||
q 1 0 0 -1 0 0 cm
|
||||
128.199 -229.602 m 128.199 -226.449 l 128.199 -21.051 m 128.199 -24.199
|
||||
l S Q
|
||||
BT
|
||||
7 0 0 -7 125.574997 238.9352 Tm
|
||||
/f-0-0 1 Tf
|
||||
(60)Tj
|
||||
ET
|
||||
q 1 0 0 -1 0 0 cm
|
||||
159.5 -229.602 m 159.5 -226.449 l 159.5 -21.051 m 159.5 -24.199 l S Q
|
||||
BT
|
||||
7 0 0 -7 156.874996 238.9352 Tm
|
||||
/f-0-0 1 Tf
|
||||
(80)Tj
|
||||
ET
|
||||
q 1 0 0 -1 0 0 cm
|
||||
190.852 -229.602 m 190.852 -226.449 l 190.852 -21.051 m 190.852 -24.199
|
||||
l S Q
|
||||
BT
|
||||
7 0 0 -7 186.474995 238.9352 Tm
|
||||
/f-0-0 1 Tf
|
||||
(100)Tj
|
||||
ET
|
||||
q 1 0 0 -1 0 0 cm
|
||||
222.148 -229.602 m 222.148 -226.449 l 222.148 -21.051 m 222.148 -24.199
|
||||
l S Q
|
||||
BT
|
||||
7 0 0 -7 217.774995 238.9352 Tm
|
||||
/f-0-0 1 Tf
|
||||
(120)Tj
|
||||
ET
|
||||
q 1 0 0 -1 0 0 cm
|
||||
253.449 -229.602 m 253.449 -226.449 l 253.449 -21.051 m 253.449 -24.199
|
||||
l S Q
|
||||
BT
|
||||
7 0 0 -7 249.074994 238.9352 Tm
|
||||
/f-0-0 1 Tf
|
||||
(140)Tj
|
||||
ET
|
||||
q 1 0 0 -1 0 0 cm
|
||||
284.75 -229.602 m 284.75 -226.449 l 284.75 -21.051 m 284.75 -24.199 l S Q
|
||||
BT
|
||||
7 0 0 -7 280.374993 238.9352 Tm
|
||||
/f-0-0 1 Tf
|
||||
(160)Tj
|
||||
ET
|
||||
q 1 0 0 -1 0 0 cm
|
||||
316.051 -229.602 m 316.051 -226.449 l 316.051 -21.051 m 316.051 -24.199
|
||||
l S Q
|
||||
BT
|
||||
7 0 0 -7 311.674992 238.9352 Tm
|
||||
/f-0-0 1 Tf
|
||||
(180)Tj
|
||||
ET
|
||||
q 1 0 0 -1 0 0 cm
|
||||
347.352 -229.602 m 347.352 -226.449 l 347.352 -21.051 m 347.352 -24.199
|
||||
l S Q
|
||||
BT
|
||||
7 0 0 -7 342.974991 238.9352 Tm
|
||||
/f-0-0 1 Tf
|
||||
(200)Tj
|
||||
ET
|
||||
0.5 w
|
||||
q 1 0 0 -1 0 0 cm
|
||||
34.301 -21.051 313.051 -208.551 re S Q
|
||||
BT
|
||||
0 -7 -7 0 8.98516 164.330902 Tm
|
||||
/f-0-0 1 Tf
|
||||
(Packet Success Rate \(PSR\))Tj
|
||||
7 0 0 -7 173.010996 249.43516 Tm
|
||||
(distance \(m\))Tj
|
||||
18.922714 31.342856 Td
|
||||
(-85)Tj
|
||||
ET
|
||||
0.580392 0 0.831373 rg
|
||||
0.75 w
|
||||
q 1 0 0 -1 0 0 cm
|
||||
319 -27.699 m 338.949 -27.699 l 35.852 -21.051 m 60.898 -21.051 l 62.449
|
||||
-21.449 l 64.051 -21.449 l 65.602 -23.75 l 67.148 -36.699 l 68.75 -55.449
|
||||
l 70.301 -110.102 l 71.852 -156.199 l 73.449 -206.051 l 75 -224.602 l 76.551
|
||||
-229.398 l 78.148 -229.602 l 345.801 -229.602 l S Q
|
||||
0 g
|
||||
BT
|
||||
7 0 0 -7 305.468992 37.035005 Tm
|
||||
/f-0-0 1 Tf
|
||||
(-90)Tj
|
||||
ET
|
||||
0 0.619608 0.45098 rg
|
||||
q 1 0 0 -1 0 0 cm
|
||||
319 -34.699 m 338.949 -34.699 l 35.852 -21.051 m 76.551 -21.051 l 78.148
|
||||
-22.699 l 79.699 -23.551 l 81.25 -32.5 l 82.801 -39.801 l 84.398 -62.949
|
||||
l 85.949 -95.699 l 87.5 -134.5 l 89.102 -176.398 l 90.648 -204.551 l 92.199
|
||||
-220 l 93.801 -227.5 l 95.352 -229.398 l 96.898 -229.199 l 98.5 -229.602
|
||||
l 345.801 -229.602 l S Q
|
||||
0 g
|
||||
BT
|
||||
7 0 0 -7 305.468992 44.035005 Tm
|
||||
/f-0-0 1 Tf
|
||||
(-95)Tj
|
||||
ET
|
||||
0.341176 0.709804 0.909804 rg
|
||||
q 1 0 0 -1 0 0 cm
|
||||
319 -41.699 m 338.949 -41.699 l 35.852 -21.051 m 93.801 -21.051 l 95.352
|
||||
-21.449 l 96.898 -21.25 l 98.5 -22.102 l 100.051 -24.199 l 101.602 -27.699
|
||||
l 103.148 -34.602 l 104.75 -38.352 l 106.301 -53.148 l 107.852 -71.301
|
||||
l 109.449 -94.25 l 111 -124.5 l 112.551 -149.5 l 114.148 -173.301 l 115.699
|
||||
-200.199 l 117.25 -210.199 l 118.801 -221.699 l 120.398 -224.801 l 121.949
|
||||
-228.949 l 123.5 -228.352 l 125.102 -229.602 l 345.801 -229.602 l S Q
|
||||
0 g
|
||||
BT
|
||||
7 0 0 -7 301.968992 51.035005 Tm
|
||||
/f-0-0 1 Tf
|
||||
(-100)Tj
|
||||
ET
|
||||
0.901961 0.619608 0 rg
|
||||
q 1 0 0 -1 0 0 cm
|
||||
319 -48.699 m 338.949 -48.699 l 35.852 -21.051 m 118.801 -21.051 l 120.398
|
||||
-21.25 l 121.949 -21.449 l 123.5 -21.25 l 125.102 -21.449 l 126.648 -22.699
|
||||
l 128.199 -22.301 l 129.801 -24.199 l 131.352 -25.449 l 132.898 -30 l 134.5
|
||||
-29.801 l 136.051 -35.648 l 137.602 -44.602 l 139.148 -55.648 l 140.75
|
||||
-62.949 l 142.301 -80.301 l 143.852 -94.648 l 145.449 -119.5 l 147 -133.051
|
||||
l 148.551 -151.801 l 150.148 -168.301 l 151.699 -189.148 l 153.25 -197.25
|
||||
l 154.801 -206.25 l 156.398 -215.398 l 157.949 -223.352 l 159.5 -222.699
|
||||
l 161.102 -226.449 l 162.648 -229.199 l 164.199 -229.602 l 165.801 -229.602
|
||||
l 167.352 -229.398 l 168.898 -229.602 l 345.801 -229.602 l S Q
|
||||
0 g
|
||||
BT
|
||||
7 0 0 -7 301.968992 58.035005 Tm
|
||||
/f-0-0 1 Tf
|
||||
(-105)Tj
|
||||
ET
|
||||
0.941176 0.890196 0.258824 rg
|
||||
q 1 0 0 -1 0 0 cm
|
||||
319 -55.699 m 338.949 -55.699 l 35.852 -21.051 m 157.949 -21.051 l 159.5
|
||||
-21.25 l 161.102 -21.051 l 164.199 -21.051 l 165.801 -21.25 l 167.352 -22.102
|
||||
l 168.898 -21.25 l 170.5 -22.102 l 172.051 -23.551 l 173.602 -22.949 l
|
||||
175.148 -25.199 l 176.75 -25.199 l 178.301 -27.5 l 179.852 -29.398 l 181.449
|
||||
-34.602 l 183 -39.602 l 184.551 -40.449 l 186.148 -43.551 l 187.699 -54.648
|
||||
l 189.25 -59.852 l 190.852 -74.449 l 192.398 -80.051 l 193.949 -89.25 l
|
||||
195.5 -95.898 l 197.102 -119.5 l 198.648 -132.398 l 200.199 -142.648 l
|
||||
201.801 -155.75 l 203.352 -161.398 l 204.898 -174.75 l 206.5 -192.5 l 208.051
|
||||
-199.551 l 209.602 -206.051 l 211.148 -215.398 l 212.75 -216.648 l 214.301
|
||||
-221.25 l 215.852 -223.551 l 217.449 -224.398 l 219 -227.301 l 220.551
|
||||
-227.949 l 222.148 -227.301 l 223.699 -228.949 l 225.25 -228.75 l 226.852
|
||||
-229.398 l 228.398 -229.398 l 229.949 -229.602 l 345.801 -229.602 l S Q
|
||||
0 g
|
||||
BT
|
||||
7 0 0 -7 293.218993 65.035005 Tm
|
||||
/f-0-0 1 Tf
|
||||
(-106.58)Tj
|
||||
ET
|
||||
0 0.45098 0.698039 rg
|
||||
q 1 0 0 -1 0 0 cm
|
||||
319 -62.699 m 338.949 -62.699 l 35.852 -21.051 m 170.5 -21.051 l 172.051
|
||||
-21.25 l 173.602 -21.051 l 178.301 -21.051 l 179.852 -21.449 l 181.449
|
||||
-21.25 l 183 -21.25 l 184.551 -21.051 l 186.148 -22.102 l 187.699 -21.898
|
||||
l 189.25 -23.551 l 190.852 -24.801 l 192.398 -24.602 l 193.949 -25 l 195.5
|
||||
-27.301 l 197.102 -29.602 l 198.648 -31.25 l 200.199 -32.75 l 201.801 -37.551
|
||||
l 203.352 -38.801 l 204.898 -46.301 l 206.5 -48.801 l 208.051 -60.648 l
|
||||
209.602 -65.449 l 211.148 -66.5 l 212.75 -86.352 l 214.301 -92.148 l 215.852
|
||||
-101.949 l 217.449 -117.801 l 219 -123.25 l 220.551 -133.898 l 222.148
|
||||
-147.648 l 223.699 -164.551 l 225.25 -167.25 l 226.852 -180.602 l 228.398
|
||||
-184.949 l 229.949 -193.75 l 231.5 -200.199 l 233.102 -210.852 l 234.648
|
||||
-213.949 l 236.199 -217.102 l 237.801 -220.199 l 239.352 -224.398 l 240.898
|
||||
-225.449 l 242.5 -226.051 l 244.051 -228.148 l 245.602 -228.75 l 247.148
|
||||
-229.199 l 248.75 -229.398 l 250.301 -228.949 l 251.852 -229.602 l 345.801
|
||||
-229.602 l S Q
|
||||
0 g
|
||||
BT
|
||||
7 0 0 -7 301.968992 72.035004 Tm
|
||||
/f-0-0 1 Tf
|
||||
(-110)Tj
|
||||
ET
|
||||
0.901961 0.121569 0.0588235 rg
|
||||
q 1 0 0 -1 0 0 cm
|
||||
319 -69.699 m 338.949 -69.699 l 35.852 -21.051 m 220.551 -21.051 l 222.148
|
||||
-21.25 l 225.25 -21.25 l 226.852 -21.449 l 228.398 -21.449 l 229.949 -21.898
|
||||
l 231.5 -22.102 l 233.102 -22.699 l 234.648 -21.898 l 236.199 -22.5 l 237.801
|
||||
-22.949 l 239.352 -23.75 l 240.898 -26.051 l 242.5 -25.648 l 244.051 -27.5
|
||||
l 245.602 -28.75 l 247.148 -29.801 l 248.75 -35 l 250.301 -35.648 l 251.852
|
||||
-36.898 l 253.449 -38.352 l 255 -44 l 256.551 -47.551 l 258.148 -54 l 259.699
|
||||
-58.602 l 261.25 -68.602 l 262.852 -65.25 l 264.398 -79.648 l 265.949 -85.051
|
||||
l 267.5 -89.648 l 269.102 -94.648 l 270.648 -108.449 l 272.199 -111.551
|
||||
l 273.801 -124.051 l 275.352 -135.148 l 276.898 -140.352 l 278.5 -152.25
|
||||
l 280.051 -155.551 l 281.602 -167.648 l 283.148 -174.352 l 284.75 -182.25
|
||||
l 286.301 -188.949 l 287.852 -195.398 l 289.449 -200.602 l 291 -203.949
|
||||
l 292.551 -211.852 l 294.148 -212.898 l 295.699 -215.852 l 297.25 -219.602
|
||||
l 298.852 -220 l 300.398 -222.102 l 301.949 -225.199 l 303.5 -227.102 l
|
||||
305.102 -228.148 l 306.648 -227.301 l 308.199 -228.148 l 309.801 -227.949
|
||||
l 311.352 -228.949 l 312.898 -229.602 l 314.5 -229.602 l 316.051 -229.199
|
||||
l 317.602 -229.398 l 319.199 -229.602 l 320.75 -229.398 l 322.301 -229.602
|
||||
l 345.801 -229.602 l S Q
|
||||
0 g
|
||||
0.5 w
|
||||
q 1 0 0 -1 0 0 cm
|
||||
34.301 -21.051 313.051 -208.551 re S Q
|
||||
BT
|
||||
7 0 0 -7 99.558998 12.885006 Tm
|
||||
/f-0-0 1 Tf
|
||||
(Packet \(MSDU\) size = 7 bytes; tx power = 0 dBm; channel = 11)Tj
|
||||
ET
|
||||
Q Q
|
||||
showpage
|
||||
%%Trailer
|
||||
end
|
||||
%%EOF
|
||||
@@ -14,7 +14,6 @@ IEEE standard 802.15.4 (2003,2006,2011).
|
||||
Model Description
|
||||
*****************
|
||||
|
||||
The source code for the lr-wpan module lives in the directory ``src/lr-wpan``.
|
||||
|
||||
Design
|
||||
======
|
||||
@@ -214,16 +213,33 @@ Std 802.15.4-2006, appendix E, Figure E.2. Reception of the packet will finish
|
||||
after the packet was completely transmitted. Other packets arriving during
|
||||
reception will add up to the interference/noise.
|
||||
|
||||
Currently the receiver sensitivity is set to a fixed value of -106.58 dBm. This
|
||||
corresponds to a packet error rate of 1% for 20 byte PSDU reference packets for this
|
||||
signal power, according to IEEE Std 802.15.4-2006, section 6.1.7. In the future
|
||||
we will provide support for changing the sensitivity to different values.
|
||||
Rx sensitivity is defined as the weakest possible signal point at which a receiver can receive and decode a packet with a high success rate.
|
||||
According to the standard (IEEE Std 802.15.4-2006, section 6.1.7), this
|
||||
corresponds to the point where the packet error rate is under 1% for 20 bytes PSDU
|
||||
reference packets (11 bytes MAC header + 7 bytes payload (MSDU) + FCS 2 bytes). Setting low Rx sensitivity values (increasing the radio hearing capabilities)
|
||||
have the effect to receive more packets (and at a greater distance) but it raises the probability to have dropped packets at the
|
||||
MAC layer or the probability of corrupted packets. By default, the receiver sensitivity is set to the maximum theoretical possible value of -106.58 dBm for the supported IEEE 802.15.4 O-QPSK 250kps.
|
||||
This rx sensitivity is set for the "perfect radio" which only considers the floor noise, in essence, this do not include the noise factor (noise introduced by imperfections in the demodulator chip or external factors).
|
||||
The receiver sensitivity can be changed to different values using ``SetRxSensitivity`` function in the PHY to simulate the hearing capabilities of different compliant radio transceivers (the standard minimum compliant Rx sensitivity is -85 dBm).:::
|
||||
(defined by the standard)
|
||||
NoiseFloor Max Sensitivity Min Sensitivity
|
||||
-106.987dBm -106.58dBm -85dBm
|
||||
|-------------------------|------------------------------------------|
|
||||
Noise Factor = 1
|
||||
| <--------------------------------------->|
|
||||
Acceptable sensitivity range
|
||||
|
||||
The example ``lr-wpan-per-plot.cc` shows that at given Rx sensitiviy, packets are dropped regardless of their theoretical error probability.
|
||||
This program outputs a file named ``802.15.4-per-vs-rxSignal.plt``.
|
||||
Loading this file into gnuplot yields a file ``802.15.4-per-vs-rsSignal.eps``, which can
|
||||
be converted to pdf or other formats. Packet payload size, Tx power and Rx sensitivity can be configurated.
|
||||
The point where the blue line crosses with the PER indicates the Rx sensitivity. The default output is shown below.
|
||||
|
||||
.. _fig-802-15-4-per-sens:
|
||||
|
||||
.. figure:: figures/802-15-4-per-sens.*
|
||||
|
||||
Packet error rate vs. signal power
|
||||
Default output of the program ``lr-wpan-per-plot.cc``
|
||||
|
||||
|
||||
NetDevice
|
||||
@@ -298,7 +314,7 @@ running on both, slotted and unslotted mode (CSMA/CA) of 802.15.4 operation for
|
||||
- Devices are capable of associating with a single PAN coordinator. Interference is modeled as AWGN but this is currently not thoroughly tested.
|
||||
- The standard describes the support of multiple PHY band-modulations but currently, only 250kbps O-QPSK (channel page 0) is supported.
|
||||
- Active and passive MAC scans are able to obtain a LQI value from a beacon frame, however, the scan primitives assumes LQI is correctly implemented and does not check the validity of its value.
|
||||
- Configuration of Rx Sensitivity and ED thresholds are currently not supported.
|
||||
- Configuration of the ED thresholds are currently not supported.
|
||||
- Orphan scans are not supported.
|
||||
- Disassociation primitives are not supported.
|
||||
- Security is not supported.
|
||||
@@ -338,6 +354,7 @@ The following examples have been written, which can be found in ``src/lr-wpan/ex
|
||||
|
||||
* ``lr-wpan-data.cc``: A simple example showing end-to-end data transfer.
|
||||
* ``lr-wpan-error-distance-plot.cc``: An example to plot variations of the packet success ratio as a function of distance.
|
||||
* ``lr-wpan-per-plot.cc``: An example to plot the theoretical and experimental packet error rate (PER) as a function of receive signal.
|
||||
* ``lr-wpan-error-model-plot.cc``: An example to test the phy.
|
||||
* ``lr-wpan-packet-print.cc``: An example to print out the MAC header fields.
|
||||
* ``lr-wpan-phy-test.cc``: An example to test the phy.
|
||||
@@ -364,11 +381,14 @@ in a DataIndication on the peer node.
|
||||
The example ``lr-wpan-error-distance-plot.cc`` plots the packet success
|
||||
ratio (PSR) as a function of distance, using the default LogDistance
|
||||
propagation loss model and the 802.15.4 error model. The channel (default 11),
|
||||
packet size (default 20 bytes) and transmit power (default 0 dBm) can be
|
||||
varied by command line arguments. The program outputs a file named
|
||||
``802.15.4-psr-distance.plt``. Loading this file into gnuplot yields
|
||||
a file ``802.15.4-psr-distance.eps``, which can be converted to pdf or
|
||||
other formats. The default output is shown below.
|
||||
packet size (default PSDU 20 bytes = 11 bytes MAC header + data payload), transmit power (default 0 dBm)
|
||||
and Rx sensitivity (default -106.58 dBm) can be varied by command line arguments.
|
||||
The program outputs a file named ``802.15.4-psr-distance.plt``.
|
||||
Loading this file into gnuplot yields a file ``802.15.4-psr-distance.eps``, which can
|
||||
be converted to pdf or other formats. The following image shows the output
|
||||
of multiple runs using different Rx sensitivity values. A higher Rx sensitivity (lower dBm) results
|
||||
in a increased communication distance but also makes the radio suceptible to more interference from
|
||||
surronding devices.
|
||||
|
||||
.. _fig-802-15-4-psr-distance:
|
||||
|
||||
|
||||
@@ -38,3 +38,10 @@ build_lib_example(
|
||||
LIBRARIES_TO_LINK ${liblr-wpan}
|
||||
${libnetanim}
|
||||
)
|
||||
|
||||
build_lib_example(
|
||||
NAME lr-wpan-per-plot
|
||||
SOURCE_FILES lr-wpan-per-plot.cc
|
||||
LIBRARIES_TO_LINK ${liblr-wpan}
|
||||
${libstats}
|
||||
)
|
||||
|
||||
@@ -17,11 +17,25 @@
|
||||
* Author: Tom Henderson <thomas.r.henderson@boeing.com>
|
||||
*/
|
||||
|
||||
// This program produces a gnuplot file that plots the packet success rate
|
||||
// as a function of distance for the 802.15.4 models, assuming a default
|
||||
// LogDistance propagation loss model, the 2.4 GHz OQPSK error model, a
|
||||
// default transmit power of 0 dBm, and a default packet size of 20 bytes of
|
||||
// 802.15.4 payload.
|
||||
/*
|
||||
This program produces a gnuplot file that plots the packet success rate
|
||||
as a function of distance for the 802.15.4 models, assuming a default
|
||||
LogDistance propagation loss model, the 2.4 GHz OQPSK error model, a
|
||||
default transmit power of 0 dBm, and a default packet size of 20 bytes of
|
||||
802.15.4 payload and a default rx sensitivity of -106.58 dBm.
|
||||
|
||||
Tx power of the transmitter node and the Rx sensitivity of the receiving node
|
||||
as well as the transmitted packet size can be adjusted to obtain a different
|
||||
distance plot.
|
||||
|
||||
Node1 Node2
|
||||
(dev0) --------------------->(dev1)
|
||||
|
||||
Usage:
|
||||
|
||||
./ns3 run "lr-wpan-error-distance-plot --txPower= 0 --rxSensitivity=-92"
|
||||
|
||||
*/
|
||||
#include <ns3/abort.h>
|
||||
#include <ns3/callback.h>
|
||||
#include <ns3/command-line.h>
|
||||
@@ -52,7 +66,7 @@
|
||||
|
||||
using namespace ns3;
|
||||
|
||||
static uint32_t g_received = 0; //!< number of packets received
|
||||
uint32_t g_packetsReceived = 0; //!< number of packets received
|
||||
|
||||
NS_LOG_COMPONENT_DEFINE("LrWpanErrorDistancePlot");
|
||||
|
||||
@@ -61,10 +75,10 @@ NS_LOG_COMPONENT_DEFINE("LrWpanErrorDistancePlot");
|
||||
* \param params MCPS data indication parameters
|
||||
* \param p packet
|
||||
*/
|
||||
static void
|
||||
void
|
||||
LrWpanErrorDistanceCallback(McpsDataIndicationParams params, Ptr<Packet> p)
|
||||
{
|
||||
g_received++;
|
||||
g_packetsReceived++;
|
||||
}
|
||||
|
||||
int
|
||||
@@ -77,20 +91,22 @@ main(int argc, char* argv[])
|
||||
int maxDistance = 200; // meters
|
||||
int increment = 1;
|
||||
int maxPackets = 1000;
|
||||
int packetSize = 20;
|
||||
int packetSize = 7; // PSDU = 20 bytes (11 bytes MAC header + 7 bytes MSDU )
|
||||
double txPower = 0;
|
||||
uint32_t channelNumber = 11;
|
||||
double rxSensitivity = -106.58; // dBm
|
||||
|
||||
CommandLine cmd(__FILE__);
|
||||
|
||||
cmd.AddValue("txPower", "transmit power (dBm)", txPower);
|
||||
cmd.AddValue("packetSize", "packet (MSDU) size (bytes)", packetSize);
|
||||
cmd.AddValue("channelNumber", "channel number", channelNumber);
|
||||
cmd.AddValue("rxSensitivity", "the rx sensitivity (dBm)", rxSensitivity);
|
||||
|
||||
cmd.Parse(argc, argv);
|
||||
|
||||
os << "Packet (MSDU) size = " << packetSize << " bytes; tx power = " << txPower
|
||||
<< " dBm; channel = " << channelNumber;
|
||||
<< " dBm; channel = " << channelNumber << "; Rx sensitivity = " << rxSensitivity << " dBm";
|
||||
|
||||
Gnuplot psrplot = Gnuplot("802.15.4-psr-distance.eps");
|
||||
Gnuplot2dDataset psrdataset("802.15.4-psr-vs-distance");
|
||||
@@ -117,6 +133,9 @@ main(int argc, char* argv[])
|
||||
Ptr<SpectrumValue> psd = svh.CreateTxPowerSpectralDensity(txPower, channelNumber);
|
||||
dev0->GetPhy()->SetTxPowerSpectralDensity(psd);
|
||||
|
||||
// Set Rx sensitivity of the receiving device
|
||||
dev1->GetPhy()->SetRxSensitivity(rxSensitivity);
|
||||
|
||||
McpsDataIndicationCallback cb0;
|
||||
cb0 = MakeCallback(&LrWpanErrorDistanceCallback);
|
||||
dev1->GetMac()->SetMcpsDataIndicationCallback(cb0);
|
||||
@@ -132,7 +151,7 @@ main(int argc, char* argv[])
|
||||
Ptr<Packet> p;
|
||||
mob0->SetPosition(Vector(0, 0, 0));
|
||||
mob1->SetPosition(Vector(minDistance, 0, 0));
|
||||
for (int j = minDistance; j < maxDistance;)
|
||||
for (int j = minDistance; j < maxDistance; j += increment)
|
||||
{
|
||||
for (int i = 0; i < maxPackets; i++)
|
||||
{
|
||||
@@ -140,10 +159,10 @@ main(int argc, char* argv[])
|
||||
Simulator::Schedule(Seconds(i), &LrWpanMac::McpsDataRequest, dev0->GetMac(), params, p);
|
||||
}
|
||||
Simulator::Run();
|
||||
NS_LOG_DEBUG("Received " << g_received << " packets for distance " << j);
|
||||
psrdataset.Add(j, g_received / 1000.0);
|
||||
g_received = 0;
|
||||
j += increment;
|
||||
NS_LOG_DEBUG("Received " << g_packetsReceived << " packets for distance " << j);
|
||||
psrdataset.Add(j, g_packetsReceived / 1000.0);
|
||||
g_packetsReceived = 0;
|
||||
|
||||
mob1->SetPosition(Vector(j, 0, 0));
|
||||
}
|
||||
|
||||
@@ -153,10 +172,10 @@ main(int argc, char* argv[])
|
||||
psrplot.SetTerminal("postscript eps color enh \"Times-BoldItalic\"");
|
||||
psrplot.SetLegend("distance (m)", "Packet Success Rate (PSR)");
|
||||
psrplot.SetExtra("set xrange [0:200]\n\
|
||||
set yrange [0:1]\n\
|
||||
set grid\n\
|
||||
set style line 1 linewidth 5\n\
|
||||
set style increment user");
|
||||
set yrange [0:1]\n\
|
||||
set grid\n\
|
||||
set style line 1 linewidth 5\n\
|
||||
set style increment user");
|
||||
psrplot.GenerateOutput(berfile);
|
||||
berfile.close();
|
||||
|
||||
|
||||
251
src/lr-wpan/examples/lr-wpan-per-plot.cc
Normal file
251
src/lr-wpan/examples/lr-wpan-per-plot.cc
Normal file
@@ -0,0 +1,251 @@
|
||||
/*
|
||||
* Copyright (c) 2022 Tokushima University, Japan
|
||||
*
|
||||
* This program is free software; you can redistribute it and/or modify
|
||||
* it under the terms of the GNU General Public License version 2 as
|
||||
* published by the Free Software Foundation;
|
||||
*
|
||||
* This program is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
|
||||
* GNU General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU General Public License
|
||||
* along with this program; if not, write to the Free Software
|
||||
* Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
|
||||
*
|
||||
* Authors: Alberto Gallegos Ramonet <alramonet@is.tokushima-u.ac.jp>
|
||||
* Tommaso Pecorella <tommaso.pecorella@unifi.it>
|
||||
*/
|
||||
|
||||
/*
|
||||
This program produces a gnuplot file that plots the theoretical and experimental packet error
|
||||
rate (PER) as a function of receive signal for the 802.15.4 model. As described by the standard,
|
||||
the PER is calculated with the transmission of frames with a PSDU of 20 bytes. This is equivalent
|
||||
to an MPDU = MAC header (11 bytes) + FCS (2 bytes) + payload (MSDU 7 bytes). In the experimental
|
||||
test, 1000 frames are transmitted for each Rx signal ranging from -130 dBm to -100 dBm with
|
||||
increments of 0.01 dBm. The point before PER is < 1 % is the device receive sensitivity.
|
||||
Theoretical and experimental Rx sensitivity is printed at the end of the end and a plot is
|
||||
generated.
|
||||
|
||||
Example usage:
|
||||
|
||||
./ns3 run "lr-wpan-per-plot --rxSensitivity=-92"
|
||||
|
||||
*/
|
||||
|
||||
#include <ns3/core-module.h>
|
||||
#include <ns3/gnuplot.h>
|
||||
#include <ns3/lr-wpan-module.h>
|
||||
#include <ns3/mobility-module.h>
|
||||
#include <ns3/network-module.h>
|
||||
#include <ns3/propagation-module.h>
|
||||
#include <ns3/spectrum-module.h>
|
||||
|
||||
using namespace ns3;
|
||||
|
||||
uint32_t g_packetsReceived = 0; //!< number of packets received
|
||||
|
||||
NS_LOG_COMPONENT_DEFINE("LrWpanErrorDistancePlot");
|
||||
|
||||
/**
|
||||
* Function called when a Data indication is invoked
|
||||
* \param params MCPS data indication parameters
|
||||
* \param p packet
|
||||
*/
|
||||
void
|
||||
PacketReceivedCallback(McpsDataIndicationParams params, Ptr<Packet> p)
|
||||
{
|
||||
g_packetsReceived++;
|
||||
}
|
||||
|
||||
int
|
||||
main(int argc, char* argv[])
|
||||
{
|
||||
LogComponentEnableAll(LogLevel(LOG_PREFIX_FUNC | LOG_PREFIX_NODE | LOG_PREFIX_TIME));
|
||||
|
||||
std::ostringstream os;
|
||||
std::ofstream perfile("802.15.4-per-vs-rxSignal.plt");
|
||||
|
||||
double minRxSignal = -111; // dBm
|
||||
double maxRxSignal = -82; // dBm
|
||||
double increment = 0.01;
|
||||
int maxPackets = 1000;
|
||||
int packetSize = 7; // bytes (MPDU payload)
|
||||
double txPower = 0; // dBm
|
||||
uint32_t channelNumber = 11;
|
||||
double rxSensitivity = -106.58; // dBm
|
||||
|
||||
CommandLine cmd(__FILE__);
|
||||
|
||||
cmd.AddValue("txPower", "transmit power (dBm)", txPower);
|
||||
cmd.AddValue("packetSize", "packet (MSDU) size (bytes)", packetSize);
|
||||
cmd.AddValue("channelNumber", "channel number", channelNumber);
|
||||
cmd.AddValue("rxSensitivity", "the rx sensitivity (dBm)", rxSensitivity);
|
||||
cmd.Parse(argc, argv);
|
||||
|
||||
Gnuplot perplot = Gnuplot("802.15.4-per-vs-rxSignal.eps");
|
||||
Gnuplot2dDataset perdatasetExperimental("Experimental");
|
||||
Gnuplot2dDataset perdatasetTheorical("Theoretical");
|
||||
|
||||
Ptr<Node> n0 = CreateObject<Node>();
|
||||
Ptr<Node> n1 = CreateObject<Node>();
|
||||
Ptr<LrWpanNetDevice> dev0 = CreateObject<LrWpanNetDevice>();
|
||||
Ptr<LrWpanNetDevice> dev1 = CreateObject<LrWpanNetDevice>();
|
||||
|
||||
dev0->SetAddress(Mac16Address("00:01"));
|
||||
dev1->SetAddress(Mac16Address("00:02"));
|
||||
Ptr<SingleModelSpectrumChannel> channel = CreateObject<SingleModelSpectrumChannel>();
|
||||
Ptr<FixedRssLossModel> propModel = CreateObject<FixedRssLossModel>();
|
||||
|
||||
channel->AddPropagationLossModel(propModel);
|
||||
dev0->SetChannel(channel);
|
||||
dev1->SetChannel(channel);
|
||||
n0->AddDevice(dev0);
|
||||
n1->AddDevice(dev1);
|
||||
Ptr<ConstantPositionMobilityModel> mob0 = CreateObject<ConstantPositionMobilityModel>();
|
||||
dev0->GetPhy()->SetMobility(mob0);
|
||||
Ptr<ConstantPositionMobilityModel> mob1 = CreateObject<ConstantPositionMobilityModel>();
|
||||
dev1->GetPhy()->SetMobility(mob1);
|
||||
mob0->SetPosition(Vector(0, 0, 0));
|
||||
mob1->SetPosition(Vector(0, 0, 0));
|
||||
|
||||
LrWpanSpectrumValueHelper svh;
|
||||
Ptr<SpectrumValue> psd = svh.CreateTxPowerSpectralDensity(txPower, channelNumber);
|
||||
dev0->GetPhy()->SetTxPowerSpectralDensity(psd);
|
||||
|
||||
// Set Rx sensitivity of the receiving device
|
||||
dev1->GetPhy()->SetRxSensitivity(rxSensitivity);
|
||||
|
||||
McpsDataIndicationCallback cb0;
|
||||
cb0 = MakeCallback(&PacketReceivedCallback);
|
||||
dev1->GetMac()->SetMcpsDataIndicationCallback(cb0);
|
||||
|
||||
//////////////////////////////////
|
||||
// Experimental PER v.s Signal //
|
||||
//////////////////////////////////
|
||||
|
||||
double per = 1;
|
||||
double sensitivityExp = 0;
|
||||
bool sensThreshold = true;
|
||||
|
||||
for (double j = minRxSignal; j < maxRxSignal; j += increment)
|
||||
{
|
||||
propModel->SetRss(j);
|
||||
if (sensThreshold)
|
||||
{
|
||||
sensitivityExp = j;
|
||||
}
|
||||
|
||||
for (int i = 0; i < maxPackets; i++)
|
||||
{
|
||||
McpsDataRequestParams params;
|
||||
params.m_srcAddrMode = SHORT_ADDR;
|
||||
params.m_dstAddrMode = SHORT_ADDR;
|
||||
params.m_dstPanId = 0;
|
||||
params.m_dstAddr = Mac16Address("00:02");
|
||||
params.m_msduHandle = 0;
|
||||
params.m_txOptions = 0;
|
||||
Ptr<Packet> p;
|
||||
p = Create<Packet>(packetSize);
|
||||
Simulator::Schedule(Seconds(i), &LrWpanMac::McpsDataRequest, dev0->GetMac(), params, p);
|
||||
}
|
||||
|
||||
Simulator::Run();
|
||||
|
||||
per = (static_cast<double>(maxPackets - g_packetsReceived) / maxPackets) * 100;
|
||||
|
||||
std::cout << "Experimental Test || Signal: " << j << " dBm | Received " << g_packetsReceived
|
||||
<< " pkts"
|
||||
<< "/" << maxPackets << " | PER " << per << " %\n";
|
||||
|
||||
if (per <= 1 && sensThreshold)
|
||||
{
|
||||
sensThreshold = false;
|
||||
}
|
||||
|
||||
perdatasetExperimental.Add(j, per);
|
||||
g_packetsReceived = 0;
|
||||
}
|
||||
|
||||
/////////////////////////////////
|
||||
// Theoretical PER v.s. Signal //
|
||||
/////////////////////////////////
|
||||
|
||||
Ptr<LrWpanErrorModel> lrWpanError = CreateObject<LrWpanErrorModel>();
|
||||
LrWpanSpectrumValueHelper psdHelper;
|
||||
|
||||
// Calculate the noise that accounts for both thermal noise (floor noise) and
|
||||
// imperfections on the chip or lost before reaching the demodulator.
|
||||
// In O-QPSK 250kbps, the point where PER is <= 1% without
|
||||
// additional noise is -106.58 dBm (Noise Factor = 1)
|
||||
double maxRxSensitivityW = (pow(10.0, -106.58 / 10.0) / 1000.0);
|
||||
long double noiseFactor = (pow(10.0, rxSensitivity / 10.0) / 1000.0) / maxRxSensitivityW;
|
||||
|
||||
psdHelper.SetNoiseFactor(noiseFactor);
|
||||
Ptr<const SpectrumValue> noisePsd = psdHelper.CreateNoisePowerSpectralDensity(11);
|
||||
double noise = LrWpanSpectrumValueHelper::TotalAvgPower(noisePsd, 11);
|
||||
|
||||
double signal = 0;
|
||||
double sensitivityTheo = 0;
|
||||
double perTheoretical = 0;
|
||||
double snr = 0;
|
||||
sensThreshold = true;
|
||||
|
||||
for (double j = minRxSignal; j < maxRxSignal; j += increment)
|
||||
{
|
||||
if (sensThreshold)
|
||||
{
|
||||
sensitivityTheo = j;
|
||||
}
|
||||
|
||||
signal = pow(10.0, j / 10.0) / 1000.0; // signal in Watts
|
||||
snr = signal / noise;
|
||||
|
||||
// According to the standard, Packet error rate should be obtained
|
||||
// using a PSDU of 20 bytes using
|
||||
// the equation PER = 1 - (1 - BER)^nbits
|
||||
perTheoretical = (1.0 - lrWpanError->GetChunkSuccessRate(snr, (packetSize + 13) * 8)) * 100;
|
||||
std::cout << "Theoretical Test || Signal: " << j << " dBm | SNR: " << snr << "| PER "
|
||||
<< perTheoretical << " % \n";
|
||||
|
||||
if (perTheoretical <= 1 && sensThreshold)
|
||||
{
|
||||
sensThreshold = false;
|
||||
}
|
||||
|
||||
perdatasetTheorical.Add(j, perTheoretical);
|
||||
}
|
||||
|
||||
std::cout << "_____________________________________________________________________________\n";
|
||||
std::cout << "Experimental Test || Receiving with a current sensitivity of " << sensitivityExp
|
||||
<< " dBm\n";
|
||||
std::cout << "Theoretical Test || Receiving with a current sensitivity of " << sensitivityTheo
|
||||
<< " dBm\n";
|
||||
std::cout << "Gnu plot generated.";
|
||||
|
||||
os << "Pkt Payload (MSDU) size = " << packetSize << " bytes | "
|
||||
<< "Tx power = " << txPower << " dBm | "
|
||||
<< "Rx Sensitivity (Theo) = " << sensitivityTheo << " dBm";
|
||||
|
||||
perplot.AddDataset(perdatasetExperimental);
|
||||
perplot.AddDataset(perdatasetTheorical);
|
||||
|
||||
perplot.SetTitle(os.str());
|
||||
perplot.SetTerminal("postscript eps color enh \"Times-BoldItalic\"");
|
||||
perplot.SetLegend("Rx signal (dBm)", "Packet Error Rate (%)");
|
||||
perplot.SetExtra("set xrange [-110:-82]\n\
|
||||
set logscale y\n\
|
||||
set yrange [0.000000000001:120]\n\
|
||||
set xtics 2\n\
|
||||
set grid\n\
|
||||
set style line 1 linewidth 5\n\
|
||||
set style line 2 linewidth 3\n\
|
||||
set style increment user\n\
|
||||
set arrow from -110,1 to -82,1 nohead lc 'web-blue' front");
|
||||
perplot.GenerateOutput(perfile);
|
||||
perfile.close();
|
||||
|
||||
Simulator::Destroy();
|
||||
return 0;
|
||||
}
|
||||
@@ -1166,14 +1166,10 @@ LrWpanPhy::PlmeSetAttributeRequest(LrWpanPibAttributeIdentifier id,
|
||||
|
||||
m_phyPIBAttributes.phyCurrentPage = attribute->phyCurrentPage;
|
||||
|
||||
LrWpanSpectrumValueHelper psdHelper;
|
||||
m_txPsd = psdHelper.CreateTxPowerSpectralDensity(
|
||||
GetNominalTxPowerFromPib(m_phyPIBAttributes.phyTransmitPower),
|
||||
m_phyPIBAttributes.phyCurrentChannel);
|
||||
// if the page is changed we need to also update the Noise Power Spectral Density
|
||||
m_noise =
|
||||
psdHelper.CreateNoisePowerSpectralDensity(m_phyPIBAttributes.phyCurrentChannel);
|
||||
m_signal = Create<LrWpanInterferenceHelper>(m_noise->GetSpectrumModel());
|
||||
// TODO: Set the maximum possible sensitivity by default.
|
||||
// This maximum sensitivity depends on the modulation used.
|
||||
// Currently Only O-QPSK 250kbps is supported so we use its max sensitivity.
|
||||
SetRxSensitivity(-106.58);
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1216,14 +1212,8 @@ LrWpanPhy::PlmeSetAttributeRequest(LrWpanPibAttributeIdentifier id,
|
||||
|
||||
m_phyPIBAttributes.phyCurrentChannel = attribute->phyCurrentChannel;
|
||||
|
||||
LrWpanSpectrumValueHelper psdHelper;
|
||||
m_txPsd = psdHelper.CreateTxPowerSpectralDensity(
|
||||
GetNominalTxPowerFromPib(m_phyPIBAttributes.phyTransmitPower),
|
||||
m_phyPIBAttributes.phyCurrentChannel);
|
||||
// if the channel is changed we need to also update the Noise Power Spectral Density
|
||||
m_noise =
|
||||
psdHelper.CreateNoisePowerSpectralDensity(m_phyPIBAttributes.phyCurrentChannel);
|
||||
m_signal = Create<LrWpanInterferenceHelper>(m_noise->GetSpectrumModel());
|
||||
// use the prev configured sensitivity before changing the channel
|
||||
SetRxSensitivity(WToDbm(m_rxSensitivity));
|
||||
}
|
||||
break;
|
||||
}
|
||||
@@ -1695,15 +1685,11 @@ LrWpanPhy::SetPhyOption(LrWpanPhyOption phyOption)
|
||||
m_edPower.lastUpdate = Seconds(0.0);
|
||||
m_edPower.measurementLength = Seconds(0.0);
|
||||
|
||||
// TODO: What is the RX sensibility that should be set for other frequencies?
|
||||
// default -110 dBm in W for 2.4 GHz
|
||||
m_rxSensitivity = pow(10.0, -106.58 / 10.0) / 1000.0;
|
||||
LrWpanSpectrumValueHelper psdHelper;
|
||||
m_txPsd = psdHelper.CreateTxPowerSpectralDensity(
|
||||
GetNominalTxPowerFromPib(m_phyPIBAttributes.phyTransmitPower),
|
||||
m_phyPIBAttributes.phyCurrentChannel);
|
||||
m_noise = psdHelper.CreateNoisePowerSpectralDensity(m_phyPIBAttributes.phyCurrentChannel);
|
||||
m_signal = Create<LrWpanInterferenceHelper>(m_noise->GetSpectrumModel());
|
||||
// TODO: Change the limits Rx sensitivity when other modulations are supported
|
||||
// Currently, only O-QPSK 250kbps is supported and its maximum possible sensitivity is
|
||||
// equal to -106.58 dBm and its minimum sensitivity is defined as -85 dBm
|
||||
SetRxSensitivity(-106.58);
|
||||
|
||||
m_rxLastUpdate = Seconds(0);
|
||||
Ptr<Packet> none_packet = nullptr;
|
||||
Ptr<LrWpanSpectrumSignalParameters> none_params = nullptr;
|
||||
@@ -1712,6 +1698,61 @@ LrWpanPhy::SetPhyOption(LrWpanPhyOption phyOption)
|
||||
m_errorModel = nullptr;
|
||||
}
|
||||
|
||||
void
|
||||
LrWpanPhy::SetRxSensitivity(double dbmSensitivity)
|
||||
{
|
||||
NS_LOG_FUNCTION(this << dbmSensitivity << "dBm");
|
||||
|
||||
// See IEEE 802.15.4-2011 Sections 10.3.4, 11.3.4, 13.3.4, 13.3.4, 14.3.4, 15.3.4
|
||||
if (m_phyOption == IEEE_802_15_4_915MHZ_BPSK || m_phyOption == IEEE_802_15_4_950MHZ_BPSK)
|
||||
{
|
||||
if (dbmSensitivity > -92)
|
||||
{
|
||||
NS_ABORT_MSG("The minimum Rx sensitivity for this band should be at least -92 dBm");
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
if (dbmSensitivity > -85)
|
||||
{
|
||||
NS_ABORT_MSG("The minimum Rx sensitivity for this band should be at least -85 dBm");
|
||||
}
|
||||
}
|
||||
|
||||
// Calculate the noise factor required to reduce the Rx sensitivity.
|
||||
// The maximum possible sensitivity in the current modulation is used as a reference
|
||||
// to calculate the noise factor (F). The noise factor is a dimensionless ratio.
|
||||
// Currently only one PHY modulation is supported:
|
||||
// O-QPSK 250kpps which has a Max Rx sensitivity: -106.58 dBm (Noise factor = 1).
|
||||
// After Rx sensitivity is set, this becomes the new point where PER < 1 % for a
|
||||
// PSDU of 20 bytes as described by the standard.
|
||||
|
||||
// TODO: recalculate maxRxSensitivity (Noise factor = 1) when additional modulations are
|
||||
// supported.
|
||||
double maxRxSensitivityW = DbmToW(-106.58);
|
||||
|
||||
LrWpanSpectrumValueHelper psdHelper;
|
||||
m_txPsd = psdHelper.CreateTxPowerSpectralDensity(
|
||||
GetNominalTxPowerFromPib(m_phyPIBAttributes.phyTransmitPower),
|
||||
m_phyPIBAttributes.phyCurrentChannel);
|
||||
// Update thermal noise + noise factor added.
|
||||
long double noiseFactor = DbmToW(dbmSensitivity) / maxRxSensitivityW;
|
||||
psdHelper.SetNoiseFactor(noiseFactor);
|
||||
m_noise = psdHelper.CreateNoisePowerSpectralDensity(m_phyPIBAttributes.phyCurrentChannel);
|
||||
|
||||
m_signal = Create<LrWpanInterferenceHelper>(m_noise->GetSpectrumModel());
|
||||
// Change receiver sensitivity from dBm to Watts
|
||||
m_rxSensitivity = DbmToW(dbmSensitivity);
|
||||
}
|
||||
|
||||
double
|
||||
LrWpanPhy::GetRxSensitivity()
|
||||
{
|
||||
NS_LOG_FUNCTION(this);
|
||||
// Change receiver sensitivity from Watt to dBm
|
||||
return WToDbm(m_rxSensitivity);
|
||||
}
|
||||
|
||||
LrWpanPhyOption
|
||||
LrWpanPhy::GetMyPhyOption()
|
||||
{
|
||||
|
||||
@@ -316,6 +316,26 @@ class LrWpanPhy : public SpectrumPhy
|
||||
*/
|
||||
void SetPhyOption(LrWpanPhyOption phyOption);
|
||||
|
||||
/**
|
||||
* Set the receiver power sensitivity used by this device in dBm.
|
||||
*
|
||||
* In ns-3 , rx sensitivity is only checked to be at least what is specified by
|
||||
* the standard (-85dBm or -92dBm for BPSK bands). Most vendors provide better sensitivity
|
||||
* options and exceed the minimum values proposed by the standard. Default sensitivity
|
||||
* is -106.58 dBm (This does not include any noise figure).
|
||||
* A sensitivity of -95dBm or less is considered by many vendors a high sensitivity.
|
||||
*
|
||||
* \param dbmSensitivity The receiver power sensitivity to set in dBm.
|
||||
*/
|
||||
void SetRxSensitivity(double dbmSensitivity);
|
||||
|
||||
/**
|
||||
* Get the receiver power sensitivity used by this device in dBm.
|
||||
*
|
||||
* \return The receiver power sensitivity used by this device in dBm.
|
||||
*/
|
||||
double GetRxSensitivity();
|
||||
|
||||
/**
|
||||
* Notify the SpectrumPhy instance of an incoming waveform.
|
||||
*
|
||||
@@ -723,10 +743,10 @@ class LrWpanPhy : public SpectrumPhy
|
||||
int8_t GetNominalTxPowerFromPib(uint8_t phyTransmitPower);
|
||||
|
||||
/**
|
||||
* Transform watts (W) to decibels milliwatts (DBm).
|
||||
* Transform watts (W) to decibels milliwatts (dBm).
|
||||
*
|
||||
* \param watt The Watts that will be converted to DBm.
|
||||
* \return The value of Watts in DBm.
|
||||
* \param watt The Watts that will be converted to dBm.
|
||||
* \return The value of Watts in dBm.
|
||||
*/
|
||||
double WToDbm(double watt);
|
||||
|
||||
|
||||
@@ -126,6 +126,12 @@ LrWpanSpectrumValueHelper::CreateNoisePowerSpectralDensity(uint32_t channel)
|
||||
return noisePsd;
|
||||
}
|
||||
|
||||
void
|
||||
LrWpanSpectrumValueHelper::SetNoiseFactor(double f)
|
||||
{
|
||||
m_noiseFactor = f;
|
||||
}
|
||||
|
||||
double
|
||||
LrWpanSpectrumValueHelper::TotalAvgPower(Ptr<const SpectrumValue> psd, uint32_t channel)
|
||||
{
|
||||
|
||||
@@ -52,6 +52,12 @@ class LrWpanSpectrumValueHelper
|
||||
*/
|
||||
Ptr<SpectrumValue> CreateNoisePowerSpectralDensity(uint32_t channel);
|
||||
|
||||
/**
|
||||
* Set the noise factor added to the thermal noise.
|
||||
* \param f A dimensionless ratio (i.e. Not in dB)
|
||||
*/
|
||||
void SetNoiseFactor(double f);
|
||||
|
||||
/**
|
||||
* \brief total average power of the signal is the integral of the PSD using
|
||||
* the limits of the given channel
|
||||
@@ -64,6 +70,8 @@ class LrWpanSpectrumValueHelper
|
||||
private:
|
||||
/**
|
||||
* A scaling factor for the noise power.
|
||||
* It specifies how much additional noise the device
|
||||
* contribute to the thermal noise (floor noise).
|
||||
*/
|
||||
double m_noiseFactor;
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user