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

  • 相关阅读:
    jquery animate()方法 语法
    jquery unload方法 语法
    jquery undelegate()方法 语法
    jquery unbind()方法 语法
    jquery trigger() 方法 语法
    jquery toggle()方法 语法
    jquery change() 函数 语法
    jquery blur()函数 语法
    jquery bind()方法 语法
    jquery checked选择器 语法
  • 原文地址:https://www.cnblogs.com/oucxlw/p/9311326.html
Copyright © 2011-2022 走看看