Figure 47. Clutter Eigenspectra for multiwindow post-Doppler approaches with K = 2.

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) per element per pulse

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)
InvRu = inv(Ru);

Doppler Filter Bank Matrix Construction for PRI-Staggered Post-Doppler method:

dopplerfilterbank = linspace(0,300,M+1);
omegadopplerbank = dopplerfilterbank/fr;
K = 2;
P = floor(K/2);
M1= M - K +1;

U1 = zeros(M1,M);
for m=1:M
    U1(:,m) = 1/sqrt(M)*exp(-1i*2*pi*omegadopplerbank(m)*(0:M1-1));
end

td0  = ones(M1,1);                                                   % Uniform Taper.
td30 = chebwin(M1,30);                                               % 30-dB Chebyshev Doppler Taper.
td60 = chebwin(M1,60);                                               % 60-dB Chebyshev Doppler Taper.
td90 = chebwin(M1,90);                                               % 90-dB Chebyshev Doppler Taper.
F0  = diag(td0)*U1;                                                  % Eq. (227). Doppler Filter Bank with Uniform Taper.
F30 = diag(td30)*U1;                                                 % Eq. (227). Doppler Filter Bank with 30-dB Chebyshev Taper.
F60 = diag(td60)*U1;                                                 % Eq. (227). Doppler Filter Bank with 60-dB Chebyshev Taper.
F90 = diag(td90)*U1;                                                 % Eq. (227). Doppler Filter Bank with 90-dB Chebyshev Taper.

Solve M Separate N-dimensional Adaptive Problems for PRI-Staggered Post-Doppler:

Rcm0   = zeros(N*K,N*K,M);
Rcm30 = zeros(N*K,N*K,M);
Rcm60 = zeros(N*K,N*K,M);
Rcm90 = zeros(N*K,N*K,M);
for m=1:M
    Fm0   = toeplitz([F0(:,m);   zeros(K-1,1)],[F0(1,m) zeros(1,K-1)]); % Eq. 229.
    Fm30 = toeplitz([F30(:,m); zeros(K-1,1)],[F30(1,m) zeros(1,K-1)]);
    Fm60 = toeplitz([F60(:,m); zeros(K-1,1)],[F60(1,m) zeros(1,K-1)]);
    Fm90 = toeplitz([F90(:,m); zeros(K-1,1)],[F90(1,m) zeros(1,K-1)]);

    Rcm0(:,:,m)   = kron(Fm0,eye(N))'*Rc*kron(Fm0, eye(N));             % Eq. 214.
    Rcm30(:,:,m) = kron(Fm30,eye(N))'*Rc*kron(Fm30,eye(N));
    Rcm60(:,:,m) = kron(Fm60,eye(N))'*Rc*kron(Fm60,eye(N));
    Rcm90(:,:,m) = kron(Fm90,eye(N))'*Rc*kron(Fm90,eye(N));
end

Doppler Filter Matrix Construction for Adjacent Bin Post-Doppler method:

U2 = zeros(M,M);
if  mod(K,2)    % If K is odd
    for m=1:M
        U2(:,m) = 1/sqrt(M)*exp(-1i*2*pi*omegadopplerbank(m)*(0:M-1)); % Doppler Filter Steering Vector
    end
else            % while if K is even:
    for m=1:M
        U2(:,m) = 1/sqrt(M)*exp(-1i*2*pi*(omegadopplerbank(m) + omegadopplerbank(m+1))/2*(0:M-1));
    end
end

td0  = ones(M,1);
td30 = chebwin(M,30);                                               % 30-dB Chebyshev Doppler Taper.
td60 = chebwin(M,60);                                               % 60-dB Chebyshev Doppler Taper.
td90 = chebwin(M,90);                                               % 90-dB Chebyshev Doppler Taper.
Fab0  = diag(td0)*U2;
Fab30 = diag(td30)*U2;
Fab60 = diag(td60)*U2;
Fab90 = diag(td90)*U2;

Solve M Separate N-dimensional Adaptive Problems for Adjacent Bin Post-Doppler:

Rcmab0   = zeros(N*K,N*K,M);
Rcmab30 = zeros(N*K,N*K,M);
Rcmab60 = zeros(N*K,N*K,M);
Rcmab90 = zeros(N*K,N*K,M);

