|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有账号?我要加入
x
现在刚开始用单神经元pid做仿真,遇到一些问题请大家指点指点!
我是按照从网上搜到的一篇文章《基于s函数的神经元PID控制SIM U LIN K仿真模型》做的,控制对象的传递函数是:
G(S)=2.3exp(-0.167s)/(3.05s+1),学习步长:ηp=6800,ηi=68,ηd=1000,神经元比例系数:k=1.1,采样周期T=0.0167。
我仿真的结果跟文献上的结果出入很大,我用的是ode45,变步长,参数调整多次,其结果仍然比单纯的pid控制的效果差,体现不出变参数pid控制的优点。并且,当我设置定步长0.0167仿真的时候,出现振荡,是采样周期设置有问题吗,请问应该在哪里设置呢?
我的s函数主要部分如下:
sizes.NumContStates = 0;
sizes.NumDiscStates = 3;
sizes.NumOutputs = 1;
sizes.NumInputs = 3;
sizes.DirFeedthrough = 1;
sizes.NumSampleTimes = 0;
sys = simsizes(sizes);
x0 = [0.3 0.3 0.3];
function sys=mdlUpdate(t,x,u,etap,etai,etad,k)
sys(1) = x(1)+etai*u(1)*u(1); %u(1)=e(k)=r(k)-y(k)
sys(2) = x(2)+etap*u(1)*u(2); %u(2)=e(k)-e(k-1)
sys(3) = x(3)+etad*u(1)*u(3); %u(3)=e(k)-2(k-1)+e(k-2)
function sys=mdlOutputs(t,x,u,etap,etai,etad,k)
sys = k*(x(1)*u(1)+x(2)*u(2)+x(3)*u(3))/(abs(x(1))+abs(x(2))+abs(x(3))); %output is du(k),u(k)=u(k-1)+du(k)
系统框图如下:
仿真模块图
请各位帮帮我!先谢谢了!
文献中的结果很好
文献结果
这是我做的结果
仿真结果
定步长结果
我的仿真文件:
snn_pid.mdl
(22.95 KB, 下载次数: 182)
snnpid.m
(8.46 KB, 下载次数: 205)
|
|