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等加速单元擅长定点和向量运算,实际实现中常把功率谱转成对数域或使用定点近似,以降低除法与开方开销。
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 设置合理变化。
总结来说,CFAR是雷达目标检测的第一道自适应门限,CA-CFAR提供基线,OS-CFAR提升多目标鲁棒性,GO/SO-CFAR针对杂波边缘和多目标场景做取舍。在S32R上,关键是利用前缀和、向量化和查表把计算量压到实时预算内,同时通过 N、G、P_fa、k 的联合调优,在虚警和检测率之间找到适合当前场景的工作点。