制导控制5:记忆衰减滤波器

1.记忆衰减滤波器
1.1 问题描述
导引头测量的视线角度会受噪声影响。因此,为了推导出比例制导所需的视线角速度估计,有必要在制导系统中使用数字噪声滤波器。首先考虑简单的恒定增益滤波器,即记忆衰减滤波器,以推导视线角速度估计。
记忆衰减滤波器,这个滤波器是递归的,并且会比旧的测量值更重视新的测量值。表中以递归形式列出了一级、二级和三级衰减记忆滤波器及其增益。从表中我们可以看到,滤波器的估计值本质上是旧的估计值加上增益乘以残差(当前测量值与先前估计值之间的差值)。记忆衰减滤波器的增益是常数,只是一个参数\(\beta\)的函数。这个参数与滤波器的记忆长度相关,并且是0到1之间的常数。增加\(\beta\)值倾向于减小滤波器的带宽,并让滤波器记住更多以前的测量值。
image
下图展示了如何在制导回路中加入二阶衰减记忆滤波器。在这个环路中,实际的视线角\(\lambda\)每隔 Ts 秒采样一次,并加入噪声,从而提供了一个理想化的导引模型。视线角和角速度的估计是通过数字两状态衰减记忆滤波器对加入噪声的视线角$\lambda_k^* $的测量完成的。符号 \(z^{-1}\) 是 Z 变换中的记号,表示一个 Ts 秒的纯延迟。利用估计的视线角速度,使用比例导引律生成制导指令。生成的指令通过一个“Hold”模块,将数字信号转换为飞控系统可用的连续信号。图中显示了一个理想化飞控系统的单位增益。
image

1.2 计算
下面给出上图的制导回路 MATLAB 仿真。每隔Ts秒,在测量的视线角上加入独立于每个样本的零均值高斯噪声,标准差为SIGNOISE。程序由两个独立部分组成。第一部分由微分方程和二阶Runge–Kutta数值积分方法组成,第二部分代表导引系统,有用于二阶数字记忆衰减滤波器的差分方程。每隔H秒求解微分方程,每隔Ts秒求解差分方程。需要注意的是,Ts/H 的比值必须是一个较大的整数,以便在采样时刻之间的影响能够被正确且准确地处理。

% ENGAGEMENT SIMULATION WITH SECOND-ORDER FADING MEMORY FILTER
clc;

count = 0;
VC = 4000;    %弹目相对速度
XNT = 96.6;   %目标机动过载 3g
YIC = 0;      %初始脱靶量
VM = 3000;    %导弹飞行速度
heading_error = 0;    %指向误差
beta = 0.3;           %滤波器增益系数
XNP = 3.0;            %有效导航系数
SIGNOISE = 0.001;     %白噪声标准差
TF = 10;              %仿真停止时间
TS = 0.1;             %每隔Ts秒求解差分方程
NOISE = 1;            %1--加入噪声 0--不加噪声

Y = YIC;                          %脱靶量 初始值
YDIC = - VM*heading_error/57.3;
YD = YDIC;                        %脱靶量的一阶导 初始值
T = 0.0;
H=0.01;
S=0.0;
G_filter = 1 - beta^2;            %G
H_filter = (1-beta)^2;            %H
X_LAMH = 0.0;
X_LAMDH = 0.0;
XNC = 0.0;                        %过载指令

