MATLAB高手来,帮忙改改程序,关于自适应滤波器算法的

MATLAB高手来,帮忙改改程序,关于自适应滤波器算法的,第1张

clear all

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])


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/yw/11149289.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2023-05-14
下一篇 2023-05-14

发表评论

登录后才能评论

评论列表(0条)

保存