EE / GP Homework Solutions February,. Autofocus: subaperture shift algorithm Compress the signal (with chirp slope s = Hz/s) by correlating it with the reference chirp (with different chirp slope s ) twice: once with the first subaperture of the reference chirp, consisting of positive frequencies (half its bandwidth), and another time with the second subaperture of the reference chirp, which consists of negative frequencies (the other half of its bandwidth). The compressed signals from both subapertures will be slightly offset from each other (see figures), so cross-correlate them to compute the pixel offset p (see second column in table). Convert to time shift t by dividing by the sample rate f s (see third column in table): t = p f s () Then compute the chirp slope correction s (see fourth column in table). This should match the expected slope correction s exp = s s we get from subtraction, since we know the true chirp slope s. s = s t BW = s t = s t () sτ τ s (Hz/s) (a) pixel offset t (s) (b) s (Hz/s).......9..
% EE HW Problem close all; clear; set(, defaultaxesfontsize, ); %%%%%%%%%%%%%%%%%%%%%%%%% Problem %%%%%%%%%%%%%%%%%%%%%%% % pb: autofocus using sub-aperture shift algorithm clear;clc;close all; %% signal chirp s_sig=e; tau=e-; fs=e; Nmin=round(fs*tau); N=^ceil(log(Nmin)/log()); signal=makechirp(s_sig,tau,fs,,,n); spect_sig=fft(signal); %% ref chirp s=e;
s=.e; s=.e; s=.9e; sr=[s,s,s,s]; % reference chirp slopes for k=:numel(sr) sp=sr(k); bw=tau*sp; fullrefchirp=makechirp(sp,tau,fs,,,n); subchirp=makechirp(sp,tau/,fs,-bw/,,n); subchirp=makechirp(sp,tau/,fs,bw/,round(tau/*fs+),n); spect_ref=fft(subchirp); spect_ref=fft(subchirp); compsig=ifft(spect_sig.*conj(spect_ref)); compsig=ifft(spect_sig.*conj(spect_ref)); t=/fs*(-n/:n/-); t=e*t; % figure: Compressed looks, showing their misregistration figure() subplot(,,k) plot(t,fftshift(abs(ifft(spect_sig.*conj(spect_sig)))), linewidth,) hold on plot(t,fftshift(abs(compsig)), linewidth,) hold on plot(t,fftshift(abs(compsig)), linewidth,) hold off xlabel( t,us ) ylabel( amplitude ) xlim([-tau/,tau/]*e) leg( full aperture, sub-negative freq, sub-positive freq ) % saveas(gcf, pb.png, png ) % find the offset delta_t by correlating the two sub-aperture images shift=fftshift(ifft(fft(abs(compsig)).*conj(fft(abs(compsig))))); [maxnum,index]=max(abs(shift)); delta_t(k)=(index-n/-)/fs; delta_s(k)=*delta_t(k)*sp^/bw/e; pixeloffset(k)=(index-n/-); function chirp = makechirp(s,tau,fs,fc,start,n) %s : slope %tau : pulse length %fs : sample rate %fc : center frequency %start: starting location of chirp
%n : number of samples dt=/fs; % sampling time interval npts=floor(tau/dt); % number of points of the chirp signal t=(-npts/:npts/-)*dt; phase=pi*s*t.^+*pi*fc*t; chirp=zeros(n,); chirp(start:start+npts-)=exp(i*phase); return. Range migration with simulated data: cut and paste raw data lines bins.9........ We observe migration in the magnitude of the raw data from simlband.dat: a slant of about - pixels. The signal boundaries are not present within a single bin. (a) Range migration is still evident in the compressed data (left), especially when we zoom in on bins - (right). The signal does not stay in the same bin, but instead curves as the position changes.
compressed data compressed data, zoom lines lines bins bins (b) After transforming the compressed data in the direction (left), we still see migration between the two tail s of the spectra (about - pixels), especially when we zoom in on bins - (right). Notice that f DC is around prf/ (part c), which explains why the s of the spectra come together around - Hz. Also, the frequency can have an ambiguity of n*prf, so we only plot the axis label as [-prf/ prf/]. Azimuth-transformed image Azimuth-transformed image, zoom - - frequency in (Hz) - frequency in (Hz) - bins bins (c) After computing the average Doppler spectrum over all valid bins, we find that it peaks at a frequency of f DC, =.9 Hz, which we estimate as the Doppler centroid. Other possible values of f DC are possible because of ambiguity from sampling the Doppler spectrum. I can also have f DC = f DC, + n P RF, where n is an integer. Letting n =,,,,, I get these possible values of f DC, respectively: -9. Hz, -. Hz,.9 Hz,.9 Hz,.9 Hz.
Average spectrum Average spectrum magnitude (db) - - - frequency (Hz) (d) We use the same focused SAR processing algorithm from Homework, compressing the data in both the and directions, trying all possible f DC values from problem c. We process only patch (with samples). We plot images that are zoomed in both and, to examine the impulse response more closely. The impulse responses for f DC = -. Hz and.9 Hz look the sharpest in both and, but there is still some blurring over a few pixels in both directions. The other f DC values are not at the correct ambiguity because the impulse response is too smeared out in the direction, and we can see some migration. Focused image, f dc = -9.9 Hz Focused image, f dc = -.9 Hz Focused image, f dc =.9 Hz Focused image, f dc =.9 Hz Focused image, f dc =.9 Hz
(e) Range migration with the cut and paste algorithm improved the resolution of the impulse response. It was not very obvious with the original processing results, but the images after migration clearly show that the absolute (unwrapped) Doppler centroid is at f DC = -. Hz (when n = ), where the image is sharpest, and sharper than all images from problem d. Note that the migration process increased the sensitivity to the Doppler centroid ambiguity. Range migration, image, f dc = -9.9 Hz Range migration, image, f dc = -.9 Hz Range migration, image, f dc =.9 Hz Range migration, image, f dc =.9 Hz Range migration, image, f dc =.9 Hz % EE HW Problem close all; clear; set(, defaultaxesfontsize, ); %%%%%%%%%%%%%%%%%%%%%%%%% Problem %%%%%%%%%%%%%%%%%%%%%%% % Read in data nr = ; naz = ; fid=fopen( simlband.dat ); dat = fread(fid, [nr* naz], float, l ); fclose(fid); signal = dat(::,:) + i*dat(::,:);
% Plot raw data imagesc(abs(signal). ); title( raw data ); colormap gray; colorbar; ylabel( lines ); xlabel( bins ); % Part a): Range compression s = e; tau = e-; fs = e; r=makechirp(s,tau,fs,,,nr); R=fft(r); S=fft(signal); Sc=zeros(size(S)); for jj=:naz Sc(:,jj)=S(:,jj).*conj(R. ); rcomp=ifft(sc); nvalid = nr - fs*tau; % valid bins rcomp=rcomp(:nvalid,:). ; imagesc(abs(rcomp)); title( compressed data ); ylabel( lines ); xlabel( bins ); colormap gray; colorbar; imagesc(abs(rcomp)); title( compressed data, zoom ); ylabel( lines ); xlabel( bins ); xlim([ ]); colormap gray; colorbar; % Part b): Transform in Rcomp=fft(rcomp); prf = ; fq=linspace(-prf/,prf/,naz); imagesc(:nvalid, fq, fftshift(abs(rcomp),)); ylabel( frequency in (Hz) ); xlabel( bins ); title( Azimuth-transformed image ) colormap gray; colorbar;
imagesc(:nvalid, fq, fftshift(abs(rcomp),)); ylabel( frequency in (Hz) ); xlabel( bins ); xlim([ ]); title( Azimuth-transformed image, zoom ) colormap gray; colorbar; % Part c): Estimate Doppler centroid with average spectrum Saz=zeros(naz,); for jj=:nvalid Saz=Saz+abs(Rcomp(:,jj)); Saz=Saz/nvalid; ind_max = find(fftshift(saz) == max(fftshift(saz))); fdc_est = fq(ind_max); plot(fq,*log(fftshift(saz)), linewidth,); xlabel( frequency (Hz) ); ylabel( Average spectrum magnitude (db) ); title( Average spectrum ); % Part d): Process image with original (non-migrating) focused SAR lambda=.; r=; % to first bin v=; l=; c =.999e; % speed of light (m/s) dr = c/(*fs); % slant bin spacing (m) nn = [- - ]; % Doppler centroid ambiguity: integer fdc_arr = fdc_est + prf*nn; % Possible Doppler centroid frequencies (Hz) for k=:numel(nn) fdc = fdc_arr(k); % get Doppler centroid rmax = r+(nvalid-)*dr; % to last bin rdcmax = sqrt(rmax^+(fdc*rmax*lambda/(*v))^); % max at antenna boresight (m) tazmax =.*rdcmax*lambda/(l*v); % maximum illumination time (s) validperpatch=floor(naz-tazmax*prf); % number of valid samples per patch % Apply compression for this fdc ( patch, bins) s_focus=zeros(naz,nvalid); for bin=:nvalid =r+(bin-)*dr; rdc=sqrt(^+(fdc**lambda/(*v))^); frate=-*v^/(rdc*lambda); taz=.*rdc*lambda/(v*l); ref=makechirp(frate,taz,prf,fdc,,naz); Ref=fft(ref); 9
s_focus(:,bin)=ifft(rcomp(:,bin).*conj(ref. )); % Plot focused SAR image for this fdc imagesc(abs(s_focus)); colorbar; caxis([ e]); colormap( jet ); xlim([ ]); ylim([ ]); xlabel( ); ylabel( ); title([ Focused image, f_{dc} =, numstr(fdc), Hz ]); % Part e): Range migration with cut-and-paste % Rcomp is -compressed, -transformed data Rcomp=zeros(size(Rcomp)); % Allocate array for -migrated data df = prf/naz; for k=:numel(nn) fdc = fdc_arr(k); % get Doppler centroid fmin = nn(k)*prf; % minimum frequency % Apply migration with cut-and-paste for bin=:nvalid for jj=:naz freq=fmin+(jj-)*df; dist_offset = (freq^-fdc^)*(r/)*(lambda/v)^; % offset distance (m) rshift=floor(dist_offset/dr); % number of offset bins if((bin+rshift <= nvalid) && (bin+rshift > )) % array bounds check Rcomp(jj,bin)=Rcomp(jj,bin+rshift); % Apply compression for this fdc ( patch, bins) s_rm_focus=zeros(naz,nvalid); for bin=:nvalid =r+(bin-)*dr; rdc=sqrt(^+(fdc**lambda/(*v))^); frate=-*v^/(rdc*lambda); taz=.*rdc*lambda/(v*l); ref=makechirp(frate,taz,prf,fdc,,naz); Ref=fft(ref); s_rm_focus(:,bin)=ifft(rcomp(:,bin).*conj(ref. )); % Plot focused, migrated SAR image for this fdc imagesc(abs(s_rm_focus)); colorbar; caxis([ e]); colormap( jet ); xlim([ ]); ylim([ ]); xlabel( ); ylabel( ); title([ Range migration, image, f_{dc} =, numstr(fdc), Hz ]);
. We can consider the radar geometry as two concentric spheres; the outer sphere is the orbital sphere of the satellite, the inner sphere is the Earth. Point A is the point of closest approach of the satellite to point C, and point B is some later position of the satellite. We want to find the r from B to C. We derived the effective velocity for the point P (directly under the satellite) in Handout. The relative height history z(t) between the point P and the satellite can be written as (from Handout ): v t z(t) = z () (z + R e ) From geometry, the height difference between point P (directly under the satellite) and point C (not directly under the satellite) is: cos β = R e z R e z = R e R e cos β () Now write the expression for as a function of time, r (t), but replace z(t) with z(t)+ z: r (t) = v t + y + (z(t) + z) r (t) = v t + y + (z(t)) + z(t) z + ( z) () Plug in Eq. into Eq.. Here we neglect the higher order v t term: ( r (t) = v t + y + z v t ) ( + z (z + R e ) r (t) = v t + y + z z v t z + R e + ( z v t ) z + ( z) (z + R e ) ) () z + ( z) v t (z + R e )
Gather all terms in Eq. with v t, and call everything else constant (not changing with time): r (t) = y + z + z z + ( z) + v t z v t ( z + R e v t (z + R e ) r (t) = const + v t [ z z + R e ) z z ] () z + R e The effective velocity v eff is the term in Eq. in brackets, times v, so simplify: v eff = v [ z z + R e v eff = v [ z + R e z + R e z z + R e z z + R e z ] z + R e [ ] veff = Re z v z + R e Plug in Eq. into Eq., and take the square root: [ ] veff = Re (R e R e cos β) v z + R e [ ] veff = Re cos β v z + R e Re cos β v eff = v z + R e ] () (9)