• 回声消除中的LMS和NLMS算法与MATLAB实现


      自适应滤波是数字信号处理的核心技术之一,在科学和工业上有着广泛的应用领域。自适应滤波技术应用广泛,包括回波抵消、自适应均衡、自适应噪声抵消和自适应波束形成。回声对消是当今通信系统中普遍存在的现象。声回波引起的信号干扰会分散用户的注意力,降低通信质量。本文重点介绍了LMS和NLMS算法的使用,以减少这种不必要的回声,从而提高通信质量

    关键词:自适应滤波器,自适应算法,回声消除

    1  引言

      当音频信号在真实环境中产生混响时,就会产生声学回声,从而导致原始信号加上信号[1]的衰减、延时图像。本文将重点研究通信系统中声学回波的产生。

      自适应滤波器是一种动态滤波器,它不断地改变其特性以获得最优的输出。自适应滤波算法通过改变参数使期望输出d (n)与实际输出y (n)之间的差值最小化。该函数称为自适应算法的代价函数(loss)。图1显示了自适应回声抵消系统的框图。其中,滤波器H(n)表示声环境的脉冲响应,W(n)表示用来抵消回波信号的自适应滤波器。自适应滤波器的目标是使输出的y(n)与期望的d(n)(在回声环境中混响的信号)相等。在每次迭代中,误差信号e(n)=d (n)-y (n)被反馈回滤波器,滤波器的特性也随之改变。

    自适应回声消除系统

      自适应滤波器的目标是计算期望信号与自适应滤波器输出之间的差值e(n)。该误差信号反馈到自适应滤波器,并通过算法改变其系数,以最小化该差值的函数,即代价函数。在声回波消除的情况下,自适应滤波器的最优输出与不需要的回波信号等值。当自适应滤波器输出等于期望信号时,误差信号为零。在这种情况下,回显信号将被完全取消,远用户将不会听到他们的任何原始语音返回给他们。

    2. 最小均方(LMS)算法

      最小均方(LMS)算法是由Widrow和Hoff在1959年通过对模式识别的研究首次提出的。由此成为自适应滤波中应用最广泛的算法之一。LMS算法是一种基于随机梯度的自适应滤波算法,它利用滤波器权重的梯度来收敛到最优的维纳解[2-4]。由于其计算简单而广为人知并被广泛使用。正是这种简单性使它成为判断所有其他自适应滤波算法的基准。

      随着LMS算法的每次迭代,自适应滤波器的滤波抽头(tap)权值按照如下公式进行更新。

    $$公式1:w(n+1)=w(n)2mu e(n)x(n)$$

      这里x(n)是延时输入值的输入向量,$x(n)=[x_1(n)x_2(n)...x_N(n)]^T=[x(n)x(n-1)...x(n-N+1)]^T$。向量$w(n)=[w_0(n)w_1(n)w_2(n)...w_{N-1}(n)]^T$代表自适应FIR滤波器抽头(tap)权向量在时刻n的系数。参数μ被称为步长参数和小正的常数。此步长参数控制更新因子的影响。μ必须选择一个合适的值LMS算法的性能,如果该值太小自适应滤波器的收敛时间会太长;如果μ太大自适应滤波器变得不稳定,导致其输出发散[5 - 8]

    2.1 LMS算法的实现

    LMS算法的每次迭代都需要三个不同的步骤,顺序如下:

    1. FIR滤波器的输出y(n)用公式2计算。

    $$公式2:y(n)=sum_{i=0}^{N-1}w(n)x(n-1)=w^T(n)x(n)$$

    2. 误差估计的值按公式3计算。

    $$公式3:e(n)=d(n)-y(n)$$

    3.更新FIR向量的抽头tap权值,为下一次迭代做准备,如公式4所示。

    $$公式4:w(n+1)=w(n)+2mu e(n)x(n)$$

      LMS算法在自适应滤波中得到广泛应用的主要原因是其计算简单,比其他常用的自适应算法更易于实现。LMS算法每次迭代需要2N加法和2N + 1次乘法(N用于计算输出y(N)),另一个用于通过向量乘法计算标量[9]

    clear;
    clc;
    snr=20;     % 信噪比
    order=8;    % 自适应滤波器的阶数为8
    Hn =[0.8783 -0.5806 0.6537 -0.3223 0.6577 -0.0582 0.2895 -0.2710 0.1278 ...     % ...表示换行的意思
        -0.1508 0.0238 -0.1814 0.2519 -0.0396 0.0423 -0.0152 0.1664 -0.0245 ...
        0.1463 -0.0770 0.1304 -0.0148 0.0054 -0.0381 0.0374 -0.0329 0.0313 ...
        -0.0253 0.0552 -0.0369 0.0479 -0.0073 0.0305 -0.0138 0.0152 -0.0012 ...
        0.0154 -0.0092 0.0177 -0.0161 0.0070 -0.0042 0.0051 -0.0131 0.0059 ...
        -0.0041 0.0077 -0.0034 0.0074 -0.0014 0.0025 -0.0056 0.0028 -0.0005 ...
        0.0033 -0.0000 0.0022 -0.0032 0.0012 -0.0020 0.0017 -0.0022 0.0004 -0.0011 0 0];
    Hn=Hn(1:order);
    mu=0.5;             % mu表示步长
    N=1000;             % 横坐标1000个采样点
    Loop=150;           % 150次循环
    EE_NLMS=zeros(N,1); % 不同步长的初始化误差
    for nn=1:Loop       % epoch=150
        % 权重初始化w
        win_NLMS=zeros(1,order);         % NLMS四种步长测试,四个权重——1
        error_NLMS=zeros(1,N)';     % 初始化误差
        % 均匀分布的输入值
        r=sign(rand(N,1)-0.5);          % shape=(1000,1)的(0,1)均匀分布-0.5,sign(n)>0=1;<0=-1
        % 输出:输入卷积Hn得到 输出
        output=conv(r,Hn);              % r卷积Hn,output长度=length(u)+length(v)-1
        output=awgn(output,snr,'measured');     % 将白高斯噪声添加到信号中
    
        % N=1000,每个采样点
        for i=order:N         % i=81000
          input=r(i:-1:i-order+1);  % 每次迭代取8个数据进行处理
          e_NLMS = output(i)-win_NLMS*input;
          win_NLMS=win_NLMS+e_NLMS*input'/(input'*input);   % NLMS更新权重
          error_NLMS(i)=error_NLMS(i)+e_NLMS^2;
        end
        
        EE_NLMS=EE_NLMS+error_NLMS;     % 把总误差相加
    end
    % 对总误差求平均值
    error_NLMS=EE_NLMS/Loop;
    
    figure;
    error_NLMS=10*log10(error_NLMS(order:N));
    plot(error_NLMS,'r');       % 红色
    axis tight;                 % 使用紧凑的坐标轴
    legend('NLMS算法');           % 图例
    title('NLMS算法误差曲线');     % 图标题
    xlabel('样本');                     % x轴标签
    ylabel('误差/dB');                  % y轴标签
    grid on;                            % 网格线

    3 归一化最小均方(NLMS)算法

      LMS算法的主要缺点之一是每次迭代都有一个固定的步长参数。这需要在开始自适应滤波操作之前了解输入信号的统计信息。实际上,这是很难实现的。即使我们假设自适应回声抵消系统的唯一输入信号是语音,但仍有许多因素如信号输入功率和振幅会影响其性能[10-12]

      归一化最小均方算法(NLMS)是LMS算法的扩展,LMS算法通过计算最大步长值来绕过这个问题。步长值的计算公式如下

    $$Step size = frac{1}{dot product(input vector, input vector)}$$

    这个步长与输入向量x(n)的系数的瞬时值的总期望能量的倒数成正比。输入样本的期望能量之和也等于输入向量与自身的点积,以及输入向量自相关矩阵的迹R[13-15]。

    $$公式5:tr[R]=sum_{i=0}^{N-1}E[x^2(n-i)]\ quadquad =E[sum_{i=0}^{N-1}x^2(n-i)]$$

    NLMS算法的递归公式如式6所示

    $$公式6:w(n+1)=w(n)+frac{1}{x^T(n)x(n)}e(n)x(n)$$

    3.1 NLMS算法的实现

      NLMS算法已在Matlab中实现。由于步长参数是根据当前的输入值来选择的,因此NLMS算法在未知信号下具有更大的稳定性。该算法具有良好的收敛速度和相对简单的计算能力,是实时自适应回波抵消系统[16]的理想算法

      由于NLMS是标准LMS算法的扩展,因此NLMS算法的实际实现与LMS算法非常相似。NLMS算法的每次迭代都需要按照以下顺序执行这些步骤。

    1. 计算了自适应滤波器的输出

    $$公式7:y(n)=sum_{i=0}^{N-1}w(n)x(n-i)=w^T(n)x(n)$$

    2. 误差信号等于期望信号和滤波器输出之间的差值。

    $$公式8:e(n)=d(n)-y(n)$$

    3.计算了输入向量的步长值。

    $$公式9:mu(n)=frac{1}{x^T(n)x(n)}$$

    4. 滤波器抽头权重更新,为下一次迭代做准备。

    $$公式10:w(n+1)=w(n)+mu(n)e(n)x(n)$$

    NLMS算法的每次迭代都需要3N+1次乘法,仅比标准LMS算法多N次。考虑到所获得的稳定性和回波衰减增益,这是一个可接受的增加。

    clear;
    clc;
    snr=20;     % 信噪比
    order=8;    % 自适应滤波器的阶数为8
    % Hn是滤波器权重
    Hn =[0.8783 -0.5806 0.6537 -0.3223 0.6577 -0.0582 0.2895 -0.2710 0.1278 ...     % ...表示换行的意思
        -0.1508 0.0238 -0.1814 0.2519 -0.0396 0.0423 -0.0152 0.1664 -0.0245 ...
        0.1463 -0.0770 0.1304 -0.0148 0.0054 -0.0381 0.0374 -0.0329 0.0313 ...
        -0.0253 0.0552 -0.0369 0.0479 -0.0073 0.0305 -0.0138 0.0152 -0.0012 ...
        0.0154 -0.0092 0.0177 -0.0161 0.0070 -0.0042 0.0051 -0.0131 0.0059 ...
        -0.0041 0.0077 -0.0034 0.0074 -0.0014 0.0025 -0.0056 0.0028 -0.0005 ...
        0.0033 -0.0000 0.0022 -0.0032 0.0012 -0.0020 0.0017 -0.0022 0.0004 -0.0011 0 0];
    Hn=Hn(1:order);
    mu=0.5;             % mu表示步长
    N=1000;             % 横坐标1000个采样点
    Loop=150;           % 150次循环
    % 不同步长的初始化误差
    EE_LMS = zeros(N,1);
    EE_NLMS=zeros(N,1);
    for nn=1:Loop       % epoch=150
        win_LMS = zeros(1,order);   % 权重初始化w
        error_LMS=zeros(1,N)';      % 初始化误差
        % 均匀分布的语音数据输入
        r=sign(rand(N,1)-0.5);          % shape=(1000,1)的(0,1)均匀分布-0.5,sign(n)>0=1;<0=-1
        % 输出:输入卷积Hn得到 输出
        output=conv(r,Hn);              % r卷积Hn,output长度=length(u)+length(v)-1
        output=awgn(output,snr,'measured');     % 真实输出=将白高斯噪声添加到信号中
    
        % N=1000,每个采样点
        for i=order:N         % i=81000
          input=r(i:-1:i-order+1);  % 每次迭代取8个数据进行处理
          e_LMS = output(i)-win_LMS*input;
          
          mu=0.02;      % 步长
          win_LMS = win_LMS+2*mu*e_LMS*input';
          error_LMS(i)=error_LMS(i)+e_LMS^2;
        end
        % 把总误差相加
        EE_LMS = EE_LMS+error_LMS;
    
    end
    % 对总误差求平均值
    error_LMS = EE_LMS/Loop;
    
    figure;
    error1_LMS=10*log10(error_LMS(order:N));
    plot(error1_LMS,'b.');  % 蓝色
    axis tight;         % 使用紧凑的坐标轴
    legend('LMS算法');       % 图例
    title('LMS算法误差曲线');  % 图标题
    xlabel('样本');                     % x轴标签
    ylabel('误差/dB');                  % y轴标签
    grid on;                            % 网格线

    4 LMS算法的结果

      利用Matlab对LMS算法进行了仿真。图2显示的是通过麦克风从计算机系统收集到的输入语音信号。图3显示了从输入信号派生出的所需回波信号。图4显示了自适应滤波器的输出,它将减少输入信号的回波信号。图5显示了由滤波器输出信号计算出的均方误差信号。图6是由回波信号对误差信号的分割得到的衰减。

      自适应滤波器为1025阶FIR滤波器。步长设置为0.02。MSE表明,随着算法的发展,代价函数的平均值逐渐减小。

    5 NLMS算法的结果

      用Matlab对NLMS算法进行了仿真。图7显示了输入信号。图8显示了所需的信号。图9显示了自适应滤波器输出。图10显示了均方误差。图11显示了衰减。

      自适应滤波器为1025阶FIR滤波器。步长设置为0.1。

     

     NLMS算法在均方误差和平均衰减方面优于LMS算法,其性能总结如表1所示。

     

    6 结论

      由于其简单性,LMS算法是最流行的自适应算法。然而,LMS算法存在收敛速度慢和数据依赖的问题。

      NLMS算法是LMS算法的一个同样简单但更健壮的变体,它在简单性和性能之间表现出比LMS算法更好的平衡。由于其良好的性能,NLMS在实时应用中得到了广泛的应用。

    7. 参考

    文章翻译自论文《2011_adaptive algorithms for acoustic echo cancellation in speech processing》

    [1]. Homana, I.; Topa, M.D.; Kirei, B.S.; “Echo cancelling using adaptive algorithms”, Design and Technology of Electronics Packages, (SIITME) 15th International Symposium., pp. 317-321, Sept.2009.

    [2]. Paleologu, C.; Benesty, J.; Grant, S.L.; Osterwise, C.; “Variable step-size NLMS algorithms for echo cancellation” 2009 Conference Record of the forty-third Asilomar Conference on Signals, Systems and Computers., pp. 633-637, Nov 2009.

    [3]. Soria, E.; Calpe, J.; Chambers, J.; Martinez, M.; Camps, G.; Guerrero, J.D.M.; “A novel approach to introducing adaptive filters based on the LMS algorithm and its variants”, IEEE Transactions, vol. 47, pp. 127-133, Feb 2008.

    [4]. Tandon, A.; Ahmad, M.O.; Swamy, M.N.S.; “An efficient, low-complexity, normalized LMS algorithm for echo cancellation”, IEEE workshop on Circuits and Systems, 2004. NEWCAS 2004, pp. 161-164, June 2004.

    [5]. Eneman, K.; Moonen, M.; “Iterated partitioned block frequency-domain adaptive filtering for acoustic echo cancellation,” IEEE Transactions on Speech and Audio Processing, vol. 11, pp. 143-158, March 2003.

    [6]. Krishna, E.H.; Raghuram, M.; Madhav, K.V; Reddy, K.A; “Acoustic echo cancellation using a computationally efficient transform domain LMS adaptive filter,” 2010 10th International Conference on Information sciences signal processing and their applications (ISSPA), pp. 409-412, May 2010.

    [7]. Lee, K.A.; Gan,W.S; “Improving convergence of the NLMS algorithm using constrained subband updates,” Signal Processing Letters IEEE, vol. 11, pp. 736-739, Sept. 2004.

    [8]. S.C. Douglas, “Adaptive Filters Employing Partial Updates,” IEEE Trans.Circuits SYS.II, vol. 44, pp. 209-216, Mar 1997.

    [9]. D.L. Duttweiler, “Proportionate Normalized Least Mean Square Adaptation in Echo Cancellers,” IEEE Trans. Speech Audio Processing, vol. 8, pp. 508-518, Sept. 2000.

    [10]. E. Soria, J. Calpe, J. Guerrero, M. Martínez, and J. Espí, “An easy demonstration of the optimum value of the adaptation constant in the LMS algorithm,” IEEE Trans. Educ., vol. 41, pp. 83, Feb. 1998.

    [11]. D. Morgan and S. Kratzer, “On a class of computationally efficient rapidly converging, generalized NLMS algorithms,” IEEE Signal Processing Lett., vol. 3, pp. 245–247, Aug. 1996.

    [12]. G. Egelmeers, P. Sommen, and J. de Boer, “Realization of an acoustic echo canceller on a single DSP,” in Proc. Eur. Signal Processing Conf. (EUSIPCO96), Trieste, Italy, pp. 33–36, Sept. 1996.

    [13]. J. Shynk, “Frequency-domain and multirate adaptive filtering,” IEEE Signal Processing Mag., vol. 9, pp. 15– 37, Jan. 1992.

    [14]. Ahmed I. Sulyman and Azzedine Zerguine, "Echo Cancellation Using a Variable Step-Size NLMS Algorithm", Electrical and Computer Engineering Department Queen's University.

    [15]. D. L. Duttweiler, “A twelve-channel digital echo canceller,” IEEE Trans. Commun., vol. 26, no. 5, pp. 647–653, May 1978.

    [16]. J. Benesty, H. Rey, L. Rey Vega, and S. Tressens, “A nonparametric VSS NLMS algorithm,” IEEE Signal Process. Lett., vol. 13, pp. 581–584, Oct. 2006.

  • 相关阅读:
    SDN第二次作业
    事后诸葛亮
    SDN第一次上机作业
    个人作业——软件产品案例分析
    SDN第一次作业
    Alpha冲刺总结报告
    Alpha冲刺Day10
    Alpha冲刺Day9
    Alpha冲刺Day8
    Alpha冲刺Day7
  • 原文地址:https://www.cnblogs.com/LXP-Never/p/11887511.html
Copyright © 2020-2023  润新知