parameter_Jakes.m
上传用户:hbrsgg3
上传日期:2022-08-01
资源大小:5k
文件大小:6k
源码类别:

通讯/手机编程

开发平台:

Windows_Unix

  1. %--------------------------------------------------------------------
  2. % parameter_Jakes.m -------------------------------------------------
  3. %
  4. % Program for the computation of the discrete Doppler frequencies,
  5. % Doppler coefficients and Doppler phases by using the Jakes power
  6. % spectral density.
  7. %
  8. % Used m-files: LPNM_opt_Jakes.m, fun_Jakes.m,
  9. % grad_Jakes.m, acf_mue.m
  10. %--------------------------------------------------------------------
  11. % [f_i_n,c_i_n,theta_i_n]=parameter_Jakes(METHOD,N_i,sigma_0_2,...
  12. % f_max,PHASE,PLOT)
  13. %--------------------------------------------------------------------
  14. % Explanation of the input parameters:
  15. %
  16. % METHOD:
  17. % |----------------------------------------------|------------------|
  18. % | Methods for the computation of the discrete | Input |
  19. % | Doppler frequencies and Doppler coefficients | |
  20. % |----------------------------------------------|------------------|
  21. % |----------------------------------------------|------------------|
  22. % | Method of equal distances (MED) | 'ed_j' |
  23. % |----------------------------------------------|------------------|
  24. % | Mean square error method (MSEM) | 'ms_j' |
  25. % |----------------------------------------------|------------------|
  26. % | Method of equal areas (MEA) | 'ea_j' |
  27. % |----------------------------------------------|------------------|
  28. % | Monte Carlo method (MCM) | 'mc_j' |
  29. % |----------------------------------------------|------------------|
  30. % | Lp-norm method (LPNM) | 'lp_j' |
  31. % |----------------------------------------------|------------------|
  32. % | Method of exact Doppler spread (MEDS) | 'es_j' |
  33. % |----------------------------------------------|------------------|
  34. % | Jakes method (JM) | 'jm_j' |
  35. % |----------------------------------------------|------------------|
  36. %
  37. % N_i: number of harmonic functions
  38. % sigma_0_2: average power of the real deterministic Gaussian
  39. % process mu_i(t)
  40. % f_max: maximum Doppler frequency
  41. %
  42. % PHASE:
  43. % |----------------------------------------------|------------------|
  44. % | Methods for the computation of the Doppler | Input |
  45. % | phases | |
  46. % |----------------------------------------------|------------------|
  47. % |----------------------------------------------|------------------|
  48. % | Random Doppler phases | 'rand' |
  49. % |----------------------------------------------|------------------|
  50. % | Permuted Doppler phases | 'perm' |
  51. % |----------------------------------------------|------------------|
  52. %
  53. % % PLOT: plot of the ACF and the PSD of mu_i(t), if PLOT==1
  54. % function [f_i_n,c_i_n,theta_i_n]=parameter_Jakes(METHOD,N_i,...
  55. % sigma_0_2,f_max,PHASE,PLOT)
  56. METHOD='ms_j'
  57. N_i=25
  58. sigma_0_2=1
  59. f_max=120
  60. PHASE=0.4
  61. PLOT=1
  62. if nargin<6,
  63. error('Not enough input parameters')
  64. end
  65. sigma_0=sqrt(sigma_0_2);
  66. % Method of equal distances (MED)
  67. if METHOD=='ed_j',
  68. n=(1:N_i)';
  69. f_i_n=f_max/(2*N_i)*(2*n-1);
  70. c_i_n=2*sigma_0/sqrt(pi)*(asin(n/N_i)-asin((n-1)/N_i)).^0.5;
  71. K=1;
  72. % Mean square error method (MSEM)
  73. elseif METHOD=='ms_j',
  74. n=(1:N_i)';
  75. f_i_n=f_max/(2*N_i)*(2*n-1);
  76. Tp=1/(2*f_max/N_i);
  77. t=linspace(0,Tp,5E3);
  78. Jo=besselj(0,2*pi*f_max*t);
  79. c_i_n=zeros(size(f_i_n));
  80. for k=1:length(f_i_n),
  81. c_i_n(k)=2*sigma_0*...
  82. sqrt(1/Tp*( trapz( t,Jo.*...
  83. cos(2*pi*f_i_n(k)*t )) ));
  84. end
  85. K=1;
  86. % Method of equal areas (MEA)
  87. elseif METHOD=='ea_j'
  88. n=(1:N_i)';
  89. f_i_n=f_max*sin(pi*n/(2*N_i));
  90. c_i_n=sigma_0*sqrt(2/N_i)*ones(size(n));
  91. K=1;
  92. % Monte Carlo method (MCM)
  93. elseif METHOD=='mc_j'
  94. n=rand(N_i,1);
  95. f_i_n=f_max*sin(pi*n/2);
  96. c_i_n=sigma_0*sqrt(2/N_i)*ones(size(n));
  97. K=1;
  98. % Lp-norm method (LPNM)
  99. elseif METHOD=='lp_j',
  100. if exist('fminu')~=2
  101. disp([' =====> This method requires ',...
  102. 'the Optimization Toolbox !!'])
  103. return
  104. else
  105. N=1E3;
  106. p=2; % Norm
  107. s_o=1;
  108. [f_i_n,c_i_n]=LPNM_opt_Jakes(N,f_max,sigma_0,p,N_i,s_o);
  109. K=1;
  110. end
  111. % Method of exact Doppler spread (MEDS)
  112. elseif METHOD=='es_j',
  113. n=(1:N_i)';
  114. f_i_n=f_max*sin(pi/(2*N_i)*(n-1/2));
  115. c_i_n=sigma_0*sqrt(2/(N_i))*ones(size(f_i_n));
  116. K=1;
  117. % Jakes method (JM)
  118. elseif METHOD=='jm_j',
  119. n=1:N_i-1;
  120. f_i_n=f_max*[[cos(pi*n/(2*(N_i-1/2))),1]',...
  121. [cos(pi*n/(2*(N_i-1/2))),1]'];
  122. c_i_n=2*sigma_0/sqrt(N_i-1/2)*[[sin(pi*n/(N_i-1)),1/2]',...
  123. [cos(pi*n/(N_i-1)),1/2]'];
  124. K=1;
  125. theta_i_n=zeros(size(f_i_n));
  126. PHASE='none';
  127. else
  128. error('Method is unknown')
  129. end
  130. % Computation of the Doppler phases:
  131. if PHASE=='rand',
  132. theta_i_n=rand(N_i,1)*2*pi;
  133. elseif PHASE=='perm',
  134. n=(1:N_i)';
  135. Z=rand(size(n));
  136. [dummy,I]=sort(Z);
  137. theta_i_n=2*pi*n(I)/(N_i+1);
  138. end;
  139. if PLOT==1,
  140. if METHOD=='jm_j'
  141. subplot(2,3,1)
  142. stem([-f_i_n(N_i:-1:1,1);f_i_n(:,1)],...
  143. 1/4*[c_i_n(N_i:-1:1,1);c_i_n(:,1)].^2)
  144. title('i=1')
  145. xlabel('f (Hz)')
  146. ylabel('PSD')
  147. subplot(2,3,2)
  148. stem([-f_i_n(N_i:-1:1,2);f_i_n(:,2)],...
  149. 1/4*[c_i_n(N_i:-1:1,2);c_i_n(:,2)].^2)
  150. title('i=2')
  151. xlabel('f (Hz)')
  152. ylabel('PSD')
  153. tau_max=N_i/(K*f_max);
  154. tau=linspace(0,tau_max,500);
  155. r_mm=sigma_0^2*besselj(0,2*pi*f_max*tau);
  156. r_mm_tilde1=acf_mue(f_i_n(:,1),c_i_n(:,1),tau);
  157. subplot(2,3,4)
  158. plot(tau,r_mm,'r-',tau,r_mm_tilde1,'g--')
  159. title('i=1')
  160. xlabel('tau (s)')
  161. ylabel('ACF')
  162. r_mm_tilde2=acf_mue(f_i_n(:,2),c_i_n(:,2),tau);
  163. subplot(2,3,5)
  164. plot(tau,r_mm,'r-',tau,r_mm_tilde2,'g--')
  165. title('i=2')
  166. xlabel('tau (s)')
  167. ylabel('ACF')
  168. subplot(2,3,3)
  169. stem([-f_i_n(N_i:-1:1,1);f_i_n(:,1)],...
  170. 1/4*[c_i_n(N_i:-1:1,1);c_i_n(:,1)].^2+...
  171. 1/4*[c_i_n(N_i:-1:1,2);c_i_n(:,2)].^2)
  172. title('i=1,2')
  173. xlabel('f (Hz)')
  174. ylabel('PSD')
  175. subplot(2,3,6)
  176. plot(tau,2*r_mm,'r-',tau,r_mm_tilde1+r_mm_tilde2,'g--')
  177. title('i=1,2')
  178. xlabel('tau (s)')
  179. ylabel('ACF')
  180. else
  181. subplot(1,2,1)
  182. stem([-f_i_n(N_i:-1:1);f_i_n],...
  183. 1/4*[c_i_n(N_i:-1:1);c_i_n].^2)
  184. xlabel('f/Hz')
  185. ylabel('LDS')
  186. tau_max=N_i/(K*f_max);
  187. tau=linspace(0,tau_max,500)
  188. r_mm=sigma_0^2*besselj(0,2*pi*f_max*tau);
  189. r_mm_tilde=acf_mue(f_i_n,c_i_n,tau);
  190. subplot(1,2,2)
  191. plot(tau,r_mm,'r-',tau,r_mm_tilde,'g--')
  192. xlabel('tau (s)')
  193. ylabel('ACF')
  194. end
  195. end