clc
m=500%将输入量赋值
u=0.002%将输入量赋值
a1=-1.6a2=0.8
w1(1)=0w2(1)=0
w1(2)=0w2(2)=0
n(1)=1n(2)=2
%%%%%%%%
% true sequence x(n)
rd=randn(1,m)
x(1)=rd(1)x(2)=rd(2)
for k=3:m
x(k)=rd(k)-a1*x(k-1)-a2*x(k-2)
end
R=[x(1)*x(1) 00 0]
T=0
e(1)=0
W=[01]
X=[x(2)x(1)]
e(2)=x(2)-W'*X
%%%%%%%%%%
for i=3:1:m %权系数迭代m次
R=[x(i-1)*x(i-1) x(i-1)*x(i-2)x(i-1)*x(i-2) x(i-2)*x(i-2)]%列出自相关矩阵
T=1/(T+trace(R))%求出迹的值,为后续u的判断做准备
if(u>T)
error('u is larger than 1/t[R]')%判断u的值是否小于迹的倒数
end
W=W+2*u*X*e(i-1) %LMS算法的权系数迭代公式
X=[x(i-1) x(i-2)]' %LMS算法中输入信号矢量的递推
e(i)=x(i)-W'*X
w1(i)=-W(1) %LMS算法中权系数a1的提取
n(i)=i
end
lambda=eig(R)%由R得出特征值
v=[11]%给主轴坐标赋初值
for n1=1:50
w(n1)=v(1)*v(1)*lambda(1)*((1-2*u*lambda(1))^(2*n1))+v(2)*v(2)*lambda(2)*((1-2*u*lambda(2))^(2*n1))%学习曲线的迭代公式
end
figure(1)
plot(w1,'r-') %曲线绘图
%title('LMS算法权值收敛情况')
xlabel('迭代次数')
ylabel('权值变化')
grid on
hold on
% m=500%权系数迭代m次
len=0.98%%%%遗忘因子
% a1=-1.6a2=0.8
% w1(1)=1
% w2(1)=1
% w1(2)=1
% w2(2)=2
% n(1)=1
% n(2)=2
% %%%%%%%%%%%输入序列产生%%%%%%%%%%%%
% rd=randn(1,m)% 生成白噪声序列
% x(1)=rd(1)x(2)=rd(2)%产生前两个输入序列
% for k=3:m
% x(k)=rd(k)-a1*x(k-1)-a2*x(k-2)%产生其余输入序列
% end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
R=[0,00,0]%自相关矩阵初值R(-1)=0
W=[w1(2)w2(2)] %初始权值
P=[00]
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
for i=3:1:m
X=[x(i-1),x(i-2)]'
R= len*R+ X*X'%迭代公式中自相关矩阵的计算
e=x(i)-W'*X%输出信号误差e(n\n-1)
W=W+inv(R)*X*e %RLS算法的权系数迭代公式
w1(i)=-W(1) %RLS算法中权系数a1的提取
w2(i)=-W(2) %RLS算法中权系数a2的提取
n(i)=i
end
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
plot(w1,'b-') %曲线绘图
title('自适应权系数a1(n)的过渡过程(RLS和LMS算法比较)')
xlabel('迭代次数')
ylabel('权值变化')
legend('LMS','RLS')
grid on
hold off
for k=3:m
y(k)=x(k)+w1(k)*x(k-1)+w2(k)*x(k-2)
end
figure(2)
hold on
plot(x,'b-') %曲线绘图
grid on
plot(y,'r-')
title('RLS滤波效果')
xlabel('迭代次数')
ylabel('输入及输出值')
legend('噪音','滤波器输出')
hold off
% RLS算法randn('seed', 0)
rand('seed', 0)
NoOfData = 8000 % Set no of data points used for training
Order = 32 % 自适应滤波权数
Lambda = 0.98 % 遗忘因子
Delta = 0.001 % 相关矩阵R的初始化
x = randn(NoOfData, 1) %高斯随机系列
h = rand(Order, 1) % 系统随机抽样
d = filter(h, 1, x) % 期望输出
% RLS算法的初始化
P = Delta * eye ( Order, Order ) %相关矩阵
w = zeros ( Order, 1 ) %滤波系数矢量的初始化
% RLS Adaptation
for n = Order : NoOfData
u = x(n:-1:n-Order+1) %延时函数
pi_ = u' * P %互相关函数
k = Lambda + pi_ * u
K = pi_'/k%增益矢量
e(n) = d(n) - w' * u %误差函数
w = w + K * e(n) %递归公式
PPrime = K * pi_
P = ( P - PPrime ) / Lambda %误差相关矩阵
w_err(n) = norm(h - w) %真实估计误差
end
% 作图表示结果
figure
plot(20*log10(abs(e))) %| e |的误差曲线
title('学习曲线')
xlabel('迭代次数')
ylabel('输出误差估计')
figure
semilogy(w_err) %作实际估计误差图
title('矢量估计误差')
xlabel('迭代次数')
ylabel('误差权矢量')
%lms 算法
clear all
close all
hold off%系统信道权数
sysorder = 5 %抽头数
N=1000%总采样次数
inp = randn(N,1)%产生高斯随机系列
n = randn(N,1)
[b,a] = butter(2,0.25)
Gz = tf(b,a,-1)%逆变换函数
h= [0.09760.28730.33600.22100.0964]%信道特性向量
y = lsim(Gz,inp)%加入噪声
n = n * std(y)/(10*std(n))%噪声信号
d = y + n%期望输出信号
totallength=size(d,1)%步长
N=60 %60节点作为训练序列
%算法的开始
w = zeros ( sysorder , 1 ) %初始化
for n = sysorder : N
u = inp(n:-1:n-sysorder+1) % u的矩阵
y(n)= w' * u%系统输出
e(n) = d(n) - y(n) %误差
if n <20
mu=0.32
else
mu=0.15
end
w = w + mu * u * e(n) %迭代方程
end
%检验结果
for n = N+1 : totallength
u = inp(n:-1:n-sysorder+1)
y(n) = w' * u
e(n) = d(n) - y(n) %误差
end
hold on
plot(d)
plot(y,'r')
title('系统输出')
xlabel('样本')
ylabel('实际输出')
figure
semilogy((abs(e))) % e的绝对值坐标
title('误差曲线')
xlabel('样本')
ylabel('误差矢量')
figure%作图
plot(h, 'k+')
hold on
plot(w, 'r*')
legend('实际权矢量','估计权矢量')
title('比较实际和估计权矢量')
axis([0 6 0.05 0.35])
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)