GSAFT(反投影)近场平面阵列成像边缘重建问题咨询
毫米波图像重建边缘失真问题排查
系统配置与算法基础
- 阵列:16发射机+88接收机组成30cm×30cm平面阵列
- 成像目标:6cm×6cm平面物体,与阵列平行放置,间距15cm
- 重建算法:GSAFT(反投影),算法公式:

MATLAB实现代码(电场数据来自FEKO)
clc; clear all; close all; numT = 16; % number of transmitter numR = 88; % number of receiver numF = 11; % number of frequency load Efield % a (numT*numR , 6 , numF) array % Efield(:,1:3,:) = x,y,z dimension of receiver % Efield(:,4,:) = complex electrical field Ex in each receiver position and frequency % Efield(:,5,:) = complex electrical field Ey in each receiver position and frequency % Efield(:,6,:) = complex electrical field Ez in each receiver position and frequency % defining transmitter coordinates Tx(1)=29.250000e+00; Ty(1)=5.250000e+00; ... ... ... Tx(16)=-5.250000e+00; Ty(16)=-29.250000e+00; x = (-8:0.2:8); % x pixel in centimeter y = (-8:0.2:8); % y pixel in centimeter coor = zeros(numel(x)*numel(y),2); % coordinates of pixels of object in a row count = 1; % 补充初始化,原代码缺失 for x1 = x, for y1 = y, coor(count,1) = x1; coor(count,2) = y1; count = count + 1; end end freq = 10e9:(10e9)/(numF-1):20e9; reflectivity = zeros(numel(x)*numel(y),3); % object pixel reflectivity c = 3e8; % light speed z = 15; % distance between antenna array plane and object for i = 1:numel(x)*numel(y), for tx = 1:numT , rt = sqrt((Tx(tx)-coor(i,1))^2 + (Ty(tx)-coor(i,2))^2 + z^2); % difference between transmitter and object pixel for rx = 1:numR for f = 1:numF, rr = sqrt((Efield((tx-1)*numR + rx,1,f)-coor(i,1))^2 + (Efield((tx-1)*numR + rx,2,f)-coor(i,2))^2 + z^2); % distance between receiver and object pixel r = (rr + rt)/100; % converting total distance to meter % 修正原代码笔误:or -> reflectivity reflectivity(i,1) = reflectivity(i,1) + Efield((tx-1)*numR + rx,4,f)*exp(1j*(2*pi*freq(f)/c)*r); % reflectivity resulted from Ex reflectivity(i,2) = reflectivity(i,2) + Efield((tx-1)*numR + rx,5,f)*exp(1j*(2*pi*freq(f)/c)*r); % reflectivity resulted from Ey reflectivity(i,3) = reflectivity(i,3) + Efield((tx-1)*numR + rx,6,f)*exp(1j*(2*pi*freq(f)/c)*r); % reflectivity resulted from Ez end end end end image = zeros(numel(x)*numel(y),1); image(:) = nthroot(abs(reflectivity(:,1)).^2 + abs(reflectivity(:,2)).^2 + abs(reflectivity(:,3)).^2 , 2); image = image/max(image); % image = reshape(image,[numel(x),numel(y)]); figure(1); h = surf(x,y,20*log10(image)); colorbar; set(h,'LineStyle','none'); view(2); caxis([-15 0]);
当前重建结果

图像边缘存在明显重建失真,核心排查方向如下:
1. 代码笔误修复
原代码中reflectivity(i,1) = or(i,1) + ...的or是未定义变量,必须替换为reflectivity,否则初始累加逻辑完全错误,直接导致反射率计算偏差,这是优先修正的bug。
2. 相位补偿符号验证
GSAFT算法的相位补偿项应为负相位(exp(-1j*2πfr/c)),因为回波是往返路径的延迟补偿,代码中使用正相位会导致相位叠加错误,边缘区域对相位误差的敏感度远高于中心区域,是边缘失真的核心原因之一。
3. 坐标单位一致性检查
确认FEKO输出的接收机坐标Efield(:,1:3,:)单位是否为厘米:
- 若为米,与发射机坐标(厘米)、目标像素坐标(厘米)单位不统一,会导致距离计算放大100倍,相位完全错误。
- 若单位一致,当前距离转换为米的逻辑(除以100)是正确的。
4. 阵列几何覆盖性分析
计算目标边缘点(±3cm)到阵列边缘天线的入射角:
- 若入射角过大,回波能量衰减严重,且相位误差累积,会导致边缘区域有效信号不足,重建模糊。
5. 频率加权项补充
GSAFT算法通常需要加入频率权重(如f^2或文献指定的加权因子),高频成分对边缘细节贡献更大,直接累加所有频率会弱化高频信号,导致边缘分辨率不足。
6. 循环初始化修正
原代码中count变量未初始化,会导致coor数组索引错误,部分像素坐标赋值失败,这会直接导致对应区域(含边缘)的重建值异常。
内容的提问来源于stack exchange,提问作者mohammad rezza
相关产品推荐
相关产品推荐

