2?x0x0kx1k?x0kxLk?k??2xxx?xxT1k1kLk?(3.7) R?EXkXk?E?1k0k????????2xLk???xLkx0kxLkx1k??
该方阵即为输入相关矩阵,其中主对角线上的各项是输入信号的诸元素的均方值,其他项则是输入信号元素之间的互相关值。
??根据梯度搜索法的基本思想,若权矢量W在k时刻值记为使均方误差最小,可以从一组初始值
W0Wk,为求得一个权向量
开始,计算此时的梯度值,然后选一个新值W1,
让它等于初值加上一个正比于负梯度负值的增量。下一个新值W2是由计算W1的梯度用同样的方法导出。这个过程重复进行直到最佳权被找到为止。 上述过程表示为:
Wk?1?Wk?????k? (3.8) 式(3-8)中错误!未找到引用源。是步数或迭代次数,参数?是一个控制稳定度与收敛度的常数。可以证明,迭代收敛的充要条件是: 0??? (3.9)
?max1式(4-9)中, ?max 是的最大特征值。
实际应用中,有两个关键问题需要解决:①梯度值无法精确给出;②?上限中的特征值依然是未知的。LMS 算法为这两个问题提供了一条简单的解决途径。LMS 包含两个过程:①滤波过程,包括计算线性滤波器输出对信号输入的响应,通过比较输出结果与期待响应产生估计误差;②自适应过程,根据估计误差自动调整滤波器参数。这两个过程一起工作组成一个反馈环。
ek2在LMS 算法中,简单的取对均衡系数的导数作为梯度的估计值。于是在自适应过程的每次迭代时,其梯度估值具有如下形式:
2??ek???ek?????w??w0???0???k?????2e?????2ekXk(3.10)
2??ek???ek???w???wL????L?
采用这个简单的梯度估值,可以导出一种最速下降法的自适应算法。
??W?2?eX Wk?1?Wk??? kkkk (3.11)通常文献中规定0???
1?max错误!未找到引用源。,但一些较新的文献中推导出为
10
了确保收敛,?的新的范围应该为:
错误!未找到引用源。 (3.12)
实际应用中错误!未找到引用源。通常取一个很小的常数以保证收敛。
3.2 LMS算法实现
LMS 算法以其计算量小、性能稳定、易于实现等优点被广泛应用。 通过上面的讨论可以总结出LMS算法的具体步骤如下:
T步骤l :初始化抽头系数矢量w?n???0,0....?,n?0;
步骤2 :当n=n+1时
计算滤波器输出y?n??wHx?n?, 计算误差函数e?n??d?n??y?n?,
更新滤波器抽头系数矢量w?n??w?n?1????n?e??n?x?n?, 关于上面的LMS算法有以下几点注释:
注释l :若取??n??常数,则称为基本LMS 算法。 注释2 :若取??n??a??xH?n?x?n?,其中a?(0,2),??0,则的到归一化LMS算法。
注释3 :在功率归一化算法中,取
??n??a2?n??x22???,其中?x表示x?n?的方差,可由?x2x?n?1??e2?n?递推计算,这里
??(0,1)为遗忘因子,由02确定,而M是滤波器阶数. M?
注释4 :当期望信号未知时,步骤2中的d(n)可直接用判决器的实际输出d?n?代替。
11
4自适应均衡器在matlab的仿真
4.1matlab介绍
Matlab是一种高精度的科学计算语言,它将计算、可视化和编程结合在一个容易使用的环境,在这个环境,用户可以把提出的问题和解决问题的办法用熟悉的数学符号表示出来,它的典型使用包括:
数学和计算 运算法则 建模与仿真
数据分析、研究和可视化 科学的工程图形
运用程序开发,包括创建图形用户接口。
Matlab是一个交互式系统,它的基本数据单元是数组,这个数组不不要求固定的大小,因此可以让用户解决许多技术上的计算问题,特别是那些含矩阵和矢量运算的问题。Matlab的命令表达与数学、工程中常用的习惯形式十分相似,与C、FORTRAN等高级语言相比,matlab的语法规则更简单、表达更符合工程惯用。
Matlab的最重要的特征是它拥有解决特定运用问题的程序组,也就是TOOLBOX(工具箱),如信号处理工具箱、控制系统工具箱等。
4.2自适应均衡器在matlab中的实现
根据前述给出的自适应均衡器的原理以及LMS 算法,用matlab对LMS 算法自适应均衡器进行了设计以及仿真, 仿真所用的调制信号为正弦函数,具体参数见程序说明程序如下:
g=100; %统计仿真次数为g N=1024; %输入信号抽样点数 k=128; %滤波器阶数
pp=zeros(g,N-k); %将每次独立循环的误差结果存于矩阵pp中,以便后面对其平均 u=0.00026; %滤波器收敛因子 for q=1:g t=1:N; a=1;
s=a*sin(0.05*pi*t); %输入单信号s figure(1); subplot(311)
12
plot(s); %信号s时域波形 title('信号s时域波形'); xlabel('n');
axis([0,N,-a-1,a+1]);
xn=awgn(s,5); %加入均值为零的高斯白噪声 %设置初值
y=zeros(1,N); %输出信号y
y(1:k)=xn(1:k); %将输入信号xn的前k个值作为输出y的前k个值 w=zeros(1,k); %设置抽头加权初值 e=zeros(1,N); %误差信号 %用LMS算法迭代滤波 for i=(k+1):N
XN=xn((i-k+1):(i)); y(i)=w*XN'; e(i)=s(i)-y(i); w=w+u*e(i)*XN;
end
pp(q,:)=(e((k+1):N)).^2; end subplot(312)
plot(xn); %信号s时域波形 title('信号s加噪声后的时域波形'); subplot(313)
plot(y); %信号s时域波形 title('自适应滤波后的输出时域波形'); for b=1:N-k
bi(b)=sum(pp(:,b))/g; %求误差统计平均 end
figure(2); %算法收敛曲线
13