这个部分,主要是通过给定模型的输入和输出,然后通过网络进行训练,得到神经网络的辨识参数。

对于网络辨识部分,其基本构架如下所示:

上述的辨识结构,通过控制对象的输入和输出的延迟分别进入F网络和G网络,然后通过网络输出和实际输出的误差对网络F和网络G进行在线学习。

具体理论论文讲的比较详细了,这里不再重复,仿真效果如下所示:

部分核心程序:

clc;
clear all;
close all;
warning off;
addpath 'func\'
pack;

Num_In     = 6;
Num_Hidden = 12;
Num_Out    = 1;

load func\result3.mat

[In,Out] = func_data(y3,y_out3);

parameter;

while Error>Err_goal & Iter < Max_iter
      u_delay1 = 0;
      u_delay2 = 0;
      u_delay3 = 0;
      u_delay4 = 0;
      y_delay1 = 0;
      y_delay2 = 0;
      y_delay3 = 0;   
      y_delay4 = 0;
      Err_tmp  = 0;
      for k=1:All_Length
          
          
          Data_Delays = [y_delay1;
                         y_delay2;
                         y_delay3;
                         u_delay2;
                         u_delay3;
                         u_delay4];
                     
          %隐层求和 
          [Y_hidden(k),Hidden1G,Hidden2G,Y_hiddenG(k),Hidden1F,Hidden2F,Y_hiddenF(k)] = func_Hiddern(Data_Delays,u_delay1,Num_Hidden,G_wight_In,G_wight_Inb,G_wight_Out,G_wight_Outb,F_wight_In,F_wight_Inb,F_wight_Out,F_wight_Outb);
          
          Err_tmp     = Out(k)-Y_hidden(k);

%F和G网络 
          %G神经网络计算
          [dg_weight_in,dg_bweight_in,dg_weight_out,dg_bweight_out] = func_G_net(Err_tmp,Out(k),In(k),Y_hidden(k),G_wight_Out,Hidden2G,Data_Delays,Y_hiddenG(k),Hidden1G,Num_Hidden,Num_In); 
          %F神经网络计算
          [df_weight_in,df_bweight_in,df_weight_out,df_bweight_out] = func_F_net(Err_tmp,Out(k),In(k),Y_hidden(k),F_wight_Out,Hidden2F,Data_Delays,Y_hiddenG(k),Hidden1F,Num_Hidden,Num_In);

%G网络权值更新
          [G_wight_In,G_wight_Out,G_wight_Inb,G_wight_Outb]=func_G_W_updata(Learn_Rate,alpha,...
                                                                            G_wight_In1,G_wight_Out1,G_wight_Inb1,F_wight_Outb1,...
                                                                            dg_weight_in,dg_weight_out,dg_bweight_in,dg_bweight_out,...
                                                                            G_wight_Outb1,...
                                                                            G_wight_In2,G_wight_Out2,G_wight_Inb2,G_wight_Outb2);
          %F网络权值更新
          [F_wight_In,F_wight_Out,F_wight_Inb,F_wight_Outb]=func_F_W_updata(Learn_Rate,alpha,...
                                                                           G_wight_In1,F_wight_Out1,F_wight_Inb1,F_wight_Outb1,...
                                                                           df_weight_in,df_weight_out,df_bweight_in,df_bweight_out,...
                                                                           G_wight_In2,F_wight_Out2,F_wight_Inb2,F_wight_Outb2);
                                                        
          %延迟
          u_delay4 = u_delay3;
          u_delay3 = u_delay2;
          u_delay2 = u_delay1;
          u_delay1 = In(k); 
        
          y_delay4 = y_delay3;
          y_delay3 = y_delay2;
          y_delay2 = y_delay1;
          y_delay1 = Out(k);

G_wight_In2   = G_wight_In1;
          G_wight_In1   = F_wight_In;
          F_wight_Out2  = F_wight_Out1;
          F_wight_Out1  = F_wight_Out;
          F_wight_Inb2  = F_wight_Inb1;
          F_wight_Inb1  = F_wight_Inb;
          F_wight_Outb2 = F_wight_Outb1;
          F_wight_Outb1 = F_wight_Outb;

G_wight_In2   = G_wight_In1;
          G_wight_In1   = G_wight_In;
          G_wight_Out2  = G_wight_Out1;
          G_wight_Out1  = G_wight_Out;
          G_wight_Inb2  = G_wight_Inb1;
          G_wight_Inb1  = G_wight_Inb;
          G_wight_Outb2 = G_wight_Outb1;
          G_wight_Outb1 = G_wight_Outb;
          
      end

Error        = sum((Out-Y_hidden).^2)/k;
      Error2(Iter) = Error;
      %如果当前训练误差反而增加,则放弃此次训练结果,重新训练
      if (Iter > 1) & (Error2(Iter) > 1.2*Error2(Iter-1))
         Iter      = Iter;
         Break_cnt = Break_cnt + 1;
         if Break_cnt > 20
            Error2(Iter) = [];
            break;
         end
      else
         Break_cnt = 0; 
         Iter = Iter+1; 
         fprintf('迭代次数:%d  ',Iter);
         fprintf('误差:%f',Error);
         fprintf('\n\n');
      end
end

figure; 
subplot(121);
plot(Times(1:1000),Out(1:1000),'r');  
hold on;
plot(Times(1:1000),Y_hidden(1:1000),'b--');  
hold on;
xlabel('Times(s)');
ylabel('Out'); 
legend('系统输出','网络输出');

subplot(122); 
semilogy(1:length(Error2),Error2,'r-o'); 
xlabel('Times(s)');
ylabel('Error');
grid on;

