合成孔径雷达成像——算法与实现 · 全书导读
Ian G. Cumming、Frank H. Wong的《Digital Processing of Synthetic Aperture Radar Data: Algorithms and Implementation》(2005),以及馆藏2012年中文译本,以数字成像算法为核心。全书13章从信号处理、线性调频和合成孔径几何出发,建立二维信号模型,再比较不同聚焦路线。
前5章奠定模型基础,第6—9章分别讨论RDA、Chirp Scaling、ω-K和SPECAN,第10章处理ScanSAR,第11章比较算法,最后两章讨论多普勒中心与方位调频率估计。算法差别需要从相位补偿、插值、近似条件和输出几何理解。下文保留FFT实现专题,随后可按13篇章节入口继续阅读。
把序列x=[1,2,3,4]与h=[1,1,1]做线性卷积,手算结果是[1,3,6,9,7,4]。直接做4点FFT、频域相乘再IFFT,却得到[8,7,6,9]。每一个复数运算都正确,结果仍与预期完全不同。
原因是DFT默认序列以长度N周期延拓。频域相乘对应的不是线性卷积,而是N点循环卷积:
![y_N[n]=\sum_{k=0}^{N-1}x[k]h[(n-k)\bmod N].](http://mmo.508mallsys.com/image/loading/transparent.png)
线性卷积尾部超出索引N−1后,会按模N卷回开头。独立算例中,尾部7加到首项1上,尾部4加到第二项3上,于是变成8和7。
图1把两种输出画在同一坐标中。循环结果不是“近似线性卷积”,而是另一个边界条件下的精确结果。若问题本来就是周期系统,循环卷积完全正确;若处理有限记录,就必须显式补零。
这类错误难发现,因为输出仍平滑、FFT与IFFT也不会报错。最有效的第一项测试,是拿一个长度只有三四点、可以手算的序列核对索引与边界。
独立短序列。4点循环卷积把线性卷积尾部折回前两个样点,形成数值正确但边界含义错误的输出。长度分别为nx与nh的有限序列,完整线性卷积长度为

要用一次FFT得到无混叠完整卷积,FFT长度必须满足

可以再向上取高效长度,但不能向下取。
图2使用5点序列卷4点序列,因此最小长度为8。N=5或6时,尾部有较多能量卷回前段;N=7只剩最后一个样点混叠;N=8时平方误差降为零。补到“与较长输入一样长”并不够。
长数据通常采用重叠相加或重叠保留。设FIR长度为M、FFT长度为N,重叠保留每块只能交付N−M+1个无污染样点,前M−1点要丢弃。块间步长、保留区间和总输出起点必须一起记录。
补零还会影响时间坐标。完整卷积的索引起点由两个输入起点相加,滤波器群延迟则取决于系数定义。截取same模式时,库函数替你删掉了两侧样点;不同软件对偶数长度核的居中约定可能不同。
因此,长度正确只是第一关,还要用冲激输入验证幅度、起点和延迟。
独立卷积长度测试。5点序列与4点序列的无混叠最小FFT长度为5+4−1=8。N点DFT只在离散频率kfs/N处取样。若正弦频率恰好落在整数栅格,有限记录中包含整数个周期,矩形窗两端能接成同一个周期;若频率落在8.5格,周期延拓处发生跳变,能量通过窗函数频谱泄漏到许多格点。
对有限记录x[n]=s[n]w[n],频域关系是

矩形窗的W具有窄主瓣和较高旁瓣,故离格正弦不会只占一个DFT点。
图3比较64点、8.0格与8.5格正弦。前者能量集中在第8格,后者出现贯穿频带的旁瓣。泄漏不是噪声,也不是FFT精度不足;它来自有限观测窗与频率栅格不对齐。
换成Hann等平滑窗可降低远旁瓣,却会拓宽主瓣并改变幅度标定。比较窗口时应同时报告相干增益、等效噪声带宽和主瓣宽度。给FFT补更多零只是在同一个连续窗谱上取得更密样点,能让峰位看得更细,却不会把主瓣物理宽度变窄。
若要估计单频峰值,可在明确窗函数后做插值;若要分辨两个近邻频率,决定能力的仍是记录时长、窗与信噪比。
独立64点矩形窗正弦。整栅格频率集中在单个谱线,半栅格偏移引起明显谱泄漏。对采样率fs、偶数N,DFT原始数组通常对应

零频在索引0,负频率放在后半段。若直接把数组索引画成从−fs/2到fs/2,横轴与数据会错位。
图4给出16点归一化频率。蓝线在索引7到8之间从+7跳到−8,这正是原始FFT存储顺序;‘fftshift‘把后半段移到前面,得到−8,−7,…,7的递增顺序,零频落在中央。
正确配对是

只移动频谱不移动横轴,或只移动横轴不移动频谱,都会把峰标到错误频率。二维图像频谱还要在两个维度同时处理。
对实信号,负频率与正频率互为共轭,单边谱可以只保留非负部分,但直流与Nyquist格的倍增规则不同。对复基带信号,正负频率通常承载不同信息,不能擅自折成单边谱。
‘fftshift‘只是排列操作,不增加频率分辨率,也不修复泄漏或混叠。它解决的是“第几个数组元素对应哪个物理频率”。
独立16点DFT频率轴。原始顺序在数组中部跳变,‘fftshift‘后负频率在前、零频居中。第一步用冲激。δ[n]*h[n]应精确返回h[n],它能检查卷积长度、幅度、起点与截取模式。第二步用短整数序列,直接手算线性卷积,与时域实现和FFT实现逐点比较。
第三步检查Parseval关系。按所用FFT归一化约定,时域能量与频域能量应满足
![\sum_{n=0}^{N-1}|x[n]|^2
=\frac1N\sum_{k=0}^{N-1}|X[k]|^2.](http://mmo.508mallsys.com/image/loading/transparent.png)
不同库可能把1/N放在正变换、逆变换或两边平方根上,必须以文档和单元测试为准。
第四步用整栅格与半栅格正弦检查频率轴、幅度和泄漏。记录窗函数、相干增益、采样率、N及单边谱倍增规则。第五步分别测试实信号和复信号,确认负频率处理没有被实信号的共轭对称性掩盖。
第六步测试分块边界。给重叠相加或重叠保留输入一段跨块的脉冲,输出在块连接处应与一次完整线性卷积一致。再用随机序列做全长逐点误差,最大误差应落在浮点舍入范围。
最后才看大型图像或长时序。报告里同时写出输入长度、FFT长度、补零规则、输出模式、频率轴构造和归一化。FFT算法极少“神秘算错”;更多错误来自问题边界、数组排列和物理坐标没有说清。
自动化测试应覆盖奇偶长度、空序列、全零、复数输入以及长度刚好差一的补零边界。对每种情形,同时比较直接卷积、整段FFT和分块FFT;三者的差应落在预先设定的浮点容差内。这样,后续换库、换硬件或并行化时,边界语义不会随实现一起漂移。
性能优化时还要固定计算精度。单精度、半精度和定点实现的舍入会在长FFT、低幅谱线与多级乘法中累积。可用双精度结果作参考,分别报告最大绝对误差、相对误差与能量误差;接近零的频点不宜只看相对误差。缩放策略若为防溢出而逐级改变,也必须回写到最终幅度单位。
《合成孔径雷达成像——算法与实现》由Ian G. Cumming、Frank H. Wong著,洪文、胡东辉等译,吴一戎审校,电子工业出版社出版。馆藏版权页列明2012年6月第1次印刷,ISBN为978-7-121-16977-9;原著版权为2005年Artech House,本馆藏PDF共447页。
本文重点阅读PDF第42至45页,对应书内第23至26页。第23页从矩形窗与sinc变换说明有限时宽和频谱宽度,并进入单频采样;第24页解释DFT的周期性,随后引出卷积的DFT计算与循环卷积;第25页用短序列展示卷绕错误,给出N=n1+n2−1的补零要求;第26页继续讨论采样后频谱周期性、DFT频率范围及‘fftshift‘排列。
这四页把三个经常混淆的问题放在同一段基础中:有限记录造成谱泄漏,DFT周期延拓造成循环卷积,数组存储顺序造成频率轴跳变。它们都可能生成数值平滑的错误图,因此特别需要短序列自检。
图1至图4的整数序列、正弦与频率轴均为独立算例,不是书中数据或成像结果。本文只讨论通用数字信号处理实现。
阅读时可以把每次FFT旁边固定写六个量:采样率、数据长度、FFT长度、窗函数、归一化、频率数组。每次频域相乘再补一行“期望线性卷积还是循环卷积”。这些看似琐碎的注释,往往比换一种更复杂的算法更能消除实现误差。