FFT等效相干积累:门信号如何决定雷达信噪比与频谱泄漏
发布时间:2026/10/4 22:32:33 锦皓数字建站

第一次看到“FFT等效为相干积累”这句话时我的第一反应是这不是把两个名词硬凑在一起说吗FFT是工具箱里的函数相干积累是雷达信号处理里的经典概念两者怎么就成了同一件事后来在毫米波FMCW雷达上反复调参数、对着频谱图挠头才逐渐意识到这句话不是修辞而是数学事实。这篇东西的起因就是想把“门信号表达式”在这套逻辑里扮演的角色讲透——它看起来只是一个矩形窗实际上它同时决定了积累时间、频率分辨率和频谱泄漏是连接FFT与相干积累的那把钥匙。适合读到这篇的人大概和我差不多正在做FMCW雷达信号链路的工程师或者在读雷达信号处理但被理论推导绕晕的学生。如果你手头正好有一块24GHz毫米波雷达模块想搞清楚为什么做一次FFT远处那个微弱目标就从噪声里冒出来了那这篇文章正好对路。我会从差拍信号表达式讲起把FFT的求和过程逐步拆开再落到实际参数设计上。1. 相干积累到底在“积”什么1.1 差拍信号里藏着距离和相位FMCW雷达发射的信号是频率随时间线性上升的调频连续波接收到的回波是发射信号经过目标反射后的延迟版本。发射信号和回波信号在混频器里相乘再经过低通滤波就得到了差拍信号。这个信号包含了目标的距离和速度信息而处理它的第一步通常就是做FFT。差拍信号可以简化写成x(t) A·cos(2π·f_b·t φ)其中 f_b S·2R/cS是调频斜率R是目标距离c是光速。这个公式是FMCW雷达的根基目标越远差拍频率越高。所以在做完FFT之后距离信息天然地就映射到了频谱的横坐标上——每个频率点对应的就是一段距离范围。这里的相位 φ 同样很关键。虽然单看一个chirp的相位没有太大意义但只要目标在两次chirp之间发生了微小位移这个相位就会跟着变化。后来做多普勒维FFT利用的正是这一点。也就是说差拍信号里的幅度、频率、相位没有一个是被浪费掉的。1.2 噪声为什么怕“按相位对齐地加”单个chirp的差拍信号做完混频、滤波、ADC采样之后信噪比往往不够看。尤其是目标距离远、反射截面积小的时候信号幅度可能只比噪声电平高一点点有时干脆就埋在噪声里。但是噪声有个致命弱点它的相位是随机的。每次采样得到的噪声样本相位随机、幅度也随机而目标回波不一样在同一个chirp采样窗口内它的相位是相对确定的。如果直接把N个采样点加起来会发生什么先看信号每个采样点里的目标分量相位基本一致N个点加起来信号幅度线性叠加变成原来的N倍。再看噪声噪声样本之间没有固定相位关系相加时不能简单按幅度叠加只能按功率叠加。N个噪声点的总功率变成原来的N倍幅度上大约是原来的√N倍。所以做完线性相加之后信号幅度增长了N倍噪声幅度只增长了√N倍。信噪比发生了本质变化功率上提升了N倍。这就是相干积累最核心的数学逻辑也是“FFT等效为相干积累”这句话的根基所在。1.3 相干积累与非相干积累的差别有些系统不用复信号求和而是先把每个样本的幅度或者功率取出来再做平均或累加。这种叫非相干积累。两者的增益差别很大。对比项相干积累非相干积累保留信息幅度相位仅幅度/功率累加方式复数域向量求和实数域包络/功率求和理想增益N倍功率低于N倍工程上介于√N和N之间实现复杂度需要I/Q或复数FFT实现简单但会丢失相位对相位稳定性要求高相位漂移会降低增益相对宽松非相干积累在信噪比很低的时候还会出现“平方律检波损耗”增益进一步打折。这也是为什么现代FMCW雷达几乎都走I/Q采样、复数FFT的路线——因为你要的不仅仅是频谱而是每一根谱线上的相位信息。有了相位才能谈得上相干。2. 门信号表达式把“观察窗口”写进数学2.1 一段观测就是一次门控雷达处理信号显然不能无限时地等下去。对FMCW来说一个chirp的采样窗口是有限的。数学上对一个连续信号做有限时长观测相当于把无限长的信号乘以一个门信号g(t) 1当 0 ≤ t ≤ T g(t) 0其他这个g(t)就是门信号它在时域上是一个矩形窗。两个阶跃函数相减就能写出来g(t) u(t) - u(t-T)。看起来很平淡无奇但这个门信号决定了你在时域里取了多少数据而取多少数据又直接决定了后续FFT的一切性质。我常用一个相机曝光的类比来理解这件事开门时间越长传感器积累的光子越多但噪声和模糊也会跟着累积。门的宽度就是积累时间关键是信号积累的速度要比噪声积累更快。在相位对齐的条件下信号幅度积累速度是线性的N噪声是√N所以门越宽信噪比优势越明显。2.2 矩形窗与sinc函数谱泄漏的根源门信号在时域是矩形窗它的傅里叶变换是一个sinc函数G(f) T·sinc(fT)这意味着什么呢原本一条理想的谱线经过门信号的截断之后在频域上被“涂抹”开了能量不再集中在一个频点上而是分布在主瓣和一系列旁瓣上。主瓣宽度大约为1/T旁瓣峰值比主瓣低约13.3dB。这个旁瓣就是频谱泄漏的来源。凡是做过FFT频谱分析的人都应该对“泄漏”这个词不陌生。很多人只知道加窗可以降低泄漏但未必意识到即使你不加任何窗函数数据本身已经被一个矩形门截断了这个过程已经隐含了一次加窗。你什么都不做实际上就是用了矩形窗。门信号表达式把这个隐含过程明确地写了出来。2.3 从连续时间门到离散点数NADC采样把连续时间信号变成了离散序列。假设采样周期为T_s观测窗口T内采样了N个点那么N和门信号宽度之间的关系就是T N·T_s这个N看起来只是采样点个数但在相干积累的语境下它直接就是积累次数。N越大积累时间越长FFT频率分辨率也越好分辨率约等于1/T。所以当你决定一个chirp的采样点数时你实际上同时干了几件事设定了频率分辨率设定了积累时间也设定了FFT的相干积累增益。还有一个常见操作叫“补零”。补零是把采样序列后面填上0再做更长点数的FFT。很多人误以为补零能提高分辨率其实不能。补零只是对已有的频谱做了插值让谱线看起来更密但谱峰宽度、旁瓣结构都是门信号宽度T决定的和补多少个零无关。同样地补零也不会增加相干积累增益因为真正的积累发生在数据采集阶段补的零没有实际信号能量。3. FFT的求和过程逐项拆开就是相干积累3.1 DFT公式的另一种读法离散傅里叶变换的公式是X[k] Σ_{n0}^{N-1} x[n]·e^{-j·2π·k·n/N}很多人学这个公式时只记住了“变换到频域”但如果我们把x[n]换成差拍信号再看这个公式就有了完全不同的含义。假设回波信号是复数形式的x[n] A·e^{jφ}·e^{j·2π·f_b·n·T_s}那么DFT公式就是逐项相乘再求和。乘上的那一项e^{-j·2π·k·n/N}本质上是给每一个采样点加了一个相位旋转量。求和符号前面有一大堆相位项每一项都来自当前采样时刻n。这个“逐项加相位旋转再求和”的操作听起来是不是很耳熟对这就是相干积累的完整流程。3.2 频率对齐时信号增强、不对齐时相互抵消当目标差拍频率f_b恰好等于某个FFT谱线对应的频率k_0时会发生一个漂亮的现象x[n]·e^{-j·2π·k_0·n/N} A·e^{jφ}相位旋转量刚好把信号自身的相位逐点“摆正”于是N个样本在复数平面上全部朝同一个方向向量叠加后幅度变成N·A。这是理想情况。如果目标频率不在谱线上结果就完全不同。输入的复指数和本振复指数之间有一个频率差Δf每一项的剩余相位是2πΔf·n·T_s这些相位会随着n均匀旋转。每转一圈后面的向量方向就散开一次最后的求和结果远小于N·A。这是典型的向量干扰相消。等比数列求和公式可以精确地描述这个过程。频率完全对齐时相消消失所有能量集中在一根谱线上未对齐时能量被展宽散落到相邻谱线上。所以FFT的每一根谱线本质上都在做一次“相位对齐后再相加”的运算这恰恰是相干积累的定义。3.3 为什么说FFT是滤波器组把DFT公式继续往下想对于任意一个固定的k值这个求和只在一个频率点上做匹配。不同的k对应不同的旋转频率因此整个FFT相当于同时运行了N个匹配滤波器每个滤波器对应一个频率通道。这个概念在工程上的价值很大。它提醒你FFT不仅仅是一个“把时域变频域”的数学工具它更是一组并行工作的窄带滤波器。每个滤波器的中心频率是k·f_s/N带宽大约是1/T。目标信号一旦落入某个滤波器通道该通道的输出信噪比就会因为相干积累而显著提升。也正因为如此在做目标检测时检测门限通常设置在FFT输出幅度谱上而不是在时域ADC数据上。因为经过了相干积累之后目标在频域上的信噪比已经远高于时域检测更容易做。3.4 幅度增益、功率增益要分清楚很多人在估算FFT处理增益时被N倍还是√N倍搞晕这里把账彻底算清楚。信号在FFT后幅度变成N·A噪声的幅度大约变成√N·σσ是单点噪声幅度标准差。如果只看幅度谱信号和噪声的幅度比变成了N·A/(√N·σ) √N·(A/σ)。也就是说幅度信噪比提高了√N倍。但雷达理论里习惯用功率信噪比描述积累增益。信号功率正比于(N·A)² N²·A²噪声功率正比于N·σ²。两者相除得到SNR_after N·A²/σ²相对于单点SNR A²/σ²正好提升了N倍。用分贝表示增益就是10·log10(N)。所以无论你从幅度谱看还是功率谱看最终换算成分贝之后结果是一致的FFT处理带来了10·log10(N) dB的相干积累增益。FFT点数N功率增益(dB)6418.112821.125624.151227.1102430.1这张表在实际工程里非常常用。你在系统链路预算时可以直接用这个表估算距离维FFT带来的信噪比改善。4. 把这些理解用到实际雷达处理中4.1 距离维FFT的参数怎么定实际FMCW雷达处理时有一个关键参数链调频带宽B决定了距离分辨率ΔR c/(2B)调频斜率S和ADC采样率f_s决定了最大不模糊距离R_max f_s·c/(2S)采样点数N f_s·T_chirp决定了FFT的相干积累增益。我自己调试时习惯先根据目标距离需求确定B和S再来选采样率。比如带宽250MHz距离分辨率就是0.6m如果最远要看到120m那么差拍频率最大值不能超过f_s/2。调频斜率S选2.5MHz/μs那么f_s2MHz时R_max正好是120m。此时如果chirp时长取100μsN2MHz×100μs200点。实际FFT取256点正好覆盖。这里要注意chirp时长和调频斜率密切相关。S太大会导致差拍频率过高超出ADC带宽S太小同样带宽下chirp时间变长帧率又跟不上。实际选型时往往要在距离分辨率、最大距离、帧率三者之间来回折中。4.2 一个24GHz雷达模块的SNR估算实例假设手头有一块24GHz雷达模块参数如下调频带宽B250MHz调频斜率S2.5MHz/μschirp时长100μsADC采样率2MHz目标距离40m。先算差拍频率f_b S·2R/c 2.5e12 × 80 / 3e8 ≈ 666.7kHz这个频率落在2MHz采样率对应的奈奎斯特带宽内没问题。FFT频率分辨率大约是Δf 1/T 10kHz对应的距离单元宽度约0.6m。666.7kHz落在第66或67根谱线附近目标峰值位置可以直接换算成距离。再看信噪比。假设单chirp差拍信号的信噪比约为-10dB目标完全淹没在噪声里。对256点距离维FFT来说相干积累增益是24.1dB。那么FFT输出端的信噪比就是-10 24.1 14.1dB这个信噪比做恒虚警检测已经比较舒服了。所以你看目标在时域里是“隐形”的但经过FFT之后就从噪声里冒了出来。这就是相干积累在实际雷达里的直观表现。4.3 加窗的代价从“门”到“窗”前文说过不加任何窗函数时数据相当于被矩形门截断频域旁瓣是-13.3dB。这个旁瓣在目标很强时会掩盖旁边较弱的目标所以工程上几乎总要加窗。加窗的本质是把矩形门换成其他形状的门信号比如汉宁窗、汉明窗、布莱克曼窗。时域上改变了门信号的形状频域上就改变了旁瓣结构。汉宁窗能把旁瓣压到-30dB量级但代价是主瓣宽度展宽到原来的约两倍距离分辨率变差。还有一个较少被提起的代价加窗对相干积累增益有轻微损失。以汉宁窗为例它对信号做了幅度加权中心样本贡献大、边缘样本贡献小实际积累效率低于均匀加权的矩形窗。在白噪声模型下等效积累点数约减半对应增益损失约3dB。工程上很多人忽略这点在精度要求高的链路预算里应该算进去。窗函数主瓣宽度旁瓣峰值相干积累增益损失(近似)矩形窗1/T-13.3dB0dB汉宁窗2/T-31.5dB~3dB汉明窗2/T-43dB~3dB布莱克曼窗3/T-58dB~4dB经验之谈是如果目标是单目标、信号强、对分辨率要求高可以直接用矩形窗如果要检测弱目标或者区分相邻目标汉宁窗是全面一点的默认选择。4.4 二维FFT与4D雷达的扩展距离维FFT只是第一层相干积累。现代FMCW雷达通常发射一帧内多个chirp对同一距离单元在不同chirp间做慢时间维FFT就得到多普勒维。这一层FFT同样是相干积累积累次数等于帧内chirp数M信噪比增益就是10·log10(M)dB。4D毫米波雷达这几年很火它的“4D”就是在距离、多普勒维基础上又加了水平和俯仰两个角度维。角度维通过虚拟阵列的FFT实现数字波束形成本质上也是在空间维上做相干积累。天线阵元之间相位对齐得好波束指向就准SNR增益也高。所以你看距离、速度、角度三个维度底层的数学工具其实是同一个FFT而FFT的物理意义始终都是相干积累。我在调二维FFT时有个习惯先做距离维FFT只看距离谱确认目标距离峰值没问题后再把峰值对应的复数序列横向拉出来做慢时间维FFT。这样分层调试比一次性跑完整个信号链容易定位问题。5. 实际处理中的常见问题与排查5.1 峰值不突出做距离维FFT后发现目标峰值不明显先不要怀疑算法按顺序查这几个地方。第一查采样率和调频斜率差拍频率有没有超过奈奎斯特带宽。超了目标会折叠回来出现在错误的位置上。第二查chirp时长和采样点数积累时间太短N不够大增益自然不足。第三查目标是不是在移动如果一个chirp内目标运动超过了距离分辨率差拍信号会发生调频展宽能量摊到多个距离单元里峰值就会被压低。目标高速运动时要尽量缩短chirp时长来控制走动。用示波器看ADC输入端的时域波形也很有帮助。如果时域波形里目标回波完全被噪声吞没那是正常的别慌但如果示波器上能看到明显幅度的干扰信号比如工频干扰、开关电源噪声先处理这些干扰FFT处理增益再高也救不了带外杂散。5.2 目标旁边出现“鬼影”目标谱峰附近出现对称的假峰大多数时候是频谱泄漏的旁瓣在作怪。矩形窗的旁瓣只有-13.3dB强目标会把弱目标掩盖或者在旁边制造出疑似多目标的假象。加窗能明显缓解这个问题。还有一种可能是混叠。如果ADC前面没有做好抗混叠滤波高频噪声和带外信号会被折叠进带内。这时候加窗没用要检查模拟链路里的低通滤波器截止频率是否和ADC采样率匹配。另外如果目标本身很强势回波经过功放或混频器时产生非线性会在差拍频率的整数倍处出现谐波分量表现为目标谱峰两侧等间隔的小峰。这种情况可以降低发射功率看看峰值是否成比例变化如果谐波变化更快基本可以确认是链路非线性。5.3 嵌入式定点FFT的坑用STM32F4这类MCU做FFT时很多人直接用CMSIS-DSP库的定点函数比如arm_cfft_q15或arm_cfft_q31。定点FFT和浮点FFT的数值行为完全不同最常见的坑是溢出。Q15格式的最大值是32767如果输入信号幅度太大FFT内部蝶形运算的中间结果很容易溢出表现为输出频谱出现异常的大尖峰而且不管怎么调整窗函数都消除不掉。调Q15 FFT时我习惯先把ADC原始数据右移几位确保输入信号范围不超过满量程的一半左右给蝶形运算留余量。还有一个容易被忽略的问题是旋转因子表的精度。定点库内部的旋转因子是预先算好存在表中的如果MCU跑在较高主频且启用了ICache一般没问题但如果代码和数据共用同一段RAM频繁访问旋转因子表可能导致性能抖动FFT时间抖动对相干积累的影响在慢时间维尤其明显——最终会拉低多普勒谱的信噪比。5.4 问题速查表现象可能原因排查方向FFT后目标峰值不明显N太小积累增益不够增大chirp时长或采样点数目标峰旁边对称假峰矩形窗旁瓣泄漏加汉宁窗或汉明窗目标峰宽且矮目标高速运动导致距离走动缩短chirp时长峰值位置随帧漂移相位噪声、时钟抖动检查时钟源、改用更高稳晶振定点FFT输出异常尖峰中间结果溢出降低输入信号幅度留动态余量补零后谱峰变尖误解补零只是插值频谱分辨率由观测时间决定补零无法改变近距离强目标掩盖远目标强目标旁瓣干扰加窗、提高动态范围说到排查问题我自己实际调过的代码里最折腾人的一次不是算法本身而是ADC采样触发的抖动。MCU的中断优先级配置不当导致ADC采样间隔不均匀FFT出来的谱峰明显展宽旁瓣抬高。后来把ADC采样切换到定时器触发并确保DMA搬运稳定问题才消失。这件事让我意识到相干积累的前提是“采样时间准确”如果时基不稳再多理论增益也补不回来。最后再分享一个我自己的调试习惯拿到一组真实ADC数据后先存下来在电脑上用Python分别做64点、128点、256点FFT对比同一目标的峰值和噪底变化。看到谱峰稳稳升高而噪底纹丝不动比任何推导都更能建立“FFT就是相干积累”的直觉。你也可以试试数据就在手边跑一遍就什么都明白了。
锦
锦皓数字建站
深耕本土企业品牌数字化升级,专注原创端正雅致商务官网,从视觉设计到稳定运维全程保驾护航。