1. 回声消除算法原理
回声的机理,为声音在对方通过播放设备播放出来,同时被采集设备采集进去,并传到自己的耳边。自己能够听到自己的声音传过来,即是回声。
2. 算法要求:
speex回声消除算法的实现,对系统的同步要求非常高。并且windows系统、安卓系统都是多线程系统,播放数据的线程和采集数据的线程需要严格同步。其中一个受到系统干扰,将会大大影响回声消除的效果,因此平台的音频播放与采集需要重新设计,才能做到更好的回声消除效果。
3. 算法难点:
speex回声消除算法除了对系统要求非常高之外,全双工通信也是难点之一。全双工通信,即能够消除单工回声的同时,本端语音不能被抑制。
4. 算法接口介绍
int speex_echo_state_init_mc(SpeexEchoState **echoInst, int frame_size, int filter_length, int nb_mic, int nb_speakers);
frame_size:一次处理的数据长度(最好10ms)
filter_length:回声路径长度(根据需求而设)
void speex_echo_cancel(SpeexEchoState *st, const spx_int16_t *rec, const spx_int16_t *play, spx_int16_t *out, spx_int32_t *Yout);
rec:mic采集的数据
play:播放设备播放的数据
void speex_echo_state_destroy(SpeexEchoState *st);
算法的销毁。
5. 通过深入的研究与反复的测试,speex的回声消除已经成功应用的多个平台上(pc、dsp、arm),能够很好的消除回声,并且保证非常好的全双工通信效果。
6. 目前成功案例中有高端的视频会议系统、voip、对讲机等解决方案,需要查看实际的数据效果,且有商业需求或技术交流,请联系:
QQ:1376524494
手机:15868194967
(此文章原创,如发现有不经同意转摘,笔者将会追究一定的法律责任)
原文:http://www.cnblogs.com/audio-signal/p/aec.html