3. 恒虚警率检测算法基础

雷达接收到的距离-多普勒二维谱中,目标回波只是少数强散射点,其余大部分是随距离、角度、天气和场景变化的杂波与噪声。若用一个固定门限做检测,杂波功率升高时虚警会急剧增加,杂波功率降低时又会漏掉弱目标。恒虚警率(Constant False Alarm Rate,CFAR)检测的核心思想,就是让检测门限随局部背景功率自适应变化,使虚警概率在统计意义上保持恒定。在NXP S32R系列(如S32R294、S32R45)上,CFAR通常运行在R52内核或专用信号处理加速单元上,处理对象是经过距离/多普勒FFT与求模平方后的功率谱。

CFAR的基本原理与门限公式

CFAR把待检测单元(Cell Under Test,CUT)周围的参考单元划分为训练区,用训练区估计背景功率,再乘以一个由目标虚警概率决定的门限因子得到判决门限。设训练单元功率为 \(x_i\),参考单元数为 \(N\),背景功率估计为 \(\hat{P}\),则判决规则为:

CUT 功率 P_cut > α · P̂  →  判为目标
α = N · (P_fa^(-1/N) - 1)      // 指数分布假设下的门限因子
P_fa = 期望虚警概率

门限因子 α 由虚警概率 \(P_{fa}\) 和参考单元数 \(N\) 共同决定。例如 \(N=16\)、\(P_{fa}=10^{-6}\) 时,α ≈ 16×(10^{6/16}−1) ≈ 16×(2.371−1) ≈ 21.9,即门限约比背景估计高 13.4 dB。这个数值关系说明:参考单元越多,估计越稳,但门限因子也越大,弱目标越容易被淹没;参考单元越少,对非均匀杂波适应更快,但估计方差变大。工程上必须在“估计稳定性”和“非均匀适应性”之间折中。

训练区与CUT之间通常留1~2个保护单元,防止目标能量泄漏到训练区抬高背景估计。在S32R上,距离维CFAR沿距离单元滑动,多普勒维CFAR沿多普勒单元滑动,也可做二维CFAR。由于S32R的SPT/BBE等加速单元擅长定点和向量运算,实际实现中常把功率谱转成对数域或使用定点近似,以降低除法与开方开销。

CFAR 滑动窗口结构与四类算法背景估计方式 一维滑动窗口(距离维) 训练 训练 保护 CUT 保护 训练 训练 左侧训练区 N/2 单元 + 右侧训练区 N/2 单元,保护单元不参与背景估计 CA-CFAR 单元平均 P̂ = (Σxᵢ)/N 均匀杂波下最优 多目标时互相抬高 门限,弱目标丢失 S32R:向量求和 + 乘法比较 OS-CFAR 有序统计 P̂ = 第 k 个排序值 抗多目标干扰强 需排序,计算量大 k 值影响性能 S32R:部分排序 或直方图近似 GO-CFAR 取大 P̂ = max(L, R) 杂波边缘虚警低 边缘处易漏检 适合杂波边界 S32R:左右半窗 分别求和后取大 SO-CFAR 取小 P̂ = min(L, R) 多目标下保留弱目标 杂波边缘虚警升高 适合密集目标 S32R:左右半窗 分别求和后取小

CA-CFAR:最基础也最常用的实现

CA-CFAR(Cell Averaging CFAR)用训练区所有单元的算术平均作为背景估计。它的优点是计算简单、在均匀杂波下接近最优,且门限因子有闭式解。在S32R上实现时,通常先对功率谱做一次前缀和(积分图),这样任意窗口的求和只需两次减法,把每点 O(N) 的滑动求和降为 O(1)。伪代码思路如下:

// 距离维 CA-CFAR,N=16,保护单元各 2
for each range bin r:
    sumL = prefix[r-2] - prefix[r-2-N/2]
    sumR = prefix[r+2+N/2] - prefix[r+2]
    noise = (sumL + sumR) / N
    threshold = alpha * noise
    if power[r] > threshold: detect[r] = 1

