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

通讯/手机编程

开发平台:

Matlab

  1. %=============================================================================%
  2. %=                Asynchronous UWB position location system                  =%
  3. %= Programmed by Jasurbek Khodjaev                                           =%
  4. %= Yeungnam University Mobile Communication Lab.                             =%
  5. %= MCL 2006                                                                  =%
  6. %=============================================================================%
  7. clear all;
  8. clc;
  9. %--------------- Initialization -----------------------------------------
  10. %-------------------------------------------
  11. % Speed of Light
  12. light_speed = 3e8;
  13. % Coordinates of APs
  14. AP = [0 0; 0 20; 20 0]; % in meters
  15. % Number of Access Points (AP)
  16. num_ap = length(AP);
  17. % Tag's initial coordinate
  18. Tag = [14 12];
  19. % Pulse shape
  20. pulse_order = 1; % 0-Gaussian pulse, 1-First derivative of Gaussian pulse, 2 - Second derivative;
  21. % Number of bits
  22. num_bits = 1000;
  23. % Pulse repetition interval, PRI
  24. pri = 200e-9;
  25. % The SNR range (in dB)
  26. % EbNo = 10000;
  27. fs = 20e9; %sample rate-10 times the highest frequency in GHz
  28. ts = 1/fs; %sample period
  29. t = [(-1.5E-9-ts):ts:(1.5E-9-ts)]; %vector with sample instants
  30. t1 = .5E-9; %pulse width(0.5 nanoseconds)
  31. %-------------------------------------------------------------------------
  32. %----------------- Transmitter -------------------------------------------
  33. A =1;%positive value gives negative going monopulse;neg value gives
  34.    %positive going monopulse
  35. [y] = monocycle(fs, ts, t, t1, A, pulse_order); % Generate Gaussian pulse
  36. n_pulse_pri = round(pri/ts);               % Sampling of PRI
  37. sig = zeros(1,n_pulse_pri);    
  38. sig(1:length(y)) = y;                 % One pulse in one PRI
  39. % Distance calculation between each AP and the Tag, IDEAL case
  40. for ii = 1:num_ap
  41.     dist_ap_tag(ii) = dist_t(AP(ii,:), Tag);
  42.     % Time from each AP to Tag
  43.     time_ap_tag(ii) = dist_ap_tag(ii)/light_speed;
  44. end
  45. % Distance from AP1 to other APs
  46. % AP1 is always master AP
  47. for ii = 2:num_ap
  48.     dist_ap_ap(ii-1) = dist_t(AP(1,:), AP(ii,:));
  49.     time_ap_ap(ii-1) = dist_ap_ap(ii-1)/light_speed;
  50. end
  51. shift_const = 40;
  52. kkk = 0;
  53. for EbNo = -40:5:-30
  54.     kkk = kkk + 1;
  55. for nloop = 1:1
  56. %++++++++++++++++ TRANSMISSION +++++++++++++++++++++++++++++++
  57.    
  58. for jj = 1:num_bits
  59.     % From AP1 to TAG
  60.     del_sample_ap_tag = round(time_ap_tag(1)/ts);
  61.     xx = zeros(1,del_sample_ap_tag);
  62.     % Delayed signals from AP1 to Tag
  63.     del_sig_ap1_tag(jj,:) = [xx sig(1:end-length(xx))];
  64.     h = uwb_channel(dist_ap_tag(1));
  65.     conv_data = conv(del_sig_ap1_tag(jj,:), h);
  66.     ap1_tag_chan(jj, :) = conv_data(1:length(sig));
  67. % %     kk = 0;
  68. % %     for ll = 1:length(h)
  69. % %      add_chnl = conv(del_sig_ap1_tag(jj,:), h(ll));
  70. % %         added(ll,:) = [zeros(1,shift_const*kk) add_chnl(1:end - shift_const*kk)];
  71. % %         kk = kk + 1;
  72. % %     end
  73. % %     ap1_tag_chan(jj, :) =  sum(added);
  74.     % From AP1 to AP2
  75.     del_sample_ap_tag = round(time_ap_ap(1)/ts);
  76.     xx = zeros(1,del_sample_ap_tag);
  77.     % Delayed signals from AP1 to AP2
  78.     del_sig_ap2_tag(jj,:) = [xx sig(1:end-length(xx))];
  79.     h = uwb_channel(dist_ap_ap(1));
  80.     conv_data = conv(del_sig_ap2_tag(jj,:), h);
  81.     ap1_ap2_chan(jj, :) = conv_data(1:length(sig));
  82. % %     kk = 0;
  83. % %     for ll = 1:length(h)
  84. % %      add_chnl = conv(del_sig_ap2_tag(jj,:), h(ll));
  85. % %         added(ll,:) = [zeros(1,shift_const*kk) add_chnl(1:end - shift_const*kk)];
  86. % %         kk = kk + 1;
  87. % %     end
  88. % %     ap1_ap2_chan(jj, :) =  sum(added);
  89.     % From AP1 to AP3
  90.     del_sample_ap_tag = round(time_ap_ap(2)/ts);
  91.     xx = zeros(1,del_sample_ap_tag);
  92.     % Delayed signals from AP1 to AP3
  93.     del_sig_ap3_tag(jj,:) = [xx sig(1:end-length(xx))];
  94.     h = uwb_channel(dist_ap_ap(2));
  95.     conv_data = conv(del_sig_ap3_tag(jj,:), h);
  96.     ap1_ap3_chan(jj, :) = conv_data(1:length(sig));
  97. % %     kk = 0;
  98. % %     for ll = 1:length(h)
  99. % %      add_chnl = conv(del_sig_ap2_tag(jj,:), h(ll));
  100. % %         added(ll,:) = [zeros(1,shift_const*kk) add_chnl(1:end - shift_const*kk)];
  101. % %         kk = kk + 1;
  102. % %     end
  103. % %     ap1_ap3_chan(jj, :) =  sum(added);
  104. end
  105. EbNo
  106. %-------------------------------------------------------
  107. % Additive White Gaussian Noise (AWGN) Channel ---------
  108. noise_var   = 0.5 * 10^(-EbNo/10);
  109. for jj = 1:num_bits
  110. ap1_tag_chan_wgn(jj,:) = ap1_tag_chan(jj,:)/std(ap1_tag_chan(jj,:)) + randn(1,length(ap1_tag_chan(jj,:))) .* sqrt(noise_var);
  111.     ap1_ap2_chan_wgn(jj,:) = ap1_ap2_chan(jj,:)/std(ap1_ap2_chan(jj,:)) + randn(1,length(ap1_ap2_chan(jj,:))) .* sqrt(noise_var);
  112.     ap1_ap3_chan_wgn(jj,:) = ap1_ap3_chan(jj,:)/std(ap1_ap3_chan(jj,:)) + randn(1,length(ap1_ap3_chan(jj,:))) .* sqrt(noise_var);
  113. end
  114. %-------------------------------------------------------
  115. %------------------- TAG receiver ------------------------------
  116. % Correlator
  117. received_signl_ap1 = sum(ap1_tag_chan_wgn)/num_bits;
  118. xc = xcorr(y, received_signl_ap1);
  119. [a,delay1]=max(xc);
  120. TOA_tag = (length(sig) - delay1) * ts;
  121. for jj = 1:num_bits
  122.     % From TAG to AP1
  123.     del_sample_ap_tag = round(time_ap_tag(1)/ts);
  124.     xx = zeros(1,del_sample_ap_tag);
  125.     % Delayed signals from AP1 to Tag
  126.     del_sig_ap1_tag(jj,:) = [xx sig(1:end-length(xx))];
  127.     h = uwb_channel(dist_ap_tag(1));
  128.     conv_data = conv(del_sig_ap1_tag(jj,:), h);
  129.     tag_ap1_chan(jj, :) = conv_data(1:length(sig));
  130. % %     kk = 0;
  131. % %     for ll = 1:length(h)
  132. % %      add_chnl = conv(del_sig_ap1_tag(jj,:), h(ll));
  133. % %         added(ll,:) = [zeros(1,shift_const*kk) add_chnl(1:end - shift_const*kk)];
  134. % %         kk = kk + 1;
  135. % %     end
  136. % %     tag_ap1_chan(jj, :) =  sum(added);
  137.     
  138.     % From TAG to AP2
  139.     del_sample_ap_tag = round(time_ap_tag(2)/ts);
  140.     xx = zeros(1,del_sample_ap_tag);
  141.     % Delayed signals from AP1 to Tag
  142.     del_sig_ap2_tag(jj,:) = [xx sig(1:end-length(xx))];
  143.     h = uwb_channel(dist_ap_tag(2));
  144.     conv_data = conv(del_sig_ap2_tag(jj,:), h);
  145.     tag_ap2_chan(jj, :) = conv_data(1:length(sig));
  146. % %     kk = 0;
  147. % %     for ll = 1:length(h)
  148. % %      add_chnl = conv(del_sig_ap2_tag(jj,:), h(ll));
  149. % %         added(ll,:) = [zeros(1,shift_const*kk) add_chnl(1:end - shift_const*kk)];
  150. % %         kk = kk + 1;
  151. % %     end
  152. % %     tag_ap2_chan(jj, :) =  sum(added);
  153.     % From TAG to AP3
  154.     del_sample_ap_tag = round(time_ap_tag(3)/ts);
  155.     xx = zeros(1,del_sample_ap_tag);
  156.     % Delayed signals from AP1 to Tag
  157.     del_sig_ap3_tag(jj,:) = [xx sig(1:end-length(xx))];
  158.     h = uwb_channel(dist_ap_tag(3));
  159.     conv_data = conv(del_sig_ap3_tag(jj,:), h);
  160.     tag_ap3_chan(jj, :) =  conv_data(1:length(sig));
  161.     
  162. % %     kk = 0;
  163. % %     for ll = 1:length(h)
  164. % %      add_chnl = conv(del_sig_ap3_tag(jj,:), h(ll));
  165. % %         added(ll,:) = [zeros(1,shift_const*kk) add_chnl(1:end - shift_const*kk)];
  166. % %         kk = kk + 1;
  167. % %     end
  168. % %     tag_ap3_chan(jj, :) =  sum(added);
  169.     
  170. end
  171. %-------------------------------------------------------
  172. % Additive White Gaussian Noise (AWGN) Channel ---------
  173. noise_var   = 0.5 * 10^(-EbNo/10);
  174. for jj = 1:num_bits
  175. tag_ap1_chan_wgn(jj,:) = tag_ap1_chan(jj,:)/std(tag_ap1_chan(jj,:)) + randn(1,length(tag_ap1_chan(jj,:))) .* sqrt(noise_var);
  176.     tag_ap2_chan_wgn(jj,:) = tag_ap2_chan(jj,:)/std(tag_ap2_chan(jj,:)) + randn(1,length(tag_ap2_chan(jj,:))) .* sqrt(noise_var);
  177.     tag_ap3_chan_wgn(jj,:) = tag_ap3_chan(jj,:)/std(tag_ap3_chan(jj,:)) + randn(1,length(tag_ap3_chan(jj,:))) .* sqrt(noise_var);
  178. end
  179. %-------------------------------------------------------
  180. %------------------- AP 1's RECEIVER -------------------
  181. % Correlator
  182. received_tag_ap1 = sum(tag_ap1_chan_wgn)/num_bits;
  183. xc = xcorr(y, received_tag_ap1);
  184. [a,delay1]=max(xc);
  185. TOA_ap1 = (length(sig) - delay1) * ts;
  186. TOA_1 = (TOA_ap1 + TOA_tag)/2;
  187. %------------------- AP 2's RECEIVER -------------------
  188. % Correlator
  189. received_ap1_ap2 = sum(ap1_ap2_chan_wgn) / num_bits;
  190. received_tag_ap2 = sum(tag_ap2_chan_wgn) / num_bits;
  191. xc = xcorr(y, received_ap1_ap2);
  192. [a,delay2]=max(xc);
  193. delay_from_ap1_sampl = round(length(sig) - delay2);
  194. delayed_from_ap1 = delay_from_ap1_sampl * ts;
  195. timing = delayed_from_ap1 - time_ap_ap(1);
  196. y2 = [zeros(1,round(timing/ts)) y];
  197. xc = xcorr(y2, received_tag_ap2);
  198. [a,delay]=max(xc);
  199. timeDuration_ap1_tag = (length(sig) - delay) * ts;
  200. TOA_2 = timeDuration_ap1_tag - TOA_1 + TOA_tag;
  201. %------------------- AP3 receiver ------------------------------
  202. % Averaging received signals over time
  203. received_tag_ap3 = sum(tag_ap3_chan_wgn) ./ num_bits;
  204. received_ap1_ap3 = sum(ap1_ap3_chan_wgn) ./ num_bits;
  205. % % received_ap3 = sum(tag_ap3_chan_wgn) ./ num_bits;
  206. % % received_from_ap1 = sum(ap1_ap3_chan_wgn) ./ num_bits;
  207. xc3 = xcorr(y, received_ap1_ap3);
  208. [a3, delay3] = max(xc3);
  209. delay_from_ap1_sampl = round(length(sig) - delay3);
  210. delayed_from_ap1 = delay_from_ap1_sampl * ts;
  211. timing = delayed_from_ap1 - time_ap_ap(2);
  212. y3 = [zeros(1,round(timing/ts)) y];
  213. xc = xcorr(y3, received_tag_ap3);
  214. [a,delay]=max(xc);
  215. timeDuration_ap1_tag = (length(sig) - delay) * ts;
  216. TOA_3 = timeDuration_ap1_tag - TOA_1 + TOA_tag;
  217. time_dur = [TOA_1 TOA_2 TOA_3];
  218. toa_error(kkk,nloop) = toa(AP, Tag, time_dur, light_speed)
  219. end % nloop
  220. end % EbNo =