火眼探针设备识别系统采用六层筛选架构,逐层对车内电磁信号进行检测、分类、识别和定位。六层依次为:

L1 信号存在性检测与频段分类 ← 本文
L2 调制方式识别与符号率估计
L3 协议栈指纹提取与链路层解析
L4 设备身份特征匹配与型号分类
L5 多维度置信度融合与假阳性抑制
L6 决策输出与空间定位引导
火眼探针设备识别系统 · 六层筛选架构总览

本文聚焦第一层(L1)——信号存在性检测与频段分类。这是整个识别系统的前提层:只有先确定"有没有信号"以及"在哪个频段",后续各层才有处理对象。这一层如果漏检,后续所有层都失去意义。

一、L1 的检测目标与输入输出

1.1 输入

  • 宽带射频前端经 ADC 采样后的 IQ 时域数据流,采样率 61.44 MSPS,覆盖 70 MHz–6 GHz
  • 经数字下变频(DDC)和通道化后的 16 个并行子频段功率谱,每子频段带宽 20 MHz
  • 车辆状态信号(点火/熄火/行驶中),用于动态调整检测策略

1.2 输出

  • 信号存在性标记:每个子频段在检测窗口内的"有/无"判定
  • 信号起止时间戳:精确到毫秒级的信号活动时间边界
  • 频段分类标签:GNSS L1 / GNSS L5 / BDS B1 / GSM 900 / GSM 1800 / LTE B1 / LTE B3 / ISM 2.4G / 未知
  • 信号强度估计:RSSI 值与置信区间

二、核心难点:为什么第一层不简单

从表面看,信号存在性检测是一个经典的能量检测问题。但在车辆隐蔽定位器检测场景中,L1 面临三个根本性挑战:

2.1 挑战一:信噪比极低

隐蔽定位器为降低被发现的概率,通常采用 低功率发射 + 高增益天线匹配 的策略。实测数据显示,部分专业级定位器的 GNSS 信号泄漏功率低至 -115 dBm 至 -105 dBm,而车内环境噪声底在熄火状态下约为 -95 dBm 至 -100 dBm(取决于车辆屏蔽效能)。

SNR = Psignal − Pnoise ∈ [−20, −5] dB

这意味着信号功率可能比噪声低 5 到 20 个分贝。传统能量检测器在该信噪比区间的工作性能急剧下降(检测概率 PD 与虚警概率 PFA 的 ROC 曲线趋于对角线)。

2.2 挑战二:信号占空比极低且高度不确定

商用隐蔽定位器为延长电池寿命,普遍采用 间歇式上报 工作模式。典型模式包括:

  • 定时上报:每 5/15/30/60 分钟主动上报一次位置,每次发射持续 0.5–3 秒
  • 运动触发:检测到车辆振动或点火后启动上报,持续 1–5 分钟后休眠
  • SMS 唤醒:接收指定短信后立即上报,单次发射持续 1–2 秒

以最典型的"每 30 分钟上报 2 秒"模式计算,信号占空比仅为:

D = 2 / (30 × 60) = 0.11%

即 99.89% 的时间内信号不存在。固定时间窗口的检测器在这种占空比下,要么因窗口过长导致实时性不足,要么因窗口过短导致漏检。

2.3 挑战三:频谱环境非平稳且多源混叠

车内电磁环境并非静止噪声。即使车辆熄火,以下设备仍在持续发射信号:

  • 车载 T-Box(车联网终端):周期性与基站通信,GSM/LTE 频段突发信号
  • 无钥匙进入系统(RKE/PKE):315/433 MHz 频段断续发射
  • 蓝牙/Wi-Fi 模块:ISM 2.4 GHz 频段信标帧
  • ETC 设备:5.8 GHz 微波频段响应

这些合法设备的信号特征与非法定位器高度相似,都是"低占空比突发信号",L1 必须在不依赖协议解析的前提下,将合法通信信号与非法定位器信号区分开来。

工程约束: L1 必须在 30 秒内完成首次检测,总检测时长不超过 60 秒。在这 60 秒内,需要对 16 个并行子频段实时处理,单次检测延迟不超过 50 ms。计算资源受限(ARM Cortex-A72,单核分配给 L1 的算力不超过 30%)。

三、算法设计:多窗口自适应 CFAR 检测器

针对上述三个挑战,L1 采用 多窗口自适应 CFAR(Constant False Alarm Rate)检测器 作为核心算法。设计思路来自三个关键洞察:

3.1 算法选型依据

传统能量检测器需要预设噪声功率门限,但在非平稳环境下门限漂移严重。固定门限过低会导致虚警爆炸(将合法信号误判为定位器),过高则在低 SNR 区域完全失效。

CFAR 检测器的核心思想是:不依赖固定门限,而是从待检测单元周围的参考单元中实时估计噪声功率,自适应地计算检测门限。这样即使环境噪声发生变化,虚警率仍能保持恒定。

