speex 回声消除的用法【转】

转载 2016年08月30日 16:51:32

来自:http://blog.csdn.net/lsccsl/article/details/8126338

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

实践linux, alsa下的speex 回声消除

前几天搞过win32下的speex AEC (http://blog.csdn.net/sunkwei/archive/2011/05/18/6429096.aspx), 很复杂, 今天尝试搞搞 al...
  • sunkwei
  • sunkwei
  • 2011年05月26日 15:40
  • 6661

Speex 回声消除

为什么需要声学回声消除呢?在一般的VOIP软件或视频会议系统中,假设我们只有A和B两个人在通话,首先,A的声音传给B,B然后用喇叭放出来,而这时B的MIC呢则会采集到喇叭放出来的声音,然后传回给A,如...
  • liulina603
  • liulina603
  • 2014年02月17日 21:08
  • 15870

基于Speex的声学回声消除

所谓声学回声消除,是为了解决VoIP(网络电话)中这样一个问题:即A与B进行通话,A端有麦克风和扬声器分别用来采集A的声音和播放B的声音,B端有麦克风和扬声器分别用来采集B的声音和播放A的声音,很明显...
  • YJJat1989
  • YJJat1989
  • 2014年02月26日 15:40
  • 6730

android 利用speex 音频降噪,回声消除demo

  • 2017年11月29日 17:54
  • 1.03MB
  • 下载

speex与webrtc回声消除小结

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

speex回声消除

同类产品: 1. speex 2. intel IPP库中的回声消除算法: 仅适用于通用cpu,不开源。据说里面的回声消除算法效果也没有speex好。 3. conatus(深圳市科莱特斯科技(ww...
  • u013249042
  • u013249042
  • 2014年01月25日 06:44
  • 2447

speex回声消除功能测试

本文博客链接:http://blog.csdn.net/jdh99,作者:jdh,转载请注明. 今天测试了speex中带回声消除模块,效果还可以。 测试环境:网络双工通话,16K采样16位编码...
  • jdh99
  • jdh99
  • 2011年08月07日 15:15
  • 12459

语音自适应回声消除(AEC)算法

自适应回声消除算法欢迎留言交流AEC算法早期用在Voip,电话这些场景中,自从智能设备诞生后,智能语音设备也要消除自身的音源,这些音源包括音乐或者TTS机器合成声音。本文基于开源算法阐述AEC的原理和...
  • shichaog
  • shichaog
  • 2017年05月04日 11:17
  • 7702

speex aec回升消除效果测试

speex aec回声消除效果测试 本次测试以采样率44100,帧长882,对应时长为20ms(speex推荐时长为20ms) 麦克风采集的PCM波形图: 远端传输来用来播放的PCM波形图: ...
  • hongdameng
  • hongdameng
  • 2016年11月29日 15:25
  • 900

Android上用speex做回音消除

1. 问题     我们在做语音实时对讲的时候往往会碰到一个瓶颈,这个瓶颈就是在不戴耳机的情况下会有很大的回音,本文就讨论如何解决。 2.解决方式:     (1)其实有做了同一时间只有一端能够说或者...
  • yuyan19850204
  • yuyan19850204
  • 2013年10月17日 11:53
  • 4485
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:speex 回声消除的用法【转】
举报原因:
原因补充:

(最多只允许输入30个字)