⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 whd.m

📁 基于MATLAB的神经网络BP算法的改进Lm算法
💻 M
字号:
L=60;
y1=1;y2=1;y3=1;y4=0;
for i=1:L;
   x1=xor(y3,y4); x2=y1;x3=y2;x4=y3;
    y(i)=y4;
    if y(i)>0.5,u(i)=-0.03;
    else u(i)=0.03;
    end
    y1=x1;y2=x2;y3=x3;y4=x4;
end
figure(1);
stem(u),grid on
z(2)=0;z(1)=0;
for k=3:L;
    z(k)=1.5*z(k-1)-0.7*z(k-2)+u(k-1)+0.5*u(k-2);
end

 c0=[0.001 0.001 0.001 0.001]';
 p0=10^6*eye(4,4);
 E=0.000000005;
 c=[c0,zeros(4,14)];
 e=zeros(4,15);
 for k=3:L;
     h1=[-z(k-1),-z(k-2),u(k-1),u(k-2)]';
     x=h1'*p0*h1+1;
     x1=inv(x);
     k1=p0*h1*x1;
     p1=p0-k1*k1'*[h1'*p0*h1+1];
     p0=p1;
     d1=z(k)-h1'*c0;
     c1=c0+k1*d1;
     e1=c1-c0;
     e2=e1./c0;
     e(:,k)=e2;
     c0=c1;
     c(:,k)=c1;
     if e2<E break
     end
 end
%  c;e;
% c0=[0.001 0.001 0.001 0.001]'; %直接给出被辨识参数的初始值,即一个充分小的实向量
% p0=10^6*eye(4,4); %直接给出初始状态P0,即一个充分大的实数单位矩阵
% E=0.000000005; %取相对误差E=0.000000005
% c=[c0,zeros(4,14)]; %被辨识参数矩阵的初始值及大小
% e=zeros(4,15); %相对误差的初始值及大小
% for k=3:15; %开始求K 
%     h1=[-z(k-1),-z(k-2),u(k-1),u(k-2)]'; x=h1'*p0*h1+1; x1=inv(x); %开始求K(k)
%     k1=p0*h1*x1;%求出K的值
%     d1=z(k)-h1'*c0; c1=c0+k1*d1; %求被辨识参数c
%     e1=c1-c0; %求参数当前值与上一次的值的差值
%     e2=e1./c0; %求参数的相对变化
%     e(:,k)=e2; %把当前相对变化的列向量加入误差矩阵的最后一列       
%     c0=c1; %新获得的参数作为下一次递推的旧参数
%     c(:,k)=c1; %把辨识参数c 列向量加入辨识参数矩阵的最后一列 
%     p1=p0-k1*k1'*[h1'*p0*h1+1]; %求出 p(k)的值
%     p0=p1; %给下次用
%     if e2<=E break; %如果参数收敛情况满足要求,终止计算
%     end %小循环结束
% end %大循环结束

a1=c(1,:); a2=c(2,:); b1=c(3,:); b2=c(4,:); ea1=e(1,:); ea2=e(2,:); eb1=e(3,:); eb2=e(4,:);

figure(2);
i=1:L; 
plot(i,a1,'r',i,a2,':',i,b1,'g',i,b2,':')  
title('Parameter Identification with Recursive Least Squares Method') 
figure(3); 
i=1:L;
plot(i,ea1,'r',i,ea2,'g',i,eb1,'b',i,eb2,'r:') 
title('Identification Precision') 
% L=15; % M序列的周期
% y1=1;y2=1;y3=1;y4=0; %四个移位寄存器的输出初始值
% for i=1:L;%开始循环,长度为L
%     x1=xor(y3,y4); %第一个移位寄存器的输入是第三个与第四个移位寄存器的输出的“或”
%     x2=y1; %第二个移位寄存器的输入是第一个移位寄存器的输出
%     x3=y2; %第三个移位寄存器的输入是第二个移位寄存器的输出
%     x4=y3; %第四个移位寄存器的输入是第三个移位寄存器的输出
%     y(i)=y4; %取出第四个移位寄存器的幅值为"0"和"1"的输出信号,即M序列
%     if y(i)>0.5,u(i)=-0.03; %如果M序列的值为"1", 辨识的输入信号取“-0.03”
%     else u(i)=0.03; %如果M序列的值为"0", 辨识的输入信号取“0.03”
%     end %小循环结束
%     y1=x1;y2=x2;y3=x3;y4=x4; %为下一次的输入信号做准备
% end %大循环结束,产生输入信号u 
% figure(1); %第一个图形
% stem(u),grid on %显示出输入信号径线图并给图形加上网格
% z(2)=0;z(1)=0; %设z的前两个初始值为零
% for k=3:15; %循环变量从3到15   
%     z(k)=1.5*z(k-1)-0.7*z(k-2)+u(k-1)+0.5*u(k-2); %输出采样信号    
% end

%RLS递推最小二乘辨识
% c0=[0.001 0.001 0.001 0.001]'; %直接给出被辨识参数的初始值,即一个充分小的实向量
% p0=10^6*eye(4,4); %直接给出初始状态P0,即一个充分大的实数单位矩阵
% E=0.000000005; %取相对误差E=0.000000005
% c=[c0,zeros(4,14)]; %被辨识参数矩阵的初始值及大小
% e=zeros(4,15); %相对误差的初始值及大小
% for k=3:15; %开始求K 
%     h1=[-z(k-1),-z(k-2),u(k-1),u(k-2)]'; x=h1'*p0*h1+1; x1=inv(x); %开始求K(k)
%     k1=p0*h1*x1;%求出K的值
%     d1=z(k)-h1'*c0; c1=c0+k1*d1; %求被辨识参数c
%     e1=c1-c0; %求参数当前值与上一次的值的差值
%     e2=e1./c0; %求参数的相对变化
%     e(:,k)=e2; %把当前相对变化的列向量加入误差矩阵的最后一列       
%     c0=c1; %新获得的参数作为下一次递推的旧参数
%     c(:,k)=c1; %把辨识参数c 列向量加入辨识参数矩阵的最后一列 
%     p1=p0-k1*k1'*[h1'*p0*h1+1]; %求出 p(k)的值
%     p0=p1; %给下次用
%     if e2<=E break; %如果参数收敛情况满足要求,终止计算
%     end %小循环结束
% end %大循环结束
% a1=c(1,:); a2=c(2,:); b1=c(3,:); b2=c(4,:); ea1=e(1,:); ea2=e(2,:); eb1=e(3,:); eb2=e(4,:); 
% figure(2); %第二个图形
% i=1:15; %横坐标从1到15
% plot(i,a1,'r',i,a2,':',i,b1,'g',i,b2,':')  %画出a1,a2,b1,b2的各次辨识结果
% title('Parameter Identification with Recursive Least Squares Method') %图形标题
% figure(3); %第三个图形
% i=1:15; %横坐标从1到15
% plot(i,ea1,'r',i,ea2,'g',i,eb1,'b',i,eb2,'r:') %画出a1,a2,b1,b2的各次辨识结果的收敛情况
% title('Identification Precision') %图形标题

⌨️ 快捷键说明

复制代码 Ctrl + C
搜索代码 Ctrl + F
全屏模式 F11
切换主题 Ctrl + Shift + D
显示快捷键 ?
增大字号 Ctrl + =
减小字号 Ctrl + -