MATLAB Examples

Example 11.2.1. - The Spatial Matched Filter or Steering Vector Beamformer.

A signal received by a ULA with M = 20 elements and $\lambda/2$ spacing contains both a signal of interest at $\phi_s = 20^{\circ}$ with an array SNR of 20 dB and thermal sensor noise with unit power $(\sigma_{w}^2 = 1)$. The signal of interest is an impulse present only in the 100th sample.


Workspace initialization.

clc; clear; close all;

Signal Definitions.

M = 20;                % Number of Array Elements.
N = 200;              % Number of Signal Samples.
n = 1:N;               % Sample Index Vector.
lambda = 1;        % Incoming Signal Wavelength in (m).
d = lambda/2;     % Interelement Distance in (m).
SNR  = 20;          % Array Gain in dBs.
phi_s = 20;          % Signal Direction angle in deg.

u_s = (d/lambda)*sin(phi_s*pi/180);   % Normalized Spatial Frequency of the signal of interest.

% Desired Signal Definition:
s = zeros(M,N);

% Array snapshot (n=100) that contains the signal of interest (an impulse).
s(:,100) = (10^(SNR/20)*exp(-1i*2*pi*u_s*(0:M-1).'))/sqrt(M);

Monte Carlo Averaging

Run this experiment many times (Monte-Carlo runs) to come up with an average output vector y1: To reproduce perfectly Fig. 11.10 you should set NumExperiments = 1; As you can see, Monte-Carlo Averaging improves the output SNR a lot!

NumExperiments = 100;
y1 = zeros(1,N);
x1 = zeros(1,N);

for k=1:NumExperiments

    % Uncorrelated noise samples at each array element with a Gaussian distribution:
    w = (randn(M,N)+1i*randn(M,N))/sqrt(2);

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

    % Examining the signal at a single sensor in Figure 11.10 (a), we see that the signal is not visible
    % at n = 100 since the element level SNR is only 7 dB (full-array SNR minus M in decibels).
    % The output power of this sample for a given realization can be more or less than the expected
    % SNR due to the addition of the noise. However, when we apply a spatial matched filter using
    % the Spatial Matched Filter or Steering Vector Beamformer.
    c_mf = exp(-1i*2*pi*u_s*(0:M-1).')/sqrt(M);
    y = c_mf'*x;
    y1 = y1 + y;


y_average = 1/NumExperiments*y1;
ans =

Plot the Results.

figure('NumberTitle', 'off','Name','Figure 11.10');
% This plots the instantaneous power for every element (M waveforms).
ylim([-20 25]);
grid on;
title('Instantaneous Signal Power at each Element (Ensemble of 20 Elements)');
xlabel('Sample Number');
ylabel('Output Power (dB)');

grid on;
ylim([-30 25]);
title('Instantaneous Signal Power at the Output of the Steering Vector Beamformer');
xlabel('Sample Number');
ylabel('Output Power (dB)');