| Purpose |
| Simulation of a beam former application using an adaptive array with the adaptive coefficients adjusted using the LCLMS algorithms. Signals are assumed to be complex and at the baseband frequency (modulated carrier gone through a phase quadrature demodulator for instance). |
| Syntax |
beambb_lclms
|
| Description |
The block diagram of the adaptive array simulated in this application is shown in
Fig. 10.23. The array is composed of M omnidirectional
(equally sensitive in all directions) sensors. All array elements receive
narrow-band incident signals that include one or more jammer at the same
center frequency beambb_lclms first sets the array parameters, and then creates and initializes
an adaptive filter of length init_lclms(). The adaptive filter here is an adaptive linear combiner
with complex input signals equal to those received by the array sensors after
demodulation to the base band frequency. A processing loop is then started, in each
iteration in this loop, asptlclms() is called with a new set of sensor samples
to calculate the filter output, error signal, and update the constrained
filter coefficients. No desired signal is used here, and the desired is always set to
zero.
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 |
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 = [80 0 -45]; % arrival angles [deg] Avar = [1 1 1]; % variance of signals M = length(Po); % # array elements L = lambda/2 * (1:M-1); % distances bet. sensors 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.01; % step size E = init_ipwin(iter,1); % Initialize IPWIN % need M filters each has 1 complex coefficient. Desired % signal here is always d(n) = 0 and the filter is updated % so that sum(w) = 1 exp(j*0) and will produce a main lobe % at zero degree, the incident direction of the useful signal. [w,x,d,y,e] = init_lclms(M); d = 0; v = ones(M,1); % constraint vector. a = 1; % constraint scalar. for n=1:iter % signal at the primary branch + receiver noise x(1) = sum(A(n,:) .* exp(j*ph(n,:) ),2) + 1e-3*rand; |
% signals at the reference branches
for i=2:M
r = 1e-3*rand; % receiver noise
x(i) = sum(A(n,:).*exp(j*ph(n,:)-j*Do(i-1,:)),2)+r;
end
% calculate output, error, and update coefficients
[w,y,e] = asptlclms(x,w,d,mu,v, a);
% update the Iteration Progress Window
[E, stop,brk] = update_ipwin(E,e,d, 'b', w, L, Wo, c*T, 1);
% handle the Stop button
while (stop ~= 0), stop = getStop; end;
% handle the Break button
if (brk), plot_beam(E, w, L, Wo, c*T,1); break; end;
end
plot_beam(E, w, L, Wo, c*T,1);
|
| Results |
|
Running the above script will produce the sensitivity pattern shown in
Fig. 10.24. The sensitivity pattern shows that the array main lobe
is indeed at ( |
|
| See Also |
| INIT_ LCLMS, ASPTLCLMS, BEAMRF_ LMS. |
| Reference |
| [11] for an introduction to adaptive array signal processing. |