chanInterference.pl
上传用户:rrhhcc
上传日期:2015-12-11
资源大小:54129k
文件大小:16k
源码类别:

通讯编程

开发平台:

Visual C++

  1. sub usage {
  2. print STDERR "usage: $0 <Base Trace file> <Base nam trace file> <output nam trace file>n";
  3. exit;
  4. }
  5. #@ARGV[0] - source trace file
  6. #@ARGV[1] - source nam trace file
  7. #@ARGV[2] - output nam trace file
  8. open (Source, $ARGV[0]) or die "Cannot open $ARGV[0] : $!n";
  9. open (NamSource, $ARGV[1]) or die "Cannot open $ARGV[1] : $!n";
  10. open (Destination, ">$ARGV[2]") or die "Cannot open $ARGV[2]: $!n";
  11. $namline = <NamSource>;
  12. while ($namline) { 
  13. if ($namline =~ /-i 3 -n green/) {
  14. print Destination $namline;
  15. print Destination 'v -t 0.000 -e sim_annotation 0.0 1 COLOR LEGEND : ', "n";
  16. print Destination 'v -t 0.003 -e sim_annotation 0.003 2 Nodes turn red when there is a collision ', "n";
  17. print Destination 'v -t 0.10000000 -e set_rate_ext 0.200ms 1', "n";
  18. last;
  19. }
  20. else
  21. {
  22. print Destination $namline;
  23. $namline = <NamSource>;
  24. }
  25. }
  26. $num_mov = 0;
  27. $i =3;
  28. $one = 0;
  29. $two = 0;
  30. $three = 0;
  31. $last_time = 0.1500;
  32. $line = <Source>;
  33. while ($line) {
  34. if ($line =~ /^M/) {
  35. @fields = split ' ', $line;
  36. @fields[3] =~ m/(d+.d+)/;
  37. @fields[3] = $1;
  38. @fields[4] =~ m/(d+.d+)/;
  39. @fields[4] = $1;
  40. @fields[6] =~ m/(d+.d+)/;
  41. @fields[6] = $1;
  42. $t = (@fields[6] - @fields[3])/@fields[8];
  43. if ($t < 0)
  44. {
  45. $t = -$t;
  46. }
  47. if(@fields[3] > @fields[6])
  48. {
  49. print Destination 'n -t ', @fields[1], ' -s ', @fields[2], ' -x ', @fields[3], ' -y ', @fields[4], ' -U -',@fields[8], ' -V 0.00 -T ', $t,"n";
  50. }
  51. else
  52. {
  53. print Destination 'n -t ', @fields[1], ' -s ', @fields[2],' -x ',@fields[3],' -y ',@fields[4],' -U ',@fields[8],' -V 0.00 -T ',$t,"n";
  54. }
  55. print Destination 'v -t ', @fields[1], ' -e sim_annotation ', @fields[1],' ', $i,' NODE 2 MOVES ',"n";
  56. $last_time = @fields[1]+0.00005;
  57. $i++;
  58. if ($num_mov == 0)
  59. {
  60. print Destination 'v -t ', $last_time,' -e sim_annotation ', $last_time,' ',$i,' Node 2 is out of range of Node 1',"n";
  61. }
  62. if ($num_mov == 1)
  63. {
  64. print Destination 'v -t ', $last_time,' -e sim_annotation ', $last_time,' ',$i,' Node 2 is at the border range of Node 1',"n";
  65. }
  66. if ($num_mov == 2)
  67. {
  68. print Destination 'v -t ', $last_time,' -e sim_annotation ', $last_time,' ',$i,' Node 2 is in range of Node 1, close enough to',"n";
  69. $last_time = $last_time + 0.00005;
  70. $i++;
  71. print Destination 'v -t ',$last_time,' -e sim_annotation ',$last_time,' ',$i,' interfere with Node 0 but not the same distance as Node 0 from Node 1',"n";
  72. }
  73. $i++;
  74. $num_mov ++;
  75. $last_time = $last_time + 0.08;
  76. $line = <Source>;
  77. }
  78. elsif ($num_mov < 1) { # Node 0 and Node 2 are equidistant from Node 1
  79. if ($line =~ /SENSING_CARRIER/) {
  80. @fields = split ' ', $line;
  81. $next_line = <Source>;
  82. if ($next_line =~ /BACKING_OFF/) {
  83. $other_node = 2;
  84. if (@fields[4] == 2)
  85. {
  86. $other_node = 0;
  87. }
  88. $t = $last_time +0.005;
  89. print Destination 'v -t ', $t, ' -e sim_annotation ', $t,' ', $i,' CASE 1a : EQUIDISTANT : SEPARATE TIMES : SUCCESSFUL RECEPTION',"n";
  90. $last_time = $t+0.00005;
  91. $i++;
  92. print Destination 'v -t ', $last_time,' -e sim_annotation ', $last_time,' ',$i,' Node 0 and Node 2 are in range of each other,',"n"; 
  93. $last_time = $last_time + 0.00005;
  94. $i++;
  95. print Destination 'v -t ', $last_time, ' -e sim_annotation ', $last_time, ' ', $i,' and are equidistant from Node 1, so when they both send packets at different times, the signal of these', "n";
  96. $last_time = $last_time + 0.00005;
  97. $i++;
  98. print Destination 'v -t ',$last_time,' -e sim_annotation ',$last_time,' ',$i,'packets, at the receiver ,is the same, and hence packets from both senders are received',"n";
  99. $i++;
  100. $next_duration = $last_time + 0.01;
  101. print Destination '+ -t ', $next_duration, ' -s ', @fields[4], ' -d 1 -p message -e 2500 -a 1 ', "n";
  102. print Destination '- -t ', $next_duration, ' -s ', @fields[4], ' -d 1 -p message -e 2500 -a 1 ', "n";
  103. print Destination 'h -t ', $next_duration, ' -s ', @fields[4], ' -d 1 -p message -e 2500 -a 1 ', "n";
  104. print Destination 'r -t ', $next_duration, ' -s ', @fields[4], ' -d 1 -p message -e 2500 -a 1 ', "n";
  105. $next_duration = $next_duration + 0.01;
  106. print Destination '+ -t ', $next_duration, ' -s ', $other_node, ' -d 1 -p message -e 2500 -a 1 ', "n";
  107. print Destination '- -t ', $next_duration, ' -s ', $other_node, ' -d 1 -p message -e 2500 -a 1 ', "n";
  108. print Destination 'h -t ', $next_duration, ' -s ', $other_node, ' -d 1 -p message -e 2500 -a 1 ', "n";
  109. print Destination 'r -t ', $next_duration, ' -s ', $other_node, ' -d 1 -p message -e 2500 -a 1 ', "n";
  110. $last_time = $next_duration;
  111. $line = <Source>;
  112. }
  113. elsif ($next_line =~ /SENSING_CARRIER/) {
  114. @new_fields = split ' ', $next_line;
  115. $last_time = $last_time + 0.01;
  116. print Destination 'v -t ', $last_time, ' -e sim_annotation ', $last_time,' ', $i,' CASE 1b : EQUIDISTANT - SAME TIME : COLLISION ',"n";
  117. $last_time = $last_time+0.00005;
  118. $i++;
  119. print Destination 'v -t ', $last_time,' -e sim_annotation ', $last_time,' ',$i,' Node 0 and Node 2 want to send packets at the same time, since they are',"n";
  120. $last_time = $last_time + 0.00005;
  121. $i++;
  122. print Destination 'v -t ',$last_time,' -e sim_annotation ',$last_time,' ',$i,' the same distance from the receiver, the packets received are the same strength',"n";
  123. $last_time = $last_time + 0.00005;
  124. $i++;
  125. print Destination 'v -t ',$last_time,' -e sim_annotation ',$last_time,' ',$i,' and hence they interfere with each other resulting in collision',"n";
  126. $i++;
  127. $duration = $last_time + 0.01;
  128. print Destination '+ -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  129. print Destination '- -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  130. print Destination 'h -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  131. print Destination '+ -t ', $duration, ' -s 2 -d 1 -p message -e 2500 -a 1 ', "n";
  132. print Destination '- -t ', $duration, ' -s 2 -d 1 -p message -e 2500 -a 1 ', "n";
  133. print Destination 'h -t ', $duration, ' -s 2 -d 1 -p message -e 2500 -a 1 ', "n";
  134. $red_duration = $duration + 0.01;
  135. $red_end_duration = $red_duration + 0.01;
  136. print Destination 'n -t ', $red_duration, ' -s 1 -S COLOR -c red -o black -i red -I black ', "n";
  137. print Destination 'n -t ', $red_duration, ' -s 1 -S DLABEL -l "Collision " -L ""', "n";
  138. print Destination 'd -t ', $red_duration, ' -s 1 -d 2 -p message -e 5000 -a 8 ', "n";
  139. print Destination 'n -t ', $red_end_duration, ' -s 1 -S COLOR -c black -o red -i black -I red ', "n";
  140. print Destination 'n -t ', $red_end_duration, ' -s 1 -S DLABEL -l "" -L ""', "n";
  141. $last_time = $red_end_duration;
  142. $line = <Source>;
  143. }
  144. else {
  145. $line = <Source>;
  146. }
  147. }
  148. else {
  149. $line = <Source>;
  150. }
  151. }
  152. elsif (($num_mov == 1) && ($one == 0)) { # Node 2 is out of range of Node 1
  153. $duration = $last_time + 0.01;
  154. print Destination 'v -t ', $duration, ' -e sim_annotation ', $duration,' ', $i,' CASE 2a : NODE 2 OUT OF RANGE , NODES SENDING PACKETS SEPARATELY ',"n";
  155. $last_time = $duration+0.00005;
  156. $i++;
  157. print Destination 'v -t ', $last_time,' -e sim_annotation ', $last_time,' ',$i,' Node 0 sends data packets to Node 1, which are successfully received by Node 1',"n";
  158. $i++;
  159. $duration = $last_time + 0.00005;
  160. print Destination '+ -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  161. print Destination '- -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  162. print Destination 'h -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  163. $duration = $duration + 0.01;
  164. $last_time = $duration + 0.00005;
  165. print Destination 'v -t ', $last_time,' -e sim_annotation ', $last_time,' ',$i,' Node 2 sends data packets to Node 1',"n";
  166. $last_time = $last_time + 0.00005;
  167. $i++;
  168. print Destination 'v -t ', $last_time,' -e sim_annotation ',$last_time,' ',$i,' but they are not recd. by Node 1, since Node 2 is out of range of Node 1  ',"n";
  169. $i++;
  170. $duration = $last_time + 0.00005;
  171. print Destination '+ -t ', $duration, ' -s 2 -d -1 -p message -e 2500 -a 8 ', "n";
  172. print Destination '- -t ', $duration, ' -s 2 -d -1 -p message -e 2500 -a 8 ', "n";
  173. print Destination 'h -t ', $duration, ' -s 2 -d -1 -p message -e 2500 -a 8 ', "n";
  174. $duration = $duration + 0.01;
  175. print Destination 'v -t ', $duration, ' -e sim_annotation ', $duration,' ', $i,' CASE 2b : NODE 2 OUT OF RANGE , NODES SENDING PACKETS AT THE SAME TIME ',"n";
  176. $last_time = $duration+0.00005;
  177. $i++;
  178. print Destination 'v -t ', $last_time,' -e sim_annotation ', $last_time,' ',$i,' Node 0 sends data packets to Node 1 which',"n";
  179. $last_time = $last_time + 0.00005;
  180. $i++;
  181. print Destination 'v -t ',$last_time,' -e sim_annotation ',$last_time,' ',$i,' are successfully received by Node 1  and Node 2 sends packets to Node 1',"n";
  182. $last_time = $last_time + 0.00005;
  183. $i++;
  184. print Destination 'v -t ',$last_time,' -e sim_annotation ',$last_time,' ',$i,' which are not received, because Node 2 is out of range of Node 1',"n";
  185. $i++;
  186. $duration = $last_time + 0.00005;
  187. print Destination '+ -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  188. print Destination '- -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  189. print Destination 'h -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  190. print Destination '+ -t ', $duration, ' -s 2 -d -1 -p message -e 2500 -a 8 ', "n";
  191. print Destination '- -t ', $duration, ' -s 2 -d -1 -p message -e 2500 -a 8 ', "n";
  192. print Destination 'h -t ', $duration, ' -s 2 -d -1 -p message -e 2500 -a 8 ', "n";
  193. $duration = $duration + 0.01;
  194. $line = <Source>;
  195. $last_time = $duration;
  196. $one = 1;
  197. }
  198. elsif (($num_mov == 2) && ($two == 0)) # Node 2 is barely within range of Node 1
  199. {
  200. $duration = $last_time + 0.01;
  201. print Destination 'v -t ', $duration, ' -e sim_annotation ', $duration,' ', $i,' CASE 3a : NODE 2 BARELY IN RANGE OF NODE 1 , NODES SENDING PACKETS SEPARATELY ',"n";
  202. $last_time = $duration+0.00005;
  203. $i++;
  204. print Destination 'v -t ', $last_time,' -e sim_annotation ', $last_time,' ',$i,' Node 0 sends data packets to Node 1, which are successfully received by Node 1',"n";
  205. $i++;
  206. $duration = $last_time + 0.00005;
  207. print Destination '+ -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  208. print Destination '- -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  209. print Destination 'h -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  210. $duration = $duration + 0.01;
  211. $last_time = $duration + 0.00005;
  212. print Destination 'v -t ', $last_time,' -e sim_annotation ', $last_time,' ',$i,' Node 2 sends data packets to Node 1 which are received successfully by Node 1 ',"n";
  213. $i++;
  214. $duration = $last_time + 0.00005;
  215. print Destination '+ -t ', $duration, ' -s 2 -d 1 -p message -e 2500 -a 1 ', "n";
  216. print Destination '- -t ', $duration, ' -s 2 -d 1 -p message -e 2500 -a 1 ', "n";
  217. print Destination 'h -t ', $duration, ' -s 2 -d 1 -p message -e 2500 -a 1 ', "n";
  218. $duration = $duration + 0.01;
  219. print Destination 'v -t ', $duration, ' -e sim_annotation ', $duration,' ', $i,' CASE 3b : CHANNEL CAPTURE : NODE 2 BARELY IN RANGE OF NODE 1, NODES SENDING PACKETS AT THE SAME TIME ',"n";
  220. $last_time = $duration+0.00005;
  221. $i++;
  222. print Destination 'v -t ', $last_time,' -e sim_annotation ', $last_time,' ',$i,' Node 0 sends data packets to Node 1, which',"n"; $last_time = $last_time + 0.00005;
  223. $i++;
  224. print Destination 'v -t ',$last_time,' -e sim_annotation ',$last_time,' ',$i,' are successfully received by Node 1  and Node 2 sends packets to Node 1 which are not received, because',"n";
  225. $last_time = $last_time + 0.00005;
  226. $i++;
  227. print Destination 'v -t ',$last_time,' -e sim_annotation ',$last_time,' ',$i,' Node 0 being closer to Node 1, the signal strength of its packets is higher than that of Node 2 packets',"n";
  228. $i++;
  229. $duration = $last_time + 0.00005;
  230. print Destination '+ -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  231. print Destination '- -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  232. print Destination 'h -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  233. print Destination '+ -t ', $duration, ' -s 2 -d -1 -p message -e 2500 -a 8 ', "n";
  234. print Destination '- -t ', $duration, ' -s 2 -d -1 -p message -e 2500 -a 8 ', "n";
  235. print Destination 'h -t ', $duration, ' -s 2 -d -1 -p message -e 2500 -a 8 ', "n";
  236. $last_time = $duration;
  237. $line = <Source>;
  238. $two = 1;
  239. }
  240. elsif(($num_mov == 3) && ($three == 0))# Node 2 is close enough to interfere with Node 0
  241. {
  242. $duration = $last_time + 0.01;
  243. print Destination 'v -t ', $duration, ' -e sim_annotation ', $duration,' ', $i,' CASE 4a : NODE 2 IN RANGE OF NODE 1 , NODES SENDING PACKETS SEPARATELY ',"n";
  244. $last_time = $duration+0.00005;
  245. $i++;
  246. print Destination 'v -t ', $last_time,' -e sim_annotation ', $last_time,' ',$i,' Node 0 sends data packets to Node 1, which are successfully received by Node 1',"n";
  247. $i++;
  248. $duration = $last_time + 0.00005;
  249. print Destination '+ -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  250. print Destination '- -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  251. print Destination 'h -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  252. $duration = $duration + 0.01;
  253. $last_time = $duration + 0.00005;
  254. print Destination 'v -t ', $last_time,' -e sim_annotation ', $last_time,' ',$i,' Node 2 sends data packets to Node 1 and they are received successfully by Node 1',"n";
  255. $i++;
  256. $duration = $last_time + 0.00005;
  257. print Destination '+ -t ', $duration, ' -s 2 -d 1 -p message -e 2500 -a 1 ', "n";
  258. print Destination '- -t ', $duration, ' -s 2 -d 1 -p message -e 2500 -a 1 ', "n";
  259. print Destination 'h -t ', $duration, ' -s 2 -d 1 -p message -e 2500 -a 1 ', "n";
  260. $duration = $duration + 0.01;
  261. print Destination 'v -t ', $duration, ' -e sim_annotation ', $duration,' ', $i,' CASE 4b : NODE 2 IN RANGE OF NODE 1 , NODES SENDING PACKETS AT THE SAME TIME ',"n";
  262. $last_time = $duration+0.00005;
  263. $i++;
  264. print Destination 'v -t ', $last_time,' -e sim_annotation ', $last_time,' ',$i,' Node 0 sends data packets to Node 1 the same',"n";
  265. $last_time = $last_time + 0.00005;
  266. $i++;
  267. print Destination 'v -t ',$last_time,' -e sim_annotation ',$last_time,' ',$i,' time that Node 2 sends packets to Node 1, and hence they collide at the reciever since',"n";
  268. $last_time = $last_time + 0.00005;
  269. $i++; 
  270. print Destination 'v -t ',$last_time,' -e sim_annotation ',$last_time,' ',$i,'their packets interfere with each other',"n";
  271. $i++;
  272. $duration = $last_time + 0.00005;
  273. print Destination '+ -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  274. print Destination '- -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  275. print Destination 'h -t ', $duration, ' -s 0 -d 1 -p message -e 2500 -a 1 ', "n";
  276. print Destination '+ -t ', $duration, ' -s 2 -d 1 -p message -e 2500 -a 1 ', "n";
  277. print Destination '- -t ', $duration, ' -s 2 -d 1 -p message -e 2500 -a 1 ', "n";
  278. print Destination 'h -t ', $duration, ' -s 2 -d 1 -p message -e 2500 -a 1 ', "n";
  279. $duration = $duration + 0.01;
  280. $red_duration = $duration + 0.01;
  281. $red_end_duration = $red_duration + 0.01;
  282. print Destination 'n -t ', $red_duration, ' -s 1 -S COLOR -c red -o black -i red -I black ', "n";
  283. print Destination 'n -t ', $red_duration, ' -s 1 -S DLABEL -l "Collision " -L ""', "n";
  284. print Destination 'd -t ', $red_duration, ' -s 1 -d 2 -p message -e 5000 -a 8 ', "n";
  285. print Destination 'n -t ', $red_end_duration, ' -s 1 -S COLOR -c black -o red -i black -I red ', "n";
  286. print Destination 'n -t ', $red_end_duration, ' -s 1 -S DLABEL -l "" -L ""', "n";
  287. $last_time = $red_end_duration;
  288. $line = <Source>;
  289. $three = 1;
  290. }
  291. else {
  292. $line = <Source>;
  293. }
  294. }