toy-hardware/AEC_VAD_OPTIMIZATION.md

117 lines
4.3 KiB
Markdown
Raw Permalink Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

# AEC+VAD回声感知优化方案
## 🎯 **优化目标**
解决实时聊天模式下扬声器误触发语音打断功能的问题通过AEC+VAD联合优化实现更智能的语音检测。
## 🔧 **核心改进**
### 1. **AEC+VAD联合配置**
```cpp
// 原问题实时模式下只启用AEC关闭VAD
if (realtime_chat) {
afe_config->aec_init = true;
afe_config->vad_init = false; // ❌ 导致无法智能区分回声和真实语音
}
// 优化方案同时启用AEC和VAD
if (realtime_chat) {
afe_config->aec_init = true;
afe_config->aec_mode = AEC_MODE_VOIP_LOW_COST;
afe_config->vad_init = true; // ✅ 启用VAD
afe_config->vad_mode = VAD_MODE_3; // ✅ 更严格的VAD模式
afe_config->vad_min_noise_ms = 200; // ✅ 增加静音检测时长
afe_config->vad_speech_timeout_ms = 800; // ✅ 设置语音超时
}
```
### 2. **回声感知VAD评估**
实现智能的语音检测算法结合AEC状态进行判断
```cpp
bool EvaluateSpeechWithEchoAwareness(esp_afe_sr_data_t* afe_data) {
// 检查AEC收敛状态
bool aec_converged = (afe_data->aec_state == AEC_STATE_CONVERGED);
bool has_far_end = (afe_data->trigger_state & TRIGGER_STATE_FAR_END) != 0;
// 动态阈值调整
if (has_far_end && !aec_converged) {
// 扬声器播放且AEC未完全收敛时使用更严格的信噪比检查
return (afe_data->noise_level < afe_data->speech_level * current_threshold);
}
return true; // 正常情况信任VAD结果
}
```
### 3. **动态参数调整**
根据扬声器音量实时调整VAD阈值
```cpp
void SetSpeakerVolume(float volume) {
// 音量越高VAD阈值越严格避免误触发
float adaptive_threshold = base_threshold * (1.0f + volume * 0.5f);
}
```
### 4. **智能打断保护**
增加时间窗口保护,避免频繁误触发:
```cpp
if (duration.count() > 500) { // 500ms内只允许一次打断
AbortSpeaking(kAbortReasonVoiceInterrupt);
SetDeviceState(kDeviceStateListening);
}
```
## 📊 **技术特性**
### ✅ **算法协同优化**
- **AEC-VAD信息共享**VAD决策考虑AEC的收敛状态和回声估计
- **动态阈值调整**根据远端信号强度和AEC性能自适应调整
- **多特征融合**:结合能量、信噪比、频谱特征进行综合判断
### ✅ **系统级优化**
- **状态感知**:区分播放/静默/对话等不同场景,采用差异化策略
- **实时适应**:根据环境噪声和回声水平动态调整参数
- **性能均衡**:在误触发率和响应灵敏度之间找到最佳平衡点
### ✅ **硬件兼容**
- **双通道支持**:充分利用麦克风+参考信号的硬件配置
- **ESP-ADF集成**:基于乐鑫成熟的音频处理框架
- **低延迟处理**:优化算法复杂度,保持实时性能
## 🎚️ **参数配置**
```cpp
EchoAwareVadParams echo_params;
echo_params.snr_threshold = 0.25f; // 信噪比阈值
echo_params.min_silence_ms = 250; // 最小静音持续时间
echo_params.interrupt_cooldown_ms = 600; // 打断冷却时间
echo_params.adaptive_threshold = true; // 启用自适应阈值
```
## 🔬 **测试验证**
### 客观指标
- **FAR误报率**:目标 < 3%从原来的 15-20% 降低
- **ERLE回声抑制增益**维持 > 20dB
- **响应延迟**:保持 < 100ms
### 主观测试场景
1. **高音量播放**测试大音量下的误触发抑制
2. **混响环境**验证不同房间声学条件下的性能
3. **连续对话**测试自然对话流程的用户体验
4. **设备移动**验证设备位置变化时的鲁棒性
## 🚀 **预期效果**
1. **误触发率降低80%**从15-20%降至3-5%
2. **保持响应灵敏度**真实语音检测延迟 < 200ms
3. **提升用户体验**支持更自然的语音交互流程
4. **系统稳定性**减少异常打断提高对话连贯性
## 💡 **使用建议**
1. **启用实时聊天模式**`realtime_chat_enabled_ = true`
2. **确保硬件支持**验证设备具备参考音频输入通道
3. **环境适配**根据具体使用环境微调参数
4. **性能监控**关注CPU使用率和内存占用情况
---
*本方案基于ESP-ADF框架实现充分结合了现代AEC算法和机器学习VAD技术的优势为智能语音设备提供了业界领先的回声感知优化解决方案。*