RD算法流程圖:
圖1 RD算法流程圖
因爲是在word裏寫的,這裏直接上截圖了,不然mathtype公式顯示不出來。
對於RD算法的原理這裏就不展開討論了,重點分析距離徙動校正的原理。
仿真程序,F_s=2.5B,距離徙動最大2.92m,對應7.3個距離單元。PRF取1.2倍多普勒帶寬,目標點相對於參考點的位置爲(-50,50,0),則仿真結果如下:觀察圖2,可以看出經過距離徙動校正後,距離多普勒域圖像由彎曲變直;觀察圖3,可以看出RD算法比簡單的二維脈壓成像結果分辨率高,即經過距離徙動校正能提高分辨率。
圖2-1 距離多普勒域成像結果
圖2-2 放大後的距離多普勒域成像結果
圖3-1 二維脈壓成像結果
圖3-2 RD算法成像結果
程序
%仿真具有3個以上距離徙動回波信號,進行RD成像
close all;clear;
%基本參數
c = 3*10^8; %波速
fc = 5.3*10^9; %載頻5.3GHz
lamda = c/fc; %波長
v = 150; %雷達速度150m/s
B = 150*10^6; %發射信號帶寬150MHz
Daz = 2; %方位天線尺寸2m
R0 = 20*10^3; %參考點斜距20km
Tr = 1.5*10^-6; %脈衝持續時間
Kr = B/Tr; %線性調頻信號調頻斜率
H = 1000; %雷達高度
Yc = sqrt(R0^2-H^2); %成像中線
center = [0,Yc,0]; %場景中心座標
CR = Daz/2; %橫向分辨率
thetaaz = lamda/Daz; %波束寬度
Fs = 2.5*B; %採樣頻率
Dsar = lamda*R0/(2*CR); %合成孔徑長度
Tsar = Dsar/v; %一個合成孔徑時間
Ka = -2*v^2/(lamda*R0); %多普勒調頻斜率
Ba = abs(Ka*Tsar); %多普勒帶寬
PRF = 1.2*Ba; %脈衝重複頻率
X = 150;Y = 150; %場景大小
Rmin = sqrt((Yc-Y/2)^2+H^2); %場景最小距離
Rmax = sqrt((Yc+Y/2)^2+H^2+(Dsar/2)^2); %場景最大距離
Nfast = ceil(((2*(Rmax-Rmin)/c+Tr)*Fs)); %快時間維採樣點數
tf = 2*R0/c+(-(Nfast/2):(Nfast/2)-1)/Fs; %快時間採樣序列
Nslow = ceil((X+Dsar)/v*PRF); %慢時間維(方位向)採樣點數
ts = (-(Nslow/2):(Nslow/2)-1)/PRF; %慢時間採樣序列
pos = [-50,50,0,3]; %目標相對中心點位置,[x,y,z,rcs],第四列爲後向反射係數
disp('目標位置(方位,斜距,高度):');
Rpos(1:3) = pos(1:3)+center %目標絕對位置
Rpos(:,4) = pos(:,4);
%回波信號
signal = zeros(Nfast,Nslow);
Xs = ts.*v-Rpos(1);
Ys = 0-Rpos(2);
Zs = H-Rpos(3);
sigma = Rpos(4); %反射係數
R = sqrt(Xs.^2+Ys^2+Zs^2); %斜距
tau = 2*R/c; %時延
Tfast = tf'*ones(1,Nslow)-ones(Nfast,1)*tau; %列是快時間 行是慢時間
Phase = pi*Kr.*Tfast.^2-(4*pi/lamda)*ones(Nfast,1)*R; %相位延遲
signal = signal+sigma*exp(j*Phase).*(abs(Tfast)<=Tr/2).*(ones(Nfast,1)*(abs(Xs)<=Dsar/2)); %回波
S = fftshift(fft(fftshift(signal)));
%二維脈壓
hf = exp(j*pi*Kr*(tf-2*R0/c).^2).*(abs(tf-2*R0/c)<=Tr/2); %距離向參考函數
Hf = (fftshift(fft(fftshift(hf))).')*ones(1,Nslow);
ComF = S.*conj(Hf); %距離向匹配濾波
Sr = fftshift(ifft(fftshift(ComF))); %距離向IFFT
Coms = fftshift(fft(fftshift(Sr.'))).'; %方位向FFT
hs = exp(j*pi*Ka*ts.^2).*(abs(ts)<Tsar/2); %方位向參考函數
Hs = ones(Nfast,1)*fftshift(fft(fftshift(hs)));
ComS = Coms.*conj(Hs); %方位向匹配濾波
Saz = fftshift(ifft(fftshift(ComS.'))).';
%RD算法,sinc插值
Coms_rcmc = zeros(Nfast,Nslow);
N = 6; %插值點數
Rp = sqrt(sum((Rpos(2:3)-[0,H]).^2)); %目標到雷達的最近距離
h = waitbar(0,'Sinc插值中......'); %生成一個進度條
for m = 1:Nslow %慢時間
for n = N/2+1:Nfast %快時間
%距離偏移量
deltaR = (lamda/v)^2*(Rp+(n-Nfast/2)*c/2/Fs)*((m-Nslow/2)/Nslow*PRF)^2/8;
DU = deltaR/(c/2/Fs); %偏移距離單元
deltaDU = DU-floor(DU); %偏移距離單元小數部分
for k = -N/2:N/2-1
if (n+floor(DU)+k)>Nfast %超出邊界
Coms_rcmc(n,m) = Coms_rcmc(n,m)+Coms(Nfast,m)*sinc(DU-k);
else
Coms_rcmc(n,m) = Coms_rcmc(n,m)+Coms(n+floor(DU)+k,m)*sinc(deltaDU-k);
end
end
end
waitbar(m/Nslow);
end
close(h); %關閉進度條
ComS_rcmc = Coms_rcmc.*conj(Hs); %方位向壓縮
Saz_rcmc = fftshift(ifft(fftshift(ComS_rcmc.'))).';
%畫圖
rf = c*tf/2; %距離
az = v*ts; %方位
faz = (-Nslow/2:Nslow/2-1)/Nslow*PRF; %多普勒頻率
figure(1);
[f,Rf] = meshgrid(faz,rf);
subplot(121);
mesh(f,Rf,abs(Coms));view(0,90);
title('(a) 未RCMC');
xlabel('多普勒/Hz');ylabel('斜距R/m');
subplot(122);
mesh(f,Rf,abs(Coms_rcmc));view(0,90);
title('(b) RCMC');
xlabel('多普勒/Hz');ylabel('斜距R/m');
figure(2);
[Az,Rf] = meshgrid(az,rf);
mesh(Az,Rf,abs(Saz));view(0,90);
title('二維脈壓成像結果');
xlabel('方位x/m');ylabel('斜距R/m');
figure(3);
mesh(Az,Rf,abs(Saz_rcmc));view(0,90);
title('RD算法成像結果');
xlabel('方位x/m');ylabel('斜距R/m');