uwb_channel.m
上传用户:doryuen
上传日期:2013-10-30
资源大小:23k
文件大小:2k
源码类别:

通讯/手机编程

开发平台:

Matlab

  1. % Cassioli Indoor UWB Channel Model
  2. % Jasurbek Khodjaev - MCL -2006
  3. function G_i = uwb_channel(d)
  4. % d - Transmitter- Receiver seperation in meters
  5. % % time_t = time_t * 1e9;
  6. % % sample_t = round(time_t / 0.05);
  7. % % delay_t = zeros(1,sample_t);
  8. %================= Initialization ===================
  9. N_bins = 2000; % NUmber of Bins
  10. epsulon = normrnd(16.1, 1.27);  % Decay constant
  11. epsulon = 10^(epsulon/10);
  12. r = normrnd(-4,3); % Power ratio
  13. r = 10^(r/10);
  14. delta_tau = 0.1;  % Bin width
  15. for ii = 1:N_bins
  16.     tau(ii) = (ii-1) * delta_tau;
  17. end
  18. %----------------------------------------------------
  19. %=============== Path-Loss & Shadowing ==============
  20. % Path-Loss is expressed in dB, d0 = 1 m is the 
  21. % reference distance
  22. if d <= 11
  23.     path_loss = 20.4 * log10(d/1); 
  24. else
  25.     path_loss = -56 + 74 * log10(d/1);
  26. end
  27. %================ Exponential decay =================
  28. F = 1/(1 - exp( - delta_tau / epsulon));
  29. % Total Average Normilized Energy: G_nor_tot
  30. % Shadowing
  31. % path_loss = 10^(path_loss/10);
  32. G_avr_tot = normrnd(-path_loss, 4.3);
  33. G_avr_tot = 10^(G_avr_tot/10);
  34. G_avr(1) = (G_avr_tot/(1 + r * F));
  35. % G_avr(1) = (G_nor_tot/(1+r*F))*r*exp(-(tau(k)-tau(2))/epsulon)
  36. % G_avr(1) = 10^(G_avr(1)/10);
  37. for k =2:N_bins
  38.     tt = tau(k) - tau(2);
  39.     part2(k-1) = r * exp(-tt/epsulon);
  40.     G_avr(k) = G_avr(1) * part2(k-1);
  41. end
  42. % G_avr = G_avr/norm(G_avr);
  43. % G_avr = (abs(G_avr)./10);%.* (binornd(1,0.5, 1, length(G_avr)) * 2-1);
  44. for k = 1:N_bins
  45.     mu(k) = 3.5 - tau(k)/73;
  46.     sigma(k) = 1.84 - tau(k)/160;
  47.     m(k) = sqrt(sigma(k)) * randn + mu(k);
  48.     if m(k) < 0.5
  49.      m(k) = 0;
  50.     end
  51.     G_i(1,k) = gamrnd(m(k),G_avr(k));
  52. end
  53.     for nk=1:length(G_i)
  54.         if isnan(G_i(nk))== 1
  55.             G_i(nk)=0;
  56.         end
  57.     end
  58. % G_i = [xx G_i(1:end-length(xx))];
  59. % G_i = [delay_t G_i(1:end-length(delay_t))];
  60. % G_i = G_i .* (binornd(1,0.5, 1, length(G_i)) .* 2 - 1);
  61. %====================== END of FUNCTION ============================