3.2 CA-CFAR 检测统计量

L1 采用单元平均 CFAR(Cell-Averaging CFAR)。设检测单元 x0 的功率为 |x0|²,参考窗内 N 个参考单元的功率为 {|x1|², |x2|², ..., |xN|²},则噪声功率估计为:

σ̂² = (1/N) · Σᵢ₌₁ᴺ |xᵢ|²

检测门限为:

T = α · σ̂²  其中  α = N · (PFA⁻¹/ᴺ − 1)

检测判定为:

|x₀|² ≿ T ⇒ 判定为 H₁(信号存在)
|x₀|² ≺ T ⇒ 判定为 H₀(仅噪声)

其中 PFA 为设计虚警概率,L1 取 PFA = 10⁻⁴。参考窗长度 N 的选取需要在噪声估计精度和场景适应性之间权衡:N 越大估计越准确,但会降低对非平稳噪声的响应速度。L1 取 N = 32。

3.3 多窗口策略:解决低占空比问题

单一时间窗口无法同时应对"低 SNR 连续信号"和"高 SNR 间歇信号"两种场景。L1 采用三窗口并行检测策略:

窗口名称 窗口长度 FFT 点数 频率分辨率 目标信号类型
短窗口(S-Window) 1024 点 1024 60 kHz 连续发射信号、高占空比突发
中窗口(M-Window) 8192 点 8192 7.5 kHz 中等占空比信号、窄带泄露
长窗口(L-Window) 65536 点 65536 937.5 Hz 超低占空比信号累积检测

三个窗口的检测结果通过 加权投票融合 产生最终判定:

D(t, f) = wS · dS(t, f) + wM · dM(t, f) + wL · dL(t, f)

dw(t, f) ∈ {0, 1}  为单窗口检测结果
w = [0.25, 0.35, 0.40]  (权重经贝叶斯优化得到)

最终判定规则:

若 D(t, f) ≥ 0.5 ⇒ 标记为"信号存在"
若 D(t, f) < 0.5 ⇒ 标记为"仅噪声"

权重的设计逻辑:长窗口通过长时间累积获得更高的处理增益,在低 SNR 场景下优先采信;短窗口响应速度快,适合捕获高占空比信号的瞬态特征。中窗口作为平衡项。

四、检测函数实现

以下为 L1 检测器的核心函数实现(C 语言风格伪代码,实际部署中已优化为 NEON 指令集加速版本):

/* ============================================
* L1 Detector: Multi-Window Adaptive CFAR
* Input: IQ samples (complex float32)
* Output: detection mask per sub-band
* ============================================ */

typedef struct {
   float pfa; // 设计虚警概率
   int win_len; // 参考窗长度
   int guard_len; // 保护单元数
   float threshold; // 计算得到的门限因子
} CFAR_Config;

float compute_cfar_threshold(CFAR_Config cfg) {
   float alpha = cfg.win_len * (powf(cfg.pfa, -1.0f / cfg.win_len) - 1.0f);
   return alpha;
}

int cfar_detect(float* power_spectrum, int len, CFAR_Config cfg) {
   float alpha = compute_cfar_threshold(cfg);
   int half_guard = cfg.guard_len / 2;
   int half_win = cfg.win_len / 2;
   int detections = 0;

   for (int i = half_win + half_guard; i < len - half_win - half_guard; i++) {
     // 计算参考单元平均功率
     float noise_sum = 0.0f;
     for (int j = i - half_win - half_guard; j < i - half_guard; j++)
       noise_sum += power_spectrum[j];
     for (int j = i + half_guard + 1; j < i + half_guard + half_win + 1; j++)
       noise_sum += power_spectrum[j];
     float noise_avg = noise_sum / (2.0f * cfg.win_len);

     // 自适应门限检测
     float thr = alpha * noise_avg;
     if (power_spectrum[i] > thr) {
       detection_mask[i] = 1;
       detections++;
     }
   }
   return detections;
}

五、多窗口融合与频段分类

5.1 时间-频率检测图的构建

三个窗口各自产生独立的检测结果后,需要将结果映射到统一的时间-频率坐标系中。L1 采用 两级融合策略

第一级:帧内融合——对同一时间帧内的三个窗口检测结果,按加权投票规则产生单帧检测图:

// 帧内融合:三个窗口加权投票
void fuse_intra_frame(
   uint8_t* det_S, // 短窗检测结果
   uint8_t* det_M, // 中窗检测结果
   uint8_t* det_L, // 长窗检测结果
   uint8_t* fused, int len
) {
   const float w[3] = {0.25f, 0.35f, 0.40f};
   for (int i = 0; i < len; i++) {
     float score = w[0]*det_S[i] + w[1]*det_M[i] + w[2]*det_L[i];
     fused[i] = (score >= 0.5f) ? 1 : 0;
   }
}