for m=1:M
    if mod(K,2)                  % if K is odd.
        if (m-P>0) && (m+P<=M)
            Fmab0   = Fab0(:,m-P:m+P);                                  % Eq. 231.
            Fmab30 = Fab30(:,m-P:m+P);
            Fmab60 = Fab60(:,m-P:m+P);
            Fmab90 = Fab90(:,m-P:m+P);
        elseif (m-P<=0) && (m+P<=M)
            Fmab0   = [Fab0(:,M+(m-P):M)  Fab0(:,1:m+P)];               % Eq. 231.
            Fmab30 = [Fab30(:,M+(m-P):M) Fab30(:,1:m+P)];
            Fmab60 = [Fab60(:,M+(m-P):M) Fab60(:,1:m+P)];
            Fmab90 = [Fab90(:,M+(m-P):M) Fab90(:,1:m+P)];
        elseif m+P>M
            Fmab0   = [Fab0(:,m-P:M)  Fab0(:,1:m+P-M)];                 % Eq. 231.
            Fmab30 = [Fab30(:,m-P:M) Fab30(:,1:m+P-M)];
            Fmab60 = [Fab60(:,m-P:M) Fab60(:,1:m+P-M)];
            Fmab90 = [Fab90(:,m-P:M) Fab90(:,1:m+P-M)];
        end

    else      % if K is even.

        if (m-P>0) && (m+P<=M+1)
            Fmab0   = Fab0(:,m-P:m+P-1);                                % Eq. 231.
            Fmab30 = Fab30(:,m-P:m+P-1);
            Fmab60 = Fab60(:,m-P:m+P-1);
            Fmab90 = Fab90(:,m-P:m+P-1);
        elseif (m-P<=0) && (m+P<=M)
            Fmab0   = [Fab0(:,M+(m-P):M)  Fab0(:,1:m+P-1)];             % Eq. 231.
            Fmab30 = [Fab30(:,M+(m-P):M) Fab30(:,1:m+P-1)];
            Fmab60 = [Fab60(:,M+(m-P):M) Fab60(:,1:m+P-1)];
            Fmab90 = [Fab90(:,M+(m-P):M) Fab90(:,1:m+P-1)];
        elseif m+P>M+1
            Fmab0   = [Fab0(:,m-P:M) Fab0(:,1:m-M+P-1)];                % Eq. 231.
            Fmab30 = [Fab30(:,m-P:M) Fab30(:,1:m-M+P-1)];
            Fmab60 = [Fab60(:,m-P:M) Fab60(:,1:m-M+P-1)];
            Fmab90 = [Fab90(:,m-P:M) Fab90(:,1:m-M+P-1)];
        end
    end


    Rcmab0(:,:,m)  = kron(Fmab0 ,eye(N))'*Rc*kron(Fmab0, eye(N));       % Eq. 214.
    Rcmab30(:,:,m) = kron(Fmab30,eye(N))'*Rc*kron(Fmab30,eye(N));
    Rcmab60(:,:,m) = kron(Fmab60,eye(N))'*Rc*kron(Fmab60,eye(N));
    Rcmab90(:,:,m) = kron(Fmab90,eye(N))'*Rc*kron(Fmab90,eye(N));

end

Plot the Clutter Eigenspectra for PRI-Staggered Post-Doppler for various bins

figure('NumberTitle', 'off','Name', ...
       ' Figure 47. Clutter Eigenspectra for multiwindow post-Doppler Approaches with K=2',...
       'Position',[1 1 900 1200]);
subplot(3,2,1);
bins = [1 4 10];
plot(10*log10(sort(abs(eig(Rcm0(:,:,bins(1)))),'descend')),'b.-')
hold on;
plot(10*log10(sort(abs(eig(Rcm30(:,:,bins(1)))),'descend')),'r.-')
plot(10*log10(sort(abs(eig(Rcm60(:,:,bins(1)))),'descend')),'g.-')
plot(10*log10(sort(abs(eig(Rcm90(:,:,bins(1)))),'descend')),'c.-')
title('PRI-Staggered, Whitened, Bin #0');
ylabel('Relative Power (dB)');
ylim([-80 80]);
xlim([1 36]);
hleg1 = legend('Uniform','30 dB','60 dB','90 dB');
set(hleg1,'FontSize',8);
grid on;

