# PRD 与代码对比：VAD 检测逻辑

## 当前状态

### ❌ PRD 中未详细记录具体实现

PRD 只记录了**设计思路**：
```
VAD检测静音 → 启动静默计时器
静默超过阈值（默认1.5秒）→ 确认用户说完
```

但**没有记录**：
- 帧粒度（每 16ms 检测一次）
- 具体参数（threshold=0.3, min_silence_ms=500）
- TEN VAD 性能数据（0.234ms/帧）
- 三层 Barge-in 架构（回声抑制 + 语义判停 + 状态机兜底）

---

## 差异对比

| 参数 | PRD 定义 | 代码实现 | 说明 |
|------|---------|---------|------|
| 静默超时 | **1.5秒** | **500ms** | ⚠️ 不一致 |
| 最小语句长度 | 0.5秒 | 300ms | ✅ 相近 |
| VAD 阈值 | 0.5 | **0.3** | ⚠️ 更敏感 |
| VAD 性能 | 未提及 | 0.234ms/帧 | ✅ 已优化 |
| 帧粒度 | 未提及 | 16ms | ✅ 已优化 |

---

## 建议更新 PRD

需要补充到 PRD 的内容：

1. **VAD 性能数据**
   - TEN VAD: 0.234ms/帧 (P50)
   - 比 Silero VAD 快 30%
   - 帧粒度: 16ms (256 samples @ 16kHz)

2. **具体检测逻辑**
   ```
   每 16ms 检测一帧
   ↓
   VAD 判断语音/静音
   ↓
   静音持续 ≥500ms → 判定"用户说完话了"
   ```

3. **参数配置**
   ```yaml
   vad:
     threshold: 0.3        # 比 PRD 的 0.5 更敏感
     min_speech_ms: 300    # 最短语音 300ms
     min_silence_ms: 500   # 静音 500ms 判定"说完"
   ```

4. **三层 Barge-in 架构**
   - 回声抑制（软件版 AEC）
   - 语义判停（轻分类器）
   - 状态机兜底（消灭幽灵音频）

---

## 关键问题

**PRD 中的 1.5 秒静默超时是否应该调整为 500ms？**

- 1.5 秒 = 更安全，但延迟感明显
- 500ms = 更快响应，但可能误判自然停顿
- 建议：**可配置参数**，默认 500ms
