
基于FDAF的ACE实现
题目说明
- ACE 声学回声消除
- FDAF 频域自适应滤波算法
回音产生原因
声学回音
- 麦克风直接采集到喇叭播放的声音:直接耦合
- 麦克风采集到空间反射造成的回声:远端信号
- 直接耦合:距离很近,基本为接收信号延迟,一般设备会直接滤除。
- 远端信号:成分复杂,为接收信号的多次残留叠加。
线路回音
- 由于2-4线匹配耦合转换引入的线路回音,不做详细介绍。
系统建模
先验条件
- 麦克风采集信号有延迟
- 开始对话前有空白时间
- 对话过程会产生双向通话,产生混叠。
设:
接收信号的人为
接收信号为
经过空间反射的回声为
近端麦克风采集信号为
那么麦克风采集声音为
希望找到一个关系来模拟回声路径,设
理想输出为
误差
对于一个固定场景,
假设
双向通话中无法确定理想输出
反射回声
故
完整的回声消除系统
此处主要针对后两个进行建模处理。
- 时延估计
- (线性)回声消除
- 双讲检测
- 非线性残余声学回声抑制
算法实现
FDAF算法
设
在数值上麦克风期望输出等于
双讲检测&确定h更新条件
采用DTD信号相关度,余弦相似性。
当没有近处信号
麦克风采集信号
当双向通信时候麦克风采集信号
设置合适阈值判断是否更新
- 当
, 均为 , 不更新; - 当
, , 开始更新; - 当
, , 不更新.
为了确保1.可以有效计算,修正公式,其中
性能分析&对比NLMS算法:
此处选择了一段5s以后开始的双讲混合音频。音频采样率16k,滤波器阶数2k。
从时域上来看还是很难看出性能,但是看时频谱图就可以看出FDAF算法还是很强的。
其实就是把NLMS的batch_size开大了。
NLMS 时域
FDAF 时域
NLMS 对数
FDAF 对数
NLMS 时谱图
FDAF 时谱图
其他应用
- 经过一定程度修改可用于音频中的背景音乐和人声分离。
不足
- 未考虑滤波器参数更新计算时间。
- 环境建模过于理想,实际的回声传播很复杂
代码参考
实际上并没有做双讲检测,但是效果依然不错。
1 | function [en, H] = FDAF(d,x,mu,mu_unconst, M, DTDbegin) |
1 | clear all; |
This piece of writing is an original article, utilizing theCC BY-NC-SA 4.0Agreement. For complete reproduction, please acknowledge the source as Courtesy ofSoCoco's Blog
Comment