合成孔径雷达(SAR)点目标仿真程序

📅 2026/7/7 2:34:16 👁️ 阅读次数 📝 编程学习
合成孔径雷达(SAR)点目标仿真程序

合成孔径雷达(SAR)点目标仿真程序,基于线性调频(LFM)信号 + 距离多普勒(RD)成像算法。这是理解 SAR 原理、写论文、做算法验证的标准起点。


一、SAR 仿真核心参数(X 波段机载 SAR)

%% sar_parameters.mfunctionparam=sar_parameters()% SAR 系统参数(X波段机载)param.c=3e8;% 光速 (m/s)param.fc=10e9;% 载波频率 (Hz)param.lambda=param.c/param.fc;% 波长 (m)% 平台参数param.V=150;% 平台速度 (m/s)param.H=5000;% 平台高度 (m)param.R0=param.H;% 最近斜距 (m)% 信号参数param.PRF=2000;% 脉冲重复频率 (Hz)param.Fs=50e6;% 采样频率 (Hz)param.Tp=10e-6;% 脉冲宽度 (s)param.BW=30e6;% 信号带宽 (Hz)param.Kr=param.BW/param.Tp;% 距离向调频率 (Hz/s)% 天线参数param.Da=2;% 方位向天线长度 (m)param.La=param.Da;% 方位向孔径 (m)param.Lr=param.c/(2*param.BW);% 距离向分辨率 (m)% 合成孔径参数param.Lsar=param.lambda*param.R0/param.Da;% 合成孔径长度 (m)param.Tsar=param.Lsar/param.V;% 合成孔径时间 (s)param.Na=ceil(param.Tsar*param.PRF);% 方位向采样点数param.Nr=ceil(param.Tp*param.Fs);% 距离向采样点数% 场景参数param.Xc=0;% 场景中心方位坐标 (m)param.Yc=param.R0;% 场景中心距离坐标 (m)param.dx=param.Da/2;% 方位向采样间隔 (m)param.dr=param.c/(2*param.Fs);% 距离向采样间隔 (m)fprintf('SAR Parameters:\n');fprintf(' 波长: %.3f m\n',param.lambda);fprintf(' 距离分辨率: %.2f m\n',param.Lr);fprintf(' 方位分辨率: %.2f m\n',param.Da/2);fprintf(' 合成孔径时间: %.2f s\n',param.Tsar);fprintf(' 方位向采样点数: %d\n',param.Na);fprintf(' 距离向采样点数: %d\n',param.Nr);end

二、点目标回波生成(核心)

