声振论坛

 找回密码
 我要加入

QQ登录

只需一步,快速开始

查看: 8947|回复: 23

[控制系统类] <求助>单神经元pid在用s函数仿真中的问题

  [复制链接]
发表于 2007-6-27 10:26 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?我要加入

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)
回复
分享到:

使用道具 举报

发表于 2007-6-27 10:55 | 显示全部楼层
我觉得就是你取的参数的问题
多换几次参数比较一下,看看规律
 楼主| 发表于 2007-6-27 11:17 | 显示全部楼层
参数调过很多次,无法达到文献中的效果,而且也达不到我做的pid的效果
参数这么难调的话,他比pid好在哪里呢?
发表于 2007-6-27 16:50 | 显示全部楼层
我有同学做的单神经元pid效果很好
这个肯定是比传统的lid调节要好
不过不知道什么原因你的这个效果不好
你可以参考一下薛定宇编的那本《控制系统计算机辅助设计-matlab语言与应用》
上面有很多很好的例子可以借鉴
 楼主| 发表于 2007-6-27 17:47 | 显示全部楼层
能让你同学帮我看看么?
谢谢lirui0662 你的关注及推荐的参考书!
发表于 2007-6-29 14:25 | 显示全部楼层
u(3)输入前应该再加一个-(z-1)/z才能达到u(3)=e(k)-2(k-1)+e(k-2)吧
发表于 2008-3-28 10:28 | 显示全部楼层
怎么无人回答啊
我把你的模型下来看看,结果效果更差,怎么搞啊??
发表于 2008-4-7 12:29 | 显示全部楼层

这模型和书上的有些不一样啊

这模型和书上的有些不一样啊,《先进PID控制与MATLAB仿真》上有例程
发表于 2009-5-18 07:56 | 显示全部楼层
看看xiexie
发表于 2009-12-10 09:49 | 显示全部楼层
书上那个是用m语言写的仿真文件,不如模型直观。而且,如果要加入到xpc做实时控制的话,m文件不能用的。
发表于 2010-5-22 05:10 | 显示全部楼层
我也刚刚才接触simulink 下面的是我自己参考书上的算法和论文得出的结论 如有不对 请大家指出

lz照着论文弄就是走错的第一步 我现在总算知道什么叫尽信书不如无书了
我所搜到的神经元pid的s函数论文里 内容基本都差不多
我照着论文搭好系统 设好参数根本仿真不出来
lz是在控制输出的后面加了个饱和器 把值限制在+-5才得到个勉强可以看的图
把积分器去掉的话 可以看到控制输出值在10的几次方到几十次方的量级 整个系统输出也在10的几十次方量级 而且根本不稳定
后来看了一些将神经元pid原理的书的论文 发现mux的输入除了x1、x2、x3外 还应该有一个u 就是当前的控制量
书上明明写着w(k+1)=w(k)+eta*z(k)*u(k)*xi(k) 不知道为什么到某些论文里u(k)就没有了 害我浪费了一个通宵

我修改了m文件 将u也引入算法 不知道对不对 不过 系统至少收敛了 得到了比较像样的图像
neuralpid.jpg
仿真.jpg

[ 本帖最后由 hidefreak 于 2010-5-22 05:27 编辑 ]
发表于 2010-5-25 15:43 | 显示全部楼层
学习一下,不过还是有诸多疑问啊
发表于 2011-5-20 15:32 | 显示全部楼层
我也在做,先参考下看看。
发表于 2011-10-11 18:05 | 显示全部楼层
下下来看看呢。。。
发表于 2011-10-11 18:12 | 显示全部楼层
最近也在研究这方面
您需要登录后才可以回帖 登录 | 我要加入

本版积分规则

QQ|小黑屋|Archiver|手机版|联系我们|声振论坛

GMT+8, 2024-12-28 12:42 , Processed in 0.144036 second(s), 22 queries , Gzip On.

Powered by Discuz! X3.4

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表