subplot(3,2,3);
plot(10*log10(sort(abs(eig(Rcm0(:,:,bins(2)))),'descend')),'b.-')
hold on;
plot(10*log10(sort(abs(eig(Rcm30(:,:,bins(2)))),'descend')),'r.-')
plot(10*log10(sort(abs(eig(Rcm60(:,:,bins(2)))),'descend')),'g.-')
plot(10*log10(sort(abs(eig(Rcm90(:,:,bins(2)))),'descend')),'c.-')
title('PRI-Staggered, Whitened, Bin #3');
ylabel('Relative Power (dB)');
ylim([-80 80]);
xlim([1 36]);
hleg2 = legend('Uniform','30 dB','60 dB','90 dB');
set(hleg2,'FontSize',8);
grid on;

subplot(3,2,5);
plot(10*log10(sort(abs(eig(Rcm0(:,:,bins(3)))),'descend')),'b.-')
hold on;
plot(10*log10(sort(abs(eig(Rcm30(:,:,bins(3)))),'descend')),'r.-')
plot(10*log10(sort(abs(eig(Rcm60(:,:,bins(3)))),'descend')),'g.-')
plot(10*log10(sort(abs(eig(Rcm90(:,:,bins(3)))),'descend')),'c.-')
title('PRI-Staggered, Whitened, Bin #9');
ylabel('Relative Power (dB)');
ylim([-80 80]);
xlim([1 36]);
hleg3 = legend('Uniform','30 dB','60 dB','90 dB');
set(hleg3,'FontSize',8);
grid on;

% Plot the clutter eigenspectra for Adjacent Bin Post-Doppler.
subplot(3,2,2);
plot(10*log10(sort(abs(eig(Rcmab0(:,:,bins(1)))),'descend')),'b.-')
hold on;
plot(10*log10(sort(abs(eig(Rcmab30(:,:,bins(1)))),'descend')),'r.-')
plot(10*log10(sort(abs(eig(Rcmab60(:,:,bins(1)))),'descend')),'g.-')
plot(10*log10(sort(abs(eig(Rcmab90(:,:,bins(1)))),'descend')),'c.-')
title('Adjacent Bin, Whitened, Bin #0');
% ylabel('Relative Power (dB)');
ylim([-80 80]);
xlim([1 36]);
hleg1 = legend('Uniform','30 dB','60 dB','90 dB');
set(hleg1,'FontSize',8);
grid on;

subplot(3,2,4);
plot(10*log10(sort(abs(eig(Rcmab0(:,:,bins(2)))),'descend')),'b.-')
hold on;
plot(10*log10(sort(abs(eig(Rcmab30(:,:,bins(2)))),'descend')),'r.-')
plot(10*log10(sort(abs(eig(Rcmab60(:,:,bins(2)))),'descend')),'g.-')
plot(10*log10(sort(abs(eig(Rcmab90(:,:,bins(2)))),'descend')),'c.-')
title('Adjacent Bin, Whitened, Bin #3');
% ylabel('Relative Power (dB)');
ylim([-80 80]);
xlim([1 36]);
hleg2 = legend('Uniform','30 dB','60 dB','90 dB');
set(hleg2,'FontSize',8);
grid on;

subplot(3,2,6);
plot(10*log10(sort(abs(eig(Rcmab0(:,:,bins(3)))),'descend')),'b.-')
hold on;
plot(10*log10(sort(abs(eig(Rcmab30(:,:,bins(3)))),'descend')),'r.-')
plot(10*log10(sort(abs(eig(Rcmab60(:,:,bins(3)))),'descend')),'g.-')
plot(10*log10(sort(abs(eig(Rcmab90(:,:,bins(3)))),'descend')),'c.-')
title('Adjacent Bin, Whitened, Bin #9');
%ylabel('Relative Power (dB)');
ylim([-80 80]);
xlim([1 36]);
hleg3 = legend('Uniform','30 dB','60 dB','90 dB');
set(hleg3,'FontSize',8);
grid on;

tightfig;