




版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第14章
基于Simulink的
人工神经网络建模114.1概述MATLAB具有友好的工作平台和编程环境、简单易学的编程语言、强大的科学计算和数据处理能力,以及出色的图形图像处理功能、适应多领域应用的工具箱、适应多种语言的程序接口、模块化的设计和系统级的仿真功能等特点。而支持MATLAB仿真的是Simulink工具箱。Simulink是一个用于动态系统建模、仿真和分析的软件包,一般可以附在MATLAB上同时安装,也有独立版本可以单独使用。大多数用户都是选择与MATLAB同时安装使用,以便能更好地发挥MATLAB在科学计算上的优势,进一步扩展Simulink的使用领域和功能。近几年来,在学术界和工业领域,Simulink已经成为动态系统建模和仿真领域中应用最为广泛的软件之一。2由于Simulink采用模块组合方式来建模,因此用户能够快速、准确地创建动态系统的计算机仿真模型,特别是对复杂的不确定非线性系统尤为方便。Simulink模型可以用来模拟线性和非线性、连续和离散,或者两者的混合系统,也就是说它可以用来模拟几乎所有可能遇到的动态系统。Smulink没有单独的语言,但是它提供了S函数规则,S函数使Simulink更加充实、完备,具有更强的处理能力。用户可以用一个M函数文件、FORTRAN程序、C或C++语言函数来编写S函数,通过特殊的语法规则使之能够被Simulink模型或模块调用。另外,Simulink不是封闭的,它可以很方便地定制自己的模块和模块库。同时,Simulink也有比较完整的帮助系统,用户可以随时找到对应模块的说明,以便于应用。3
综上所述,Simulink是一种开放性的、用来模拟线性或非线性,以及连续或离散的或者两者混合的动态系统的强有力的系统级仿真工具。目前,随着软件的升级换代,Simulink在软硬件的接口方面有了长足的进步,使用Simulink可以很方便地进行实时信号控制和处理、信息通信以及DSP处理。许多知名的大公司都使用Simulink作为他们产品设计和开发的强有力工具。414.2Simulink启动和神经网络模块库本书采用的是MATLABR2014b版本。在MATLAB的工作环境中,Simulink仿真环境的启动有三种方法。(1)使用命令进行启动。在MATLAB命令窗口(CommandWindow)中输人命令:
>>simulink按“Enter”键后,软件会出现一个“SimulinkLibraryBrowser”窗口,如图14-1所示14.2.1
Simulink的启动5
图14-1“SimulinkLibraryBrowser”窗口6(2)在MATLAB命令窗口(CommandWindow)中输入命令:>>simulink3
按“Enter”键后,软件会出现一个“Library:simulink3”窗口,如图14-2所示。图14-2“Library:simulink3”窗口
7图14-2所示的是Simnlink库中的一些主要模块库。双击模块库,即可出现对应的元件列表,如图14-3所示。
图14-3接收器模块库中的元件列表
8(3)点击MATLAB工具栏按钮“”,启动Simulink仿真环境,如图14-4所示。图14-4Simulink启动按钮位置图
9在MATLAB命令窗口(CommandWindow)中输入命令“neural”,打开神经网络仿真模型库窗口,如图14-5所示。
图14-5神经网络仿真模型库14.2.2
Simulink
神经网络模块库10神经网络工具箱包含五个模块库。
1.传递函数模块(TransfreFunctions)
双击图14-5中的“TransferFunctions”模块,即可弹出“Library:neural/TransferFunctions”窗口,如图14-6所示。
图14-6“Library:neural/TransferFunctions”窗口
11
2.网络输入模块(NetInputFunctions)
双击图14-5中的“NetInputFunctions”模块,即可弹出“Library:neural/NetInputFunctions”窗口,如图14-7所示。
图14-7“Library:neural/NetInputFunctions”窗口12图14-7中包含的网络输入模块及功能如表14-1所示。表14-1中,每一个模块都能够接收加权输入向量、加权的层输出向量或者偏置值向量,并且返回一个网络输入向量。
13
3.权值设置模块(WeightFunctions)
双击图14-5中的“WeightFunctions”模块,即可弹出“Library:neural/WeightFunctions”窗口,如图14-8所示。
图14-8中包含的网络输入模块及功能如表14-2所示。
14
图14-8“Library:neural/WeightFunctions”窗口
15
4.处理模块(ProcessingFunctions)
双击图14-5中的“ProcessingFunctions”模块,即可弹出“Library:neural/ProcessingFunctions”窗口,如图14-9所示
图14-9“Library:nerual/ProcessingFunctions”窗口16
5.控制系统模块(ControlSystems)
双击图14-5中的“ControlSystems”模块,即可弹出“Library:neural/ControlSystems”窗口,如图14-10所示。
图14-10“Library:nerual/ControlSystems”窗口1714.3模型的设置和操作将所选的模块添加到模型窗口后,单击需要操作的模块,当其四周出现小黑块编辑框时便可对其进行一系列的操作。(1)改变模块大小。用鼠标拖动模块的编辑框即可改变模块的大小。(2)模块的移动。当在同一窗口移动时,只需要用鼠标拖动模块移动位置即可。当在不同的窗口移动时,在用鼠标拖动模块的同时需要按住Shift键即可。(3)模块的复制。当在同一窗口时,在选中模块的同时按下Ctrl键,将对象拖动到目的位置,或者使用快捷键“Ctrl+C”和“Ctrl+V”。当在不同的窗口进行复制时,只需将模块拖到另一窗口即可。14.3.1
模块的操作18
(4)模块的翻转。默认情况下,模块的输入端总是在左侧,输出端在右侧,有时候需要将模块翻转,那么在选中模块后,可以使用快捷键“Ctrl+R”实现,如图14-11中示波器模块所示。图14-11示波器模块翻转(5)修改模块名。单击模块下边的模块名,即可对模块名直接进行修改。19信号线的操作如下:(1)信号线的分支。当需要将一个信号送到不同的模块时,就需要增加分支点将一条信号分成多条。产生分支的方法是:首先选中信号线,然后按住“Ctrl”键,点击鼠标左键的同时并移动鼠标即可产生分支线。
(2)信号线的注释。在需要注释的信号线附近双击鼠标即可出现一个文本编辑框。
(3)信号线与模块分离。选中需要操作的模块,按住“Shift”键的同时拖动模块便可实现模块与信号线的分离。14.3.2
信号线的操作20
在Simulink仿真模型运行的过程中,可以按照默认的仿真参数进行仿真,也可以根据系统不同的仿真条件,对仿真参数进行设置。在Simulink模型窗口选择菜单“Simulation”—“ModelConfigurationParameters”,或者使用快捷键“Ctrl+E”打开参数设置对话框,如图14-12所示。14.3.3
仿真参数的设置21
图14-12仿真参数设置图22图14-12中主要包括仿真参数(Solver)、工作空间数据输入/输出(DataImport/Export)、优化设置(Optimization)、诊断设置(Diagnostics)、硬件实现(HardwareImplementation)、模型参考(ModelReferencing)、仿真目标(SimulationTarget)和代码生成(CodeGeneration)等设置。
1.仿真参数设置仿真参数设置主要包括仿真时间和仿真步长的设置。
(1)仿真的起始时间(Starttime)默认为0s,终止时间(Stoptime)默认为10s。此处的时间并不是实际时间,而是计算机的定时时间。
23
(2)仿真步长设置。仿真过程一般是求解微分方程的过程,“Type”是设置求解的类型,“Variable-step”表示仿真步长是变化的,“Fix-step”表示仿真步长是固定的。采用变步长求解时,需要设定容许误差限和过零检测,当误差超过误差限时自动修正步长,误差限的大小决定了求解的精度。①“Maxstepsize”:设置最大步长,最大步长=(Stoptime-Starttime)/50。②“Minstepsize”:设置最小步长。③“Initialstepsize”:设置初始步长。④“Relativetolerance”:设置相许误差限。⑤“Absolutetolerance”:设置绝对容许误差限。
242.工作空间数据输入/输出工作空间数据输入/输出设置对话框如图14-13所示。
图14-13数据输入/输出参数设置图25(1)从工作空间载入数据(Loadfromworkspace),“Input”栏是从工作空间输入向量到模型的输入端口。“Intialstate”栏是将工作空间的xlntial变量作为模型所有内状态的变量的初始值。
(2)保存数据到工作空间(Savetoworkspace),“Time”栏的默认变量为tout,“States”栏的变量为xout,“Output”栏的默认变量为yout,“Finalstate”栏的默认变量是xFinal。“Limitdatapointstolast”栏用来设置保存变量接收的数据长度,默认值为1000。“Format”栏用来设置保存数据的三种格式:数组、结构数组和带时间量的结构数组。26在创建Simnlink仿真模型时,通常需要设置模块的参数来满足系统的要求。打开模块参数设置对话框的方法有两种:
(1)鼠标左键双击需要设置参数的模块。(2)鼠标右键单击该模块,在菜单中选择“BlockParameters”选项。
每个模块的参数设置对话框上方都有该模块功能的详细介绍,在实际操作过程中,一般都使用第一种设置方法。下面介绍一些常用模块的设置。14.3.4
常用模块的设置271.正弦信号模块在“Sources”子模块库中,通常会用到正弦信号(SineWave)模块,其参数设置对话框如图14-14所示。
图14-14正弦信号模块的参数
28在图14-14的参数对话框中,有时间范围(Time)设置参数,其有两个选项“Usesimulationtime”和“Useexternalsignal”,分别可以使用仿真时间或其他信号作为时间范围。此外,还有正弦幅值(Amplitude)、幅值偏移量(Bias)、正弦频率(Frequency)和初始相角(Phase)等参数设置选项。
2.求和模块求和模块(Sum)一般用来计算信号的和,它是“MathOperations”模块库中的模块。其参数设置分为两个选项:
“Main”设置主要参数,如图14-15(a)所示,“SignalAttributes”设置信号的属性,如图14-15(b)所示。29
(a)Main选项卡 (b)SignalAttributes选项卡图14-15求和模块的参数30在“Main”选项卡中,图标形状(Iconshape)可以设置为圆形(Round)和方形(Rectangle)两种形式。在信号极性列表中(Listofsigns),“+”表示信号求和,“-”表示信号求差。在“SignalAttributes”选项卡中,“Accumulatordatatype”为累加器数据类型,“Outputdatatype”为输出信号数据类型,这两个选项都可以选择各种数据类型,其默认类型都为“Inherit:Inheritviainternalrule”。313.示波器示波器(Scope)模块在simulink仿真过程中具有非常重要的作用,该模块主要用来接收信号并将信号以波形的形式显示出来。示波器模块属于Sinks模块库,在搭建仿真模型的过程中,可以方便的在常用的模块库中找到。双击示波器模块即可打开示波器窗口,如图14-16所示,工具栏中常用的是按钮,可以将波形完整的显示出来。图14-16示波器窗口32单击示波器窗口工具栏的按钮可以打开示波器参数设置对话框,如图14-17所示,参数对话框分为如图14-17(a)、14-17(b)和14-17(c)所示的“General”、“History”和“Style”三个选项卡。(a)“General”参数(b)“History”参数33
(c)“Style”参数图14-17示波器的参数34(1)“General”主要参数
Numberofaxes:示波器的输入端口个数,默认值为1,表示只有一个输入。
Timerange:设置信号显示范围,默认auto为仿真时间范围,若信号实际持续时间超出该范围,则超出的部分将不再显示。(2)“History”主要参数
Limitdatapointstolast:表示缓冲区接受数据的长度,默认值为5000。示波器的缓冲区可接受30个信号,数据长度为5000,若数据长度超出该范围,则最早的历史数据将会被删除。Savedatatoworkspace:将示波器缓冲区的数据已矩阵或结构数组的形式送到工作空间。35(3)“Style”参数Figurecolor:设置示波器背景颜色Axescolors:设置波形背景颜色和坐标轴颜色Propertiesforline:图形编号Line:设置波形的类型、宽度和颜色3614.4单神经元建模Simulink中有专门的神经网络工具箱,可以用于搭建各种神经网络电路,本节通过搭建一个简单的神经元模Simulink模型建立的。1.创建_个空白模型在Simulink主窗口中,单击工具栏中的按钮“”,或者直接使用快捷键“Ctrl+N”都可以创建一个默认名为“untitled”的空白模型,如图14-18所示。37
图14-18“untitled”的空白模型图2.添加模块单个神经元的数学模型为38该模型可分为输入模块、传递函数和输出模块三部分,输入模块通常在信号源模块库(Source)中,双击图14-19中的模块库,并将其中的常数模块(Constant)拖放到空白模型的窗口中;该神经元模型选用的传递函数为线性你传递函数,可直接将图14-6中对应的函数模块拖到空白模型中;输出模块为实时数值显示模块(Display),在接收模块库(Sinks)选择该模块并将其拖放到模型窗口中。除此之外,还需要两个模块来执行点积和加法运算,选择图14-7所示的两个网络输入模块,并将其拖放到模型窗口中,如图14-19所示。39
图14-19单神经元模块图403.添加信号线将独立的模块用信号线连接起来。将鼠标放在Constant模块的输出端,当光标变为十字时,按住鼠标左键拖向点乘模块(netprod)的输入端。以此类推,完成所有模块的连线,连接后的模型如图14-20所示。
图14-20单神经元模型图414.仿真双击常数输入模块修改参数,假设单神经元权值为0.8,输入为0.02,偏置值为0。开始仿真,单击模型窗口工具栏中的图标,或者选择菜单“Simulink”→“Run”进行仿真。当仿真结束后,数字显示模块(Display)会显示当前单神经元的输出结果,如图14-21所示,Simulink默认的仿真时间是10s。
图14-21仿真结果图425.模型保存单击模型窗口工具栏中的图标
,即可修改该模型的保存路径、文件类型和文件名,此处将该单个神经元模型保存为“MP_1.mdl”文件。
以上五个步骤便是使用Simulink建立一个完整的单个神经元模型的流程,可以看出,Simnlink模型的创建是比较简便的。读者可以通过学习构建简单的神经元模型来搭建更加复杂的神经网络模型。4314.5函数逼近的Simulink仿真模型4.4.2节介绍了多层感知器的函数逼近功能,下面通过使用Simulink仿真来搭建该函数的逼近模型。该模型为一个1-2-1的网络结构,网络中隐含层中的传递函数选用对数S型函数,输出层中的传递函数选用线性函数,如图14-22所示。14.5.1
参数未改变的模型及仿真44
图14-22函数逼近网络实例图假设该网络的权值和偏置值为网络结构中的输出y2输入x的函数,令x的取值范围是[-2,2],搭建该网络的Simulink仿真模型。451.搭建模型在创建空白模型、选取所需模块和连接完成信号线后,函数逼近的仿真模型如图14-23所示。图14-23仿真模型中的输入信号不是一个具体的数值,而是一个取值范围,因此需要一个特殊的模块“斜坡(Ramp)”,其作用是产生连续增大或减小的信号。在选定该模块后还需要进行参数设置,该模块的三个参数如下:
(1)Slope:斜率,产生信号的变化率。
(2)Starttime:信号开始产生的时间。
(3)Initialoutput:信号初始值。该函数逼近模型输入信号x的取值范围是[-2,2],仿真程序默认运行时间为10s,所以Slope设置为0.4,Starttime设置为0,Initialoutput设置为-2,结果如图14-2所示。46
图14-23函数逼近的仿真模型图47图14-24输入模块参数设置482.模型仿真点击运行按钮进行模型仿真,仿真结束后,首先双击示波器“Scopel”验证输入信号是否满足条件,如图14-25所示。
图14-25输入信号图49由图14-25可以看出,函数逼近网络模型的输入信号的范围是[-2,2],符合假设的输入信号条件。在验证了输入信号满足要求后,双击示波器“Scope2”观察输出结果,波形图如图14-26所示。图14-26输出波形图50通过改变网络结构中权值和偏置值的大小,可以改变网络输出曲线的陡度和位置。假设函数逼近模型网络中的参数取值范围分别为下面搭建不同的模型来验证这一结论。
(1)改变隐含层到输出层的权值,分别取权值w的值为-1、0和1。则Simulink仿真模型如图14-27所示,示波器显示输出的结果如图14-28所示。14.5.2改变参数的模型及仿真51图14-27改变权值的仿真模型图52图14-28改变权值的结果图53(2)改变隐含层到输出层的权值,分别取权值w的值为-1、0和1。同理,搭建新的仿真模型,则改变权值的示波器显示的输出结果如图14-29所示。图14-29改变权值的结果图54(3)改变隐含层的偏置值,分别取值为1、5和10。则改变偏置值的示波器显示的输出结果如图14-30所示。
图14-30改变偏置值的结果图55(4)改变输出层的偏置值,分别取值为-1、0和1。则改变偏置值的示波器显示的输出结果如图14-31所示。
图14-31改变偏置值的结果图56综上所述,图14-28和图14-29说明网络的权值如何改变每步曲线的陡度,图14-30说明了网络隐含层如何利用偏置值来确定每一步曲线的位置,图14-31说明了网络输出层的偏置值如何影响网络的响应曲线上移或下移。从以上的Simulink仿真模型可以看出多层网络的灵活性,只要在隐含层中有足够数量的神经元,就可以用这样的网络来逼近几乎任何一个函数。5714.6应用案例
虽然Simulink中提供了网络输人函数、传递函数、权值函数等神经网络的基本组件,但是在多数情况下用户并不需要用这些组件来构造神经网络模型,而是通过MATLAB命令窗口或者编程首先完成网络的设计,然后使用gensim函数生成神经网络的仿真模块,最后进人Simulink系统进行仿真。
在第11章的应用案例中,使用Elman神经网络用于振幅检测,该章节已经完成了网络设计,把该文件另存为sl5_6,然后在MATLAB命令窗口中加载新文件。
>>s14_6>>who58您的变量为:59该神经网络已经经过了训练和仿真,其仿真结果如图14-32所示。可以看出,Elman神经网络对输入信号振幅的检测效果是比较好的,基本完成了信号的振幅检测。接下来在Simulink环境下完成该网络的动态仿真。
图14-32Elman神经网络振幅检测60MATLAB命令窗口加载完成设计好神经网络后,使用函数gensim生成神经内网络仿真模块,因为Elman神经网络内部具有延时单元,所以只能采用离散采样。假设离散采样时间为0.05s,在命令窗口输入命令>>gensim(net,0.05)此时,屏幕弹出两个窗口,一个是神经网络模型库(Library:neural)窗口,如图14-33所示。另一个是Simulink系统仿真窗口,如图1
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 由员工经营公司合同协议
- 热水器安装安全协议合同
- 深水井打井合同协议范本
- 牙科技术入股合作协议书
- 潍坊修剪车采购合同范本
- 香港化验所转让合同范本
- 杂志社与代理的合同协议
- 洪山区口译服务合同范本
- 苏州技师学院就业协议书
- 舞蹈培训机构合同协议书
- T-GDWJ 021-2024 医疗机构智慧院区建设规范
- 《银行业从业人员职业操守和行为准则》课件
- 《大学生心理健康教育(兰州大学版)》章节测试题及答案
- 食品生产与销售合作协议
- 2022版义务教育(道德与法治)课程标准(附课标解读)
- 阴茎癌诊断治疗指南版
- 重症医学科质量持续改进PDCA案例-降低中心静脉导管相关血流感染千日感染率
- (完整版)桥梁挂篮施工方案
- 律师发展与行业痛点分析
- 2023拖车运输合同
- 大报告厅EASE声场模拟分析
评论
0/150
提交评论