本帖最后由 PPT7204 于 2016-12-11 22:16 编辑
clear all;
close all;
% 初始化神经元输入信号
x=[0,0,0]';
% 初始化学习率参数
xiteP=0.5; xiteI=0.6; xiteD=0.5;
%初始化kp,ki,kd
wkp_1=0.1; wki_1=0.1; wkd_1=0.5;
% 初始化前两个时间单元的误差信号
error_1=0; error_2=0;
% 初始化前三个时间单元的输出信号
y_1=0;y_2=0;y_3=0;
% 初始化前三个时间单元的控制信号
u_1=0.0;u_2=0.0;u_3=0.0;
% 初始化采样时间
ts=0.001;
% sys=tf(300,[1,20,0]);
% dsys=c2d(sys,ts,'z');
% [num,den]=tfdata(dsys,'v');
% x=[0,0,0]';
for k=1:1:1000
time(k)=k*ts;
rin(k)=0.5*sign(sin(2*2*pi*k*ts));
yout(k)=1.5*y_1-0.7*y_2 + u_1+ 0.5*u_2;
error(k)=rin(k)-yout(k);
% 根据M的不同,选择不同的算法
wkp(k)=wkp_1+xiteP*u_1*x(1);
wki(k)=wki_1+xiteI*u_1*x(2);
wkd(k)=wkd_1+xiteD*u_1*x(3);
K=0.06;
x(1)=error(k)-error_1;
x(2)=error(k);
x(3)=error(k)-2*error_1+error_2;
wadd(k)=abs(wkp(k))+abs(wki(k))+abs(wkd(k));
w11(k)=wkp(k)/wadd(k);
w22(k)=wki(k)/wadd(k);
w33(k)=wkd(k)/wadd(k);
w=[w11(k),w22(k),w33(k)];
u(k)=u_1+K*w*x;
if u(k)>10
u(k)=10;
end
if u(k)
u(k)=-10;
end;
error_2=error_1;
error_1=error(k);
u_3=u_2;u_2=u_1;u_1=u(k);
y_3=y_2;y_2=y_1;y_1=yout(k);
wkp_1=wkp(k);
wki_1=wki(k);
wkd_1=wkd(k);
end
figure(1);
plot(time,rin,'b',time,yout,'r');
xlabel('t/s');ylabel('rin,yout');
figure(2);
subplot(311);
plot(time,wkp,'r');
xlabel('t/s');ylabel('wkp');
subplot(312);
plot(time,wki,'r');
xlabel('t/s');ylabel('wki');
subplot(313);
plot(time,wkd,'r');
xlabel('t/s');ylabel('wkd');