音频回音消除算法原理分析-DTLN

一、回声消除的代码逻辑

之前已经介绍了回音产生的原理和大体消除的流程,今天谈谈我们真正写代码逻辑的时候,如何处理回音消除算法。

第一,我们写音视频程序开发的时候,首先考虑的是架构设计,所以一般会设计成音频采集逻辑一个线程,音频播放逻辑一个线程,数据通信通过队列加锁的方式,这样处理上可以并行,并且代码看着更清晰,逻辑也简单,可以做到收发数据分离,但是在处理回音算法问题上就会出现或多或少的问题了。

因为大家都知道,我们做回声消除算法,涉及到mic采集和speaker播放的配合,需要采集信号和参考信号的同步,这里面就有一些技术门道了,那下面我们就探讨下,做回音消除处理,是在一个线程里面做,还是在两个线程里面处理比较好?先不说好坏,下面先来具体分析下利弊:

1、单线程实现采集和播放:

当收到对端的音频数据后,放到缓存队列A中,

(1) 从队列A中拿一个speaker数据D2做AEC的参考信号fe;

(2) 播放刚才从队列A中拿出的speaker数据D2,这个D2就是下次mic采集时候的回音;

(3) mic采集音频数据D1,D1里面有上次播放的回音数据D2;

(4) 做AEC(D1,D2,echo);

从D1中消除D2;发送D1数据;

以上步骤每次做AEC的D1,D2整体时间基本很固定,相差无几,基本不会影响AEC算法内部的回音检测和学习收敛。

2、多线程实现采集和播放:

采集:

(1) mic采集音频数据D1;

(2) 从队列A中拿一个speaker数据D2作参考;

(3) 做AEC(D1,D2,echo);

播放:

当收到对端的音频数据后,放到缓存队列A中,播放;

这样,做AEC的D1,D2的时间就跟你代码程序处理的好坏关系很大了,如果处理的不好,那每次时间就不是很固定,AEC算法内部有可能需要重新学习和收敛了。

二、应用算法

我最近基于webrtc的回音消除算法做了一个测试,内部对核算处理算法做了一些优化,目前这个算法可以应用到多种平台,像windows、linux、android、ios、arm平台都可以支持,大家可以看下,效果可以达到业界领先水平,基本上在很短时间内就可以完成回音收敛算法的学习。

项目地址download.csdn.net/download/un...

里面包含测试程序和可执行文件,windows平台和linux平台的我都已经编译好了,大家可以测试看下效果,接口调用也比较简单,如果需要商用的话可以跟我联系,或者有技术问题想要沟通、交流的也非常欢迎。

如果需要技术问题沟通、技术交流讨论、业务合作也非常欢迎。

联系方式:

vx:unique_no_1

tel:18108010758

相关推荐
starvapour几秒前
Ubuntu系统下基于终端的音频相关命令
linux·ubuntu·音视频
高山流水&上善11 小时前
基于BERT情感分析与多维度可视化的B站热门视频评论分析系统
人工智能·bert·音视频
阿酷tony12 小时前
如何做视频课程的报名观看?实现报名后,才能观看视频?
音视频
福大大架构师每日一题12 小时前
ollama v0.20.0 更新:Gemma 4 全家桶发布,音频、视觉、MoE、BPE 支持全面升级
音视频·ollama
Flamingˢ1 天前
ZYNQ + OV5640 + HDMI 视频系统调试记录:一次 RGB888 与 RGB565 引发的黑屏问题
arm开发·嵌入式硬件·fpga开发·vim·音视频
Flamingˢ1 天前
YNQ + OV5640 视频系统开发(二):OV5640_Data IP 核源码解析
arm开发·嵌入式硬件·网络协议·tcp/ip·fpga开发·vim·音视频
Flamingˢ1 天前
ZYNQ + OV5640 视频系统开发(三):AXI VDMA 帧缓存原理
arm开发·嵌入式硬件·fpga开发·vim·音视频
Hello World . .2 天前
Linux:Linux命令行音视频播放器
linux·音视频
飞翔的SA2 天前
MLX‑VLM :Mac本地跑通多模态大模型的开源项目!让图片、音频、视频理解一键上手
人工智能·python·macos·音视频
愚公搬代码2 天前
【愚公系列】《剪映+DeepSeek+即梦:短视频制作》046-转场:短视频一气呵成的秘密(什么是转场)
人工智能·音视频