speex回声消除
来源:互联网 发布:防泄密软件dlp 编辑:程序博客网 时间:2024/04/24 15:17
同类产品:
1. speex
2. intel IPP库中的回声消除算法: 仅适用于通用cpu,不开源。据说里面的回声消除算法效果也没有speex好。
3. conatus(深圳市科莱特斯科技(www.conatus-tech.com))貌似网站己经访问不了了。公司己经倒闭了?
4. spririt(俄罗斯)
5. octastic
6. gips(瑞典)
7. fortemedia,美国
ref:
1. 解密回声消除技术之一(理论篇)
2. 解密回声消除技术之二(应用篇)
3. Speex 回声消除
4. Echo Cancellation Demystified by Alexey Frunze (介绍的算法与speex不同,但原理适用)(作者是spririt工程师,当然现在己经跳槽了。)点击打开链接
使用方法 (according the its user manual)(old, before 1.2 b2)
1. include <speex/speex_echo.h>
2. 创建一个echo_state:
SpeexEchoState *echo_state = speex_echo_state_init(frame_size, filter_length);
frame_size是每次处理的数据大小。filter_length也称tail_length,自适应滤波器长度。推荐的长度大概的回声时延的3分之一. 遗留问题:filter_length还需要根据场景调整吗?
3. 将数据fed给AEC
speex_echo_cancellation(echo_state, input_frame, echo_frame, output_frame);
当本地没说话,只有对端放音的时候,AEC比较容易收敛。当本地语音合入会,对AEC的运行己经产生了干扰。
4. 为进一步提高性能,可以在初始化阶段将AEC与预处理算法关联起来。
speex_preprocess_ctl(preprocess_state, SPEEX_PREPROCESS_SET_ECHO_STATE,echo_state);
但这个对于非speex的codec是否起作用呢?
5. AEC可以被销毁与重置
speex_echo_state_destroy(echo_state);
speex_echo_state_reset(echo_state);
新使用方法(1.2 beta2)
1. 每次放音时,调用speex_echo_playback(echo_state, echo_frame);
每次收音时,调用speex_echo_capture(echo_state, input_frame, output_frame);
这样就不需要自己来维持input_frame与echo_frame的对应关系了。但当可以保证input_frame与echo_frame的实时性的场景,估计是第一种方法还更好一些。
注意事项
1. 收发必须严格同步。
2. 收发时延尽量的小。
3. filter_length并非越长越好。过长可能导致难以收敛,AEC不起作用。
4. speex使用的是线性自适应滤波器,对于非线性失真引入的信号畸变抵抗力差,因此应该尽量避免saturation/clipping.
工具
从1.2 b2开始,随源代码提供了一个octave工具w echo_diagnostic.m。需要在编译时,定义宏DUMP_ECHO_CANCEL_DATA,这样speex AEC会将过程中的ne/fe/output数据记录在log里s (aec_rec.sw aec_play.sw and aec_out.sw)。然后在octave中执行
echo_diagnostic(’aec_rec.sw’, ’aec_play.sw’, ’aec_diagnostic.sw’, 1024); // 1024 is the filter_length that can be changed.
即可对算法性能进行诊断。
算法实现
to be continued.
- Speex 回声消除
- Speex 之回声消除
- speex回声消除
- Speex 回声消除
- Speex回声消除器
- speex 回声消除
- speex 回声消除(2)
- speex回声消除功能测试
- speex 回声消除的用法
- speex 回声消除的用法
- Speex 回声消除接口介绍
- Speex回声消除代码分析
- Speex回声消除代码分析
- speex 回声消除(1)
- Android移植Speex回声消除
- Speex 回声消除流程分析
- Speex回声消除原理解析
- 基于Speex的声学回声消除
- opencv安装方法
- SQLAlchemy: 基于python的SQL Expression Language (O/R Mapping)
- 置顶
- LeetCode 题解(6):Spiral Matrix
- SQLAlchemy: 使用model类操作数据
- speex回声消除
- 干货!你想知道的关于 javascript scope 的一切
- lu脚本开始支持安卓(android)手机平台
- GNC保健品
- [互动百科]发烧
- 四頌 天地日月之變化
- 根据出生日期计算年龄
- 阴谋论的四个特征
- EBS OAF开发中的错误/异常处理(ErrorHandling)