paloha.m
上传用户:m_sun_001
上传日期:2014-07-30
资源大小:1115k
文件大小:2k
源码类别:

matlab例程

开发平台:

Matlab

  1. % Program 6-6
  2. % paloha.m
  3. %
  4. % Pure ALOHA System
  5. %
  6. % Input argument
  7. %   now_time  : now time   but, now_time<0 initializes the access terminals
  8. %
  9. % Output argument
  10. %   next_time : next state change time
  11. %
  12. % Programmed by M.Okita
  13. % Checked by H.Harada
  14. %
  15. function [next_time] = paloha(now_time)
  16. global STANDBY TRANSMIT COLLISION                   % definition of the global variable
  17. global Srate Plen
  18. global Mnum Mplen Mstate
  19. global Tint Rint
  20. global Spnum Splen Tplen Wtime
  21. persistent mgtime mtime                             % definition of the static variable
  22. if now_time < 0                                     % initialize access terminals
  23.     rand('state',sum(100*clock));                   % resetting of the random table
  24.     mgtime        = -Tint * log(1-rand(1,Mnum));    % packet generation time
  25.     mtime         = mgtime;                         % packet transmitting time
  26.     Mstate        = zeros(1,Mnum);
  27.     Mplen(1:Mnum) = Plen;                           % packet length
  28.     next_time     = min(mtime);
  29.     return
  30. end
  31. idx = find(mtime==now_time & Mstate==TRANSMIT);     % finding of the terminal which transmission succeeded
  32. if length(idx) > 0
  33.     Spnum       = Spnum + 1;
  34.     Splen       = Splen + Mplen(idx);
  35.     Wtime       = Wtime + now_time - mgtime(idx);
  36.     Mstate(idx) = STANDBY;
  37.     mgtime(idx) = now_time - Tint * log(1-rand);    % next packet generation time
  38.     mtime(idx)  = mgtime(idx);                      % next packet transmitting time
  39. end
  40. idx = find(mtime==now_time & Mstate==COLLISION);    % finding of the terminal which transmission failed
  41. if length(idx) > 0
  42.     Mstate(idx) = STANDBY;
  43.     mtime(idx)  = now_time - Rint * log(1-rand(1,length(idx))); % resending time
  44. end
  45. idx = find(mtime==now_time);                        % finding of the terminal which transmission start
  46. if length(idx) > 0
  47.     Mstate(idx) = TRANSMIT;
  48.     mtime(idx)  = now_time + Mplen(idx) / Srate;    % end time of transmitting
  49.     Tplen       = Tplen + sum(Mplen(idx));
  50. end
  51. next_time = min(mtime);                             % next state change time
  52. %%%%%%%%%%%%%%%%%%%%%% end of file %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%