回声消除

Webrtc回声消除模块在linux上的单独编译

版权声明:本文为博主原创文章,若需转载请注明出处。

本文基于以下链接编写
[1]: http://blog.51cto.com/silversand/166095 回声消除原理
[2]: https://www.cnblogs.com/mod109/p/5827918.html 回声消除在window下的编译
[3]: https://download.csdn.net/download/weixin_42050131/10429863 另一位博主的测试音频下载地址

.

1、 回声消除原理的简单说明

在这里插入图片描述
【图片转自上文链接】

  1. 回声分为声学回声以及线路回声,本文只讨论声学回声(AEC)。

  2. 如上图,男士的语音数据通过网络传输到女士扬声器上,并通过扬声器在空间范围内传播,这时女士通过麦克风向男士对讲:
    1)假设在理想空旷环境中,并且麦克风结构合理,那么男士听到的语音完全为女士的对话。
    2)当周围障碍物较多,比如狭小的空间内,之前男士的语音数据经过墙壁等物体反弹并传至麦克风上,并与女士语音数据混合,那么男士听到的语音则为女士的对话以及混合了男士之前语音数据的一段音频。这时,称这段混合音频中男士语音数据为回声。

  3. 理想而言,如果想要从这段混合音频文件中取出女士对话,只需在信号上从混合音频数据中减去之前男士的语音数据即可,故此我们需要在麦克风录入女士声音的同时,把男士传过来的音频数据记录,以供信号“减法”需要。
    但是实际上,由于原男士语音信号经过反弹衰减最终传至麦克风,这段音频(回音)和之前男士的音频数据并不一致。所以实际中,我们把原始男士音频数据进行一定运算之后才作为“减法”中的相减量,结果也即混合音频减法后只能尽量趋近于原始女士音频而非完全为女士音频。
    .

2、 编译准备

  1. 下载链接2博主所提供的Windows下的源码。
  2. 准备两段pcm音频,一段为近端麦克风音频(混合音频),一段为远端扬声器音频(上文所述男士原音频,也即对比音频)

3、 编译

  1. 由于原博主使用的windows下的编译,所以在Linux下相应的x86编译宏开关要关闭
    同时取消sse , sse2等相关文件的编译。
  2. 本文编译环境较老,所以编译时关闭所有汇编(neon/mips)加速。
    源码已自行修改,编译步骤参见:
    #tar -xf EchoCancellation_webrtc.tar.gz
    #cd WebRtcAudioAllTest/
    #cd WebRtcAudioTest/
    #make
    源码下载地址: https://github.com/GitDolhpin/webrtc_linux_echo_cancellation
    说明:
    如果编译过程中出现如下错误,重新make即可,这是由于*.o文件在制作静态库过程中不同步造成的。
    在这里插入图片描述

4、 测试

    1)由于需要两段音频,所以从文中所述链接中下载相应的WAV音频。
    2)WAV音频转换为pcm音频:
		 	WAV音频与pcm的区别是WAV音频比pcm音频多了44个字节的头,相应去掉即可。
		 	文中所述使用Cool Edit Pro工具转换,转换后pcm格式为16bit位深,8KHz采样率 ,一帧采样持续周期5ms ,单通道
    3)如果已下载文中linux压缩包并编译,其中已有音频文件,直接测试即可:
          mic混合音频 micin.pcm
          扬声器音频  speaker.pcm
          运行       ./webrtc_echo 20   //实测延时20ms时回音消除效果最好
		  处理后的音频为out.pcm ,可以与麦克风音频对比,观察回声消除效果。

使用Cool Edit Pro分析结果

猜你喜欢

转载自blog.csdn.net/lhy090271/article/details/83791308
今日推荐