距离多普勒算法实测数据成像
RDA 成像算法仿真
小斜视角,抛物线模型
参数与初始化
c = 299792458; %光速
Fs = 32317000; %采样率
start = 6.5959e-03; %开窗时间
Tr = 4.175000000000000e-05; %脉冲宽度
f0 = 5.300000000000000e+09; %载频
PRF = 1.256980000000000e+03; %PRF
Vr = 7062; %雷达速度
B = 30.111e+06; %信号带宽
fc = -6900; %多普勒中心频率
Ka = 1733;
Fa = PRF;
lambda = c/f0;
Kr = B/Tr;
[Na, Nr] = size(data_1);
theta_rc = asin(abs(fc)*lambda/(2*Vr));
R_eta_c = 2*Vr^2*cos(theta_rc)^2/(lambda*Ka);
R0 = R_eta_c*cos(theta_rc);
eta_c = 2*Vr*sin(theta_rc)/lambda;
f_tau = (-Nr/2:Nr/2-1)*(Fs/Nr);
f_eta = fc + (-Na/2:Na/2-1)*(Fa/Na);
tau = 2*R_eta_c/c + (-Nr/2:Nr/2-1)*(1/Fs);
eta = eta_c + (-Na/2:Na/2-1)*(1/Fa);
[Ext_time_tau_r, Ext_time_eta_a] = meshgrid(tau, eta);
[Ext_f_tau, Ext_f_eta] = meshgrid(f_tau, f_eta);
距离压缩
data_fft_r = fftshift(fft(fftshift(data_1, 2), Nr, 2), 2);
Hr = (abs(Ext_f_tau) < B).*exp(1j*pi*Ext_f_tau.^2/Kr);
data_fft_cr = Hr.*data_fft_r;
data_cr = fftshift(ifft(fftshift(data_1, 2), Nr, 2), 2);
方位压缩
data_fft_a = fftshift(fft(fftshift(data_cr, 1), Na, 1), 1);
data_fft_a_rcmc = data_fft_a; % 后续添加RCMC
Ha = exp(1j*pi*Ext_f_eta.^2/Ka);
Offset = exp(-1j*2*pi*Ext_f_eta.*eta_c);
data_fft_ca_rcmc = data_fft_a_rcmc.*Ha.*Offset;
data_ca_rcmc = fftshift(ifft(fftshift(data_fft_ca_rcmc, 1), Na, 1), 1);
效果
压缩失败,什么也没有
检查代码,发现方位向匹配滤波器错误,差个负号。
Ha = exp(-1j*pi*Ext_f_eta.^2/Ka);
还有距离压缩那,ifft的对象错了
data_cr = fftshift(ifft(fftshift(data_fft_cr, 2), Nr, 2), 2);
改正
斜视角计算错误,不应该对多普勒中心频率取模
theta_rc = asin(fc*lambda/(2*Vr));
由平行于距离向的横线,考虑是距离压缩出现了问题。应该是距离压缩的系统函数由问题
Hr = (abs(Ext_f_tau) < B).*exp(1j*pi*Ext_f_tau.^2/Kr);
前面的矩形窗错了,但应该不会造成怎么大的影响。改正后,表达式没有问题,考虑是参数出现问题。由于距离向调频率可正可负,将Kr置为负数,效果如图
可以看到点目标,但有散焦与虚像的问题。添加距离徙动校正
IN_N = 8;
R0_RCMC = tau*c/2;
delta_R = lambda^2*f_eta'.^2.*R0_RCMC/(8*Vr^2);
delta_R_cnt = delta_R*2/(c*(1/Fs));
for j = 1:Na
for k = 1:Nr
data_fft_a_rcmc(j,k) = 0;
dR = delta_R_cnt(j,k);
for m = -IN_N/2:IN_N/2-1
if(k+floor(dR)+m>=Nr)
data_fft_a_rcmc(j,k) = data_fft_a_rcmc(j,k)+data_fft_a(j,Nr)*sinc(dR-(Nr-k));
elseif(k+floor(dR)+m<=1)
data_fft_a_rcmc(j,k) = data_fft_a_rcmc(j,k)+data_fft_a(j,1)*sinc(dR-(1-k));
else
data_fft_a_rcmc(j,k) = data_fft_a_rcmc(j,k)+data_fft_a(j,k+floor(dR)+m)*sinc(dR-floor(dR)-m);
end
end
end
end
同时减小对比度,并进行直方图增强,方便观察
data_ca_rcmc = abs(data_ca_rcmc)/max(max(abs(data_ca_rcmc)));
data_ca = abs(data_ca)/max(max(abs(data_ca)));
data_ca = 20*log(abs(data_ca));
data_ca_rcmc = 20*log(abs(data_ca_rcmc));
data_ca = mat2gray(data_ca);
data_ca = histeq(data_ca);
data_ca_rcmc = mat2gray(data_ca_rcmc);
data_ca_rcmc = histeq(data_ca_rcmc);
fftshift将图像中心更改,删去fftshift。subplot对图像进行了形变,rcmc后的图像单独成像,最终结果为
效果很差。存在虚像。上下颠倒 上下颠倒可以用fftshift解决
data_final = fftshift(data_ca_rcmc, 1);
虚像可能是混叠导致的,对图像进行补零。
[Na_tmp, Nr_tmp] = size(data_1);
[Na, Nr] = size(data_1);
data = zeros(Na+Na/2, Nr+Nr/2);
data(1:Na, 1:Nr) = data_1;
[Na,Nr] = size(data);
出现左右上下颠倒,左右是补零操作引起平移,移动回来即可。上下是斜视引起的,需要在方位压缩部分补偿。
data_final = data_ca_rcmc;
data_final(:,1:Nr-Nr_tmp+1) = data_ca_rcmc(:,Nr_tmp:Nr);
data_final(:,Nr-Nr_tmp+1+1:Nr) = data_ca_rcmc(:,1:Nr_tmp-1);
Ha = exp(-1j*pi*Ext_f_eta.^2./Ka);
offset = exp(1j*2*pi*Ext_f_eta.*eta_c);
% offset = 1;
data_fft_ca_rcmc = data_fft_a_rcmc.*Ha.*offset;
data_ca_rcmc = ifft(data_fft_ca_rcmc, Na, 1);
中间的黑条是RCMC边界问题未处理好导致的。改进rcmc
IN_N = 8;
R0_RCMC = tau*c/2;
delta_R = lambda^2*f_eta'.^2.*R0_RCMC/(8*Vr^2);
delta_R_cnt = delta_R*2/(c*(1/Fs));
for j = 1:Na
for k = 1:Nr
dR = delta_R_cnt(j,k);
pos = dR-floor(dR)-(-IN_N/2:IN_N/2-1);
rcmc_sinc = sinc(pos);
size_sinc = size(rcmc_sinc);
predict_value = zeros(size_sinc);
for m = -IN_N/2:IN_N/2-1
if(k+floor(dR)+m>Nr)
predict_value(m+IN_N/2+1) = data_fft_a(j,k+floor(dR)+m-Nr);
else
predict_value(m+IN_N/2+1) = data_fft_a(j,k+floor(dR)+m);
end
end
data_fft_a_rcmc(j,k) = sum(predict_value.*rcmc_sinc);
end
end
分辨率没到达预期,图像质量比较差。图像质量比较差与直方图增强有关,直方图增强会减少灰度级。去除直方图增强,换成gamma 变换,以提高图像质量。
data_final = abs(data_final)/max(max(abs(data_final)));
data_final = log10(abs(data_final)+1);
data_final = data_final.^0.3;
data_final = abs(data_final)/max(max(abs(data_final)));
虚像的问题,如果熟悉匹配滤波,或者对混叠频谱做过匹配滤波便能很好理解。如果将一个信号在频率上使用fftshift然后再用未平移对应的匹配滤波器进行匹配,会发现中间的峰值会出现在两边。这个原理也是一样,我们只需要对频谱进行一次fftshift就行。本质上与多普勒模糊差不多。
f_tau = fftshift((-Nr/2:Nr/2-1)*(Fs/Nr));