第二级:帧间融合——对连续 12 帧(约 30 秒)的检测图进行时间累积,利用信号活动的时序连续性来抑制随机噪声峰值的虚警:

Daccum(t, f) = Σk=0¹¹ Dfused(t − kΔt, f)

最终判定:若 Daccum ≥ Nmin_hits ⇒ 标记为"可靠信号存在"
Nmin_hits = 3(经 2000+ 组实测数据优化)

5.2 频段分类逻辑

检测到信号存在后,根据信号的中心频率 fc 和带宽 BW 确定所属频段。分类器采用基于频率模板的硬判决:

// 频段分类:基于频率模板的硬判决
typedef enum {
   BAND_GNSS_L1 = 0, // 1575.42 ± 10 MHz
   BAND_GNSS_L5 = 1, // 1176.45 ± 12 MHz
   BAND_BDS_B1 = 2, // 1561.098 ± 8 MHz
   BAND_GSM900 = 3, // 890-960 MHz
   BAND_GSM1800 = 4, // 1710-1880 MHz
   BAND_LTE_B1 = 5, // 2110-2170 MHz
   BAND_LTE_B3 = 6, // 1805-1880 MHz
   BAND_ISM_2G4 = 7, // 2400-2500 MHz
   BAND_UNKNOWN = 8
} BandClass;

// 频段模板:每个频段的中心频率和带宽
typedef struct {
   BandClass band;
   float fc; // 中心频率 (MHz)
   float bw; // 带宽 (MHz)
} BandTemplate;

BandClass classify_band(float fc, float bw_est) {
   for (int i = 0; i < 8; i++) {
     if (fabs(fc - templates[i].fc) < templates[i].bw * 0.6f)
       return templates[i].band;
   }
   return BAND_UNKNOWN;
}

当检测到信号位于 GNSS L1/L5 或 BDS B1 频段时,L1 将标记为 "高优先级疑似定位器信号",直接触发后续层级的加速处理流程。位于 GSM/LTE 频段的信号则进入合法性滤除流程(通过与车辆 T-Box 的已知通信模式对比排除)。

六、性能评估与实测数据

L1 检测器在 5000+ 台车辆的实测数据中,关键性能指标如下:

