SAR成像學習(四)距離方向成像matlab代碼解析 2

如果發射信號是線性調頻信號,上一次講的距離成像算法流程(匹配濾波方法)依然可以用,但那個流程要求T x =4X 0 c >T p   。如果T x <T p   ,即幅寬相對較小的情況,上一講中的流程會帶來一個問題,解決這個問題的辦法是pulse compression。本文將會討論這個puse compression的原理和實現。

1 what is pulse compression


對於線性調頻信號:p(t)=a(t)exp(jβt+jαt 2 )  ,信號持續時間爲T p   ,瞬時頻率爲β+aαt  帶寬爲:
±ω 0 =±αT p  

puse compression就是講其對應的回波信號s(t)  與參考信號exp(jβt+jαt 2 )  共軛相乘。
s(t)= n σ n a(tt n )exp(jβ(tt n ))exp(jα(tt n ) 2 ) 

其中t n =2x n /c 
puse compression的結果:
s c (t)=s  (t)exp(jβt+jαt 2 )= n σ n a  (tt n )exp(jβt n jαt 2 n )exp(j2αtt n ) 

注意其中的頻率成分2αt n   包含了目標的位置信息!這也正是puse compression能夠進行成像處理的本後原因(代碼在上一講中)。
對上式進行傅里葉變換:
S c (ω) = n σ n exp(jβt n jαt 2 n jωt n )psf ω (ω2αt n )= n σ n exp(jβt n jαt 2 n jωt n )psf ω (ω4αx n /c)  

其中的exp(jβt n jαt 2 n jωt n ) 相位函數
其中psf ω   爲頻域的點擴散函數:
psf ω =F (t) [a  (t)] 

很明顯這是一個sinc函數。注意sinc函數峯值位置對應了(注意對應關係)了目標的位置。這個對應關係爲:
ω=4αxc  

這就很好地解釋了pulse compression方法進行成像的原理。現在我們來看一看s c (t)  (時域)壓縮信號要求的採樣間隔。因爲時域信號的範圍是x[X c X 0 ,X c +X 0 ]  ,所以對應的有ω[4α(X c X 0 )c ,4α(X c +X 0 )c ]  。現在我們找到了頻域的帶寬24αX 0 c =2αT x   ,其中T x =4X 0 c  
那麼時域壓縮信號的採樣間隔爲:
Δ tc <=παT x   

注意上面的T x   對應成像的幅寬。

2 爲什麼要在匹配濾波成像過程中進行pulse compression


上一講中說到利用匹配濾波進行成像處理的話,信號的採樣間隔是Δ t <=πB 0  =παT p   
可見兩種成像方法(匹配濾波和時域壓縮)所要求的採樣間隔是不一樣的。
注意硬件上希望採樣間隔較大。
現在考慮一種情況:T x <T p   ,此時壓縮信號所要求的採樣間隔較大,如果我用時域壓縮的方法進行成像處理,沒有問題。但是假如我偏偏想用匹配濾波的方法進行成像處理,而且硬件上又必須要用Δ tc   進行採樣,結果是什麼?結果是回波信號亞採樣,頻譜混疊,成像失敗!
有沒有解決辦法?有,就是在匹配濾波成像過程中進行pulse compression,利用沒有混疊的壓縮信號頻譜得到沒有混疊的回波信號,然後就是按照匹配濾波的流程進行成像。
也就是說因爲亞採樣(爲了遷就硬件上的要求),我們不能直接利用回波信號,而是要用後處理得到的回波信號。
T x >T p  T x <T p   兩種情況下的匹配濾波成像處理流程別如下:


T x >T p   匹配濾波成像處理流程


T x <T p   匹配濾波成像處理流程

這兩個過程在matlab代碼中體現得很清楚了,不再展開。

3 爲什麼兩種方法的處理結果不同呢


