fluct_loss.m
上传用户:szahd2008
上传日期:2020-09-25
资源大小:1275k
文件大小:2k
源码类别:

传真(Fax)编程

开发平台:

Matlab

  1. function [Lf,Pd_Sw5] = fluct_loss(pd, pfa, np, sw_case)
  2. % This fucntion calculates the SNR fluctiation loss for Swerling models
  3. % A negative Lf value indicates SNR gain instead of loss 
  4. format long
  5. % *************** Swerling 5 case ****************
  6. % check to make sure that np>1
  7. if (np ==1)
  8.     nfa = 1/pfa;
  9.     b = sqrt(-2.0 * log(pfa));
  10.     Pd_Sw5 = 0.001;
  11.     snr_inc = 0.1 - 0.005;
  12.     while(Pd_Sw5 <= pd)
  13.         snr_inc = snr_inc + 0.005;
  14.         a = sqrt(2.0 * 10^(.1*snr_inc));
  15.         Pd_Sw5 = marcumsq(a,b);
  16.     end
  17.     PD_SW5 = Pd_Sw5;
  18.     SNR_SW5 = snr_inc;
  19. else
  20.     % np > 1 use MATLAB function pd_swerling5.m
  21.     snr_inc = 0.1 - 0.005;
  22.     Pd_Sw5 = 0.001;
  23.     while(Pd_Sw5 <= pd)
  24.         snr_inc = snr_inc + 0.005;
  25.         Pd_Sw5 = pd_swerling5(pfa, 1, np, snr_inc);
  26.     end
  27.     PD_SW5 = Pd_Sw5;
  28.     SNR_SW5 = snr_inc;
  29. end
  30. if sw_case == 5
  31.     Lf = 0.;
  32.     return
  33. end
  34. % *************** End Swerling 5 case ************
  35. % *************** Swerling 1 case ****************
  36. % compute the false alarm number
  37. nfa =  log(2) / pfa;
  38. if (sw_case == 1)
  39.     Pd_Sw1 = 0.001;
  40.     snr_inc = 0.1 - 0.005;
  41.     while(Pd_Sw1 <= pd)
  42.         snr_inc = snr_inc + 0.005;
  43.         Pd_Sw1 = pd_swerling1(nfa, np, snr_inc);
  44.     end
  45.     PD_SW1 = Pd_Sw1;
  46.     SNR_SW1 = snr_inc;
  47.     Lf = SNR_SW1 - SNR_SW5;
  48. end
  49. % *************** End Swerling 1 case ************
  50. % *************** Swerling 2 case ****************
  51. if (sw_case == 2)
  52.     Pd_Sw2 = 0.001;
  53.     snr_inc = 0.1 - 0.005;
  54.     while(Pd_Sw2 <= pd)
  55.         snr_inc = snr_inc + 0.005;
  56.         Pd_Sw2 = pd_swerling2(nfa, np, snr_inc);
  57.     end
  58.     PD_SW2 = Pd_Sw2;
  59.     SNR_SW2 = snr_inc;
  60.     Lf = SNR_SW2 - SNR_SW5;
  61. end
  62. % *************** End Swerling 2 case ************
  63. % *************** Swerling 3 case ****************
  64. if (sw_case == 3)
  65.     Pd_Sw3 = 0.001;
  66.     snr_inc = 0.1 - 0.005;
  67.     while(Pd_Sw3 <= pd)
  68.         snr_inc = snr_inc + 0.005;
  69.         Pd_Sw3 = pd_swerling3(nfa, np, snr_inc);
  70.     end
  71.     PD_SW3 = Pd_Sw3;
  72.     SNR_SW3 = snr_inc;
  73.     Lf = SNR_SW3 - SNR_SW5;
  74. end
  75. % *************** End Swerling 3 case ************
  76. % *************** Swerling 4 case ****************
  77. if (sw_case == 4)
  78.     Pd_Sw4 = 0.001;
  79.     snr_inc = 0.1 - 0.005;
  80.     while(Pd_Sw4 <= pd)
  81.         snr_inc = snr_inc + 0.005;
  82.         Pd_Sw4 = pd_swerling4(nfa, np, snr_inc);
  83.     end
  84.     PD_SW4 = Pd_Sw4;
  85.     SNR_SW4 = snr_inc;
  86.     Lf = SNR_SW4 - SNR_SW5;
  87. end
  88. % *************** End Swerling 4 case ************
  89. return