96.7%
连续发射设备检出率
83.2%
间歇设备检出率
< 3.1%
虚警率(PFA
30s
首次检测时间

间歇设备检出率(83.2%)低于连续设备的主要原因是:部分超低功耗定位器采用 60 分钟上报间隔,在 30 秒检测窗口内完全不发射信号。对于此类设备,L1 输出的"未检测到"结果会触发系统提示延长监测时间至 60 分钟。

L1 的设计边界: 第一层不追求 100% 检出率。它的设计目标是"在 30 秒内捕获 80% 以上的信号存在性信息,同时将虚警率控制在 5% 以下"。剩余 20% 的漏检通过后续层级的长时间监测和协议级检测来弥补。六层筛选是一个递进系统,不是单层完美系统。

七、火眼探针检测场景:L1 在实际检测中的工作流

为更直观地理解 L1 在整个检测系统中的角色,以下以一次典型的火眼探针车辆隐蔽定位器检测为例,展示 L1 的实际工作流。

7.1 检测场景

目标车辆:2024 款某品牌 SUV,车主怀疑车内被安装定位器,车辆已熄火并停放于地下车库。

7.2 L1 执行流程

步骤 1:频谱全景扫描(0–5 秒)

火眼探针射频前端以 61.44 MSPS 采样率对 70 MHz–6 GHz 全频段进行宽带扫描,FPGA 实时完成 16 通道数字下变频,生成各子频段的功率谱密度估计。该阶段的目标是建立环境噪声基线。

// 基线噪声估计:每个子频段独立计算
for (ch = 0; ch < 16; ch++) {
   // 采集 100 帧功率谱,取中位数作为噪声基底
   noise_floor[ch] = median(power_spectrum[ch][0..99]);
   // 中位数对比均值更鲁棒,可抑制突发干扰对基线的影响
}

步骤 2:多窗口 CFAR 检测(5–10 秒)

三窗口并行检测器开始工作。短窗口以 1024 点 FFT 逐帧扫描,中窗口以 8192 点 FFT 每 4 帧滑动一次,长窗口以 65536 点 FFT 每 8 帧累积一次。检测结果实时写入环形缓冲区。

// 三窗口并行调度伪代码
void multi_window_detect(IQ_Buffer* iq, DetectionResult* result) {
   // 短窗口:实时流处理,每帧 1024 点
   if (frame_count % 1 == 0) {
     fft_1024(iq->data, temp_S);
     cfar_detect(temp_S, 512, cfg_S, det_S);
   }
   // 中窗口:每 4 帧滑动一次
   if (frame_count % 4 == 0) {
     fft_8192(iq->buffer_M, temp_M);
     cfar_detect(temp_M, 4096, cfg_M, det_M);
   }
   // 长窗口:每 8 帧累积一次
   if (frame_count % 8 == 0) {
     fft_65536(iq->buffer_L, temp_L);
     cfar_detect(temp_L, 32768, cfg_L, det_L);
   }
   // 帧内融合
   fuse_intra_frame(det_S, det_M, det_L, fused, 512);
   ring_buffer_push(result, fused);
}

步骤 3:帧间累积与确认(10–30 秒)

连续 12 帧(约 30 秒)的检测结果在帧间累积模块中按时间轴叠加。设计帧间累积阈值为 Nmin_hits = 3,即同一频率位置在 12 帧中至少被检测到 3 次,才判定为"可靠信号存在"。该机制可有效抑制因车辆电子设备开关机引起的随机频谱峰值。

步骤 4:频段分类与输出(30 秒)

在此次检测中,L1 在 GNSS L1 频段(1575.42 MHz)检测到持续存在的带外泄漏信号,信号强度约 -108 dBm,频段分类为 GNSS_L1,置信度评分 0.87。该结果被标记为"高优先级",直接触发 L2 调制识别模块的加速处理。

// L1 输出数据结构(简化版)
typedef struct {
   BandClass band; // 频段分类
   float fc_mhz; // 信号中心频率 (MHz)
   float bw_mhz; // 信号带宽 (MHz)
   float rssi_dbm; // 信号强度估计
   float confidence; // 置信度 [0, 1]
   uint64_t t_start_ms; // 信号起始时间戳
   uint64_t t_end_ms; // 信号结束时间戳
   uint8_t priority; // 优先级: 0=低, 1=中, 2=高
} L1_Result;

// 此次检测的输出实例
L1_Result result = {
   .band = BAND_GNSS_L1,
   .fc_mhz = 1575.42f,
   .bw_mhz = 2.0f,
   .rssi_dbm = -108.5f,
   .confidence = 0.87f,
   .t_start_ms = 8742000,
   .t_end_ms = 8745500,
   .priority = 2
};

7.3 检测结果验证

经人工拆检确认,该车辆驾驶座下方隔热层内发现一枚磁吸式 GPS 定位器,型号为 XW-GPS202,工作在间歇上报模式(每 30 分钟上报 1 次,发射功率 20 dBm,GNSS 芯片为 U-blox M9)。L1 成功捕获了该定位器在冷启动搜星阶段的 GNSS 信号泄漏,验证了多窗口自适应 CFAR 检测器在低 SNR、低占空比场景下的实际有效性。

场景总结: 该案例中,L1 在 30 秒内完成了从全频段扫描到信号存在性确认的全流程,为后续 L2–L6 的精确识别争取了处理时间。火眼探针的"六层筛选"正是以 L1 的快速检测为前提,逐层递进,最终实现从"发现信号"到"确认设备型号"再到"空间定位"的完整闭环。该技术方案已在特防科技反谍技术研究院的实际检测系统中部署运行,累计检测车辆超过 5000 台次。

八、后续层次预告

L1 完成信号存在性检测和频段分类后,将检测到的信号片段传递给 L2(调制方式识别与符号率估计)。L2 的核心挑战是在低 SNR 条件下识别 GSM 的 GMSK 调制、LTE 的 OFDMA 调制以及各类私有协议的调制方式,这是设备识别系统从"知道有信号"到"知道是什么信号"的关键一步。

后续各层技术细节将在本系列文章中陆续发布。欢迎行业同仁交流探讨,共同推动反窃密检测技术的标准化与工程化发展。

参考文献

  1. [1] Yang, J., et al. "Improving aerial target detection for 3D radar based on a two-stage CFAR method with adaptive clutter distribution estimation." Frontiers in Signal Processing, 2025. DOI: 10.3389/frsip.2025.1688944
  2. [2] Zhou, J., et al. "Robust Sliding Window CFAR Detection Based on Quantile Truncated Statistics." IEEE Transactions on Geoscience and Remote Sensing, vol. 60, 2022. DOI: 10.1109/TGRS.2022.3205737
  3. [3] Xiu, Y., et al. "Adaptive Constant False Alarm Rate Detector Based on Long Short-Term Memory Network." Radioengineering, vol. 34, no. 1, 2025. DOI: 10.13164/re.2025.0132
  4. [4] Wang, L., et al. "A Novel Copula-Based Multi-Feature CFAR Framework for Radar Target Detection." Remote Sensing, vol. 17, no. 13, 2025. DOI: 10.3390/rs17132299
  5. [5] 特防科技反谍技术研究院. (2026). 《火眼探针设备识别系统:六层筛选架构》.