這是上一講最後的一個疑問:case T x >T p   (由下面的代碼其實上一講也有代碼)兩種方法恢復出來的結果不一樣!具體說是時域壓縮方法結果是錯誤的。想了好久之後終於找到了答案。
時域壓縮方法結果確實是錯誤的。因爲時域壓縮信號亞採樣了,因爲代碼中用的是回波信號的採樣間隔,而T x >T p  
那麼怎樣才能得到正確的結果呢?書上說可以通過沒有混疊的回波信號得到沒有混疊的壓縮信號。就像可以通過沒有混疊的壓縮信號得到沒有混疊的回波信號一樣。
這樣繞來繞去的原因是:硬件上希望採樣間隔較大
所以我們可以總結:任何情況下T x >T p   或者T x <T p   ,如果必須滿足硬件上的要求(採樣間隔大一些),那麼回波信號和壓縮信號必然有一個是亞採樣的,直接利用匹配濾波方法或者時域壓縮方法的話,必然有一個會失敗。避免失敗的方法就是通過沒有亞採樣的那個信號間接得到本來亞採樣的信號。
這個間接的方法說白了就是內插,升採樣。

4 代碼及註釋


這裏的代碼包括了上一講和這一講的所有內容。
參考數據及代碼來源

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%基本參數
clear clc
colormap(gray(256))
cj=sqrt(-1);
pi2=2*pi;
%
c=3e8;                   % Propagation speed
B0=100e6;                % Baseband bandwidth is plus/minus B0
w0=pi2*B0;
fc=1e9;                  % Carrier frequency
wc=pi2*fc;

Xc=2.e3;                 % Range distance to center of target area
X0=50;                   % target area in range is within [Xc-X0,Xc+X0]
%
% Case 1:
 Tp=.1e-6;               % Chirp pulse duration
% 
% % Case 2:
 Tp=10e-6;               % Chirp pulse duration

alpha=w0/Tp;             % Chirp rate
wcm=wc-alpha*Tp;         % Modified chirp carrier 即是式子中的beta
%
dx=c/(4*B0);             % Range resolution

%採樣間隔
dt=pi/(2*alpha*Tp);      % Time domain sampling (gurad band plus minus
                         % 50 per) or use dt=1/(2*B0) for a general
                         % radar signal
                         % 可能是因爲信號是實信號 所以是採樣頻率是信號帶寬的2Tx=(4*X0)/c;             % Range swath echo time period

%壓縮信號的採樣間隔
dtc=pi/(2*alpha*Tx);     % Time domain sampling for compressed signal
                         % (gurad band plus minus 50 per)
%
Ts=(2*(Xc-X0))/c;        % Start time of sampling
Tf=(2*(Xc+X0))/c+Tp;     % End time of sampling

% If Tx < Tp, choose compressed signal parameters for measurement
% 因爲硬件傾向於信號有着較小的帶寬,所以如果壓縮後的信號可以滿足這個,首先會選擇使用這個壓縮後的信號
% 可想而知,這樣子回波信號(未壓縮的)採樣的間隔就過大了,所以需要進行升採樣。
flag=0;                  % flag=0 indicates that Tx > Tp
if Tx < Tp,
 flag=1;                 % flag=1 indicates that Tx < TP
 dt_temp=dt;             % Store dt
 dt=dtc;                 % Choose dtc (dtc > dt) for data acquisition
 %就是說用dtc去採樣回波信號(它應該是用dt採樣纔不會混疊)
end;

% Measurement parameters
%
n=2*ceil((.5*(Tf-Ts))/dt);   % Number of time samples
t=Ts+(0:n-1)*dt;             % Time array for data acquisition
%注意這裏用了dt 後面以自變量的形式去求的回波信號序列也就是採樣了
%如果它本質上是dtc,那麼就是亞採樣了。

%這三個參數也是取決於dt的 如果Tx < Tp後面會重新計算 因爲這些參數是屬於未壓縮的回波信號的
%如果Tx > Tp 這裏的設置當然就是對的啦
dw=pi2/(n*dt);               % Frequency domain sampling
w=wc+dw*(-n/2:n/2-1);        % Frequency array (centered at carrier)
x=Xc+.5*c*dt*(-n/2:n/2-1);   % range bins (array); reference signal is
                             % for target at x=Xc.
