409 lines
14 KiB
Markdown
409 lines
14 KiB
Markdown
# 不同车型在线圈检测器上的信号特征与分辨策略
|
||
|
||
> 编写日期:2026-07-01
|
||
> 技术领域:环形线圈车辆检测器 / 车型分类
|
||
> 关键词:车型分辨、波形特征、自适应基线、双阈值检测、状态机、线圈变形补偿
|
||
|
||
---
|
||
|
||
## 一、物理层——不同车型对线圈信号的三个核心维度
|
||
|
||
环形线圈本质上是一个 LC 振荡器,车辆经过时等效于在电感线圈下方引入一个**涡流耦合的金属体**。不同车型在以下三个维度上影响振荡信号:
|
||
|
||
### ① 底盘高度(耦合间距)
|
||
决定感应强度最重要的因素,遵循 **1/(d²)~1/(d³)** 衰减规律。
|
||
|
||
| 车型 | 典型底盘高度 | 耦合效率 | 关键影响 |
|
||
|------|------------|---------|---------|
|
||
| 自行车 | 无底盘,车架距地15~30cm | 极弱 | 金属质量太小,信号接近噪声底限 |
|
||
| 摩托车 | ~15cm(发动机部位更低) | 中等 | 发动机曲轴箱有一定金属量 |
|
||
| 三轮车 | 货斗部位可低至20~30cm | 弱-中等 | 电动三轮金属车架+电池组 |
|
||
| 小轿车 | ~15cm | 强 | 底盘平整,耦合好 |
|
||
| 人货车 | 25~35cm | 中等偏强 | 铁质货箱耦合面高,但底盘高 |
|
||
| 大货车 | 40~70cm | 弱-中等 | 底盘极高,但轮胎巨大、金属总量大 |
|
||
| 集装箱挂车 | 60~90cm | 极弱 | 底盘最高,但整个箱体是铁皮 |
|
||
|
||
### ② 金属覆盖面积(ΔL/L 幅度)
|
||
单位时间内的有效金属体积影响**频率偏移量**:
|
||
|
||
```
|
||
自行车: Δf ≈ 20~80 Hz (信号幅度最低,接近噪声)
|
||
摩托车: Δf ≈ 100~300 Hz (发动机集中)
|
||
三轮车: Δf ≈ 150~400 Hz (车架+电池)
|
||
小轿车: Δf ≈ 400~1200 Hz (底盘全耦合)
|
||
人货车: Δf ≈ 300~800 Hz (铁质货箱,但耦合弱)
|
||
大货车: Δf ≈ 200~600 Hz (底盘高,金属在后轴集中)
|
||
集装箱: Δf ≈ 150~500 Hz (底盘极高,仅有集装箱底部)
|
||
```
|
||
|
||
### ③ 车身长度(信号持续时长)
|
||
车辆通过线圈的速度 × 车身长度 = 占道时间。详见下文"速度归一化"。
|
||
|
||
### ④ 铁磁性 vs 非铁磁性
|
||
- **铁磁性材料**(钢制底盘、发动机缸体):不仅增加涡流损耗,还**提高线圈电感量**——初期信号方向相反(频率先降后升),形成特有波形特征
|
||
- **纯铝/非铁金属**:纯涡流效应,**只降低电感量**(频率上升)
|
||
|
||
> 大货车的信号波形有时会"先凹后凸"——铁质车轴进入时电感升高→频率下降,进入感应区后涡流占主导→频率上升。
|
||
|
||
---
|
||
|
||
## 二、各类车型的典型波形形态
|
||
|
||
```
|
||
频率偏移量 ↑
|
||
| ___
|
||
1400Hz | / \_________ 小轿车 (底盘低, Δf大, 波形陡)
|
||
| / \____
|
||
1200Hz |/
|
||
|
|
||
1000Hz |
|
||
| ____
|
||
800Hz | / \ 人货车 (货箱铁皮, 波形有双峰)
|
||
| / \____
|
||
600Hz |/ \
|
||
|
|
||
400Hz | __/--\_____ 集装箱 (振幅小, 持续长, 可能平顶)
|
||
| / \__
|
||
200Hz | /
|
||
| -_ _ _ _ _ _ _ _
|
||
0Hz |__________________________→ 时间
|
||
↑ ↑ ↑
|
||
进入 车轴/发动机 离开
|
||
(铁磁性凸起)
|
||
```
|
||
|
||
### 波形特征速查表
|
||
|
||
| 车型 | Δf 幅度 | 持续时长 | 波形包络 | 特征备注 |
|
||
|------|---------|---------|---------|---------|
|
||
| 自行车 | <80Hz | ~0.3s@20km/h | 窄尖峰 | 极难分辨,信噪比低 |
|
||
| 摩托车 | 100~300Hz | ~0.4s | 单峰对称 | 钢制车架可能有小凸起 |
|
||
| 三轮车 | 150~400Hz | ~0.5s | 单峰或双峰 | 电机/电池位置产生不对称 |
|
||
| 小轿车 | 400~1200Hz | ~0.8s | 平滑单峰 | 基准波形,波动小 |
|
||
| 人货车 | 300~800Hz | ~1s | 双峰(发动机舱+货箱) | 铁质货箱产生二次凸起 |
|
||
| 大货车 | 200~600Hz | ~1.5s | 平顶或双峰 | 铁质车轴+高底盘,振幅被压缩 |
|
||
| 集装箱 | 150~500Hz | ~2.5s | 平顶+缓慢起伏 | 持续极长,幅度不高 |
|
||
|
||
---
|
||
|
||
## 三、稳定可靠的检测与分辨策略
|
||
|
||
### 3.1 基本检测——自适应基线 + 双阈值
|
||
|
||
所有分辨的基础是先检测到。针对大跨度信噪比,必须用**自适应基线跟踪**:
|
||
|
||
```c
|
||
// 自适应基线 —— 抗温漂+抗噪声
|
||
// 使用一阶低通滤波器跟踪无车时的频率
|
||
#define BASELINE_ALPHA 0.01f // 慢速跟踪
|
||
|
||
if (!occupied) {
|
||
baseline_freq = baseline_freq * (1 - ALPHA) + current_freq * ALPHA;
|
||
}
|
||
|
||
// 双阈值检测
|
||
#define THRESHOLD_OCCUPY 150 // 占车阈值 (Hz)
|
||
#define THRESHOLD_RELEASE 80 // 释放阈值 (Hz) — 滞后比较
|
||
|
||
delta_f = current_freq - baseline_freq;
|
||
|
||
if (!occupied && delta_f > THRESHOLD_OCCUPY) {
|
||
occupied = TRUE;
|
||
// 进入检测态
|
||
} else if (occupied && delta_f < THRESHOLD_RELEASE) {
|
||
occupied = FALSE;
|
||
// 离开 → 触发分类流程
|
||
}
|
||
```
|
||
|
||
**关键设计点**:
|
||
- 自行车Δf仅20~80Hz → 单车场景下可将阈值降至40Hz,但必须配合**持续时间滤波**(≥50ms才算检测到,避开尖峰噪声)
|
||
- 大货车Δf也偏小(200~600Hz) → 阈值150Hz能覆盖,但若安装深度过浅或线圈变形,货车可能被漏检 → 建议备用雷达或长线圈
|
||
|
||
### 3.2 车型分辨 — 特征向量 + 决策树
|
||
|
||
采集车辆经过的完整波形后,提取以下特征向量:
|
||
|
||
```
|
||
特征向量 = {
|
||
peak_delta_f: 最大频偏 (反映底盘高度+金属量)
|
||
mean_delta_f: 平均频偏
|
||
std_delta_f: 波形标准差 (反映轮廓锐度)
|
||
duration_ms: 持续时长 (÷速度 = 车身长度)
|
||
rise_time_ms: 上升时间 (进入阶段)
|
||
fall_time_ms: 下降时间 (离开阶段)
|
||
asymmetry_ratio: 上升/下降时间比 (波形对称性)
|
||
double_peak_flag: 是否有多个峰值 (发动机+货箱)
|
||
plateau_ratio: 平顶占比 (平顶持续时间/总时间)
|
||
}
|
||
```
|
||
|
||
#### 分辨逻辑(决策树)
|
||
|
||
```c
|
||
typedef enum {
|
||
UNKNOWN,
|
||
BICYCLE,
|
||
MOTORCYCLE,
|
||
TRICYCLE,
|
||
SEDAN,
|
||
TRUCK_LIGHT, // 人货车
|
||
TRUCK_HEAVY, // 大货车
|
||
CONTAINER
|
||
} VehicleClass;
|
||
|
||
VehicleClass classify_vehicle(VehicleFeatures *f) {
|
||
// Step 1: 先评估信号强度,过滤弱信号
|
||
if (f->peak_delta_f < 80) {
|
||
if (f->duration_ms > 300 && f->duration_ms < 800)
|
||
return BICYCLE;
|
||
else
|
||
return UNKNOWN; // 噪声/行人干扰
|
||
}
|
||
|
||
// Step 2: 按峰值幅度粗分
|
||
if (f->peak_delta_f > 600) {
|
||
if (f->duration_ms > 600 && f->asymmetry_ratio < 1.3f)
|
||
return SEDAN;
|
||
if (f->duration_ms < 500 && f->double_peak_flag)
|
||
return MOTORCYCLE;
|
||
return SEDAN; // fallback
|
||
}
|
||
|
||
// Step 3: 中等信号 → 货车类
|
||
if (f->peak_delta_f > 300) {
|
||
if (f->duration_ms > 1200)
|
||
return TRUCK_HEAVY;
|
||
if (f->double_peak_flag)
|
||
return TRUCK_LIGHT;
|
||
if (f->duration_ms > 500 && f->duration_ms < 900)
|
||
return TRICYCLE;
|
||
return TRUCK_LIGHT;
|
||
}
|
||
|
||
// Step 4: 弱信号 → 高底盘车辆
|
||
if (f->duration_ms > 1000) {
|
||
if (f->plateau_ratio > 0.3f)
|
||
return CONTAINER;
|
||
return TRUCK_HEAVY;
|
||
}
|
||
|
||
return UNKNOWN;
|
||
}
|
||
```
|
||
|
||
### 3.3 速度归一化——核心前提
|
||
|
||
没有速度,所有持续时间特征都无意义。
|
||
|
||
**方案:两个线圈成对使用(间距1m~3m)**
|
||
- 两个线圈分别检测,测速后反推车身长度
|
||
- 用两线圈的进入时间差和离开时间差取平均,提高鲁棒性
|
||
|
||
```c
|
||
// 双线圈测速
|
||
speed = coil_distance / (entry_time_2 - entry_time_1); // m/s
|
||
|
||
// 车身长度
|
||
body_length = speed * (exit_time_1 - entry_time_1);
|
||
|
||
// 速度过滤
|
||
if (speed < 0.5f) speed = 0.5f; // 怠速/蠕动处理
|
||
```
|
||
|
||
---
|
||
|
||
## 四、线圈变形导致的异常与规避策略
|
||
|
||
### 4.1 常见变形问题
|
||
|
||
| 现象 | 物理本质 | 对信号的影响 |
|
||
|------|---------|------------|
|
||
| **线圈拉伸变形**(矩形变梯形/锥形) | 电感量不均,磁场分布畸变 | 同一车辆在不同位置通过时信号幅度相差2~3倍 |
|
||
| **引线断裂/接触不良** | 回路电阻增加,Q值下降 | 基线噪声增大,弱信号(自行车/高底盘)消失 |
|
||
| **线圈受潮** | 分布电容增大,串联等效电阻变化 | 基线频率持续漂移,信号幅度下降 |
|
||
| **路面沉降/线圈移位** | 线圈面与路面不平 | 感应区域偏移,部分车辆漏检 |
|
||
|
||
### 4.2 锥形线圈的幅度变化
|
||
|
||
车辆从不同车道位置通过,频偏差异极大。这是最头疼的实际问题之一。
|
||
|
||
### 4.3 抗变形策略
|
||
|
||
#### 方案A:多区段采样 + 峰值保持
|
||
|
||
不依赖单点频偏,对完整窗口做分段分析:
|
||
|
||
```c
|
||
void update_zone_features(SignalBuffer *buf) {
|
||
int samples_per_zone = buf->sample_count / SECTOR_COUNT;
|
||
if (samples_per_zone < 1) return;
|
||
|
||
for (int z = 0; z < SECTOR_COUNT; z++) {
|
||
int16_t max_val = 0;
|
||
int start = z * samples_per_zone;
|
||
int end = (z == SECTOR_COUNT - 1) ? buf->sample_count
|
||
: start + samples_per_zone;
|
||
for (int i = start; i < end; i++) {
|
||
if (buf->freq_samples[i] > max_val)
|
||
max_val = buf->freq_samples[i];
|
||
}
|
||
buf->zone_max[z] = max_val;
|
||
}
|
||
// 取分段峰值加权值——排掉最小1/4区段,取剩余最大值
|
||
}
|
||
```
|
||
|
||
#### 方案B:自动阈值补偿(基线+噪声自适应)
|
||
|
||
```c
|
||
static int16_t noise_floor = 50;
|
||
static int16_t noise_peak = 80;
|
||
|
||
void update_noise_floor(int16_t baseline_stability_ms) {
|
||
static int16_t peak_buf[10];
|
||
static int idx = 0;
|
||
peak_buf[idx % 10] = baseline_stability_ms;
|
||
idx++;
|
||
if (idx >= 10) {
|
||
int sum = 0, max = 0;
|
||
for (int i = 0; i < 10; i++) {
|
||
sum += peak_buf[i];
|
||
if (peak_buf[i] > max) max = peak_buf[i];
|
||
}
|
||
noise_floor = sum / 10;
|
||
noise_peak = max;
|
||
}
|
||
}
|
||
```
|
||
|
||
#### 方案C:双线圈相关性校验(高端方案)
|
||
|
||
两个线圈一长一短或一前一后,校验一致性:
|
||
- 结果矛盾→标记"变形/异常"
|
||
- 峰值比超出历史基准→发出线圈退化预警
|
||
|
||
### 4.4 线圈维护体检建议
|
||
|
||
1. **空载测量**:无车时测线圈电感L + Q值(正常:L=50~200μH,Q>30;Q<20→需检修)
|
||
2. **频率漂移测试**:记录1小时内基线变化(正常<±50Hz;异常>±200Hz)
|
||
3. **行走测试**:推标准车从左中右分别通过(偏差>40%→已变形)
|
||
|
||
---
|
||
|
||
## 五、完整状态机框架
|
||
|
||
适用于STM32/GD32等MCU的实用状态机伪代码:
|
||
|
||
```c
|
||
typedef enum {
|
||
IDLE, RISE, PLATEAU, FALL, CLASSIFY, VERIFY
|
||
} CoilState;
|
||
|
||
typedef struct {
|
||
CoilState state;
|
||
int32_t freq, baseline, delta_f;
|
||
uint32_t tick, entry_tick, peak_tick, exit_tick;
|
||
int32_t peak_delta, plateau_start_delta;
|
||
uint32_t plateau_duration;
|
||
uint8_t double_peak_cnt;
|
||
bool double_peak_flag, occupied;
|
||
VehicleClass vclass;
|
||
} CoilDetector;
|
||
|
||
void coil_state_machine(CoilDetector *cd, int32_t cur_freq) {
|
||
cd->freq = cur_freq;
|
||
cd->delta_f = cur_freq - cd->baseline;
|
||
|
||
uint8_t noise_margin = cd->noise_peak * 2 + 20;
|
||
if (abs(cd->delta_f) < noise_margin && cd->state == IDLE) return;
|
||
|
||
switch (cd->state) {
|
||
case IDLE:
|
||
if (cd->delta_f > TH_OCCUPY) {
|
||
cd->state = RISE;
|
||
cd->entry_tick = cd->tick;
|
||
cd->peak_delta = cd->delta_f;
|
||
cd->double_peak_cnt = 0;
|
||
cd->double_peak_flag = false;
|
||
}
|
||
break;
|
||
|
||
case RISE:
|
||
if (cd->delta_f > cd->peak_delta) {
|
||
cd->peak_delta = cd->delta_f;
|
||
cd->peak_tick = cd->tick;
|
||
}
|
||
if (cd->delta_f < cd->peak_delta - 50)
|
||
cd->double_peak_cnt++;
|
||
if (cd->delta_f < cd->peak_delta * 0.85f) {
|
||
if (cd->tick - cd->peak_tick > 20)
|
||
cd->state = PLATEAU;
|
||
else
|
||
cd->state = FALL;
|
||
}
|
||
if (cd->tick - cd->entry_tick > MAX_OCCUPY_TICKS)
|
||
cd->state = FALL;
|
||
break;
|
||
|
||
case PLATEAU:
|
||
cd->plateau_duration++;
|
||
if (cd->delta_f < cd->plateau_start_delta * 0.7f)
|
||
cd->state = FALL;
|
||
break;
|
||
|
||
case FALL:
|
||
if (cd->delta_f < TH_RELEASE) {
|
||
cd->exit_tick = cd->tick;
|
||
cd->state = CLASSIFY;
|
||
}
|
||
if (cd->delta_f > TH_OCCUPY + 100
|
||
&& cd->tick - cd->peak_tick > 100) {
|
||
cd->state = RISE;
|
||
cd->entry_tick = cd->tick;
|
||
cd->peak_delta = cd->delta_f;
|
||
}
|
||
break;
|
||
|
||
case CLASSIFY: {
|
||
uint32_t duration = cd->exit_tick - cd->entry_tick;
|
||
VehicleFeatures f = {
|
||
.peak_delta_f = cd->peak_delta,
|
||
.duration_ms = duration * 10,
|
||
.double_peak_flag = (cd->double_peak_cnt > 1),
|
||
.plateau_ratio = (float)cd->plateau_duration / duration,
|
||
};
|
||
cd->vclass = classify_vehicle(&f);
|
||
cd->occupied = false;
|
||
report_vehicle(cd->vclass, duration, cd->peak_delta);
|
||
cd->state = VERIFY;
|
||
}
|
||
break;
|
||
|
||
case VERIFY:
|
||
if (cd->tick - cd->exit_tick > 5)
|
||
cd->state = IDLE;
|
||
break;
|
||
}
|
||
cd->tick++;
|
||
}
|
||
```
|
||
|
||
---
|
||
|
||
## 六、总结
|
||
|
||
| 问题 | 核心对策 |
|
||
|------|---------|
|
||
| 自行车/摩托车难检测 | 动态阈值+持续时间滤波+噪声跟踪 |
|
||
| 大货车/集装箱信号弱 | 双线圈+分段峰值保持+自动阈值补偿 |
|
||
| 车型分辨 | 特征向量(幅度+时长+波形形态)+速度归一化 |
|
||
| 线圈变形 | 分区分段采样+双线圈相关性校验+老化预警 |
|
||
| 尾随/并排 | 状态机的超时/再次触发逻辑+分类后的VERIFY窗口 |
|
||
|
||
**现场实施优先级**:
|
||
1. 先做稳**自适应基线+双阈值**
|
||
2. 双线圈测速归一化(没有速度,"持续时长"特征毫无意义)
|
||
3. 分段峰值保持——免疫力最强、改动最小的抗变形手段
|
||
4. 纯线圈做到5类车型已是较优水平,7类以上建议配合雷达/激光辅助
|