• 回声消除(Acoustic Echo Cancellation)中遇到的几个常见问题思考


    什么才是好的回声消除效果

      个人的理解:好的回声消除算法,要满足两个条件:一个是回声确实被消除了,另外一个是麦克风采集到音频信号不能被消除,常见的就是人的声音信号。这个算法只是提供了一种方法,具体的产品,要根据产品的外形,使用场景和做参数调试的。同样使用一种算法,笔者对比过市面上不少产品,性能差距的不是一点的大啊。

     

    回声消除的基本流程

      回声消除的流程一般是这样的:获取远端的信号能量信息,获取近端的信号能量信息,两者信号做一个决策,当近端信号的能量大于一定阀值的情况下,默认是需要采集音频信号,这个时候要把回声消除的因子降到最低,同样,当近端信号能量小于一定的阀值的情况下,默认是采集的是回声信号,这个时候要加大回声信号的消除。后面就是使用NLP来估算 最后针对消除回声后的信号,产生默认噪声,让信号听觉上比较舒服一些。

     

    回声消除中的吞音问题

     吞音问题也是回声消除中常见的问题,这个问题产生的根源是参考信号和输入信号的幅值不同导致算法参数不匹配造成的。想要做把这个调试好,需要调试算法的震荡因子和信号的阀值大小。这个问题,笔者也是花费了不少精力做了系统性的研究,具体的要做到什么水平,还要根据产品的场景需求进行细节的优化的。

     

    回声消除中的时延问题

      做回声消除的时候,参考信号一般和录音信号之间有一个时间差的,回声消除就是依靠这个时间差来进行回声消除的,所以,这个时延的计算特别好重要。这个时延,是有三个部分组成的,一个是获取的参考信号到输出的时间,另外一个是空气中传播的时间,还有一个是录入到软件计算的时间。这三个时间,一般是空气中传播的时间最长,其它两个时间的延时稍微在空气中传播的时间加一些时间就行了。严格的就使用时间戳测一下,这个是比较科学的。现在的算法对延时的处理,一般包含两种,一个是需要用户填写的固定延时,另外一个是算法可以自动计算出来的延时。笔者两个 都用过,具体的哪种好坏,这个要和你的使用场景有关系的,要根据你的使用场景做选择的。

     

    回声消除中的远端信号检测机制

      回声消除中一个重要的因子就是对远端参考信号的采集。这里面有两种方法:一种是通过软件直接采集播放的音频数据,作为参考音频。另外一种是把播放的声音通过麦克风采集进来做比对,通过可调电阻,把两个信号的大小调节的误差在一定范围呢。这两种效果,笔者测试出来是第二种的效果好好一些,因为这样可以把参考信号调节的和输入信号幅度差距很小,回声消除的效果自然会很好了。

     

    回声消除问题总结

      回声消除是一个非常古老的课题,也是一个非常难缠的问题。因为,它涉及到的东西非常多,有声学的,有算法,有结构的,还有芯片的。想要把它参数调试好,除了有先进的算法,还需要针对具体的产品做参数调优和系统优化。这条路漫漫啊,一点一滴的死磕吧。

  • 相关阅读:
    SpringMVC源码阅读(一)
    Struts2技术内幕-----第七章
    1118 Lining Up
    1146 ID Codes
    1056 IMMEDIATE DECODABILITY
    1028 Web Navigation
    1045 Bode Plot
    1083 Moving Tables
    并查集路径压缩
    线段树
  • 原文地址:https://www.cnblogs.com/dylancao/p/13301816.html
Copyright © 2020-2023  润新知