Figure 23.1. Multitarget Scenario: Optimum fully adaptive STAP. (a) Adapted pattern. (b) Principal cuts at target azimuth and Doppler.

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 Computations

thermal_noise_power;

Thermal Noise Covariance Matrix Computation

Rn = sigma2*eye(M*N);

Clutter Patch Geometry computations

clutter_patch_rcs;

Clutter-to-Noise Ratio (CNR) Calculation

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 Computation

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

Rc = clutt_cov(ksi,beta);

Jamming Covariance Matrix Calculation

jamm_cov;

Total Interference Covariance Matrix

Ru = Rc + Rj + Rn;                                       % Eq. (98)

What If you Want to Illuminate Multiple Targets?

Demonstrate a multitarget scenarion:

% Target #1:
     phit1 = 0; thetat1 = 0;                             % Target #1 azimuth and elevation angles in degrees.
     fdt1 = 100;                                         % Target #1 Doppler Frequency.
     fspt1 = d/lambda*cos(thetat1*pi/180)*sin(phit1*pi/180);
     omegact1 = fdt1/fr;
     at1 = exp(1i*2*pi*fspt1*(0:N-1));                   % Target #1 Spatial Steering Vector.
     bt1 = exp(1i*2*pi*omegact1*(0:M-1));                % Target #1 Doppler Steering Vector
     vt1 = kron(bt1,at1).';                              % Target #1 Space-Time Steering Vector.

% Target #2:
     phit2 = -30; thetat2 = 0;                           % Target #2 azimuth and elevation angles in degrees.
     fdt2 = -50;                                         % Target #2 Doppler Frequency.
     fspt2 = d/lambda*cos(thetat2*pi/180)*sin(phit2*pi/180);
     omegact2 = fdt2/fr;
     at2 = exp(1i*2*pi*fspt2*(0:N-1));                   % Target #2 Spatial Steering Vector.
     bt2 = exp(1i*2*pi*omegact2*(0:M-1));                % Target #2 Doppler Steering Vector
     vt2 = kron(bt2,at2).';                              % Target #2 Space-Time Steering Vector.

% Target #3:
     phit3 = 60; thetat3 = 0;                            % Target #3 azimuth and elevation angles in degrees.
     fdt3 = -100;                                        % Target #3 Doppler Frequency.
     fspt3 = d/lambda*cos(thetat3*pi/180)*sin(phit3*pi/180);
     omegact3 = fdt3/fr;
     at3 = exp(1i*2*pi*fspt3*(0:N-1));                   % Target #3 Spatial Steering Vector.
     bt3 = exp(1i*2*pi*omegact3*(0:M-1));                % Target #3 Doppler Steering Vector
     vt3 = kron(bt3,at3).';                              % Target #3 Space-Time Steering Vector.

     vt = vt1 + vt2 + vt3;                               % Target Composite Space-Time Steering Vector.

Optimum, Fully Adaptive STAP Solution

w = Ru\vt;                                               % Eq. (104)

Adapted Patterns

phi = -90:.5:90;     Lphi = length(phi);
fd = -150:.5:150;  Lfd = length(fd);
fsp = d/lambda*cos(theta)*sin(phi*pi/180);
omega = fd/fr;
Pw1 = zeros(Lfd,Lphi);
for m=1:Lphi
    for n=1:Lfd
        a = exp(1i*2*pi*fsp(m)*(0:N-1));                 % Dummy Spatial Steering Vector.
        b = exp(1i*2*pi*omega(n)*(0:M-1));               % Dummy Doppler Steering Vector
        v = kron(b,a).';
        Pw1(n,m) = abs(w'*v)^2;
    end
end

Normalization

max_value = max(max(Pw1));
Pw = Pw1/max_value;

Cropping Extreme Values

[rows cols] = find(10*log10(abs(Pw))<-100);
for i=1:length(rows)
    Pw(rows(i),cols(i)) = 10^(-100/10);
end

Plot the Adapted Pattern

figure('NumberTitle', 'off','Name', ...
       'Figure 23.1.a. Mutitarget Scenario: Adapted Pattern for Optimum Fully Adaptive STAP', ...
       'Position',[1 1 700 600]);
[Az Doppler] = meshgrid(sin(phi*pi/180),fd);
colormap jet;
pcolor(Az, Doppler, 10*log10(abs(Pw)));
shading interp;
xlim([-1 1])
ylim([-150 150]);
xlabel('sin(Azimuth)');
ylabel('Doppler Frequency (Hz)');
h = colorbar;
% h = colorbar('YTickLabel',{-80:10:0});
set(get(h,'YLabel'),'String','Relative Power (dB)');

Plot the Principal Cuts

figure('NumberTitle', 'off','Name', ...
       'Figure 23.1.b. Principal Cuts at Target Azimuth and Doppler',...
       'Position',[1 1 700 600]);
% a. Cut of the Adapted Pattern at Doppler = 100 Hz.
subplot(2,1,1);
plot(sin(phi*pi/180), 10*log10(abs(Pw(fd == 100,:))));
ylim([-80 0.5]); xlim([-1  1]);
ylabel('Relatuve Power (dB)');
xlabel('sin(Azimuth)');
title('Doppler Frequency = 100 Hz');
grid on;

% b. Cut of the Adapted Pattern at Azimuth Angle = 0 deg.
subplot(2,1,2);
plot(fd, 10*log10(abs(Pw(:,phi == 0))));
ylim([-80 0.5]); xlim([-150 150]);
ylabel('Relative Power (dB)');
xlabel('Doppler Frequency (Hz)');
title('Azimuth = 0 deg');
grid on;