Sar Image Formation
Sar Image Formation
Sar Image Formation
p
- pulse duration (3.712 x 10
5
s or ~11 km long)
f
s
- range sampling rate (1.89625 x 10
7
s
-1
).
An example of a portion of the chirp for the ERS- radar as well as its power spectrum and
impulse response is shown below.
8
The bandwidth of the chirp,
B = k
p
, has a value of 15.5 MHz for the ERS radar. A matched
filter is used to deconvolve the chirp from the data. In this case, the matched filter is simply the
complex conjugate of the chirp or
s
*
(t) = e
ikt
2
. The convolution of s
*
(t) and s(t) is shown in the
figure above. The effective range resolution of the radar is about 27 m.
Using MATLAB code (Appendix) and the radar parmaters provided above, one can deconvolve
the ERS chirp. The figure below is a small patch of ERS-2 data for an area around Pinyon Flat,
California (track 127, frame 2925, orbit 10001). This area contains two radar reflectors (see
figure below) spaced about 600 m apart that were installed in late 1996. The amplitude of the
raw signal data appears as noise with a single horizontal streak due to missing data. The range-
compressed data (right image) shows two vertical streaks due to the high reflectivity of the
reflectors (red circles) as they migrate through the synthetic aperture.
9
Azimuth Compression
Azimuth compression or azimuth focusing involves generation of a frequency-modulated chirp
in azimuth based on the knowledge of the spacecraft orbit. The geometry of the strip-mode
acquisition is shown below.
s slow time along the satellite track
x ground-track position
V ground track velocity
s
o
time when the target is in the center of the radar illumination pattern
H spacecraft height
R
g
ground range
R(s) range from spacecraft to target
R
o
=
H
2
+ R
g
2
= R
near
+ n *(C/ fs) minimum range from the spacacraft to the target
The complex phase of the return echo is
C(s) = exp i
4
R(s)
s
H
R
g
(x-sV)
R(s) x
10
where the range is
R
2
(s) = H
2
+ R
g
2
+ x sV ( )
2
.
This is a hyperbola that we can approximate using a parabola
R(s) = R
o
+
R
o
(s s
o
) +
R
o
2
(s s
o
)
2
+ ...
where the dot indicates derivative with respect to slow time, s. Curlander and McDonough
[1991] discuss the accuracy of this polynomial approximation. Is is good enough for strip-mode
SAR but may be inadequate for the much longer apertures associated with spotlight-mode SAR.
Now we need to calculate
R and
R in terms of spacecraft parameters. Lets start with
R by
taking the derivative of R
2
with respect to s.
R
2
s
= 2R
R
R =
1
2R
R
2
s
We note that
R
o
is the velocity of the spacecraft in the range direction at the time
s
o
and thus a
measure of the Doppler shift when the target is in the center of the radar illumination pattern.
R
o
= V
x s
o
V
( )
R
o
The range acceleration
R is the derivative of the range rate
R .
R =
s
1
2R
R
2
s
[
\
|
)
j
=
1
2
1
R
2
R
2
s
2
[
\
|
)
j
+
1
R
2
R
s
[
\
|
)
j
R
2
s
[
\
|
)
j
|
|
|
|
|
|
This can be written as
R =
V
2
R
+
V
2
x sV
( )
2
R
3
=
V
2
R
1
x sV
( )
2
R
2
.
For the orbital characteristics of the ERS spacecraft, the second term is small so we have
R
o
V
2
R
o
Now we can write the phase of the return signal as a function of geometry and speed
11
C(s) = exp i
4
R
o
2
+
R
o
s s
o
( ) +
R
o
s s
o
( )
2
/2
[ ]
or
C(s) = exp i
4R
o
2
|
|
|
|
exp i2
2V
x s
o
V ( )
R
o
s s
o
( ) +
2V
2
R
o
s s
o
( )
2
/2
|
|
|
|
|
|
|
|
|
|
Note that this function is another frequency-modulated chirp where and there are two important
parameters the Doppler centroid
f
DC
=
2V
x s
o
V
( )
R
o
and the Doppler frequency rate
f
R
=
2V
2
R
o
.
An example of this azimuthal chirp function for the ERS orbit/radar as well as its power
spectrum and impulse response are shown below.
Doppler
centroid
Doppler
frequency
rate
12
The bandwidth of the azimuthal chirp is equal to the pulse repition frequency (PRF = 1680 Hz).
In this case the matched filter is simply the complex conjugate of the azimuthal phase function or
C*(s).
Azimuthal Compression Parameters and ERS Orbit
The Doppler centroid and Doppler frequency rate depend on the ground velocity of the
spacecraft V, the wavelength of the radar , the minimum distance between the spacecraft and
the target
R
o
, and a factor
x s
o
V
R
o
which is the squint angle.
Ground velocity - First consider the ground velocity of the spacecraft. Precise orbital
information is used to compute the velocity of the spacecraft at satellite altitude V
s
. As an
exercise, show that the ground velocity is
V =
V
s
1+
H
R
e
1/ 2
where H is the local spacecraft height and R
e
is the local earth radius.
Range - The quantity
R
o
is the range to a particular column in the raw signal data file.
R
o
= R
near
+ n(c /2 f
s
)
where
R
near
is the near range to the first column of the raw signal data file, n is the column
number (0-5615), c is the speed of light and f
s
is the range sampling rate given in the previous
section on range compression.
Squint angle - Finally lets examine the quantity,
x s
o
V
R
o
. This is related to something called the
squint angle, , as shown in the following diagram.
s
R
o
x - s
o
V
13
The squint angle is simply
= tan
1
x s
o
V
R
o
.
For the ERS satellites, the squint angle is adjusted so the zero Doppler occurs roughly in the
center of the antenna beam pattern. If the satellite orbit was circular and the earth was a non-
rotating sphere, then the zero Doppler would correspond to a zero squint angle.
For interferometry it is important that the beam patterns of the reference and repeat orbits have a
large overlap at a given along-track spacecraft position. The requirement is that the Doppler
centroid of the reference and repeat passes agree to about 1/2 of the pulse repetition frequency
(PRF). In late 1999, the gyroscopes on ERS-2 failed so it became difficult to control the squint
angle of the spacecraft. Data acquired after this date may a Doppler centroid outside of the
acceptable range and thus may be useless for interferometry.
Using MATLAB code (Appendix) and the azimuth compression provided above, one canfocus
the image in the azimuth direction. The figures below the same small patch of ERS-2 data for an
area of Pinyon Flat, California. The range-compressed data (left image) shows two vertical
streaks due to the high reflectivity of the reflectors (red circles) as they migrate through the
synthetic aperture. The fully focused image (right) shows the high point-like reflectivity
associated with the two radar reflectors.
14
Appendix MATLAB Code for Focusing ERS Signal Data
%****************************************************
function [cref,fcref]=rng_ref(nfft,fs,pulsedur,slope)
%
% routine to compute ERS chirp and its fourier
transform
%
% input
% fs - sampling frequency, ts=1./fs
% pulsedur - pulse duration
% slope - chirp slope
%
% set the constants and make npts be odd
%
npts=floor(fs*pulsedur);
ts=1./fs;
if(mod(npts,2.0) == 0.0)
npts=npts+1;
end
%
% compute the reference function
%
npt2=floor(npts/2.);
t=ts*(-npt2:npt2);
phase=pi*slope*t.*t;
cref1=exp(i*phase);
%
% pad the reference function to nfft
%
cref=[cref1,zeros(1,nfft-npts)]';
%
% compute the fourier transform
%
fcref=fft(cref)/nfft;
%****************************************************
function [cazi,fcazi]=azi_ref(nazi,PRF,fdc,fr)
%
% routine to compute ERS azimuthal chirp and its
fourier transform
%
% input
% nazi - number of points in azimuth
% PRF - pulse repitition frequency, ts=1./fs
% fdc - doppler centriod frequency
% fr - doppler frequency rate
%
% set the constants and make npts be odd
%
npts=min(nazi-1,1296);
ts=1./PRF;
if(mod(npts,2.0) == 0.0)
npts=npts+1;
end
%
% compute the azimuth chirp function
%
npt2=floor(npts/2.);
t=ts*(-npt2:npt2);
phase=-2.*pi*fdc*t+pi*fr*t.*t;
cazi1=exp(i*phase);
%
% pad the function to nfft
%
cazi=[cazi1(npt2:npts),zeros(1,nazi-
npts),cazi1(1:npt2-1)]';
%
% compute the fourier transform
%
fcazi=fft(cazi)/nazi;
%****************************************************
function [csar,nrow,ncol]=read_rawsar(sar_file)
%
% routine to read and unpack ERS SAR data in
DPAF format
%
fid=fopen(sar_file,'r');
%
% read the bytes
%
[sar,nsar]=fread(fid,'uchar');
sar=reshape(sar,11644,nsar/11644);
nrow=nsar/11644;
ncol=5616;
st=fclose(fid);
%
% extract the real and imaginary parts
% and remove the mean value
%
csar=complex(sar(413:2:11643,:)-
15.5,sar(414:2:11644,:)-15.5);
%
%****************************************************
% matlab script to focus ERS-2 signal data
%
% set some constants for e2_10001_2925
%
% range parameters
%
rng_samp_rate = 1.896e+07;
pulse_dur = 3.71e-05;
chirp_slope = 4.1779e+11;
%
% azimuth parameters
%
PRF=1679.902394;
radar_wavelength=0.0566666;
SC_vel=7125.;
%
% compute the range to the radar reflectors
%
near_range=829924.366;
15
dr=3.e08/(2.*rng_samp_rate);
range=near_range+2700*dr;
%
% use the doppler centroid estimated from the data
and the
% doppler rate from the spacecraft velocity and
range
%
fdc=284;
fr=2*SC_vel*SC_vel/(range*radar_wavelength);
%
% get some sar data
%
[cdata,nrow,ncol] = read_rawsar('rawsar.raw');
%
% make a colormap
%
map=ones(21,3);
for k=1:21;
level=0.05*(k+8);
level=min(level,1);
map(k,:)=map(k,:).*level;
end
colormap(map);
%
% image the raw data
%
figure(1)
subplot(2,2,1),imagesc(abs(cdata'));
xlabel('range')
ylabel('azimuth')
title('unfocussed raw data')
axis([2600,2900,1000,1200])
%
% generate the range reference function
%
[cref,fcref]=rng_ref(ncol,rng_samp_rate,pulse_dur,chir
p_slope);
%
% take the fft of the SAR data
%
fcdata=fft(cdata);
%
% multiply by the range reference function
%
cout=0.*fcdata;
for k=1:nrow;
ctmp=fcdata(:,k);
ctmp=fcref.*ctmp;
cout(:,k)=ctmp;
end
clear cdata
%
% now take the inverse fft
%
odata=ifft(cout);
clear cout
%
% plot the image and the reflector locations
%
x0=[2653.5,2621];
x0=x0+90;
y0=[20122,20226];
y0=y0-19500+427;
figure(1)
hold
subplot(2,2,2),imagesc(abs(odata'));
plot(x0,y0,'o')
xlabel('range')
ylabel('azimuth')
title('range compressed')
axis([2600,2900,1000,1200])
%
% use this for figure 2 as well
%
figure(2)
colormap(map);
subplot(2,2,1),imagesc(abs(odata'));
hold on
plot(x0,y0,'o')
xlabel('range')
ylabel('azimuth')
title('range compressed')
axis([2600,2900,1000,1200])
%
% generate the azimuth reference function
%
[cazi,fcazi]=azi_ref(nrow,PRF,fdc,fr);
%
% take the column-wise fft of the range-compressed
data
%
fcdata=fft(odata');
%
% multiply by the azimuth reference function
%
cout=0.*fcdata;
for k=1:ncol;
ctmp=fcdata(:,k);
ctmp=fcazi.*ctmp;
cout(:,k)=ctmp;
end
%
% now take the inverse fft and plot the data
%
odata=ifft(cout);
figure(2)
subplot(2,2,2),imagesc(abs(odata));
hold on
plot(x0,y0,'o')
xlabel('range')
ylabel('azimuth')
title('range and azimuth compressed')
axis([2600,2900,1000,1200])