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.

% demo Deep Fade 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 least squares 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.
% SatLab demo: Horst C. Salzwedel

help demoDeepFadeFilter

% Initialization
removeAll;
clearGraphic();
clear;
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);

% L-band Frame length = 90 ms
LBframe = .090;

setSimStepSize(LBframe);

% Minimum Connection Time = 48 L-band frames
mct = 50*LBframe;

% L-band frequency
fLB = 1.62e9;

% Initialization of SV
iSV   = 0;
dtsum = 0;
dfsum = 0;

% Initialization of ISU
[d,r,a,e,v] = RelPosition('E1');
dfISU0      = r(2)/cLight*fLB;
dfISU       = dfISU0;
dtISU0      = d(2)/cLight;
dtISU       = dtISU0;
dtISUcorrection = 0;
dfISUcorrection = 0;

rand("normal");
rand("seed",260342);

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

% Time delay and doppler frequency prediction filter
% state d [km] state v [km/s] state a [km/s/s]
ifade = 0;
ii      = [-48:1:ifade ifade+1:1:ifade+127];
j       = 0;
ils     = 0;
Ydflast = dfISU;
Ydtlast = 0;

for i = ii,
    j = j + 1;
    stepSim;      %step simulation forward by one L-band frame
    
    % Filter time update
    if (i >= ifade)
        tt    = i*LBframe;
        dfISU = Xhat(1) + Xhat(2)*tt;
        dtISU = dtISU0 + Xhat(3) + Xhat(1)/fLB*tt + Xhat(2)/(2*fLB)*tt^2;
    endif

    % Doppler and Time Delay of up/down link
    [d,r,a,e,v] = RelPosition('E1');
    Mdf(j)      = r(2)/cLight*fLB; % store df in array
    Mdt(j)      = d(2)/cLight; % store dt in array

    % Measurement of dt and df by SV
    dtsum = dtsum - dtISU + Mdt(j) + sigdtm*rand(1);
    dfsum = dfsum - dfISU + Mdf(j) + sigdfm*rand(1);
    iSV   = iSV + 1;
    
    if (iSV == 4)
        DTOA  = dtsum/4 + sigdtr*rand(1);
        DFOA  = dfsum/4 + sigdfr*rand(1);
        dtsum = 0;
        dfsum = 0;
        iSV   = 0;

        %transmit FTOA and DFOA to ISU
        dtISUcorrection = DTOA;
        dfISUcorrection = DFOA;
        if (i < ifade)
            ils = ils + 1;
            if ils > 12
                ils = 1;
            endif

            Ydf(ils) = Ydflast+DFOA;
            Ydflast  = Ydf(ils);
            Ydt(ils) = Ydtlast+DTOA;
            Ydtlast  = Ydt(ils);
            Tls(ils) = (i - 1.5)*LBframe;

            % ISU control loop filter
            dfISU = dfISU + dfISUcorrection;
            dtISU = dtISU + dtISUcorrection;
        endif
    endif

    % Do least square estimation for last time before fade
    if (i == (ifade-1))
        % Least squares solution
        %
        % [ ydt ] = [ t/f t^2/(2f) 1 ] [ a0 ]
        % [ ydf ] [ 1 t 0 ] [ a1 ]
        % [ b0 ]
        % where
        % df = a0 + a1*t
        % dt = b0 + a0/f*t + a1/(2f)*t^2
        %
        % form matrix A
        A  = [ Tls/fLB Tls.*Tls/(2*fLB) ones(size(Tls));
        ones(size(Tls)) Tls zeros(size(Tls)) ];
        YY    = [Ydt
                Ydf];
        Xhat  = A\YY;
        tt    = i*LBframe;
        dtISU = dtISU0 + Xhat(3) + Xhat(1)/fLB*tt + Xhat(2)/(2*fLB)*tt^2;
    endif

    % Per frame correction of dt and df
    MdtISU(j) = dtISU;
    MdfISU(j) = dfISU;
endfor

erase
title('LS Deep Fade dt and df prediction filter')
window('221')
plot(ii'*LBframe,Mdt*1000,'grid','green',
     ii'*LBframe,MdtISU*1000,'red','grid')

xlabel('time [sec]'); ylabel('dtISU vs. dt [ms]')
       window('223')

plot(ii'*LBframe,(MdtISU-Mdt)*1000000,'grid','red')
xlabel('time [sec]');
ylabel('dtISU-dt (ms)',
       'll ll sGls')

window('222')
plot(ii'*LBframe,Mdf/1000,'grid','green',
     ii'*LBframe,MdfISU/1000,'red')
xlabel('time [sec]'); ylabel('df/1.62 GHz [KHz]')
window('224')
plot(ii'*LBframe,(MdfISU-Mdf),'grid','red')
xlabel('time [sec]'); ylabel('dfISU-df for 1.62 GHz [Hz]')