MLDesign Technologies, Inc.

Mainnavigation

Subnavigation

BORDER

 
 
 

Pagecontent

Least Squares Deep Fade Filter Design

These SatLab plots comes from testing a least squares filter to cope with time delay and doppler during deep fade. These plots are from the period of maximum change in the rate of deep fade.

Figure 1: Results from LS deep fade filter analysis
Script - Deep Fade Filter
  1. % demo Deep Fade 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 least squares 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. % SatLab demo: Horst C. Salzwedel
  19.  
  20. help demoDeepFadeFilter
  21.  
  22. % Initialization
  23. removeAll;
  24. clearGraphic();
  25. clear;
  26. loadreplaceAll("./IRsingle.data");
  27. setSimEpoch(2002,3,26,11,58,54.91185); %0 sec
  28. setSimTime(0);
  29.  
  30. g    = GeoPosition(3);
  31. g    = g(1:2,:);
  32. lat0 = g(1,1);
  33. lon0 = g(2,1);
  34.  
  35. setStationParameter('E1',I_earth,0,lat0*r2d,lon0*r2d,0);
  36. setSimEpoch(2002,3,26,11,58,34.91185); %-20 sec
  37. setSimTime(0);
  38.  
  39. % L-band Frame length = 90 ms
  40. LBframe = .090;
  41.  
  42. setSimStepSize(LBframe);
  43.  
  44. % Minimum Connection Time = 48 L-band frames
  45. mct = 50*LBframe;
  46.  
  47. % L-band frequency
  48. fLB = 1.62e9;
  49.  
  50. % Initialization of SV
  51. iSV   = 0;
  52. dtsum = 0;
  53. dfsum = 0;
  54.  
  55. % Initialization of ISU
  56. [d,r,a,e,v] = RelPosition('E1');
  57. dfISU0      = r(2)/cLight*fLB;
  58. dfISU       = dfISU0;
  59. dtISU0      = d(2)/cLight;
  60. dtISU       = dtISU0;
  61. dtISUcorrection = 0;
  62. dfISUcorrection = 0;
  63.  
  64. rand("normal");
  65. rand("seed",260342);
  66.  
  67. sigdtm = 4e-6;   %measurement error 4 microseconds
  68. sigdfm = 20;     %measurement error 20 Hz
  69. sigdtr = 2e-6;   %reporting error 2 microseconds
  70. sigdfr = 9.8;    %reporting error 9.8 Hz
  71.  
  72. % Time delay and doppler frequency prediction filter
  73. % state d [km] state v [km/s] state a [km/s/s]
  74. ifade = 0;
  75. ii      = [-48:1:ifade ifade+1:1:ifade+127];
  76. j       = 0;
  77. ils     = 0;
  78. Ydflast = dfISU;
  79. Ydtlast = 0;
  80.  
  81. for i = ii,
  82.     j = j + 1;
  83.     stepSim;      %step simulation forward by one L-band frame
  84.    
  85.     % Filter time update
  86.     if(i >= ifade)
  87.         tt    = i*LBframe;
  88.         dfISU = Xhat(1) + Xhat(2)*tt;
  89.         dtISU = dtISU0 + Xhat(3) + Xhat(1)/fLB*tt + Xhat(2)/(2*fLB)*tt^2;
  90.     endif
  91.  
  92.     % Doppler and Time Delay of up/down link
  93.     [d,r,a,e,v] = RelPosition('E1');
  94.     Mdf(j)      = r(2)/cLight*fLB; % store df in array
  95.     Mdt(j)      = d(2)/cLight; % store dt in array
  96.  
  97.     % Measurement of dt and df by SV
  98.     dtsum = dtsum - dtISU + Mdt(j) + sigdtm*rand(1);
  99.     dfsum = dfsum - dfISU + Mdf(j) + sigdfm*rand(1);
  100.     iSV   = iSV + 1;
  101.    
  102.     if(iSV == 4)
  103.         DTOA  = dtsum/4 + sigdtr*rand(1);
  104.         DFOA  = dfsum/4 + sigdfr*rand(1);
  105.         dtsum = 0;
  106.         dfsum = 0;
  107.         iSV   = 0;
  108.  
  109.         %transmit FTOA and DFOA to ISU
  110.         dtISUcorrection = DTOA;
  111.         dfISUcorrection = DFOA;
  112.         if(i < ifade)
  113.             ils = ils + 1;
  114.             if ils > 12
  115.                 ils = 1;
  116.             endif
  117.  
  118.             Ydf(ils) = Ydflast+DFOA;
  119.             Ydflast  = Ydf(ils);
  120.             Ydt(ils) = Ydtlast+DTOA;
  121.             Ydtlast  = Ydt(ils);
  122.             Tls(ils) = (i - 1.5)*LBframe;
  123.  
  124.             % ISU control loop filter
  125.             dfISU = dfISU + dfISUcorrection;
  126.             dtISU = dtISU + dtISUcorrection;
  127.         endif
  128.     endif
  129.  
  130.     % Do least square estimation for last time before fade
  131.     if(i == (ifade-1))
  132.         % Least squares solution
  133.         %
  134.         % [ ydt ] = [ t/f t^2/(2f) 1 ] [ a0 ]
  135.         % [ ydf ] [ 1 t 0 ] [ a1 ]
  136.         % [ b0 ]
  137.         % where
  138.         % df = a0 + a1*t
  139.         % dt = b0 + a0/f*t + a1/(2f)*t^2
  140.         %
  141.         % form matrix A
  142.         A  = [ Tls/fLB Tls.*Tls/(2*fLB) ones(size(Tls));
  143.         ones(size(Tls)) Tls zeros(size(Tls))];
  144.         YY    = [Ydt
  145.                 Ydf];
  146.         Xhat  = A\YY;
  147.         tt    = i*LBframe;
  148.         dtISU = dtISU0 + Xhat(3) + Xhat(1)/fLB*tt + Xhat(2)/(2*fLB)*tt^2;
  149.     endif
  150.  
  151.     % Per frame correction of dt and df
  152.     MdtISU(j) = dtISU;
  153.     MdfISU(j) = dfISU;
  154. endfor
  155.  
  156. erase
  157. title('LS Deep Fade dt and df prediction filter')
  158. window('221')
  159. plot(ii'*LBframe,Mdt*1000,'grid','green',
  160.      ii'*LBframe,MdtISU*1000,'red','grid')
  161.  
  162. xlabel('time [sec]'); ylabel('dtISU vs. dt [ms]')
  163.        window('223')
  164.  
  165. plot(ii'*LBframe,(MdtISU-Mdt)*1000000,'grid','red')
  166. xlabel('time [sec]');
  167. ylabel('dtISU-dt (ms)',
  168.        'll ll sGls')
  169. window('222')
  170. plot(ii'*LBframe,Mdf/1000,'grid','green',
  171.      ii'*LBframe,MdfISU/1000,'red')
  172. xlabel('time [sec]'); ylabel('df/1.62 GHz [KHz]')
  173. window('224')
  174. plot(ii'*LBframe,(MdfISU-Mdf),'grid','red')
  175. xlabel('time [sec]'); ylabel('dfISU-df for 1.62 GHz [Hz]')