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

matlab例程

开发平台:

Matlab

  1. % Program 6-7
  2. % saloha.m
  3. %
  4. % Slotted 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] = saloha(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 slot                        % definition of the static variable
  22. if now_time < 0                                     % initialize access terminal
  23.     rand('state',sum(100*clock));                   % resetting of the random table
  24.     slot          = Plen / Srate;                   % slot length
  25.     mgtime        = -Tint * log(1-rand(1,Mnum));    % packet generation time
  26.     mtime         = (fix(mgtime/slot)+1) * slot;    % packet transmitting time
  27.     Mstate        = zeros(1,Mnum);
  28.     Mplen(1:Mnum) = Plen;                           % packet length
  29.     next_time     = min(mtime);
  30.     return
  31. end
  32. idx = find(mtime==now_time & Mstate==TRANSMIT);     % finding of the terminal which transmission succeeded
  33. if length(idx) > 0
  34.     Spnum       = Spnum + 1;
  35.     Splen       = Splen + Mplen(idx);
  36.     Wtime       = Wtime + now_time - mgtime(idx);
  37.     Mstate(idx) = STANDBY;
  38.     mgtime(idx) = now_time - Tint * log(1-rand);    % next packet generation time
  39.     mtime(idx)  = (fix(mgtime(idx)/slot)+1) * slot; % next packet transmitting time
  40. end
  41. idx = find(mtime==now_time & Mstate==COLLISION);    % finding of the terminal which transmission failed
  42. if length(idx) > 0
  43.     Mstate(idx) = STANDBY;
  44.     mtime(idx)  = now_time - Rint * log(1-rand(1,length(idx))); % waiting time
  45.     mtime(idx)  = (fix(mtime(idx)/slot)+1) * slot;              % resending time
  46. end
  47. idx = find(mtime==now_time);                        % finding of the terminal which transmission start
  48. if length(idx) > 0
  49.     Mstate(idx) = TRANSMIT;
  50.     mtime(idx)  = now_time + Mplen(idx) / Srate;    % end time of transmitting
  51.     mtime(idx)  = round(mtime(idx)/slot) * slot;
  52.     Tplen       = Tplen + sum(Mplen(idx));
  53. end
  54. next_time = min(mtime);                             % next state change time
  55. %%%%%%%%%%%%%%%%%%%%%% end of file %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%