在S32R294上,这类循环可映射到SPT的向量指令,一次处理多个距离单元。需要注意定点化:功率谱动态范围大,建议用32位累加、16位存储,α 用Q15或Q31表示。若 α 用Q15,最大只能表示约32,而前面算出的21.9尚可,但更小 P_fa 时 α 会超过32,此时应改用Q31或把门限计算放到浮点R52上。

OS-CFAR:用排序换取抗干扰能力

OS-CFAR(Ordered Statistic CFAR)不取平均,而是把 N 个训练单元排序后取第 k 个值作为背景估计。当训练区里混入其他目标时,平均会被抬高,而排序值只要干扰目标数量不超过 N−k,估计就不受影响。k 通常取 0.75N 左右,例如 N=16 时取 k=12。代价是需要排序,S32R上可用部分排序或直方图法近似:把功率量化为若干档,统计每档计数,再累加找到第 k 个值,避免完整排序。OS-CFAR的门限因子没有简单闭式解,工程上常用查表或蒙特卡洛标定,把 (N, k, P_fa) 对应的 α 预先算好存入常量表。

GO/SO-CFAR:左右半窗的取大与取小

GO-CFAR和SO-CFAR都把训练区分为左右两半,分别求平均得到 L 和 R。GO-CFAR取 max(L,R),在杂波功率从低到高跳变的边缘处,用较高一侧估计背景,避免边缘处大量虚警,但边缘另一侧的弱目标会被高门限掩盖。SO-CFAR取 min(L,R),在多目标场景下,若一侧被强目标污染,取小可避免门限被抬高,从而保留另一侧的弱目标,但在杂波边缘会因低估背景而虚警升高。选择哪种,取决于场景:高速公路远距离低杂波区可用CA;城市多目标密集区倾向OS或SO;杂波边缘明显的场景用GO。

S32R上的参数调优与验证

调优的核心参数包括:参考单元数 N、保护单元数 G、虚警概率 P_fa、OS的 k 值、以及是否做二维CFAR。建议按以下顺序在S32R上迭代:

  • 先定 N 和 G:距离维 N 常取16~32,G取2~4;多普勒维 N 可小一些,取8~16,因为多普勒维目标展宽较窄。
  • 再定 P_fa:从 10⁻⁵ 或 10⁻⁶ 起步,观察检测点数量与虚警点数量。若虚警过多,降低 P_fa(增大 α);若弱目标丢失,适当提高 P_fa。
  • 选择算法类型:先用CA-CFAR跑通链路,再根据实测谱中多目标和杂波边缘情况切换到OS、GO或SO。
  • 定点与饱和检查:确认累加不溢出、α 表示范围足够、门限比较无符号错误。
  • 用已知目标验证:在暗室或已知反射体场景下,检查目标距离/速度是否落在预期单元,虚警点是否随 P_fa 设置合理变化。
在S32R上做二维CFAR时,可先沿距离维做一次CFAR得到候选点,再沿多普勒维对候选点做二次CFAR,这样比全二维滑窗节省大量运算,适合实时性要求高的场景。
CFAR的 P_fa 是统计期望值,不是每帧固定虚警数。实际虚警数会随参考单元数、杂波分布偏离指数分布的程度而波动。若实测虚警远高于设定值,应检查功率谱是否做了正确的平方律检波、是否存在直流泄漏或通道不一致。

总结来说,CFAR是雷达目标检测的第一道自适应门限,CA-CFAR提供基线,OS-CFAR提升多目标鲁棒性,GO/SO-CFAR针对杂波边缘和多目标场景做取舍。在S32R上,关键是利用前缀和、向量化和查表把计算量压到实时预算内,同时通过 N、G、P_fa、k 的联合调优,在虚警和检测率之间找到适合当前场景的工作点。