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

通讯/手机编程

开发平台:

Windows_Unix

  1. %--------------------------------------------------------------------
  2. % parameter_Gauss.m -------------------------------------------------
  3. % Program for the computation of the discrete Doppler frequencies,
  4. % Doppler coefficients, and Doppler phases by using the Gaussian
  5. % power spectral density.
  6. %
  7. % Used m-files: LPNM_opt_Gauss.m, fun_Gauss.m,
  8. % grad_Gauss.m, acf_mue.m
  9. %--------------------------------------------------------------------
  10. % [f_i_n,c_i_n,theta_i_n]=parameter_Gauss(METHOD,N_i,sigma_0_2,...
  11. % f_max,f_c,PHASE,PLOT)
  12. %--------------------------------------------------------------------
  13. % Explanation of the input parameters:
  14. %
  15. % METHOD:
  16. % |----------------------------------------------|------------------|
  17. % | Methods for the computation of the discrete | Input |
  18. % | Doppler frequencies and Doppler coefficients | |
  19. % |----------------------------------------------|------------------|
  20. % |----------------------------------------------|------------------|
  21. % | Method of equal distances (MED) | 'ed_g' |
  22. % |----------------------------------------------|------------------|
  23. % | Mean square error method (MSEM) | 'ms_g' |
  24. % |----------------------------------------------|------------------|
  25. % | Method of equal areas (MEA) | 'ea_g' |
  26. % |----------------------------------------------|------------------|
  27. % | Monte Carlo method (MCM) | 'mc_g' |
  28. % |----------------------------------------------|------------------|
  29. % | Lp-norm method (LPNM) | 'lp_g' |
  30. % |----------------------------------------------|------------------|
  31. % | Method of exact Doppler spread (MEDS) | 'es_g' |
  32. % |----------------------------------------------|------------------|
  33. %
  34. % N_i: number of harmonic functions
  35. % sigma_0_2: average power of the real deterministic Gaussian
  36. % process mu_i(t)
  37. % f_max: maximum Doppler frequency
  38. % f_c: 3-dB-cutoff frequency
  39. %
  40. % PHASE:
  41. % |----------------------------------------------|------------------|
  42. % | Methods for the computation of the Doppler | Input |
  43. % | phases | |
  44. % |----------------------------------------------|------------------|
  45. % |----------------------------------------------|------------------|
  46. % | Random Doppler phases | 'rand' |
  47. % |----------------------------------------------|------------------|
  48. % | Permuted Doppler phases | 'perm' |
  49. % |----------------------------------------------|------------------|
  50. %
  51. % PLOT: plot of the ACF and the PSD of mu_i(t), if PLOT==1
  52. function [f_i_n,c_i_n,theta_i_n]=parameter_Gauss(METHOD,N_i,...
  53. sigma_0_2,f_max,f_c,PHASE,PLOT)
  54. if nargin<7,
  55. error('Not enough input parameters')
  56. end
  57. sigma_0=sqrt(sigma_0_2);
  58. kappa_c=f_max/f_c;
  59. % Method of equal distances (MED)
  60. if METHOD=='ed_g',
  61. n=(1:N_i)';
  62. f_i_n=kappa_c*f_c/(2*N_i)*(2*n-1);
  63. c_i_n=sigma_0*sqrt(2)*sqrt(erf(n*kappa_c*...
  64. sqrt(log(2))/N_i)-erf((n-1)*kappa_c*...
  65. sqrt(log(2))/N_i) );
  66. K=1;
  67. % Mean square error method (MSEM)
  68. elseif METHOD=='ms_g',
  69. n=(1:N_i)';
  70. f_i_n=kappa_c*f_c/(2*N_i)*(2*n-1);
  71. tau_max=N_i/(2*kappa_c*f_c);
  72. N=1E3;
  73. tau=linspace(0,tau_max,N);
  74. f1=exp(-(pi*f_c*tau).^2/log(2));
  75. c_i_n=zeros(size(f_i_n));
  76. for k=1:length(c_i_n),
  77. c_i_n(k)=2*sigma_0*sqrt(trapz(tau,f1.*...
  78. cos(2*pi*f_i_n(k)*tau))/tau_max);
  79. end
  80. K=1;
  81. % Method of equal areas (MEA)
  82. elseif METHOD=='ea_g'
  83. n=(1:N_i)';
  84. c_i_n=sigma_0*sqrt(2/N_i)*ones(size(n));
  85. f_i_n=f_c/sqrt(log(2))*erfinv(n/N_i);
  86. f_i_n(N_i)=f_c/sqrt(log(2))*erfinv(0.9999999);
  87. K=1;
  88. % Monte Carlo method (MCM)
  89. elseif METHOD=='mc_g'
  90.     n=rand(N_i,1);
  91. f_i_n=f_c/sqrt(log(2))*erfinv(n);
  92. c_i_n=sigma_0*sqrt(2/N_i)*ones(size(n));
  93. K=1;
  94. % Lp-norm method (LPNM)
  95. elseif METHOD=='lp_g',
  96. if exist('fminu')~=2
  97. disp([' =====> This method requires ',...
  98. 'the Optimization Toolbox !!'])
  99. return
  100. else
  101. N=1e3;
  102. p=2;
  103. [f_i_n,c_i_n]=LPNM_opt_Gauss(N,f_max,f_c,...
  104. sigma_0_2,p,N_i,PLOT);
  105. K=2;
  106. end
  107. % Method of exact Doppler spread (MEDS)
  108. elseif METHOD=='es_g',
  109. n=(1:N_i)';
  110. c_i_n=sigma_0*sqrt(2/N_i)*ones(size(n));
  111. f_i_n=f_c/sqrt(log(2))*erfinv((2*n-1)/(2*N_i));
  112. K=1;
  113. else
  114. error([setstr(10),'Method is unknown'])
  115. end
  116. % Computation of the Doppler phases:
  117. if PHASE=='rand',
  118. theta_i_n=rand(N_i,1)*2*pi;
  119. elseif PHASE=='perm',
  120. n=(1:N_i)';
  121. Z=rand(size(n));
  122. [dummy,I]=sort(Z);
  123. theta_i_n=2*pi*n(I)/(N_i+1);
  124. end
  125. if PLOT==1,
  126. subplot(1,2,1)
  127. stem([-f_i_n(N_i:-1:1);f_i_n],...
  128. 1/4*[c_i_n(N_i:-1:1);c_i_n].^2)
  129. xlabel('f (Hz)')
  130. ylabel('PSD')
  131. tau_max=N_i/(K*kappa_c*f_c);
  132. tau=linspace(0,tau_max,500);
  133. r_mm=sigma_0_2*exp(-(pi*f_c/sqrt(log(2))*tau).^2);
  134. r_mm_tilde=acf_mue(f_i_n,c_i_n,tau);
  135. subplot(1,2,2)
  136. plot(tau,r_mm,'r-',tau,r_mm_tilde,'g--')
  137. xlabel('tau (s)')
  138. ylabel('ACF')
  139. end