
MIT Laptop Based Radar 是一个特别适合用来理解 SAR 成像的教学项目2011 年前后不少雷达入门课程把它当作低成本实验平台。它最有价值的地方不是图像能做得像商业遥感卫星一样精致而是把一部 FMCW 雷达的前端、笔记本声卡采集、后端信号处理完整串起来让学习的人从发射、回波、差频、距离压缩一路做到合成孔径聚焦。如果你正在学雷达信号处理或者想用少量硬件亲眼看到合成孔径雷达是怎么回事这个项目值得花时间复现。下面按我的实际处理顺序拆解先搞懂链路再搭建和采集然后做距离向处理最后做方位向聚焦。1. 先别急着成像把 Laptop Based Radar 的测量链路拆清楚很多第一次接触这个项目的人会直接搜索 “SAR 成像结果”然后想拿一段录音立刻出图。实际不是这样。MIT Laptop Based Radar 得到的原始数据本质上是一段由笔记本电脑声卡记录的音频信号。图像是后处理出来的雷达本身并不直接输出地图。1.1 它不是一上来就给图像的雷达这个项目里的雷达通常工作在微波频段发射信号会随时间变化频率。目标反射回来的信号与本地参考信号混频后产生一个低频差频信号。声卡把这个差频信号采成数字波形。后续所有工作包括目标距离、方位位置、SAR 聚焦都依靠这段波形完成。所以你要先接受一个事实采集阶段你拿到的是一段“声音”而不是“图像”。之所以能成像是因为这段声音的瞬时频率、幅度和相位里包含了目标的距离和散射信息。处理目标就是把这段声音按雷达方程反推回去。1.2 FMCW 差频信号目标距离为什么会变成频率FMCW 的全称是 Frequency Modulated Continuous Wave也就是线性调频连续波。发射频率在一个扫频周期内从起始频率线性增加到结束频率这个斜率叫调频斜率。回波从目标返回时会有一定时间延迟。把回波和发射参考信号混频输出频率等于两者频率之差。这个差频的大小直接正比于回波延时而回波延时又正比于目标距离。换句话说只要你测出差频信号的频率就能换算出目标距离。SAR 成像里的距离向压缩本质上就是对差频信号做频谱分析。1.3 为什么要用声卡采样省成本也划出边界教学项目选择声卡是因为差频信号经过混频后已经降到了音频范围。普通笔记本声卡采样率在 44.1kHz 或 48kHz足以记录一定距离范围内的目标差频。这样一来不需要昂贵的射频数据采集卡也不需要外接高速 ADC实验门槛就低很多。但声卡采样也带来了边界。声卡的采样率决定了差频信号的最高可分析频率进而影响最大可测距离。如果差频信号频率超过采样率的一半就会发生混叠距离像上会出现虚假目标。另一个限制是声卡通常带抗混叠滤波、自动增益和音频特效采集时要尽量关闭这些处理。没有关闭的话幅度和相位都可能被改变后续 SAR 聚焦会变差。2. 硬件连接、天线布置和原始数据采集前要确认的事这个项目的硬件结构在不同版本里会有些差异。常见的大致是信号源产生扫频微波信号一部分作为发射参考一部分经天线辐射接收天线收到回波后与参考信号混频输出差频音频信号给声卡。SAR 成像时天线需要沿一条直线移动模拟一个大孔径的多个阵元。2.1 常见硬件组成和参数确认你可以先按下面这套组成来核对手头设备微波信号源一般是压控振荡器 VCO有些版本会加扫频控制电路。发射天线和接收天线或者一个天线加环形器。混频器用于产生发射信号与回波的差频。功分器或耦合器把部分发射信号送给混频器作为参考。功放或衰减器根据实际功率和接收链路调节电平。笔记本电脑声卡用于采集差频信号。导轨或滑轨以及位置记录工具用于 SAR 天线移动。不同版本的雷达工作频率也不一样。很多教学版本会选择 2.4GHz 左右的频段因为这个频段的器件容易获得波长约 12.5cm适合室内短距离实验。也有一些版本工作在其他频段。原始材料里没有给出具体工作频率所以你拿到设备后第一件事就是查模块手册确认扫频范围、扫频周期、输出功率和天线增益。不要凭印象猜参数。2.2 天线移动合成孔径的物理来源SAR 的“合成孔径”不是雷达天线本身变大而是把天线移动到不同位置分别记录回波。每个位置都相当于大孔径天线上的一个“阵元”。处理时再把所有位置的数据相干叠加获得比单个天线更好的方位分辨率。移动天线时有两个关键要求轨迹尽量沿直线速度或者位置关系要准确。如果轨道弯曲相位误差会直接导致图像散焦。如果移动速度不均匀但你又按均匀位置做处理目标就会在方位向上被拉散。最简单的做法是使用带有固定滑块的导轨每隔固定距离采集一段数据或者用编码器记录位置。2.3 声卡采集参数与数据格式采集前先把声卡采样率设置为固定值比如 44.1kHz 或 48kHz。关闭自动增益、降噪、回声消除、麦克风增强之类所有音频后处理。使用立体声录音时左右声道可能分别对应不同的信号需要先确认哪个声道是差频信号。声卡录音会得到一个 WAV 或类似格式的文件。在 MATLAB 或 Octave 里读入后先把数据按一次扫频时间分成若干帧。例如如果一次扫频持续约 46ms采样率 44.1kHz那么每帧大约 2048 个采样点。帧数就是慢时间维对应天线在不同位置的记录。具体的扫频时间要以你的雷达模块为准。注意不要一上来就采集很长的文件。先在静止状态下采集几秒确认波形幅度正常再移动天线。移动采集时也要让天线在每个位置停留一小段时间方便后续截取完整扫频帧。2.4 合规与安全提醒这个项目使用的是有源微波发射设备。不同地区对无线电发射设备的频段、功率和辐射方向都有管理规定。实际发射前确认设备是否属于免许可的低功率设备或者是否能在实验室屏蔽环境下使用。不要擅自改装功放把功率放大也不要把天线对准人员连续照射。教学实验的目的是验证信号处理不是追求最大辐射功率。3. 距离向处理从声卡波形到一维距离像距离向处理是整个 SAR 成像的第一级。目标方位信息可以后面再补但如果没有正确的距离像后面的 SAR 聚焦就没有意义。3.1 对每个慢时间位置做距离 FFT假设你已经把数据分成了二维矩阵行是快时间也就是一个扫频周期内的采样点列是慢时间也就是天线位置序号。对每一列也就是每一个慢时间位置沿快时间方向做 FFT得到该位置下不同距离点的幅度和相位。FFT 的频率轴需要换算成距离轴。差频频率与目标距离的关系为f_b S · 2R / c其中 S 是调频斜率R 是目标距离c 是光速。如果 S 的单位是 Hz/s那么 f_b 的单位是 Hz。FFT 后找到幅度峰值对应的频率再按公式反算 R就能知道目标距离。3.2 窗函数、去直流和无效区裁剪声卡采集的信号往往带有直流偏置。直接做 FFT零频附近会有很大的直流分量掩盖近距离目标。处理前先对每一帧减去均值或者用高通滤波去掉直流。距离旁瓣也需要控制。你可以对整个 chirp 加汉明窗、海宁窗或布莱克曼窗。窗函数会降低距离分辨率但能明显压低旁瓣让目标更容易辨认。对教学实验来说汉明窗通常够用。另外扫频信号在扫频开始和结束阶段往往有非线性这部分数据对应的距离估计不准确。可以使用每个 chirp 的中间稳定段。可以先用完整帧跑通再做裁剪。3.3 用已知距离的强反射体做标定距离向处理是否正确不能靠肉眼看频谱就确定。最好在雷达前方已知距离处放一个金属角反射器或者一块较大的金属板。金属在微波频率下反射很强距离像上会有一个明显尖峰。如果尖峰位置和实际距离对不上优先检查三样东西调频斜率是否用了正确的单位。采样率是否与采集时一致。公式里有没有把单程距离写成了双程距离或者反过来。这一步标定非常重要。SAR 后向投影时每个像素都要根据天线到目标的几何关系去距离像里取值距离轴一旦错整幅图像就会错位或散焦。4. SAR 聚焦用后向投影把方位维信息提出来距离向处理后你已经有了一个二维数据矩阵一个维度是距离另一个维度是天线位置。但这个矩阵还不能直接算图像。它只是把每个位置的“距离-幅度”信息记出来了同一距离不同方位的目标还没有分开。4.1 为什么单次距离像不能分辨方位单次距离像只能告诉你“在某个距离上有没有目标”无法告诉你在同一距离上目标是在方位向的哪个位置。只有当雷达从不同位置观察同一个目标时目标回波在距离像中的位置变化、相位变化才会携带方位信息。SAR 处理要做的就是利用一段天线位置历史把每个网格像素对应的理论回波和实际测量结果进行匹配。匹配得越好该位置越可能是真实目标。后向投影算法就是这个思路。4.2 后向投影的几何与实现步骤后向投影算法的基本过程是建立一个地面场景网格比如方位向坐标 x距离向坐标 y。对每个像素点计算它到每个天线位置的双程距离。在距离向压缩后的数据里找到该双程距离对应的复数值。根据双程距离带来的相位对复数值做相位补偿。把所有天线位置的补偿结果累加作为该像素的输出值。对每个像素重复上述过程最后取模得到图像。这个算法实现简单几何直观适合教学项目。缺点是计算量偏大网格越多、天线位置越多耗时越长。但先跑通这个算法你对 SAR 原理的理解会比直接套现成函数深得多。4.3 方位向参数孔径长度、采样间隔和网格孔径长度就是天线移动的总距离。孔径越长方位分辨率越高。但要注意孔径太长会让近处目标的距离徙动更明显必须使用精确的双程距离计算而不能把目标近似在无穷远。室内实验里目标通常只有一两米远直接用平面波近似会出问题。方位采样间隔由雷达发射扫频的重复频率决定。如果天线连续移动每个 chirp 对应的天线位置可能不一样。处理时要记录好每个 chirp 的中心位置而不是假设所有 chirp 都在同一个位置。场景网格也不是越细越好。网格太细计算时间成倍增加而距离分辨率有限过细并不会增加有效细节。建议先用 100×100 或 200×200 网格跑通再根据实际场景调整。4.4 成像结果的判断标准一个点目标理想情况下会在图像中形成一个亮点周围有旁瓣。如果看到的是粗条纹或沿方位向拖尾通常说明相位处理有问题。如果亮点位置偏移先查距离标定和坐标方向定义。要注意图像里的原点、x 轴方向和 y 轴方向取决于你定义的网格。不同资料里坐标方向可能不一样。如果图像出现镜像就把 x 轴方向反向或者把指数符号取反。这个不是“算法错了”只是坐标约定不一致。5. 在 MATLAB/Octave 里把处理流程跑通这个项目的主流后处理工具是 MATLAB。如果没有 MATLAB用 GNU Octave 也能跑大部分流程而且不需要商业许可证。两者语法高度兼容对教学项目足够。5.1 MATLAB 和 Octave 的选择如果你已经有 MATLAB直接建脚本就行。如果只是学习Octave 更省钱。基本上读 WAV、做 FFT、绘图、矩阵运算都能支持。可能有个别工具箱差异但 SAR 后向投影用到的操作很少Octave 完全够用。5.2 从录音文件到二维回波矩阵首先读入录音确认采样率、声道数和数据格式。下面是一段示例代码具体参数要按你的数据修改% 从录音文件读取数据fs 为采样率 [data, fs] audioread(radar_recording.wav); % 假设差频信号在左声道 if size(data, 2) 2 signal data(:, 1); else signal data(:, 1); end % 每个 chirp 的采样点数按实际扫频时间和采样率设置 chirpLen 2048; numChirps floor(length(signal) / chirpLen); % 裁剪到整数个 chirp raw signal(1 : numChirps * chirpLen); raw reshape(raw, chirpLen, numChirps);这段代码把一维录音拆成二维矩阵。行是快时间列是慢时间。如果录音里每个 chirp 之间有间隙还要先找到每个 chirp 的起始点再做分割。5.3 距离像计算对每一列做距离 FFT并把距离轴换算出来window hann(chirpLen); rangeSpectrum fft(raw .* window, chirpLen, 1); % 距离轴换算 S ...; % 调频斜率单位 Hz/s根据硬件设置 c 3e8; rangeAxis (0 : chirpLen - 1) / chirpLen * fs / S * c / 2;注意如果用了fft零频在第一个点距离轴也从近到远。如果觉得看起来不方便可以加fftshift但要同步调整距离轴。关键是距离标定要和实际目标位置一致。5.4 后向投影伪代码后向投影的核心可以写成下面这种形式。这里明确是伪代码不是某个官方函数需要根据你的场景改网格和坐标% 天线位置单位米长度等于慢时间帧数 antPositions linspace(-0.5, 0.5, numChirps); % 场景网格 x linspace(-1, 1, 200); % 方位向 y linspace(0.5, 4.0, 200); % 距离向 sarImage zeros(length(x), length(y)); lambda ...; % 工作波长单位米 for k 1 : numChirps antX antPositions(k); % 取第 k 个慢时间位置的距离像 profile rangeSpectrum(:, k); for ix 1 : length(x) for iy 1 : length(y) % 双程距离 R 2 * sqrt((antX - x(ix))^2 y(iy)^2); % 距离单元索引 n round(R / (c / (2 * fs))); if n 1 n chirpLen % 相位补偿符号取决于坐标定义 sarImage(ix, iy) sarImage(ix, iy) ... profile(n) * exp(1j * 2 * pi * R / lambda); end end end end % 取幅度 sarImage abs(sarImage);这段代码在实际中很慢因为三重循环。如果网格是 200×200天线位置是几百帧普通笔记本可能要跑几分钟到十几分钟。跑通后想提速可以改成矩阵运算也可以先用 50×50 网格验证。5.5 先小网格验证不要一上来就用 500×500 网格。先用点目标小网格比如 50×50跑出一幅能看懂的图像。确认距离和方位位置正确后再慢慢增加网格密度。如果图像只有噪声先检查是不是距离像里根本没有目标尖峰。距离像不对后向投影再完美也出不来图。注意相位补偿指数里的符号很重要。如果你发现图像目标消失或者直接出现镜像就把 exp 的符号从正改成负再试。这个不是碰运气而是不同雷达系统对相位正负的定义不同。6. 常见现象、原因和排查顺序这个项目最容易让人困惑的是明明每个步骤看起来都对图像就是不对。大部分时候不是某个算法设计错误而是前置条件没有满足。6.1 看不到目标回波现象是距离像上只有噪声没有明显尖峰。先检查天线是不是对准了目标。固定一个强反射体比如金属板或角反射器保持在雷达正前方。然后看原始波形幅度。如果原始波形幅度接近零说明差频信号没有有效进入声卡问题在硬件链路。如果原始波形有幅度但频谱很乱先查是否开启了声卡音效或者采样率不匹配。不要一上来就调算法参数。雷达没收到回波后处理怎么改都没用。6.2 距离位置对不上现象是有目标尖峰但位置和实际距离不一致。优先检查三处。第一调频斜率 S 是否写错。第二距离轴换算里有没有除以 2或者多乘了 2。第三目标是否超出了最大不模糊距离。如果差频频率超过采样率一半目标会折叠到错误距离上。用金属反射体放在已知距离逐点标定是最稳的方法。6.3 SAR 图像散焦现象是目标不在一个锐利点而是沿方位向被拉长。先看天线移动是否匀速位置记录是否准确。如果天线是靠手推动的慢时间维对应的位置很可能不是均匀间隔必须记录真实位置而不是简单用序号乘固定步长。再看孔径处理时是否用了精确的双程距离。近场目标不能使用远场平面波近似否则相位误差会随孔径长度增大而累积。最后检查目标是否在波束有效覆盖范围内。天线波束太窄或指向偏了会导致合成孔径有效长度变短图像也会变模糊。6.4 处理时间过长或内存不够后向投影是三重循环慢是正常的。如果处理时间太长先降低网格密度再看能否减少慢时间帧数。帧数减少会降低方位向采样但只要不低于空间采样要求成像结果不会差太多。内存不够时可以用single类型保存距离像和中间变量。MATLAB 和 Octave 默认用 double数据量一大内存会涨得很快。教学场景下用 single 足够。6.5 一套固定排查顺序我一般会按这个顺序排查看原始波形幅度确认信号进了声卡。看距离像确认目标距离标定正确。看单点目标后向投影确认方位向位置正确。再看完整场景图像调整窗函数、网格和相位符号。每步确认正常后再进入下一步。跨过前两步直接调最后一步很容易浪费时间。7. 从教学实验延伸出去的一些建议跑通一次 SAR 成像之后你可能还想继续往深入走。下面是几个实际中值得做的扩展方向。7.1 先用模拟数据验证算法如果你暂时没有硬件或者硬件参数不稳定可以先用模拟数据验证后向投影算法。构造一个虚拟场景设定几个点目标生成对应的差频回波矩阵再送给后向投影处理。这样你能清楚知道算法本身是否正确然后再接真实硬件数据。模拟数据的另一个好处是可以随意改变噪声强度、目标数量和运动误差用来观察算法在不同条件下的表现。这个练习对理解 SAR 的相位敏感度很有帮助。7.2 从距离多普勒走向 SAR这个教学项目本身可以先用简单的距离多普勒处理看运动目标再做 SAR 静止目标成像。距离多普勒关注的是慢时间维的频率变化SAR 关注的是慢时间维的相位历史。两者在原理上相通。建议先做正侧视距离多普勒算法再做后向投影。正侧视模式几何简单距离徙动比较小适合作为 SAR 算法的第二站。之后再扩展到有斜视角的模式你会发现后向投影在几何灵活性上的优势。7.3 把参数和中间结果保存下来这个项目涉及的参数很多中心频率、扫频带宽、调频斜率、采样率、chirp 长度、天线位置、目标距离、窗函数类型、网格范围。调试时如果参数混在一起很难判断问题出在哪个环节。我建议把每个实验的所有参数保存在同一个 mat 文件里或者建立一个简单的文本说明。中间结果也要保存包括距离像、天线位置和最终 SAR 图像。这样你可以随时回看而不是每次都重新从头处理。7.4 调整实验场景的边界室内环境多径反射很严重墙面、桌面、人都可能产生反射。不要指望室内图像像光学照片一样干净。实际场景里尽量使用强反射体并且把周围不必要的金属物体移开。可以在天线附近铺吸波材料但教学项目不要求做到实验室级。移动距离不要小到连一个合成孔径都不够。目标距离越远需要更长的孔径才能获得更高的方位分辨率。这是物理规律不是处理参数能弥补的。另外低功率教学雷达只适合短距离验证不适合拿来测户外大场景。超出设备设计范围去使用既得不到理想结果也可能产生不必要的干扰。保持在这个项目原本的教学定位里才能把信号处理流程学到手。踩过一遍之后会发现MIT Laptop Based Radar 这类项目的核心收获不是出图本身而是让你理解一条完整的雷达数据处理链路从硬件发射到声卡采样再到距离压缩和方位聚焦。先跑通单点目标再慢慢扩大场景遇到问题先查原始数据和距离像再动算法参数。这种先确认物理信号、再做信号处理的思路也适用于后续更多雷达项目。