Figure 61. Beamspace post-Doppler in a clutter-plus-jamming environment. K = 4. Ks = Kt = 2. Displaced Filter Beamspace post-Doppler Approach with and without Two-Step-Nulling (TSN).

Contents

Coded by Ilias Konsoulas, 16 Sept. 2018. Code provided for educational purposes only. All rights reserved.

clc; clear; close all;

Radar System Operational Parameters

radar_oper_params;

Thermal Noise Power Computation

thermal_noise_power;

Thermal Noise Covariance Matrix

Rn = sigma2*eye(M*N);

Clutter Patch RCS Computation

clutter_patch_rcs;

Calculate the Array Transmit and Element Receive Power Gains

Tx_Rx_power_gains;

Calculate the Clutter to Noise Ratio (CNR) for each azimuth angle

ksi = Pt*Gtgain.*Grec*lambda^2*sigma/((4*pi)^3*Pn*10^(Ls/10)*Rcik^4);   % Eq. (58)

Clutter Covariance Matrix Computations

beta = 1;   % beta parameter.
phia = 0;   % Velocity Misalignment Angle.

Rc = clutt_cov(ksi,beta);

Jammer Covariance Matrix Calculation.

jamm_cov;

Analytic Interference Covariance Matrix for Fully Adaptive STAP

Ru = Rc + Rj + Rn;
InvRu = inv(Ru);

Spatial jammer-plus-noise Covariance Matrix

Phi_jn = Phi_j + sigma2*eye(N);

Target Space-Time Steering Vector:

phit = 0; thetat = 0;        % Target azimuth and elevation angles in degrees.
fdt = 100;                   % Target Doppler Frequency.
fspt = d/lambda*cos(thetat*pi/180)*sin(phit*pi/180);
omegat = fdt/fr;
at = exp(-1i*2*pi*fspt*(0:N-1)).'; % Target Spatial Steering Vector.
bt = exp(-1i*2*pi*fdt*(0:M-1)).';  % Target Doppler Steering Vector.
ta = chebwin(N,30);
tb = chebwin(M,30);
fd = 0:.5:300;   Lfd = length(fd);
omegad = fd/fr;
SNRo = M*N;

LSINR Computation for Optimum Fully Adaptive Case

LSINRopt = zeros(1,Lfd);
for n=1:Lfd
    bt = exp(-1i*2*pi*omegad(n)*(0:M-1)).'; % Target Doppler Steering Vector
    vt = kron(bt,at);
    w = InvRu*vt;
    LSINRopt(n) = real(w'*vt)/SNRo;
end

Displaced Beam pre-Doppler Calculations

Kt = 2;               % sub-CPI length (fixed).
Ks = 2;               % sub-apperture length or number of beams used.
M1 = M - Kt +1;       % Number of possible sub-CPI's.
N1 = N - Ks +1;       % Number of possible sub-appertures.

Create Doppler Filterbank Matrix F for Displaced Filter Beamspace post-Doppler STAP

dopplerfilterbank = linspace(0,300,M+1);
omegadopplerbank = dopplerfilterbank/fr;
F0 = zeros(M1,M);
for m=1:M
    F0(:,m) = 1/sqrt(M)*exp(-1i*2*pi*omegadopplerbank(m)*(0:M1-1));
end

F30 = diag(chebwin(M1,30))*F0;                     % Doppler Filter Tapering.

Beamformer G Matrix Construction for Displaced Filter Beamspace post-Doppler STAP with and without Two Step Nulling

taper_level = 30;                           % Spatial Tapering level in db.
g0 = exp(-1i*2*pi*fspt*(0:N1-1)).';
gtap = chebwin(N1,taper_level).*g0;         % spatial taper application.

% Calculation of Beamformer Matrix for Two-Step Nulling Approach:
GTSN = zeros(N,Ks);
for p=0:Ks-1
    Jp = [zeros(p,N1); eye(N1); zeros(N-N1-p,N1)];    % Beam Selector Matrix Jsm.
    GTSN(p+1:N1+p,p+1) = inv(Jp.'*Phi_jn*Jp)*gtap;
end

% Calculation of Beamformer Matrix without Two-Step Nulling:
GNoTSN = toeplitz([gtap; zeros(Ks-1,1);], [gtap(1) zeros(1,Ks-1)]);  % N1 x Ks Beamformer matrix G.

SINRNoTSNdf_mat  = zeros(M,Lfd);
SINRTSNdf_mat = zeros(M,Lfd);

SINR Computations for Displaced Filter Beamspace post-Doppler STAP:

Solve a separate adaptive problem in each Doppler bin m:

for m=1:M

    Fm0  = toeplitz([F0(:,m);  zeros(Kt-1,1)],[F0(1,m)  zeros(1,Kt-1)]);
    Fm30 = toeplitz([F30(:,m); zeros(Kt-1,1)],[F30(1,m) zeros(1,Kt-1)]);

    TmNoTSN = kron(Fm0,GNoTSN);
    TmTSN = kron(Fm30,GTSN);

    Rum0  = TmNoTSN'*Ru*TmNoTSN;
    Rum30 = TmTSN'*Ru*TmTSN;

    bdfb = exp(-1i*2*pi*omegadopplerbank(m)*(0:M-1)).';
    gt = kron(bdfb,at);

    utmNoTSM = TmNoTSN'*gt;
    utmTSM = TmTSN'*gt;

    wmNoTSN = Rum0\utmNoTSM;
    wmTSN = Rum30\utmTSM;

    wNoTSN = TmNoTSN*wmNoTSN;
    wTSN = TmTSN*wmTSN;

    for n=1:Lfd
        bt = exp(-1i*2*pi*omegad(n)*(0:M-1)).'; % Dummy Target Doppler Steering Vector
        vt = kron(bt,at);
        SINRNoTSNdf_mat(m,n) = abs(wNoTSN'*vt)^2/real(wNoTSN'*Ru*wNoTSN);
        SINRTSNdf_mat(m,n) = abs(wTSN'*vt)^2/real(wTSN'*Ru*wTSN);
    end
end

SINRNoTSNdf = max(abs(SINRNoTSNdf_mat));
SINRTSNdf = max(abs(SINRTSNdf_mat));

LSINRNoTSNdf = SINRNoTSNdf/SNRo;
LSINRTSNdf   = SINRTSNdf/SNRo;

Plot the SINR Losses

figure('NumberTitle', 'off','Name', ...
       'Figure 61. Beamspace post-Doppler in a clutter-plus-jamming environment. K=4, Ksm = Ktm = 2.');

%  Displaced Filter Beamspace post-Doppler STAP Results:
plot(fd,10*log10(LSINRopt),'k','LineWidth',1.5)
hold on;
plot(fd,10*log10(LSINRNoTSNdf),'LineWidth',1.5)
plot(fd,10*log10(LSINRTSNdf),'g','LineWidth',1.5)
grid on;
ylabel('SINR Loss (dB)');
xlabel('Target Doppler Frequency (Hz)');
title('Ks = Kt = 2');
ylim([-30 1]);
xlim([-5 305]);
legend('Optimum','No TSN','With TSN','Location','South');