%% generate_point_target_echo.mfunctionecho=generate_point_target_echo(param,targets)% 生成点目标回波信号% targets: N×3矩阵 [方位位置(m), 距离位置(m), RCS(m²)]Na=param.Na;Nr=param.Nr;echo=zeros(Na,Nr);% 距离向时间轴tr=(0:Nr-1)/param.Fs;% 方位向时间轴ta=(0:Na-1)/param.PRF;% 距离向参考函数(LFM信号)t_ref=(0:param.Nr-1)/param.Fs-param.Tp/2;ref_range=exp(1j*pi*param.Kr*t_ref.^2).*(abs(t_ref)<=param.Tp/2);fork=1:size(targets,1)% 目标参数x_target=targets(k,1);% 方位位置r_target=targets(k,2);% 距离位置rcs=targets(k,3);% 雷达散射截面% 距离徙动(RCM)R=sqrt(r_target^2+(param.V*ta-x_target).^2);% 距离向延迟td=2*R/param.c;% 距离向压缩参考信号s_range=exp(1j*pi*param.Kr*(tr-td').^2);% 方位向调制(多普勒历程)fd=-2*param.V*(param.V*ta-x_target)./(param.lambda*R);s_azimuth=exp(1j*2*pi*fd'.*ta);% 距离向包络(天线方向图)theta=atan((param.V*ta-x_target)./r_target);G=sinc(theta/param.lambda*param.Da).^2;% 合成回波echo_target=rcs*G'.*s_range.*s_azimuth;% 累加所有目标回波echo=echo+echo_target;end% 添加噪声SNR_dB=20;signal_power=mean(abs(echo(:)).^2);noise_power=signal_power/(10^(SNR_dB/10));echo=echo+sqrt(noise_power/2)*(randn(Na,Nr)+1j*randn(Na,Nr));end

三、RD 成像算法(距离多普勒算法)

%% rd_imaging_algorithm.mfunctionimage=rd_imaging_algorithm(echo,param)% RD算法成像处理Na=param.Na;Nr=param.Nr;%% 1. 距离向压缩(匹配滤波)% 生成距离向参考信号t_ref=(0:Nr-1)/param.Fs-param.Tp/2;ref_range=exp(1j*pi*param.Kr*t_ref.^2).*(abs(t_ref)<=param.Tp/2);% FFTecho_fft=fft(echo,Nr,2);ref_fft=fft(ref_range,Nr,2);% 匹配滤波compressed_range=ifft(echo_fft.*conj(ref_fft),Nr,2);%% 2. 距离徙动校正(RCMC)% 计算距离徙动量RCMC_matrix=zeros(Na,Nr);forna=1:Na ta=(na-1)/param.PRF;% 距离徙动公式RCM=param.lambda^2*param.PRF^2*ta.^2/(8*param.R0^2);RCMC_matrix(na,:)=exp(-1j*2*pi*param.fc*RCM/param.c);end% 应用RCMCcompressed_range=compressed_range.*RCMC_matrix;%% 3. 方位向压缩% 生成方位向参考信号ta=(0:Na-1)/param.PRF;ref_azimuth=exp(-1j*pi*param.PRF^2*ta.^2/(param.lambda*param.R0));% FFTcompressed_fft=fft(compressed_range,Na,1);ref_azimuth_fft=fft(ref_azimuth,Na,1);% 匹配滤波compressed_azimuth=ifft(compressed_fft.*conj(ref_azimuth_fft),Na,1);%% 4. 图像形成image=abs(compressed_azimuth);% 归一化image=image/max(image(:));end

四、主仿真程序

%% main_sar_simulation.mclear;clc;close all;%% 1. 加载参数param=sar_parameters();%% 2. 定义点目标场景% 格式: [方位位置(m), 距离位置(m), RCS(m²)]targets=[0,param.R0,1.0;% 中心点目标50,param.R0,0.8;% 右侧目标-50,param.R0,0.8;% 左侧目标0,param.R0+100,0.6;% 前方目标0,param.R0-100,0.6;% 后方目标];fprintf('生成 %d 个点目标回波...\n',size(targets,1));%% 3. 生成回波信号echo=generate_point_target_echo(param,targets);%% 4. RD算法成像fprintf('开始RD算法成像处理...\n');sar_image=rd_imaging_algorithm(echo,param);%% 5. 结果可视化figure('Color','white','Position',[1001001400500])% 回波信号subplot(1,3,1)imagesc(abs(echo))xlabel('距离向采样');ylabel('方位向采样')title('SAR回波信号幅度')colorbar axis xy% SAR图像subplot(1,3,2)imagesc(sar_image)xlabel('距离向采样');ylabel('方位向采样')title('RD算法成像结果')colorbar axis xy% 等高线图(聚焦质量评估)subplot(1,3,3)contour(sar_image,20)xlabel('距离向采样');ylabel('方位向采样')title('SAR图像等高线')grid onsgtitle('合成孔径雷达(SAR)点目标仿真','FontSize',14)%% 6. 成像质量评估fprintf('\n=== 成像质量评估 ===\n');% 找到主瓣位置[max_val,max_idx]=max(sar_image(:));[row_max,col_max]=ind2sub(size(sar_image),max_idx);% 计算主瓣宽度profile_range=sar_image(row_max,:);half_max=max_val/2;left_idx=find(profile_range(1:col_max)<half_max,1,'last');right_idx=find(profile_range(col_max:end)<half_max,1,'first')+col_max-1;main_lobe_width=right_idx-left_idx;fprintf('主瓣位置: (%d, %d)\n',row_max,col_max);fprintf('主瓣宽度: %d 像素\n',main_lobe_width);fprintf('峰值旁瓣比(PSLR): %.2f dB\n',20*log10(max_val/min(sar_image(:))));

五、高级扩展:CS 算法(Chirp Scaling)

%% cs_imaging_algorithm.m (简化版)functionimage=cs_imaging_algorithm(echo,param)% Chirp Scaling算法(更精确的RCMC)Na=param.Na;Nr=param.Nr;% 距离向FFTSRC=fft(echo,Nr,2);% 距离向Chirp Scaling相位fr=(0:Nr-1)/param.Fs*param.Fs-param.Fs/2;Kr=param.Kr;% CS因子CS_factor=exp(-1j*pi*Kr*fr.^2/(param.fc^3));% 应用CS因子SRC_cs=SRC.*CS_factor;% 距离向压缩ref_cs=exp(1j*pi*Kr*(0:Nr-1).^2/param.Fs^2);compressed=ifft(SRC_cs.*conj(ref_cs),Nr,2);% 方位向压缩ta=(0:Na-1)/param.PRF;fa=(0:Na-1)/param.PRF*param.PRF-param.PRF/2;Ka=-2*param.V^2/(param.lambda*param.R0);ref_az=exp(-1j*pi*Ka*ta.^2);compressed_az=ifft(fft(compressed,Na,1).*conj(ref_az),Na,1);image=abs(compressed_az);image=image/max(image(:));end

参考代码 合成孔径雷达仿真程序www.youwenfan.com/contentcsw/82798.html

六、与真实SAR系统的对比

参数仿真值典型机载SAR星载SAR
波长0.03m0.03-0.1m0.05-0.25m
分辨率0.5-1m0.3-3m1-30m
PRF2kHz1-5kHz1-3kHz
带宽30MHz20-100MHz10-100MHz

七、工程级改进方向

1、更复杂的场景

% 分布式目标(面目标)scene=phantom(256);targets=[];fori=1:256forj=1:256ifscene(i,j)>0.1targets=[targets;(i-128)*param.dx,param.R0+(j-128)*param.dr,scene(i,j)];endendend

2、运动补偿

% 平台运动误差建模delta_R=0.1*sin(2*pi*0.1*ta);% 正弦运动误差motion_comp=exp(-1j*4*pi*delta_R/param.lambda);echo_comp=echo.*motion_comp;

3、极化SAR仿真

% 极化散射矩阵S=[S_hh,S_hv;S_vh,S_vv];% 分别仿真HH、HV、VH、VV通道