while T <=(TF - 1e-5)
    Y_old = Y;
    YD_old = YD;
    step = 1;
    flag = 0;
    while step <= 1                         %二阶Runge–Kutta
        if flag == 1
            Y = Y + H*YD;
            YD = YD + H*YDD;
            T = T+H;
            step = 2;
        end
        T_go = TF - T + 1e-5;
        RTM = VC * T_go;
        X_LAM = Y/RTM;                      %计算视线角
        X_LAMD = (RTM*YD + Y*VC)/(RTM^2);   %计算视线角速度 
        YDD = XNT - XNC;                    %脱靶量的二阶导
        flag = 1;
    end
    flag = 0;
    Y = 0.5*(Y_old + Y +H*YD);
    YD = 0.5*(YD_old + YD + H*YDD);
    S = S+H;                               %求解10次外部比例导引律后,求解1次滤波器方程,H/Ts=0.1
    if S >= (TS - 1e-5)                    %二阶记忆衰减滤波器计算过载指令(XNC)
        S=0.0;
        if NOISE == 1
            X_LAMNOISE = SIGNOISE * randn;
        else
            X_LAMNOISE = 0.0;
        end
        RES = X_LAM + X_LAMNOISE - (X_LAMH + X_LAMDH*TS);    %滤波器中的残差
        X_LAMH = G_filter * RES + X_LAMDH*TS + X_LAMH;       %视线角估计值
        X_LAMDH = H_filter * RES / TS + X_LAMDH;             %视线角速度估计值
        XNC = XNP * VC * X_LAMDH;                            %更新过载指令
    end     

    count = count + 1;
    ArrayTF(count) = T;
    ArrarY(count) = Y;
    ArrarXNC(count) = XNC;
    ArrayX_LAMD(count) = X_LAMD;
    ArrayX_LAMDH(count) = X_LAMDH;       
end

 figure
 plot(ArrayTF,ArrayX_LAMD,ArrayTF,ArrayX_LAMDH),grid
 %plot(ArrayTF,ArrarXNC),grid
 title('Decreasing beta increase noise transmission of fading memory filter')
 xlabel('Flight Time (S)')
 ylabel('Line of Sight Rate (Rad/S)')
 axis([0 ,10, -0.01 , .06])
 %axis([0 ,10, -10 , 20])
 str=['NT=3.0,Ts=0.1,beta=0.3 ' newline '1 Mr of noise '];
 text(1,0.02,str)

1.3 计算结果
计算结果比较了实际视线速率与滤波器对测量导数的估计,其中上图记忆衰减滤波器的\(\beta\)值被设置为0.8,可以看到,滤波器对视线速率的估计比较平滑,但落后于实际视线速率,这表明滤波器反应有些迟钝。
下图通过减小\(\beta\),可以有效地增加记忆衰减滤波器的带宽。可以看到,当\(\beta\)从0.8减小到0.3时,视线速率估计不再落后于实际信号。不过,从图中可以看出,降低\(\beta\)的代价是视线速率估计变得更嘈杂。换句话说,减小\(\beta\)会增加记忆衰减滤波器的噪声传递。

2.通过记忆衰减滤波器预测目标过载
2.1 问题描述
为了了解所有目标状态,必须知道目标在做什么。数学上讲,希望能够根据视线角的噪声测量来估计目标当前的机动水平。从理论上讲,如果没有额外的测量数据或先验信息,仅凭单个传感器的角度测量是不可能估计目标机动水平的。不过,许多战术雷达制导导弹除了测量视线角外,还会测量距离和距离变化率,这就使得目标加速度的估计成为可能。
下图展示了一个制导系统,它使用三阶记忆衰减滤波器,从视线角测量中估计目标加速度、距离和相对运动速度。沿视线角的噪声测量值乘以距离测量值,就得到了相对位置$ y_k^*$的伪测量值。然后滤波器估计测量值的导数。利用假定已知的导弹加速度,就可以从相对加速度估计目标加速度。对于这种类型的制导系统,我们还需要飞行剩余时间信息,这可以通过距离和距离变化率的测量获得,用来实现比例制导或增强比例制导法。
image

2.2 计算
下面给出上图的制导回路 MATLAB 仿真。使用如上图所示的三阶记忆衰减滤波器。注意,三阶记忆衰减滤波器的增益与二阶的增益不同。

clc;
%ENGAGEMENT SIMULATION WITH THREE-STATE FADING MEMORY FILTER
count = 0;
VC = 4000;       %弹目相对运动速度
XNT = 96.6;      %目标加速度
VM = 3000;       %导弹运动速度
YIC = 0;         %弹目初始相对位移
Hedeg = 0;       %初始指向误差
beta = 0.8;
XNP = 3.0;       %比例导引系数
TF = 10.;        %预计飞行结束时间
TS = 0.1;        %采样时间
NOISE = 1;       %添加噪声标志
SIGNOISE = 0.001;    %白噪声标准差
%%初始化
Y = YIC;
YD = -VM*Hedeg/57.3;  %Y的一阶导数,速度
YDIC = YD;
T = 0.0;
H = 0.01;             %微分方程的计算时间步
S = 0.0;
G_fliter = 1-beta^3;
H_fliter = 1.5*((1-beta)^2)*(1+beta);
K_fliter = 0.5*((1-beta)^3);
YH = 0;               %差分方程(滤波器)的相对位移
YDH = 0;              %差分方程(滤波器)的速度
XNTH = 0;             %差分方程(滤波器)的目标加速度
XNC = 0;              %过载指令

