%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% %
% Ambiguity Function for Phased Array Imaging %
% with Randomized/Nonrandomized Beam Steering %
% %
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
colormap(gray(256))
cj=sqrt(-1); pi2=2*pi;
c=155000; % Propagation speed, cm/sec
fc=3e6; % Carrier frequency, Hz
f0=1e6; % [fc-f0,fc+f0] is the bandwidth
kc=(pi2*fc)/c; % Wavenumber at the carrier frequency
x0=4.8; % Length of the target area in range is 2 x0
dkx=pi/x0; % Sample spacing in the target k_x domain
dk=dkx/2; % Sample spacing in the wavenumber domain
df=(c*dk)/pi2; % Sample spacing in the frequency domain
n=ceil((2*f0)/df); % Number of frequencies used
k=kc+(-n/2:n/2-1)*dk; % Wavenumber array
lambda=pi2/k(n); % Wavelength at the highest frequency
dx=pi2/(dkx*n); % Sample spacing in the target x domain
x=dx*(-n/2:n/2-1); % Spatial domain range (x) array
r0=1.4*x0; % Distance of the center of the array from the
% center of the target region; in the book "Fourier
% Array Imaging," r0 is something else (the depth of
% reconstruction)
y=x; % Spatial domain cross-range (y) array
y0=-y(1); % Length of the target area in cross-range is 2 y0
dky=pi/y0; % Sample spacing in the target k_y domain
dy=pi2/(dky*n); % Sample spacing in the target y domain
L=.75*(r0*lambda)/(4*dy); % Length of aperture is 2L. The factor .75
% can be removed and/or adjusted to yield the
% desired aperture length. However, this factor
% should always be less than "one" to avoid aliasing
du=(r0*lambda)/(4*(L+y0)); % Sample spacing in the aperture domain
m=ceil((2*L)/du); % Number of elements on phased array; it can be
% readjusted to have an "odd" number of elements
% such that the array is symmeteric; this is done
% in the following (NOT IMPORTANT):
if floor(m/2)*2 == m, m=m+1; end; m2=floor(m/2); du=(2*L)/(m-1);
u=du*(-m2:m2); % Aperture array
dte=lambda/(4*L); % sample spacing in the beam steering domain
te0=asin(y0/r0); % Beam steering is done in the interval [-te0,te0]
M=ceil((2*te0)/dte); % Number of steer angles
% Readjusting it to become "odd" (NOT IMPORTANT)
if floor(M/2)*2 == M, M=M+1; end; M2=floor(M/2); dte=(2*te0)/(M-1);
te=dte*(-M2:M2); % Beam steer array
dtau=(2*(r0+x0))/c; % Sample spacing in the slow-time domain which
% is restricted by the round trip delay from the
% largest depth of the target region, i.e., r0+x0
tau=dtau*(-M2:M2); % Nonrandomized slow-time array
TAU=tau; % This arry will contain the randomized version of
% the slow-time array if the flag "ir=1" is set
% NOTE: For computational purposes, it is more
% convenient to randomize the slow-time with
% respect to the beam steer angle. This yields the
% same mathematical model as randomizing the beam
% steer angle with respect to the slow-time.
%
%%%%%%%% Slow-time randomizing
ir=1; % This flag is ON for randomized beam steering
if ir == 1,
Z=rand(1,M); % Uniform random generator
[Z,I]=sort(Z); % Sorted random data
% What follows is the generation of random slow
% time array
for i=1:M;
TAU(i)=tau(I(i));
end;
end;
Dtheta=atan(L/r0); % Beam steer angular interval over which a target
% at the origin, i.e., (r0,0), is "observable" is
% [-Dtheta,Dtheta].
Dtau=dtau*(Dtheta/dte); % Slow-time interval over which a target at the
% origin, i.e., (r0,0), is "observable" is
% [-Dtau,Dtau].
i1=ceil(Dtheta/dte);
II=M2+1-i1:M2+1+i1; % II represents the indices in the beam steer
% array which represent the angular interval of
% the target observability, i.e., [-Dtheta,Dtheta].
% The ambiuity function integral is obtained only
% over these indices. NOTE: The ambiguity function
% looks better if II is chosen to include ALL beam
% steer angles, i.e., II=1:M. However, this
% implies that the target is obsevable at ALL
% beam steer angles which is not realistic.
dv=c/(4*Dtau*fc); % Speed resolution
nn=64; % Size of the ambiguity array is nn X nn.
aa=.2*dv*(0:nn-1); bb=aa; % (aa,bb) are the velocities for which the ambiguity
% function is computed.
h=zeros(nn,nn); % Initialize the ambiuity array
%%%%%%%%%%%%% Computing the ambiguity function
for i=1:nn;
for j=1:nn;
h(i,j)=sum(sum(exp(cj*2*k(:)*(TAU(II).*(aa(i)* ...
cos(te(II))+bb(j)*sin(te(II)))))));
end;
end
G=abs(h)';img; image(aa,bb(nn:-1:1),256-cg*(G-ng))
axis('square')
ylabel('Perpendicular to Line of Sight Speed, cm/sec')
xlabel('Line of Sight Speed, cm/sec')
if ir == 1,
title('Velocity Ambiguity Function: Randomized Beam Steering');
else,
title('Velocity Ambiguity Function: Conventional Beam Steering');
end;