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.

%demo Deep Fade Kalman Filter % % The requirements for handsets for GMPCS satellite systems is % that they do not loose synchronization during short time % deep fades. They need to include a filter to predict time % delay and doppler during the time of a deep fade where % synchronization signals are not received from a satellite. % This filter needs to meet the requirements after receiving % synchronization time delay and doppler synchronization % data for a minimum specified time. % % In this demo a Kalman filter is designed and analyzed % that easily meets the requirements to predict dt and df % for 128 frames after receiving synchronization data from % a satellite for 48 frames, with associated measurement % errors. The results are for the time of maximum rate of % change of df. % % The Kalman Filter also smoothes DTOA and DFOA for the ISU % SatLab demo: Horst C. Salzwedel help demoDeepFadeKF % Initialization removeAll; clearGraphic(); clear; % L-band frame length = 90 ms LBframe = .090; % L-band frequency fLB = 1.62e9; % time constant tau = 600 seconds tau = 1200; % standard deviations rand("normal"); % set random number generator to 'normal' rand("seed", 260342); % set seed for repeatability of results sigdtm = 4e-6; % measurement error 4 microseconds sigdfm = 20; % measurement error 20 Hz sigdtr = 2e-6; % reporting error 2 microseconds sigdfr = 9.8; % reporting error 9.8 Hz siga = 5e-5; sigDTOA = sigdtm + sigdtr; sigDFOA = sigdfm + sigdfr; % state distribution matrix A = [0 1 0 0 0 1 0 0 -1/tau]; B = [0 0 1]; % output matrix C = [1/cLight 0 0 0 fLB/cLight 0]; % continous to discrete conversion [Phi, Gam] = c2d(A, B, LBframe); Q = siga; % initialization loadreplaceAll("./IRsingle.data"); setSimEpoch(2002,3,26,11,58,54.91185); % 0 sec setSimTime(0); g = GeoPosition(3); g = g(1:2,:); lat0 = g(1, 1); lon0 = g(2, 1); setStationParameter('E1', I_earth, 0, lat0*r2d, lon0*r2d, 0); setSimEpoch(2002,3,26,11,58,34.91185); % -20 sec setSimTime(0); setSimStepSize(LBframe); % initialization of ISU [d, r, a, e, v] = RelPosition('E1'); dfISU0 = r(2)/cLight*fLB; dfISU = dfISU0; dtISU0 = d(2)/cLight; dtISU = dtISU0; % state vector x = [dtISU*cLight dfISU*cLight/fLB 0]; P = diag([1e1 1e-6 1e-2]); % covariance matrix R R = [sigDTOA^2 0 0 .8*sigDFOA^2]; % initialization of SV j = 0; iSV = 0; dtsum = 0; % summer for dt averaging dfsum = 0; % summer for df averaging DTOA = 0; % SV time delay error measurement DFOA = 0; % SV doppler frequency error measurement ii = [-47:127]; for i = ii, iSV = iSV + 1; j = j + 1; stepSim; % step simulation forward by 1 L-band frame %predict time delay and doppler frequency x = Phi*x; % Kalman Filter time update y = C*x; dtISU = y(1); dfISU = y(2); % Doppler and time delay of up/down link [d, r, a, e, v] = RelPosition('E1'); Mdf(j) = r(2)/cLight*fLB; % store true df in array for plotting Mdt(j) = d(2)/cLight; % store true dt in array for plotting % measurement of dt and df by SV dtsum = dtsum - dtISU + Mdt(j) + sigdtm*rand(1); dfsum = dfsum - dfISU + Mdf(j) + sigdfm*rand(1); % measurement update if (iSV == 4) DTOA = dtsum/4 + sigdtr*rand(1); DFOA = dfsum/4 + sigdfr*rand(1); dtsum = 0; dfsum = 0; iSV = 0; dtISUm = DTOA; dfISUm = DFOA; if i < 0, % time before fade y_m = [DTOA DFOA]; % measurements from satellite M = Phi*P*Phi` + Gam*Q*Gam`; % error covariance time update K = M*C`*inv(C*M*C` + R); % Kalman filter gain x = x + K*(y_m); % measurement update P = M - K*C*M; % error covariance measurement update imeasurement = j; endif endif % 4th frame MdtISU(j) = dtISU+DTOA; MdfISU(j) = dfISU+DFOA; % estimate y y_e = C*x; EdtISU(j) = y_e(1); EdfISU(j) = y_e(2); endfor erase title('ISU Time Delay and Doppler Prediction Filter') window('221') iim=ii(1:imeasurement); plot(ii`*LBframe, Mdt*1e3, 'green', iim`*LBframe, MdtISU(1:imeasurement)*1e3, 'red', ii`*LBframe, EdtISU*1e3, 'blue', 'grid') xlabel('time [sec]'); ylabel('dt [ms]'); wtext(1,2.645,'Deep Fade') wtext(-4,2.622,'DTOA','red') window('223') plot(ii`*LBframe, (EdtISU - Mdt)*1e6, 'grid', 'blue', iim`*LBframe, (MdtISU(1:imeasurement) - Mdt(1:imeasurement))*1e6, 'red'); xlabel('time [sec]'); ylabel('dtISU - dt (ms)', 'll ll sgls'); title(' Spec = +-60 (ms) ', ' lll sgls ') wtext(1,8,'Deep Fade') window('222') plot(ii`*LBframe, Mdf/1000, 'grid', 'green', iim`*LBframe, MdfISU(1:imeasurement)/1000, 'red', ii`*LBframe, EdfISU/1000, 'blue'); xlabel('time [sec]'); ylabel('df for 1.62 GHz [KHz]'); wtext(1,-1,'Deep Fade') wtext(-4,-7,'DFOA','red') window('224') plot(ii`*LBframe, (EdfISU - Mdf), 'grid', 'blue', iim`*LBframe, (MdfISU(1:imeasurement) - Mdf(1:imeasurement)), 'red'); xlabel('time [sec]'); ylabel('dfISU - df for 1.62 GHz [Hz]'); title(' Spec = +- 600 Hz ', ' lll l ') wtext(1,80,'Deep Fade')