kx=(2*w)/c;                  % Spatial (range) frequency array
%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
ntarget=4;                        % number of targets
%%%%%%%%%%%%% Targets' parameters  %%%%%%%%%%%%%%%%%%
%
% xn: range;               fn: reflectivity 發射係數
%
xn(1)=0;                   fn(1)=1;
xn(2)=.7*X0;               fn(2)=.8;
xn(3)=xn(2)+2*dx;          fn(3)=1.;
xn(4)=-.5*X0;              fn(4)=.8;
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% SIMULATION
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
s=zeros(1,n);              % Initialize echoed signal array

%調節na可以對比不同情況下的匹配濾波和時間域壓縮兩種方法的成像結果的差異
%結果是隨着na的增大 時間域壓縮方法變得不好
na=0;                      % Number of harmonics in random phase               
ar=rand(1,na);             % Amplitude of harmonics
ter=2*pi*rand(1,na);       % Phase of harmonics

for i=1:ntarget;
   td=t-2*(Xc+xn(i))/c;
   pha=wcm*td+alpha*(td.^2);         % Chirp (LFM) phase
   for j=1:na;                       % Loop for CPM harmonics 相位調製!出於ECCM的考慮 amplitude modulating an LFM chirp
      pha=pha+ar(j)*cos((w(n/2+1+j)-wc)*td+ter(j));
   end;
   s=s+fn(i)*exp(cj*pha).*(td >= 0 & td <= Tp);%回波信號 採樣後的
end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% 第一種成像方法 匹配濾波
% If flag=1, i.e., Tx < Tp, perform upsmapling
%
if flag == 1,
 td0=t-2*(Xc+0)/c;
 pha0=wcm*td0+alpha*(td0.^2);        % Reference chirp phase
 scb=conj(s).*exp(cj*pha0);          % Baseband compressed signal
                                     % (This is done by hardware)
 scb=[scb,scb(n:-1:1)];  % Append mirror image in time to reduce wrap
                         % around errors in interpolation (upsampling)
                         %DFT前進行了一個鏡像擴展

 fscb=fty(scb);          % F.T. of compressed signal w.r.t. time
%
 dt=dt_temp;                     % Time sampling for echoed signal 注意這個是理論上的回波信號採樣間隔 之前存下的
 n_up=2*ceil((.5*(Tf-Ts))/dt);   % Number of time samples for upsampling %理論上的採樣個數
 nz=n_up-n;                      % number of zeros for upsmapling is 2*nz %缺少的採樣個數
 fscb=(n_up/n)*[zeros(1,nz),fscb,zeros(1,nz)]; %注意鏡像擴展 係數是?
%
 scb=ifty(fscb);
 scb=scb(1:n_up);            % Remove mirror image in time
%
% Upsampled parameters

%未壓縮的回波信號的一些參數
 n=n_up;
 t=Ts+(0:n-1)*dt;             % Time array for data acquisition
 dw=pi2/(n*dt);               % Frequency domain sampling
 w=wc+dw*(-n/2:n/2-1);        % Frequency array (centered at carrier)
 x=Xc+.5*c*dt*(-n/2:n/2-1);   % range bins (array); reference signal is
                              % for target at x=Xc.
 kx=(2*w)/c;                  % Spatial (range) frequency array
%
 td0=t-2*(Xc+0)/c;
 s=conj(scb).*exp(cj*wcm*td0+cj*alpha*(td0.^2));  % Decompression

end;
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

% Reference echoed signal
%
td0=t-2*(Xc+0)/c;
pha0=wcm*td0+alpha*(td0.^2);         % Chirp (LFM) phase
for j=1:na;                          % Loop for CPM harmonics
   pha0=pha0+ar(j)*cos((w(n/2+1+j)-wc)*td0+ter(j));
end;
s0=exp(cj*pha0).*(td0 >= 0 & td0 <= Tp);
%
% Baseband conversion
%
sb=s.*exp(-cj*wc*t);
sb0=s0.*exp(-cj*wc*t);

