speex 回声消除的用法

分类: speex AEC 回声消除 2012-11-13 11:24 1336人阅读 评论(0) 收藏 举报

speex的回声消息

就是speex_echo_cancellation函数的正确用法

回声消息的原理:

对参考声音(解码的对端原始语音包)做延迟(会有多个延迟,如麦克风直接采集到音箱的声音,经墙壁反射后再次采集),衰减,

从声卡里采集到的语音,做一个语音合成。

回声产生的条件:

通话中,有一方使用音箱(或者双方都用音箱)。

在实际中如何使用speex_echo_cancellation这个函数呢?错误的使用,将导致speex无法快速地收敛回声滤波器的参数。

使用音箱的那一方,这里我们称之为"发送方",调用speex_echo_cancellation,

这样做就绕开了网络延迟,引起对算法收敛的干挠。

这是第一点要注意的

(也可以在"接收方"调用speex_echo_cancellation,但网络出现抖动时,就会使算法无法快速收敛,就无法消除回声了)

这样,我们的代码中,大概会是这样的逻辑:

解码网络语音包(记为 play)

写入声卡

采集麦克风的声音(记为rec)

调用speex_echo_cancellation 参play与rec传给这个函数

回想一下,应用层的程序可能会是这样(当然您的程序也可能不是这样,但情形类似):

一个接收线程,收包,放音

一个发送线程,录音,发包

我们自然会在录音线程里调用speex_echo_cancellation

但这有一个问题,录音线程与放音线程因为系统的调度问题,也会造成抖动,导致speex的回声消除算法无法收敛。

以下的一个程序模形,读者们可以参考

1 接收线程A,解码网络语音包,接语音包推入一个消息队列A

2 放音录音线程B,从队列A中取出语音包,放音,录音,录音得到的语音包,通过speex_echo_cancellation处理后,存入队列B

3 发送线程C,从队列B中取语音包,编码,发送

简单地说,就是用一个线程放音,录音,然后echo cancel,这样就不存在线程调度引起的延迟抖动

采用这种方式,就避免了因为线程调度引起的抖动,避免了不确定的延迟对speex算法收敛过程的干挠。

最后一个干挠因素:os提供的录音放音接口也是异步的。。。

这个干挠因素基本在应用层是无法排除的了。。。可能就是几毫秒的误差,但足以干挠回声消除算法了。

多路语音(会议)

选一个超级节点做合成语音,或者终端对语音进行合成,之后,处理就变成与单对单语音通话类似的情形了

直接上speex_echo_cancellation

speex 回声消除的用法的更多相关文章

  1. LMS、NLMS最优步长理论分析与Speex回声消除可能的改进想法

    一.回声消除算法模型 先来分析下自适应回声消除的主要组成部分,大体上可以把回声消除模型分为两个部分 横向滤波器结构 滤波器系数自适应与步长控制 横向滤波器用脉冲响应w(n)[有的地方也称为回声路径]与 ...

  2. Speex回声消除代码分析

    先说明下,这里的代码流程是修改过的Speex流程,但与Speex代码差异不大,应该不影响阅读.   (1)用RemoveDCoffset函数进行去直流 (2)远端信号预加重后放入x[i+frame_s ...

  3. Speex回声消除原理深度解析

    这里假设读者具有自适应滤波器的基础知识.Speex的AEC是以NLMS为基础,用MDF频域实现,最终推导出最优步长估计:残余回声与误差之比.最优步长等于残余回声方差与误差信号方差之比,这个结论可以记下 ...

  4. Speex Acoustic Echo Cancellation (AEC) 回声消除模块的使用

    背景:回声与啸叫的产生  http://blog.csdn.net/u011202336/article/details/9238397 参考资料:  http://www.speex.org/doc ...

  5. speex与webrtc回声消除小结

    回声消除AEC包含:   延时估计对齐+线性自适应滤波器+NLP(双讲检测.处理)+舒适噪声CNG 一.speex aec 1.没有NLP 2.只考虑实时DSP系统,即是没有延时对齐等 3.自适应滤波 ...

  6. Flex Flash Player回声消除的最佳方法

    Adobe Flash Player 已经成为音频和视频播放的非常流行的工具.实际上,目前大多数因特网视频均使用 Flash Player观看. Flash Player 通过将许多技术进行组合可以提 ...

  7. Flex回声消除的最佳方法

    Adobe Flash Player 已经成为音频和视频播放的非常流行的工具.实际上,目前大多数因特网视频均使用 Flash Player观看. Flash Player 通过将许多技术进行组合可以提 ...

  8. 声学回声消除(Acoustic Echo Cancellation)

    回声就是声音信号经过一系列反射之后,又听到了自己讲话的声音,这就是回声.一些回声是必要的,比如剧院里的音乐回声以及延迟时间较短的房间回声:而大多数回声会造成负面影响,比如在有线或者无线通信时重复听到自 ...

  9. 回声消除中的LMS和NLMS算法与MATLAB实现

    自适应滤波是数字信号处理的核心技术之一,在科学和工业上有着广泛的应用领域.自适应滤波技术应用广泛,包括回波抵消.自适应均衡.自适应噪声抵消和自适应波束形成.回声对消是当今通信系统中普遍存在的现象.声回 ...

随机推荐

  1. javascript 学习笔记(权威指南)

    1.数组的sort()方法默认是按照字母排序的,下面举个栗子说明: 1)全是字母: var arr =["zu","fan","an",&q ...

  2. Android 数据库ORM框架GreenDao学习心得及使用总结<二>

    转:http://blog.csdn.net/xushuaic/article/details/24496191 第五篇 查询 查询会返回符合某些特定标准的实体.你可以使用原始的SQL定制查询语句,或 ...

  3. Javascript的数组操作[转]

    1.shift:删除原数组第一项,并返回删除元素的值:如果数组为空则返回undefined var a = [1,2,3,4,5]; var b = a.shift(); // 结果 a:[2,3,4 ...

  4. 我用的php开发环境是appserv一键安装,通过http://localhost测试成功,但是我有点不清楚的就是为什么访问.php文件要在地址栏上加上localhost(即http://localhost/text.php)才能成功访问?

    这类似于一个域名地址. 因为默认localhost 就是指向本机.所以就用这个来访问自己本地的网页.比如你也可以输入 http://127.0.0.1/text.php http://192.168. ...

  5. hdu 5637 Transform 最短路

    题目链接 异或的性质. 求s到t的最少步骤, 等价于求0到s^t的最少步骤. 通过最少的步骤达到s^t的状态, 等价于求0到s^t的最短路. 先将最短路求出来然后O(1)查询. #include &l ...

  6. cocos2d-x -------之笔记篇 环境的安装

    cocos2d-x -------之笔记篇 环境的安装 使用到的工具有VS2010  cygwin android-NDK eclipse android SDK 1.首先是android相关环境的安 ...

  7. java把函数作为参数传递

    public class Tool { public void a()// /方法a { System.out.print("tool.a()..."); } public voi ...

  8. String类的实现,内部采用字符数组实现

    #include <iostream> using namespace std; class String{ public: String(const char *str = NULL); ...

  9. Android的UI两大基石

        说到Android的UI就不得不从一切的开始View开始说.     让我们从Android Developer上的View的Overview和UI Overview来开始吧.     Cla ...

  10. mysql 语句练习

    一.            设有一数据库,包括四个表:学生表(Student).课程表(Course).成绩表(Score)以及教师信息表(Teacher).四个表的结构分别如表1-1的表(一)~表( ...