zoukankan      html  css  js  c++  java
  • WebRTC回声消除(2)

    WebRTC的回声抵消算法(AEC,AECM)有以下几个重要的模块:

    1.回声延时估计

    2.NLMS

    3.NLP

    4.CNG

    5.双端检测(DT)

    下面分别介绍:

    (1)回声延时估计

     回声延时长短:基于相关的时延估计算法(其中:基于语音信号自相关求基音周期):回声抵消场所,延时搜索范围较大。

    webrtc的回声时延估计,它采用的是gips首席科学家Bastiaan的算法

    (2)NLMS(归一化均方最小自适应算法)

    LMS/NLMS/AP/RLS等都是经典的自适应滤波算法,

    webrtc中使用的NLMS算法做简略介绍:

    设远端信号为x(n),近段信号为d(n),W(n)是权重,则误差信号e(n)=d(n)-w'(n)x(n)  (此处‘表示转秩),

    NLMS对滤波器的系数更新使用变步长方法,

    即步长u=u0/(gamma+x'(n)*x(n));其中u0为更新步长因 子,gamma是稳定因子,

    则滤波器系数更新方程为 W(n+1)=W(n)+u*e(n)*x(n);  

    NLMS比传统LMS算法复杂度略高,但收敛速度明显加快。LMS/NLMS性能差于AP和RLS算法。

    另外值得一提的是webrtc使用了分段块频域自适应滤波(PBFDAF)算法,这也是自适应滤波器的常用算法。自适应滤波的更多资料可以参考simon haykin 的《自适应滤波器原理》。

    (3)NLP(非线性滤波)

    webrtc采用了维纳滤波器。

    设估计的语音信号的功率谱为Ps(w),噪声信号的功率谱为Pn(w),

    则滤波器的传递函数为: H(w)=Ps(w)/(Ps(w)+Pn(w))。

    (4)CNG(舒适噪声产生)

    webrtc采用的舒适噪声生成器比较简单,首先生成在[0 ,1 ]上均匀分布的随机噪声矩阵,

    再用噪声的功率谱开方后去调制噪声的幅度。

    由于工作需要,最近一直在研究WebRTC里的AEC算法。根据源码里面的fullaec.m文件,总体来说,我认为该AEC算法是属于分段快频域自适应滤波算法,Partioned block frequeney domain adaPtive filter(PBFDAF)。具体可以参考Paez Borrallo J M and Otero M G

    使用该AEC算法要注意两点:

    1)延时要小,因为算法默认滤波器长度是分为12块,每块64点,按照8000采样率,也就是12*8ms=96ms的数据,而且超过这个长度是处理不了的。

    2)延时抖动要小,因为算法是默认10块也计算一次参考数据的位置(即滤波器能量最大的那一块),所以如果抖动很大的话找参考数据时不准确的,这样回声就消除不掉了。

    转自:http://www.cnblogs.com/mod109/p/5829470.html

  • 相关阅读:
    03 Java 修饰符
    04_Java 循环结构 for, while 及 do...while
    01_Java第一个程序_报错记录
    07_Java StringBuffer 和 StringBuilder 类_(修改,并且不产生新的未使用对象)
    06_Math 的 floor,round 和 ceil 方法实例比较_格式化字符串_String类
    [爱偷懒的程序员系列]Section 1. “懒”是一切需求的根源
    (1)Micropython+ESP32 点亮一个LED
    数据迁移测试方法【转】
    回来了回来了,失踪人口回归
    [爱偷懒的程序员系列]Section 4. 自定义钉钉消息推送
  • 原文地址:https://www.cnblogs.com/oucxlw/p/9311326.html
Copyright © 2011-2022 走看看