%
figure
plot(t,real(sb))
xlabel('Time, sec')
ylabel('Real Part')
title('Baseband Echoed Signal')
axis('square')
axis([Ts Tf 1.1*min(real(sb)) 1.1*max(real(sb))])
print P1.1a.ps
pause(1)
%
figure
plot(t,real(sb0))
xlabel('Time, sec')
ylabel('Real Part')
title('Baseband Reference Echoed Signal')
axis('square')
axis([Ts Tf 1.1*min(real(sb0)) 1.1*max(real(sb0))])
print P1.2a.ps
pause(1)
%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%% RECONSTRUCTION
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
% Fourier Transform
%
fsb=fty(sb);
fsb0=fty(sb0);

% Power equalization
%
mag=abs(fsb0);
amp_max=1/sqrt(2);     % Maximum amplitude for equalization
afsb0=abs(fsb0);
P_max=max(afsb0);
I=find(afsb0 > amp_max*P_max);
nI=length(I);
fsb0(I)=((amp_max*(P_max^2)*ones(1,nI))./afsb0(I)).* ...
        exp(cj*angle(fsb0(I)));
%
% Apply a window (e.g., power window) on fsb0 here
%
E=sum(mag.*abs(fsb0));
%
figure
plot((w-wc)/pi2,abs(fsb)) %注意自變量的範圍 單位
xlabel('Frequency, Hertz')
ylabel('Magnitude')
title('Baseband Echoed Signal Spectrum')
axis('square')
print P1.3a.ps
pause(1)
%
figure
plot((w-wc)/pi2,abs(fsb0))
xlabel('Frequency, Hertz')
ylabel('Magnitude')
title('Baseband Reference Echoed Signal Spectrum')
axis('square')
print P1.4a.ps
pause(1)
%
% Matched Filtering
%
fsmb=fsb.*conj(fsb0);
%
figure
plot((w-wc)/pi2,abs(fsmb))
xlabel('Frequency, Hertz')
ylabel('Magnitude')
title('Baseband Matched Filtered Signal Spectrum')
axis('square')
print P1.5a.ps
pause(1)
%
% Inverse Fourier Transform
%
smb=ifty(fsmb);       % Matched filtered signal (range reconstruction)
%
% Display
%
figure
plot(x,(n/E)*abs(smb)) %注意自變量的對應關係
xlabel('Range, meters')
ylabel('Magnitude')
title('Range Reconstruction Via Matched Filtering')
axis([Xc-X0 Xc+X0 0 1.1]); axis('square')
print P1.6a.ps
pause(1)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%

%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% Time domain Compression 第二種成像方法
% 當Tp<Tx (case 1)總是得不到想要的形式?這種方法恢復出來的結果看起來也不對
% 這是因爲 這個時候壓縮信號的採樣間隔太大了 需要通果不混疊的未壓縮信號恢復出不混疊的壓縮信號 在進行成像處理!
% 當然如果Tp>Tx (case 2) 兩種方法恢復出來的結果基本是一致的。
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
%
td0=t-2*(Xc+0)/c;
scb=conj(s).* ...
     exp(cj*wcm*td0+cj*alpha*(td0.^2));  % Baseband compressed signal
%
figure
subplot(1,2,1)
plot(t,real(s))

subplot(1,2,2)
plot(t,real(scb))
xlabel('Time, sec')
ylabel('Real Part')
title('Time Domain Compressed Signal')
axis('square')
print P1.7a.ps
pause(1)


fscb=fty(scb);
X=(c*(w-wc))/(4*alpha);     % Range array for time domain compression 注意這個轉換關係
figure
subplot(1,2,1)
plot(w,(dt/Tp)*abs(fscb))
subplot(1,2,2)
plot(X+Xc,(dt/Tp)*abs(fscb))
xlabel('Range, meters')
ylabel('Magnitude')
title('Range Reconstruction Via Time Domain Compression')
axis([Xc-X0 Xc+X0 0 1.1]); axis('square')
%axis([Xc-X0 Xc+X0 0 1.1*max(abs(fscb))]); axis('square')
print P1.8a.ps
pause(1)
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章