lr-wpan: Add rx Sensitivity configuration support

This commit is contained in:
Alberto Gallegos Ramonet
2022-10-27 12:58:47 +09:00
committed by Alberto Gallegos
parent 78b939e79f
commit 5d0948a7c7
13 changed files with 2453 additions and 3480 deletions

View File

@@ -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

View File

@@ -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

View File

@@ -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

View 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

View File

@@ -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:

View File

@@ -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}
)

View File

@@ -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();

View 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;
}

View File

@@ -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()
{

View File

@@ -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);

View File

@@ -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)
{

View File

@@ -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;
};