MATLAB Examples

Example 11.3.2.

We revisit the problem from Example 11.2.2 with a jammer at $\phi_i = 20^{\circ}$ except that the jammer power is now 70 dB. Clearly, the -50dB tapered beamformer is no longer capable of sufficiently suppressing this jammer. Rather, we compute the optimum beamformer using (11.3.15), where ${\bf R}_{i+n} = 10^{70/10}{\bf v}(\phi_i){\bf v}(\phi_i)^H + {\bf I}$. First, we examine the beampattern of the optimum beamformer steered to $\phi = 0^{\circ}$ in Figure 11.17(a). Notice the null on the jammer at $\phi = 20^{\circ}$ with a depth of greater than -150 dB. We also plot the SINR loss in Figure 11.17(b) as we scan the look direction from -90 to 90 deg.

Copyright 2016-2026, Ilias S. Konsoulas.

Contents

Workspace Initialization.

clc; clear; close all;

Signal Definitions.

M      = 20;       % Number of Array Elements.
N      = 200;      % Number of Signal Samples.
n      = 1:N;      % Time Sample Index Vector.
lambda = 1;        % Incoming Signal Wavelength in (m).
d      = lambda/2; % Interelement Distance in (m).
SNR    = 20;       % Target Array SNR in dBs
phi_s  = 0;        % target azimuth angle in degrees
phi_i  = 20;       % interference angle in degrees
INR    = 70;       % Interference #1 Power in dBs

u_s  = (d/lambda)*sin(phi_s*pi/180);  % Target Normalized Spatial Frequency.
u_i1 = (d/lambda)*sin(phi_i*pi/180);  % Interferer Normalized Spatial Frequency.

s = zeros(M,N);
v_s = exp(-1i*2*pi*u_s*(0:M-1).')/sqrt(M); % Target Steering Vector.
s(:,100) = (10^(SNR/20))*v_s;              % Target Voltage Signal Generation.

% Uncorrelated unit power thermal noise samples with a complex Gaussian distribution:
w = (randn(M,N)+1i*randn(M,N))/sqrt(2);

% The interference signal vector is generated by:
v_i = exp(-1i*2*pi*u_i1*(0:M-1).')/sqrt(M); % Interferer Steering Vector.
i_x = 10^(INR/20)*v_i*(randn(1,N)+1i*randn(1,N))/sqrt(2);

%The three signals are added to produce the overall array signal:
x = s + i_x + w;
iplusn = i_x + w;

% Calculation of the Interference + Noise autocorrelation matrix.
R_ipn = 10^(INR/10)*(v_i*v_i') + eye(M);
InvR = inv(R_ipn);

% Optimum Beamformer computed for a phi_s = 0 deg using (11.3.15).
c_opt = InvR*v_s/(v_s'*InvR*v_s);  %#ok<MINV>

% Spatial Matched Filter or Steering Vector Beamformer Eq. (11.2.16).
c_mf = v_s;

% Array Output Signal Calculation:
y1 = c_mf'*x;
y2 = c_opt'*x;

Plot the Results.

figure('NumberTitle', 'off','Name','Figure 11.17 (c) and (d)')
subplot(2,1,1);
plot(n,10*log10(abs(y1).^2));
title('Instantaneous Signal Power at the Untapered Spatial Matched Filter Output');
xlabel('Range Cell');
ylabel('Power (dB)');
grid on;

subplot(2,1,2);
plot(n,10*log10(abs(y2).^2));
ylim([0 30]);
title('Instantaneous Signal Power at the MVDR Optimum Beamformer Output');
xlabel('Range Cell');
ylabel('Power (dB)');
grid on;

% max(10*log10(abs(y2).^2))

Nsamples = 6e4;
angle = -35:70/Nsamples:35-70/Nsamples;
Opt_Beam_Pat  = zeros(Nsamples,1);
Conv_Beam_Pat = zeros(Nsamples,1);

for k=1:Nsamples
    u = (d/lambda)*sin(angle(k)*pi/180);
    v = exp(-1i*2*pi*u*(0:M-1)')/sqrt(M); % Azimuth Scanning Steering Vector.
    Opt_Beam_Pat(k)  = c_opt'*v;
    Conv_Beam_Pat(k) = c_mf'*v;
end

Plot the corresponding Beampatterns.

figure('NumberTitle', 'off','Name','Figure 11.17 (a)');
plot(angle,10*log10(abs(Conv_Beam_Pat).^2),angle,10*log10(abs(Opt_Beam_Pat).^2),'r--', 'LineWidth',1.5)
title(['     Beamformer Design with d = \lambda/2 and M = 20.             ';
       'Conventional Beamformer (blue), and MVDR Optimum Beamformer (red).';]);
xlim([-35 35]);
ylim([-160 5]);
grid on;
xlabel('Angle (deg)');
ylabel('Power (dB)');

Calculate the SINR loss factor for the optimum beamformer:

Lsinr_opt = zeros(Nsamples,1);
Lsinr_mf  = zeros(Nsamples,1);
SNR0      = M*10^(SNR/10);
angle     = -35:70/Nsamples:35-70/Nsamples;

for k=1:Nsamples
    u = (d/lambda)*sin(angle(k)*pi/180);
    v = exp(-1i*2*pi*u*(0:M-1)')/sqrt(M); % Azimuth Scanning Steering Vector.
    c_mf = v;  % This is the spatial matched filter beamformer.
    Lsinr_opt(k) = v'*InvR*v; %#ok<MINV>
    SINRout_mf = real(M*(10^(SNR/10))*(abs(c_mf'*v)^2)/(c_mf'*R_ipn*c_mf));
    Lsinr_mf(k) = SINRout_mf/SNR0;
end

Plot SINR Loss Factor.

figure('NumberTitle', 'off','Name','Figure 11.17 (b)');
plot(angle,10*log10(abs(Lsinr_opt)),angle,10*log10(abs(Lsinr_mf)),'r', 'LineWidth',1.5);
ylim([-75 5]);
xlim([-35 35]);
xlabel('Angle (deg)');
ylabel('SINR Loss (dB)');
title('SINR Loss for the MVDR Optimum Beamformer (blue) and the Conventional Beamformer (Red)');
grid on;