I use the ubuntu and do not install the chinse input.

The Code: c file requires gnu gsl library, it can be installed easily because many tutorial.

Although the code style is poor, it can be clear for you to read and can be copy to your edit tool.

gcc -Wall -I/usr/local/include -c 80211b.c

gcc -Wall -L/usr/local/lib 80211b.o lgsl 0lgslcblas -lm -o 80211b
./80211b >80211b.txt

  1. // Copyright 2009, The Boeing Company
  2.  
  3. #include "math.h"
  4. #include "stdlib.h"
  5. #include "stdio.h"
  6.  
  7. #include <gsl/gsl_math.h>
  8. #include <gsl/gsl_integration.h>
  9. #include <gsl/gsl_cdf.h>
  10. #include <gsl/gsl_sf_bessel.h>
  11.  
  12. #define min(a,b) ((a)<(b) ? (a) : (b))
  13. #define max(a,b) ((a)>(b) ? (a) : (b))
  14. //page 67 802.15 that pdf kanghl
  15. #define WLAN_SIR_perfect 10.0 // if SIR > 10dB, perfect reception
  16. #define WLAN_SIR_impossible 0.1 // if SIR < -10dB, impossible to receive
  17.  
  18. typedef struct fn_parameter_t
  19. {
  20. double beta;
  21. double n;
  22. }fn_parameters;
  23.  
  24. double QFunction (double x)
  25. {
  26. return 0.5 * erfc(x/sqrt(2.0));
  27. }
  28. //not understand
  29. double f(double x, void *params)
  30. {
  31. double beta = ((fn_parameters *) params)->beta;
  32. double n = ((fn_parameters *) params)->n;
  33. double f = pow( *gsl_cdf_ugaussian_P (x+ beta) - , n-)
  34. * exp (-x*x/2.0) / sqrt (2.0 * M_PI);
  35.  
  36. return f;
  37. }
  38.  
  39. double p_e2(double e2)
  40. {
  41. double sep;
  42. double error;
  43.  
  44. fn_parameters params;
  45. params.beta = sqrt (2.0*e2);
  46. params.n = 8.0;
  47.  
  48. gsl_integration_workspace * w = gsl_integration_workspace_alloc ();
  49.  
  50. gsl_function F;
  51. F.function = &f;
  52. F.params = &params;
  53.  
  54. gsl_integration_qagiu(&F,-params.beta,
  55. , 1e-, , w, &sep, &error);
  56. gsl_integration_workspace_free (w);
  57. if (error == 0.0) sep = 1.0;
  58.  
  59. return 1.0 - sep;
  60. }
  61.  
  62. double p_e1(double e1)
  63. {
  64. return 1.0 - pow( 1.0 - p_e2 (e1/2.0), 2.0);
  65. }
  66.  
  67. double DbToNoneDb (double x)
  68. {
  69. return pow(10.0, x/10.0);
  70. }
  71.  
  72. double NoneDbToDb (double x)
  73. {
  74. return 10.0 * log10 (x) ;
  75. }
  76.  
  77. double DQPSKFunction (double x)
  78. {
  79. double pi = acos (-1.0);
  80. return ( (sqrt(2.0) + 1.0) / sqrt(8.0*pi*sqrt(2.0)))
  81. *(1.0/sqrt(x))
  82. *exp( - (2.0 - sqrt(2.0)) * x) ;
  83. }
  84. //P1MBPS-SYMBOL BER=SER
  85. double Get80211bDsssDbpskBerIeee(double EcNc)
  86. {
  87. double ber;
  88. if(EcNc > WLAN_SIR_perfect) ber = ;
  89. else if(EcNc < WLAN_SIR_impossible) ber = 0.5;
  90. else
  91. ber = min(QFunction(sqrt(11.0*EcNc)),0.5);
  92. return ber;
  93. }
  94.  
  95. double Get80211bDsssDbpskBer(double sinr)
  96. {
  97. double EbN0 = sinr * 22000000.0 / 1000000.0;
  98. double ber = 0.5 * exp(-EbN0);
  99. return ber;
  100. }
  101.  
  102. double Get80211bDsssDqpskBerIeee(double EcNc)
  103. {
  104. double ber;
  105. if (EcNc > WLAN_SIR_perfect) ber = ;
  106. else if(EcNc < WLAN_SIR_impossible) ber = 0.5;
  107. else
  108. ber = min(QFunction(sqrt(5.5*EcNc)),0.5);
  109. return ber;
  110. }
  111.  
  112. double Get80211bDsssDqpskBer(double sinr)
  113. {
  114. // 2 bits per symbol, 1 MSPS
  115. double EbN0 = sinr * 22000000.0 / 1000000.0 / 2.0;
  116. double ber = DQPSKFunction(EbN0);
  117. return ber;
  118. }
  119.  
  120. double Get80211bDsssDqpskCCK5_5BerIeee(double EcNc)
  121. {
  122. double ber;
  123. if(EcNc > WLAN_SIR_perfect) ber = 0.0 ;
  124. else if(EcNc < WLAN_SIR_impossible) ber = 0.5;
  125. else
  126. {
  127. double pew = 14.0*QFunction(sqrt(EcNc*8.0)) + QFunction(sqrt(EcNc*16.0));
  128. pew = min(pew, 0.99999);
  129. ber = 8.0/15.0 * pew;
  130. }
  131. return ber;
  132. }
  133.  
  134. double Get80211bDsssDqpskCCK11BerIeee(double EcNc)
  135. {
  136. double ber;
  137. if(EcNc > WLAN_SIR_perfect) ber = 0.0 ;
  138. else if(EcNc < WLAN_SIR_impossible) ber = 0.5;
  139. else
  140. {
  141. double pew = 24.0*QFunction(sqrt(EcNc*4.0)) +
  142. 16.0*QFunction(sqrt(EcNc*6.0)) +
  143. 174.0*QFunction(sqrt(EcNc*8.0)) +
  144. 16.0*QFunction(sqrt(EcNc*10.0)) +
  145. 24.0*QFunction(sqrt(EcNc*12.0)) +
  146. QFunction(sqrt(EcNc*16.0));
  147. pew = min(pew, 0.99999);
  148. ber = 128.0/255.0 * pew;
  149. }
  150. return ber;
  151. }
  152.  
  153. int main (int argc, char *argv[])
  154. {
  155. double rss, sinr;
  156. double totalPkt = 200.0;
  157. //double noise = 1.552058;
  158. double noise = ;
  159. double EcNc, EbN01, EbN02, EbN05, EbN011;
  160. double ieee1,ieee2,ieee5,ieee11;
  161. double numBits = (. + . + .) * .;
  162. double dbpsk,dqpsk,cck16,cck256,sepcck16,sepcck256;
  163.  
  164. noise = DbToNoneDb(noise) * 1.3803e-23 * 290.0 * ;
  165. for (rss=-102.0; rss <= -80.0; rss += 0.1)
  166. {
  167. sinr = DbToNoneDb(rss)/1000.0/noise;
  168. EcNc = sinr * 22000000.0 / 11000000.0; // IEEE sir
  169. EbN01 = sinr * 22000000.0 / 1000000.0;
  170. // 2 bits per symbol, 1 MSPS
  171. EbN02 = sinr * 22000000.0 / 1000000.0 / 2.0;
  172. EbN05 = sinr * 22000000.0 / 1375000.0 / 4.0;
  173. EbN011 = sinr * 22000000.0 / 1375000.0 / 8.0;
  174. // 1=rss, 2=EcNc, 3=EbN01, 4=EbN02, 5=EBN05, 6=EbN011
  175. printf("%g %g %g %g %g %g ", rss, NoneDbToDb(EcNc),
  176. NoneDbToDb(EbN01),NoneDbToDb(EbN02),
  177. NoneDbToDb(EbN05),NoneDbToDb(EbN011));
  178.  
  179. ieee1 = Get80211bDsssDbpskBerIeee (EcNc);
  180. ieee2 = Get80211bDsssDqpskBerIeee (EcNc);
  181. ieee5 = Get80211bDsssDqpskCCK5_5BerIeee (EcNc);
  182. ieee11 = Get80211bDsssDqpskCCK11BerIeee (EcNc);
  183. // 7=ber_ieee1, 8=ber_ieee2, 9=ber_ieee5, 10=ber_ieee11
  184. printf(" %g %g %g %g ", ieee1, ieee2,ieee5,ieee11);
  185.  
  186. ieee1 = totalPkt*pow(-ieee1, numBits);
  187. ieee2 = totalPkt*pow(-ieee2, numBits);
  188. ieee5 = totalPkt*pow(-ieee5, numBits);
  189. ieee11 = totalPkt*pow(-ieee11, numBits);
  190. // 11=pkt_ieee1, 12=pkt_ieee2, 13=pkt_ieee5, 14=pkt_ieee11
  191. printf(" %g %g %g %g ", ieee1, ieee2,ieee5,ieee11);
  192.  
  193. dbpsk = Get80211bDsssDbpskBer (sinr);
  194. dqpsk = Get80211bDsssDqpskBer (sinr);
  195. cck16 = max(, 8.0/15.0*p_e2(4.0*EbN05/2.0));
  196. cck256 = max(, 128.0/255.0*p_e1(8.0*EbN011/2.0));
  197. // 15=ber_dbpsk, 16=ber_dqpsk, 17=ber_cck16, 18=ber_cck256
  198. printf(" %g %g %g %g ", dbpsk, dqpsk,cck16,cck256);
  199.  
  200. dbpsk = totalPkt*pow(-dbpsk,numBits);
  201. dqpsk = totalPkt*pow(-dqpsk,numBits);
  202. sepcck16 = p_e2(4.0*EbN05/2.0);
  203. sepcck256 = p_e1(8.0*EbN011/2.0);
  204. cck16 = totalPkt*pow(1.0-sepcck16,numBits/4.0);
  205. cck256 = totalPkt*pow(1.0-sepcck256,numBits/8.0);
  206. // 19=pkt_dbpsk, 20=pkt_dqpsk, 21=pkt_cck16, 22=pkt_cck256
  207. printf(" %g %g %g %g ", dbpsk, dqpsk,cck16,cck256);
  208. // 23=sinr
  209. printf(" %g \n",NoneDbToDb(sinr));
  210. }
  211. return ;
  212. }

