| Purpose |
| Simulation of a sidelobe canceler application using an adaptive array with the array coefficients adjusted using the LMS algorithms. The array will produce a spatial notch in the directions of the strong signals (interferences), where all signals are assumed real and narrow-band. |
| Syntax |
beamrf_lms
|
| Description |
The block diagram of an adaptive array functioning as a sidelobe canceler is shown in
Fig. 10.25. The array is composed of two omnidirectional (equally sensitive
in all directions) sensors. The two array elements receive narrow-band (modulated signals
at RF frequency for instance) incident signals
that include one signal and one jammer at the same center frequency beamrf_lms first sets the array parameters, and then creates and initializes an
adaptive filter of length init_lms(). The adaptive filter in this application has an adaptive linear
combiner structure with
input signals equal to those received by the reference sensors and their asptlms() is called with a new primary sample and a new set of reference samples to
calculate the filter output, the error, and update the filter coefficients.
This simulation script uses the standard ASPT iteration progress window (IPWIN). The
IPWIN has four buttons which allow you to stop and continue the simulation, show or
hide the simulation graph window, break out of the processing loop, and quit the
simulation. After processing all the samples, or on pressing the break or stop
buttons, the sensor signal |
| Code |
clear all
rand('seed',12)
iter = 5000; % samples to process
c = 3450; % propagation speed
fc = 40000; % Carrier frequency
Wc = 2*pi*fc; % Carrier radian freq
lambda = 2*pi*c/Wc; % Carrier wave length
Fs = 100000; % sampling frequency
T = 1/Fs; % sampling period
Wo = Wc * T; % sampled carrier freq
Po = [ 90 45 0]; % arrival angles [deg]
Avar = [1 .001 2]; % variance of each sig.
M = length(Po); % # array elements
L = lambda/2 * (1:M-1); % distances vector
Po = pi*Po/180; % arrival angles [rad]
Do = (Wc/c)*(L' * sin(Po)); % phase shifts [rad]
ph = 2*pi*rand(iter,M); %random phase
A = repmat(sqrt(Avar),[iter 1]).*randn(iter,M);
mu = 0.05; % step size
E = init_ipwin(iter,1); % Initialize IPWIN
% need M-1 filters each of 2 coefficients
[w,x,d,y,e] = init_lms(2*(M-1));
for n=1:iter
% signal at the primary branch + receiver noise
d = sum(A(n,:) .* cos(n*Wo + ph(n,:) ),2) + 1e-3*rand;;
% signals at the reference branches
for i=1:M-1
r = 1e-3*rand; % receiver noise
x(2*(i-1)+1) = sum(A(n,:).*cos(n*Wo + ph(n,:)-Do(i,:)),2)+r;
x(2*i) = sum(A(n,:).*sin(n*Wo+ph(n,:)-Do(i,:)),2) +r;
end
|
% calculate output, error, and update coefficients [w,y,e] = asptlms(x,w,d,mu); % update the Iteration Progress Window [E, stop,brk] = update_ipwin(E,e,d, 'b', w, L, Wo, c*T); % handle the Stop button while (stop ~= 0), stop = getStop; end; % handle the Break button if (brk), plot_beam(E, w, L, Wo, c*T); break; end; end plot_beam(E, w, L, Wo, c*T); |
| Results |
Running the above script will produce the graph shown in Fig. 10.26.
The left panel of this figure shows the learning curve for the adaptive coefficients
and the right panel shows the directivity pattern of the array. Since the
two strong signals used in the script are arriving at angles
|
| See Also |
| INIT_ LMS, ASPTLMS, ASPTLCLMS, BEAMBB_ LCLMS. |
| Reference |
| [11] for an introduction to adaptive array signal processing. |