自适应滤波是数字信号处理的核心技术之一, 在科学和工业上有着广泛的应用领域. 自适应滤波技术应用广泛, 包括回波抵消, 自适应均衡, 自适应噪声抵消和自适应波束形成. 回声对消是当今通信系统中普遍存在的现象. 声回波引起的信号干扰会分散用户的注意力, 降低通信质量. 本文重点介绍了 LMS 和 NLMS 算法的使用, 以减少这种不必要的回声, 从而提高通信质量
关键词: 自适应滤波器, 自适应算法, 回声消除
当音频信号在真实环境中产生混响时, 就会产生声学回声, 从而导致原始信号加上信号 [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)2\mu 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)+2\mu 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=8:1000
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)]\\ \quad\quad =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=8:1000
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.
来源: https://www.cnblogs.com/LXP-Never/p/11887511.html