80211b.c

gnuplot code

  1. set term postscript eps color enh "Times-BoldItalic"
  2. set output '80211b.ieee.pkt.eps'
  3. set xlabel "RSS (dBm)"
  4. set ylabel "Packet Received"
  5. set yrange [:]
  6. set xrange [-:-]
  7. plot "80211b.txt" using : title '1M IEEE', \
  8. "80211b.txt" using : title '2M IEEE', \
  9. "80211b.txt" using : title '5.5M IEEE', \
  10. "80211b.txt" using : title '11M IEEE'
  11. set term postscript eps color enh "Times-BoldItalic"
  12. set output '80211b.ns3.pkt.eps'
  13. set xlabel "RSS (dBm)"
  14. set ylabel "Packet Received"
  15. set yrange [:]
  16. set xrange [-:-]
  17. plot "80211b.txt" using : title '1M DBPSK', \
  18. "80211b.txt" using : title '2M DQPSK', \
  19. "80211b.txt" using : title '5.5M CCK16', \
  20. "80211b.txt" using : title '11M CCK256'
  21. set term postscript eps color enh "Times-BoldItalic"
  22. set output '80211b.ieee.sir.eps'
  23. set xlabel "SIR"
  24. set ylabel "BER"
  25. set yrange [10e-:]
  26. set xrange [-:]
  27. set logscale y
  28. plot "80211b.txt" using : title '1M IEEE', \
  29. "80211b.txt" using : title '2M IEEE', \
  30. "80211b.txt" using : title '5.5M IEEE', \
  31. "80211b.txt" using : title '11M IEEE'

