MLDesign Technologies, Inc.

Mainnavigation

Subnavigation

BORDER

 
 
 

Pagecontent

Deep Fade Kalman Filter Design

This example shows a SatLab plots for a design test of a Kalman filter to cope with time<br />delay and doppler during deep fade. These plots are from the period of maximum change in the rate of deep fade.

The script to generate these plots is shown below.

Figure 1: Output from deep fade Kalman filter analysis
Script - Deep Fade Kalman Filter
  1. %demo Deep Fade Kalman Filter
  2. %
  3. % The requirements for handsets for GMPCS satellite systems is
  4. % that they do not loose synchronization during short time
  5. % deep fades. They need to include a filter to predict time
  6. % delay and doppler during the time of a deep fade where
  7. % synchronization signals are not received from a satellite.
  8. % This filter needs to meet the requirements after receiving
  9. % synchronization time delay and doppler synchronization
  10. % data for a minimum specified time.
  11. %
  12. % In this demo a Kalman filter is designed and analyzed
  13. % that easily meets the requirements to predict dt and df
  14. % for 128 frames after receiving synchronization data from
  15. % a satellite for 48 frames, with associated measurement
  16. % errors. The results are for the time of maximum rate of
  17. % change of df.
  18. %
  19. % The Kalman Filter also smoothes DTOA and DFOA for the ISU
  20. % SatLab demo: Horst C. Salzwedel
  21.  
  22. help demoDeepFadeKF
  23.  
  24. % Initialization
  25. removeAll;
  26. clearGraphic();
  27. clear;
  28.  
  29. % L-band frame length = 90 ms
  30. LBframe = .090;
  31.  
  32. % L-band frequency
  33. fLB = 1.62e9;
  34.  
  35. % time constant tau = 600 seconds
  36. tau = 1200;
  37.  
  38. % standard deviations
  39. rand("normal");       % set random number generator to 'normal'
  40. rand("seed", 260342); % set seed for repeatability of results
  41.  
  42. sigdtm  = 4e-6;       % measurement error 4 microseconds
  43. sigdfm  = 20;         % measurement error 20 Hz
  44. sigdtr  = 2e-6;       % reporting error 2 microseconds
  45. sigdfr  = 9.8;        % reporting error 9.8 Hz
  46. siga    = 5e-5;
  47. sigDTOA = sigdtm + sigdtr;
  48. sigDFOA = sigdfm + sigdfr;
  49.  
  50. % state distribution matrix
  51. A = [010
  52.      001
  53.      00 -1/tau];
  54.  
  55. B = [0
  56.      0
  57.      1];
  58.  
  59. % output matrix
  60. C = [1/cLight  0           0
  61.      0         fLB/cLight  0];
  62.  
  63. % continous to discrete conversion
  64. [Phi, Gam] = c2d(A, B, LBframe);
  65. Q          = siga;
  66.  
  67. % initialization
  68. loadreplaceAll("./IRsingle.data");
  69. setSimEpoch(2002,3,26,11,58,54.91185); % 0 sec
  70. setSimTime(0);
  71. g    = GeoPosition(3);
  72. g    = g(1:2,:);
  73. lat0 = g(1, 1);
  74. lon0 = g(2, 1);
  75.  
  76. setStationParameter('E1', I_earth, 0, lat0*r2d, lon0*r2d, 0);
  77. setSimEpoch(2002,3,26,11,58,34.91185); % -20 sec
  78. setSimTime(0);
  79. setSimStepSize(LBframe);
  80.  
  81. % initialization of ISU
  82. [d, r, a, e, v] = RelPosition('E1');
  83. dfISU0 = r(2)/cLight*fLB;
  84. dfISU  = dfISU0;
  85. dtISU0 = d(2)/cLight;
  86. dtISU  = dtISU0;
  87.  
  88. % state vector
  89. x = [dtISU*cLight dfISU*cLight/fLB 0];
  90. P = diag([1e1 1e-6 1e-2]);
  91.  
  92. % covariance matrix R
  93. R = [sigDTOA^2   0
  94.      0           .8*sigDFOA^2];
  95.  
  96. % initialization of SV
  97. j     = 0;
  98. iSV   = 0;
  99. dtsum = 0;     % summer for dt averaging
  100. dfsum = 0;     % summer for df averaging
  101. DTOA  = 0;     % SV time delay error measurement
  102. DFOA  = 0;     % SV doppler frequency error measurement
  103. ii    = [-47:127];
  104.  
  105. for i = ii,
  106.     iSV = iSV + 1;
  107.     j = j + 1;
  108.     stepSim;   % step simulation forward by 1 L-band frame
  109.  
  110.     %predict time delay and doppler frequency
  111.     x = Phi*x; % Kalman Filter time update
  112.     y = C*x;
  113.     dtISU = y(1);
  114.     dfISU = y(2);
  115.    
  116.     % Doppler and time delay of up/down link
  117.     [d, r, a, e, v] = RelPosition('E1');
  118.     Mdf(j) = r(2)/cLight*fLB;      % store true df in array for plotting
  119.     Mdt(j) = d(2)/cLight;          % store true dt in array for plotting
  120.  
  121.     % measurement of dt and df by SV
  122.     dtsum = dtsum - dtISU + Mdt(j) + sigdtm*rand(1);
  123.     dfsum = dfsum - dfISU + Mdf(j) + sigdfm*rand(1);
  124.     % measurement update
  125.     if(iSV == 4)
  126.         DTOA   = dtsum/4 + sigdtr*rand(1);
  127.         DFOA   = dfsum/4 + sigdfr*rand(1);
  128.         dtsum  = 0;
  129.         dfsum  = 0;
  130.         iSV    = 0;
  131.         dtISUm = DTOA;
  132.         dfISUm = DFOA;
  133.         if i < 0, % time before fade
  134.             y_m = [DTOA
  135.             DFOA]; % measurements from satellite
  136.             M = Phi*P*Phi` + Gam*Q*Gam`;  % error covariance time update
  137.             K = M*C`*inv(C*M*C` + R);     % Kalman filter gain
  138.             x = x + K*(y_m);              % measurement update
  139.             P = M - K*C*M;                % error covariance measurement
  140.            
  141.             update
  142.             imeasurement = j;
  143.         endif
  144.     endif % 4th frame
  145.  
  146.     MdtISU(j) = dtISU+DTOA;
  147.     MdfISU(j) = dfISU+DFOA;
  148.  
  149.     % estimate y
  150.     y_e = C*x;
  151.     EdtISU(j) = y_e(1);
  152.     EdfISU(j) = y_e(2);
  153. endfor
  154. erase
  155.  
  156. title('ISU Time Delay and Doppler Prediction Filter')
  157.  
  158. window('221')
  159. iim=ii(1:imeasurement);
  160. plot(ii`*LBframe, Mdt*1e3, 'green',
  161.      iim`*LBframe, MdtISU(1:imeasurement)*1e3, 'red',
  162.      ii`*LBframe, EdtISU*1e3, 'blue', 'grid')
  163. xlabel('time [sec]');
  164. ylabel('dt [ms]');
  165. wtext(1,2.645,'Deep Fade')
  166. wtext(-4,2.622,'DTOA','red')
  167.  
  168. window('223')
  169. plot(ii`*LBframe, (EdtISU - Mdt)*1e6, 'grid', 'blue',
  170.      iim`*LBframe, (MdtISU(1:imeasurement) - Mdt(1:imeasurement))*1e6,
  171.      'red');
  172. xlabel('time [sec]');
  173. ylabel('dtISU - dt (ms)',
  174.        'll ll sgls');
  175. title(' Spec = +-60 (ms) ',
  176.       ' lll sgls ')
  177. wtext(1,8,'Deep Fade')
  178.  
  179. window('222')
  180. plot(ii`*LBframe, Mdf/1000, 'grid', 'green',
  181.      iim`*LBframe, MdfISU(1:imeasurement)/1000, 'red',
  182.      ii`*LBframe, EdfISU/1000, 'blue');
  183. xlabel('time [sec]');
  184. ylabel('df for 1.62 GHz [KHz]');
  185. wtext(1,-1,'Deep Fade')
  186. wtext(-4,-7,'DFOA','red')
  187.  
  188. window('224')
  189. plot(ii`*LBframe, (EdfISU - Mdf), 'grid', 'blue',
  190.      iim`*LBframe, (MdfISU(1:imeasurement) - Mdf(1:imeasurement)),
  191.      'red');
  192. xlabel('time [sec]');
  193. ylabel('dfISU - df for 1.62 GHz [Hz]');
  194. title(' Spec = +- 600 Hz ',
  195.       ' lll l ')
  196. wtext(1,80,'Deep Fade')
  197.