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

通讯/手机编程

开发平台:

Matlab

  1. %=============================================================================%
  2. %=                         TOA UWB ALGORITHM                                 =%
  3. %=                                                                           =%
  4. %= Programmed by Jasurbek Khodjaev                                           =%
  5. %= Yeungnam University Mobile Communication Lab.                             =%
  6. %= MCL 2006                                                                  =%
  7. %=============================================================================%
  8. clear all;
  9. clc;
  10. %--------------- Initialization -----------------------------------------
  11. %-------------------------------------------
  12. % Speed of Light
  13. light_speed = 3e8;
  14. % Coordinates of APs
  15. AP = [0 0; 0 10; 10 0]; % in meters
  16. % Number of Access Points (AP)
  17. num_ap = length(AP);
  18. % Tag's initial coordinate
  19. % Tag = [5 4];
  20.     
  21.     
  22. % Pulse shape
  23. pulse_order = 1; % 0-Gaussian pulse, 1-First derivative of Gaussian pulse, 2 - Second derivative;
  24. % Number of bits
  25. num_bits = 100;
  26. % Pulse repetition interval, PRI
  27. pri = 200e-9;
  28. % The SNR range (in dB)
  29. EbNo = -15;
  30. fs = 20e9; %sample rate-10 times the highest frequency in GHz
  31. ts = 1/fs; %sample period
  32. t = [(-1.5E-9-ts):ts:(1.5E-9-ts)]; %vector with sample instants
  33. t1 = .5E-9; %pulse width(0.5 nanoseconds)
  34. %-------------------------------------------------------------------------
  35. %----------------- PRI -------------------------------------------
  36. A =1;%positive value gives negative going monopulse;neg value gives
  37.    %positive going monopulse
  38. [y] = monocycle(fs, ts, t, t1, A, pulse_order); % Generate Gaussian pulse
  39. n_pulse_pri = round(pri/ts);               % Sampling of PRI
  40. sig = zeros(1,n_pulse_pri);    
  41. sig(1:length(y)) = y;                 % One pulse in one PRI
  42. %-----------------------------------------------------------------
  43. shift_const = 40;
  44. kkk = 0;
  45. % for EbNo = -15:5:0
  46.     kkk = kkk + 1;
  47.     
  48.         % Tag's initial coordinate
  49.     a = round(rand * 10);
  50.     b = round(rand * 10);
  51.     Tag = [a b];
  52.     
  53. % Distance calculation between each AP and the Tag, IDEAL case
  54. for ii = 1:num_ap
  55.     dist_ap_tag(ii) = dist_t(AP(ii,:), Tag);
  56.     % Time from each AP to Tag
  57.     time_ap_tag(ii) = dist_ap_tag(ii)/light_speed;
  58. end
  59.     %++++++++++++++++ TRANSMISSION +++++++++++++++++++++++++++++++
  60.     
  61.     for jj = 1:num_bits
  62.             % From TAG to AP1
  63.             del_sample_ap_tag = round(time_ap_tag(1)/ts);
  64.             xx = zeros(1,del_sample_ap_tag);
  65.             % Delayed signals from AP1 to Tag
  66.             del_sig_ap1_tag(jj,:) = [xx sig(1:end-length(xx))];
  67.             h = uwb_channel(dist_ap_tag(1));
  68. % % % %             kk = 0;
  69. % % % %             for ll = 1:length(h)
  70. % % % %                add_chnl = conv(del_sig_ap1_tag(jj,:), h(ll));
  71. % % % %                added(ll,:) = [zeros(1,shift_const*kk) add_chnl(1:end - shift_const*kk)];
  72. % % % %                kk = kk + 1;
  73. % % % %             end
  74. % % % %             ap1_tag_chan(jj, :) =  sum(added);
  75.             conv_data = conv(del_sig_ap1_tag(jj,:), h);
  76.             ap1_tag_chan(jj, :) = conv_data(1:length(sig));
  77.     %         chan_ap1_tag(jj,:) = ap1_tag_chan(1:length(del_sig_ap1_tag));
  78.             % From TAG to AP2
  79.             del_sample_ap_tag = round(time_ap_tag(2)/ts);
  80.             xx = zeros(1,del_sample_ap_tag);
  81.             % Delayed signals from AP1 to Tag
  82.             del_sig_ap2_tag(jj,:) = [xx sig(1:end-length(xx))];
  83.             h = uwb_channel(dist_ap_tag(2));
  84. % % % %             kk = 0;
  85. % % % %             for ll = 1:length(h)
  86. % % % %                add_chnl = conv(del_sig_ap2_tag(jj,:), h(ll));
  87. % % % %                added(ll,:) = [zeros(1,shift_const*kk) add_chnl(1:end - shift_const*kk)];
  88. % % % %                kk = kk + 1;
  89. % % % %             end
  90. % % % %             ap2_tag_chan(jj, :) =  sum(added);
  91.             conv_data = conv(del_sig_ap2_tag(jj,:), h);
  92.             ap2_tag_chan(jj, :) = conv_data(1:length(sig));
  93.             % From TAG to AP3
  94.             del_sample_ap_tag = round(time_ap_tag(3)/ts);
  95.             xx = zeros(1,del_sample_ap_tag);
  96.             % Delayed signals from AP1 to Tag
  97.             del_sig_ap3_tag(jj,:) = [xx sig(1:end-length(xx))];
  98.             h = uwb_channel(dist_ap_tag(3));
  99. % % % %             kk = 0;
  100. % % % %             for ll = 1:length(h)
  101. % % % %                add_chnl = conv(del_sig_ap3_tag(jj,:), h(ll));
  102. % % % %                added(ll,:) = [zeros(1,shift_const*kk) add_chnl(1:end - shift_const*kk)];
  103. % % % %                kk = kk + 1;
  104. % % % %             end
  105. % % % %             ap3_tag_chan(jj, :) =  sum(added);
  106.             conv_data = conv(del_sig_ap3_tag(jj,:), h);
  107.             ap3_tag_chan(jj, :) = conv_data(1:length(sig));
  108.     end
  109.     %-------------------------------------------------------
  110.     % Additive White Gaussian Noise (AWGN) Channel ---------
  111.     noise_var   = 10^(-EbNo/10);
  112.     for jj = 1:num_bits
  113.         ap1_tag_chan_wgn(jj,:) = ap1_tag_chan(jj,:)/std(ap1_tag_chan(jj,:)) + randn(1,length(ap1_tag_chan(jj,:))) .* sqrt(noise_var);
  114.         ap2_tag_chan_wgn(jj,:) = ap2_tag_chan(jj,:)/std(ap2_tag_chan(jj,:)) + randn(1,length(ap2_tag_chan(jj,:))) .* sqrt(noise_var);
  115.         ap3_tag_chan_wgn(jj,:) = ap3_tag_chan(jj,:)/std(ap3_tag_chan(jj,:)) + randn(1,length(ap3_tag_chan(jj,:))) .* sqrt(noise_var);
  116.     end
  117.     %-------------------------------------------------------
  118.     %------------------- AP1 receiver ------------------------------
  119.     % Correlator
  120.     received_signl_ap1 = sum(ap1_tag_chan_wgn)/num_bits;
  121.     xc = xcorr(y, received_signl_ap1);
  122.     [a,delay1]=max(xc);
  123.     TOA_1 = (length(sig) - delay1) * ts;
  124.     %------------------- AP2 receiver ------------------------------
  125.     % Correlator
  126.     received_signl_ap2 = sum(ap2_tag_chan_wgn)/num_bits;
  127.     xc = xcorr(y, received_signl_ap2);
  128.     [a,delay2]=max(xc);
  129.     TOA_2 = (length(sig) - delay2) * ts;
  130.     %------------------- AP3 receiver ------------------------------
  131.     % Correlator
  132.     received_signl_ap3 = sum(ap3_tag_chan_wgn)/num_bits;
  133.     xc = xcorr(y, received_signl_ap3);
  134.     [a,delay3] = max(xc);
  135.     TOA_3 = (length(sig) - delay3) * ts;
  136.     %---------------------------------------------------------------
  137.     time_ap_tag = time_ap_tag
  138.     time_dur = [TOA_1 TOA_2 TOA_3]
  139.     toa_error(1,kkk) = toa(AP, Tag, time_dur, light_speed)
  140.     
  141. % end
  142. % plot(-15:5:0, toa_error);