plot80211b

reference: http://www.nsnam.org/~pei/80211b.pdf

ns3 802.11b PHY model的更多相关文章

  1. CentOS 6.6下 BCM4312 802.11b/g无线网卡驱动安装

    1.目前www.broadcom.com网站上最新版本为hybrid-v35,但此版本与2.6.32不匹配,无法识别验证密码,搜索网上说是要求升级内核,后根据http://www.dadclab.co ...

  2. H3C 802.11b/g工作频段划分图

  3. WLAN 802.11 a/b/g PHY Specification and EDVT Measurement V

    Receive Minimum Input Level (Sensitivity) 测试方法: Receiver Adjacent Channel Rejection (ACR) -For IEEE8 ...

  4. 2019.1.3 WLAN 802.11 a/b/g PHY Specification and EDVT Measurement II - Transmit Spectrum Mask & Current Consumption

    Transmit Spectrum Mask Specification – 802.11b SpecificationFor 802.11b 18.4.7.3The transmitted spec ...

  5. 2019.1.3 WLAN 802.11 a/b/g PHY Specification and EDVT Measurement I - Transmit Power Level

    This lecture provides the WLAN hardware engineer the essential knowledge of IEEE 802.11 a/b/g physic ...

  6. 802.11协议帧格式、Wi-Fi连接交互过程、无线破解入门研究

    相关学习资料 Linux黑客大曝光: 第8章 无线网络 无线网络安全攻防实战进阶 无线网络安全 黑客大曝光 第2版 http://zh.wikipedia.org/wiki/IEEE_802.11 h ...

  7. IEEE 802.11 标准列表

    IEEE 802.11 标准列表 IEEE 802.11,1997年,原始标准(2Mbit/s,播在2.4GHz). IEEE 802.11a,1999年,物理层补充(54Mbit/s,播在5GHz) ...

  8. 802.11 wireless 四

    802.11 wireless 4spread spectrum(扩频 - 基于香农定理的算法)1.窄带和扩频是发送信号的两种不同方式2.扩频技术使用更小的能量在波峰3.带宽的需要,基于发送数据的量频 ...

  9. 802.11 wireless 二

    802.11 wireless 2wireless spectrum(无线频谱)1.无线网络使用RF(射频)信号2.无线电也是电磁波3.频谱基于波长被划分,归为多个类型4.无线网络被归为微波段(mic ...

随机推荐

  1. HDU 5792:World is Exploding(树状数组求逆序对)

    http://acm.hdu.edu.cn/showproblem.php?pid=5792 World is Exploding Problem Description   Given a sequ ...

  2. 职业生涯之完成OCM考试后的感想

    背景知识:关于OCM认证,百科是这样描述的: Oracle Certified Master(OCM) 大师认证资质是Oracle认证的最高级别.此认证是对技术.知识和操作技能的最高级别的认可.Ora ...

  3. kuangbin专题 专题一 简单搜索 棋盘问题 POJ - 1321

    题目链接:https://vjudge.net/problem/POJ-1321 题意:给一张棋盘,‘#’表示可以下棋的地方,‘.’表示不能下棋的地方.棋盘是n*n的,要求能放下k个棋子,要求k个棋子 ...

  4. PCB 板边倒圆角的实现方法(基本算法一)

    PCB外形是直角时外形时,通常工程制作时,外是直角或尖角的地方倒圆角,主要是为了防止板边容易划伤板且容易扎伤人 所以当客户没有特殊要求时,PCB外形是直角时一般会默认倒角0.5mm圆角(如下图所示) ...

  5. 广告过滤器 Adguard Pre v6.4.1814 Lite V2 简约绿色版

    下载地址:点我 基本介绍 当你在浏览网页的时候总是弹出广告是不是非常的不爽,小编为伙伴们提供了Adguard Pre简约绿色版,一款专业的广告过滤器.Adguard Pre简约绿色版可以帮助伙伴们完美 ...

  6. Django rest framework(3)----节流

    目录 Django组件库之(一) APIView源码 Django restframework (1) ----认证 Django rest framework(2)----权限 Django res ...

  7. C# oleDb方法读取Excel文件

    今天学习的是从FTP上下载Excel文件,DataTable接收数据之后,在DataTable中通过筛选,删减修改之后把数据插入到DB相应表中. 优点:读取方式简单.读取速度快 缺点:除了读取过程不太 ...

  8. Ubuntu安装Sublime Text 3

    终端命令行安装: Install the GPG key: wget -qO - https://download.sublimetext.com/sublimehq-pub.gpg | sudo a ...

  9. Android使用webService(发送xml数据的方式,不使用jar包)

    Android使用webService可以用ksoap2.jar包来使用.但是我觉得代码不好理解,而且记不住. 所以我查询了好多资料,以及自己的理解.可以用代码发送http请求(发送xml数据)来访问 ...

  10. vscode如何将less编译到指定css目录中

    首先使用vscode的搬砖猿,想要在vscode编辑器里面很方便的编译less文件,需要在扩展商店里面下载一款名叫Esay LESS的超好用扩展(我自己都不信),哈哈,其实还好. 安装完扩展之后,最好 ...