F_wight_In0   = F_wight_In;
F_wight_Out0  = F_wight_Out; 
G_wight_In0   = G_wight_In;
G_wight_Out0  = G_wight_Out;
F_wight_Inb0  = F_wight_Inb;
F_wight_Outb0 = F_wight_Outb; 
G_wight_Inb0  = G_wight_Inb;
G_wight_Outb0 = G_wight_Outb;

save NN_reg_signal3.mat F_wight_In0 F_wight_Out0 G_wight_In0 G_wight_Out0  F_wight_Inb0 F_wight_Outb0 G_wight_Inb0 G_wight_Outb0

A08-16

基于神经网络的控制器设计与仿真相关推荐

  1. 基于S函数的BP神经网络PID控制器及simulink仿真

    基于S函数的BP神经网络PID控制器及simulink仿真 文章目录 文章来源和摘要 S函数的编写格式和运行步骤 simulink模型结构 S函数模型初始化部分代码理解 S函数模型更新部分 S函数模型 ...

  2. 汽车主动悬挂系matlab,基于Matlab的汽车主动悬架控制器设计与仿真.doc

    基于Matlab的汽车主动悬架控制器设计与仿真 <现代控制理论及其应用>课程小论文 基于Matlab的汽车主动悬架控制器设计与仿真 学院:机 械 工 程 学 院 班级() 姓名: 2015 ...

  3. matlab 通讯系统设计与仿真,基于BPSK通信系统的设计与仿真

    基于BPSK通信系统的设计与仿真 一.BPSK信号调制原理 1.1  系统原理 file:///C:\Users\ADMINI~1.KGH\AppData\Local\Temp\ksohtml\wps ...

  4. 基于bp神经网络的pid算法,神经网络pid控制器设计

    基于BP神经网络的PID控制器设计 参考一下刘金琨的<先进PID控制>这本书. 例子:被控对象yout(k)=a(k)yout(k-1)/(1+yout(k-1)^2)+u(k_1)其中a ...

  5. 神经网络pid控制原理框图,神经网络pid控制器设计

    神经网络自整定PID真的有效吗?我看图书馆的参考书上和知网论文上的方法,感觉推导过程都不对啊? 楼主的这个问题已经是六年前的问题了(今天2021年5月),不知道楼主现在还关注这个话题不?神经网络自整定 ...

  6. 基于STM32智能窗帘设计proteus仿真

    本设计: 基于STM32智能窗帘设计(含源程序+proteus仿真) 仿真:proteus8.11 程序编译器:keil 5 编程语言:C语言 编号C0007 [腾讯文档]C0007 网盘链接 资料下 ...

  7. m基于K-means聚类算法和神经网络的模糊控制器设计matlab仿真

    目录 1.算法描述 2.仿真效果预览 3.MATLAB核心程序 4.完整MATLAB 1.算法描述 聚类就是按照某个特定标准把一个数据集分割成不同的类或簇,使得同一个簇内的数据对象的相似性尽可能大,同 ...

  8. m基于simulink的六自由度高超声速飞行器内外环飞行控制器设计与仿真实现

    目录 1.算法仿真效果 2.MATLAB核心程序 3.算法涉及理论知识概要 4.完整MATLAB 1.算法仿真效果 matlab2022a仿真结果如下: 2.MATLAB核心程序 %========= ...

  9. 基于Matlab的汽车主动悬架控制器设计与仿真

    1.内容简介 略217-主动被动悬架-LQR 2.内容说明 汽车悬架系统由弹性元件.导向元件和减振器组成,是车身与车轴之间连接的所有组合体零件的总称,也是车架(或承载式车身)与车桥(或车轮)之间一切力 ...

最新文章

  1. 梯度下降优化算法综述与PyTorch实现源码剖析
  2. R语言ggplot2可视化NHANES数据集年龄和身高的关系并按照性别因子分析男性和女性的差异
  3. Unity中对象池的使用
  4. 计算机硬件2部件指的是什么,计算机基础-2.计算机硬件基础.doc
  5. 开工快乐!AI内参邀你继续学习,并送上50元优惠券!
  6. 代码重构----使用java有限状态机来消除太多的if else判断
  7. oracle数据泵导入提示00972,oracle数据库使用expdp指定FLASHBACK_TIME遇到ORA-39150错误 | 信春哥,系统稳,闭眼上线不回滚!...
  8. 14个你可能不知道的JavaScript调试技巧
  9. 以下不是python内置函数的是_为什么说python内置函数并不是万能的?
  10. 网页上透明FLASH代码详解
  11. C++程序员必备知识
  12. App接入微信登录 步骤
  13. 大二下学期ACM比赛总结
  14. 当下移动开发唱衰,iOS开发者如何才能涅槃重生?
  15. 务实至上:“PHP之父”Rasmus Lerdorf访谈录
  16. 基于CRNN+CTC的改进图像文本识别算法
  17. 内核aio_AIO 简介
  18. PostGIS 快速入门
  19. 财务自由之路--笔记
  20. 【持续更新】java多线程面试题整理

热门文章

  1. jQuery获取CSS样式中的颜色值的问题,不同浏览器格式不同怎么办
  2. R语言数据可视化 ggplot2基础2 创建单图层的散点图 创建facet
  3. UA MATH563 概率论的数学基础 中心极限定理6 独立随机变量的和与Kolmogorov扩展定理
  4. 利用emu8086学习汇编int 10h功能
  5. 作用域变量 var
  6. SpringBoot整合RabbitMQ-消息可靠性投递
  7. php--理解PHP的依赖注入和laravel的服务容器
  8. Windows XP Embedded 上手指南
  9. iTOP-4418/6818开发板支持双屏异显,双屏同显
  10. JS 回车提交,兼容IE、火狐、Opera、Chrome、Safari……