while T <= (TF - 1e-5)

    Y_old = Y;
    YD_old = YD;
    step = 1;
    flag = 0;

    while step <= 1
        if flag == 1
            Y = Y + H*YD;
            YD = YD + H*YDD;
            T = T+H;
            step = 2;
        end

        T_go = TF - T + 1e-5;       %正向环节剩余时间
        RTM = VC * T_go;
        X_LAM = Y/RTM;
        X_LAMD = (RTM*YD + Y*VC)/(RTM^2);
        YDD = XNT - XNC;            %循环第一次为了计算YDD,第二次用新的Y+YD更新YDD
        flag = 1;
    end

    flag = 0;
    Y = 0.5*(Y_old + Y + H*YD);
    YD = 0.5*(YD_old + YD + H*YDD);

    S = S + H;
    if S >= TS - 1e-5
        S = 0.0;
        if NOISE == 1
            XLAM_noise = SIGNOISE*randn;
        else
            XLAM_noise = 0.0;
        end
        Y_star = RTM*(X_LAM + XLAM_noise);                      %y*_k
        RES = Y_star - YH - TS*YDH - 0.5*(XNTH-XNC)*TS^2;
        YH = G_fliter*RES + YH + TS*YDH + 0.5*(XNTH-XNC)*TS^2;  %y^_k
        YDH = H_fliter*RES/TS + YDH + TS*(XNTH -XNC);           %ydot^_k
        XNTH = 2*K_fliter*RES/(TS^2) + XNTH;                    %n^_Tk 差分方程(滤波器)的目标加速度
        X_LAMDH = (YH + YDH*T_go)/(VC*T_go^2);                  %视线角速度
        XNC = X_LAMDH*XNP*VC;                                   %过载指令
        count = count+1;
        arrayT(count) = T;
        arrayY(count) = Y;
        arrayreal_targetNT(count) = XNT/32.2;
        arraypredict_targetNT(count) = XNTH/32.2;
        arrayXLAMD(count) = X_LAMD;
        arrayXLAMDH(count) = X_LAMDH;
        arrayreal_missileNC(count) = XNC/32.2;
    end
end

 figure
 plot(arrayT,arrayXLAMD,arrayT,arrayXLAMDH),grid
 title('line-of-sight rate')
 xlabel('Flight Time (S)')
 ylabel('Line of Sight Rate (Rad/S)')
 axis([00,10,00,0.05])
 str=['NT=3.0,Ts=0.1,beta=0.8 ' newline '1 Mr of noise '];
 text(1,0.02,str)
 
 figure
 plot(arrayT,arrayreal_targetNT,arrayT,arraypredict_targetNT),grid
 title('Acceleration')
 xlabel('Flight Time (S)')
 ylabel('Acceleration (G)')
 axis([00,10,-1,6])
 text(3,0.02,str)

2.3 计算结果
进行了一个标称情况的仿真,其中滤波器的衰减记忆因子为0.8,采样时间为0.1秒。上图将滤波器的视线速率估计值与标称情况下的实际视线速率进行了比较。我们可以看到,滤波器的估计值跟随几何视线速率,并且噪声传输不过多。下显示了同一情况下目标过载的滤波估计。图上叠加了实际的机动情况。我们可以看到,在这种情况下,滤波器大约需要5秒才能对机动水平做出合理的估计。一个更快的滤波器虽然瞬态时间更短,但噪声传递会更多。下图中显示的估计精度已经足够用于提高制导系统的性能。

posted @ 2026-09-06 14:47  DavyJoness  阅读(5)  评论(0)    收藏  举报