940 likes | 1.29k Views
Matlab 在建模仿真中的应用. 建模仿真技术概述. 1. 仿真的概念. 仿真是以相似性原理、控制论、信息技术及相关领域的有关知识为基础,以计算机和各种专用物理设备为工具,借助系统模型对真实系统进行试验研究的一门综合性技术。它利用物理或数学方法来建立模型,类比模拟现实过程或者建立假想系统,以寻求过程的规律,研究系统的动态特性,从而达到认识和改造实际系统的目的。.
E N D
1.仿真的概念 仿真是以相似性原理、控制论、信息技术及相关领域的有关知识为基础,以计算机和各种专用物理设备为工具,借助系统模型对真实系统进行试验研究的一门综合性技术。它利用物理或数学方法来建立模型,类比模拟现实过程或者建立假想系统,以寻求过程的规律,研究系统的动态特性,从而达到认识和改造实际系统的目的。
相似性原理是仿真主要的理论依据。所谓相似,是指各类事务或对象间存在的某些共性。相似性是客观世界的一种普遍现象,它反映了客观世界不同事物之间存在着某些共同的规律。采用相似性技术建立实际系统的相似模型就是仿真的本质过程。相似性原理是仿真主要的理论依据。所谓相似,是指各类事务或对象间存在的某些共性。相似性是客观世界的一种普遍现象,它反映了客观世界不同事物之间存在着某些共同的规律。采用相似性技术建立实际系统的相似模型就是仿真的本质过程。
2. 仿真分类 按照实现方式的不同可以将系统仿真分为如下几类: (1) 实物仿真:又称物理仿真。它是指研制某些实体模型,使之能够重现原系统的各种状态。早期的仿真大多属于这一类。它的优点是直观形象,至今仍然广泛应用。但是为系统构造一套物理模型,将是一件非常复杂的事情,投资巨大,周期长,且很难改变参数,灵活性差。
(2) 数学仿真:数学仿真就是用数学语言去表述一个系统,并编制程序在计算机上对实际系统进行研究的过程。这种数学表述就是数学模型。数学仿真把研究对象的结构特征或者输入输出关系抽象为一种数学描述(微分方程、状态方程,可分为解析模型、统计模型)来研究,具有很大的灵活性,它可以方便地改变系统结构、参数;而且速度快,可以在很短的时间内完成实际系统很长时间的动态演变过程;精确度高,可以根据需要改变仿真的精度;重复性好,可以很容易地再现仿真过程。
3) 半实物仿真:又称数学物理仿真或者混合仿真。为了提高仿真的可信度或者针对一些难以建模的实体,在系统研究中往往把数学模型、物理模型和实体结合起来组成一个复杂的仿真系统,这种在仿真环节中存在实体的仿真称为半实物仿真或者半物理仿真。这样的仿真系统有飞机半实物仿真、射频制导导弹半实物仿真等,并且许多模拟器也属于半实物仿真。
3.计算机仿真 计算机仿真是在研究系统过程中根据相似原理,利用计算机来逼真模拟研究对象。研究对象可以是实际的系统,也可以是设想中的系统。在没有计算机以前,仿真都是利用实物或者它的物理模型来进行研究的,即物理仿真。物理仿真的优点是直接、形象、可信,缺点是模型受限、易破坏、难以重用。
计算机作为一种最重要的仿真工具,已经推出了模拟机、模拟数字机、数字通用机、仿真专用机等各种机型并应用在不同的仿真领域。除了计算机这种主要的仿真工具外还有两类专用仿真器:一类是专用物理仿真器,如在飞行仿真中得到广泛应用的转台,各种风洞、水洞等;另一类是用于培训目的的各种训练仿真器,如培训原子能电站、大型自动化工厂操作人员和训练飞行员、宇航员的培训仿真器、仿真工作台和仿真机舱等计算机作为一种最重要的仿真工具,已经推出了模拟机、模拟数字机、数字通用机、仿真专用机等各种机型并应用在不同的仿真领域。除了计算机这种主要的仿真工具外还有两类专用仿真器:一类是专用物理仿真器,如在飞行仿真中得到广泛应用的转台,各种风洞、水洞等;另一类是用于培训目的的各种训练仿真器,如培训原子能电站、大型自动化工厂操作人员和训练飞行员、宇航员的培训仿真器、仿真工作台和仿真机舱等
4.仿真的作用 仿真技术具有很高的科学研究价值和巨大的经济效益。由于仿真技术的特殊功效,特别是安全性和经济性,使得仿真技术得到广泛的应用。首先由于仿真技术在应用上的安全性,使得航空、航天、核电站等成为仿真技术最早的和最主要的应用领域
归纳起来,仿真技术的主要用途有如下几点: (1) 优化系统设计。 (2) 系统故障再现,发现故障原因 (3) 验证系统设计的正确性。 (4) 对系统或其子系统进行性能评价和分析。 (5) 训练系统操作员。 (6) 为管理决策和技术决策提供支持。
动态系统的Simulink仿真 Simulink的介绍与简单例子
What’s Simulink 一种用来实现计算机仿真的软件工具;Matlab的一个附加组件;提供一个系统级的建模与动态仿真平台;应用领域广泛 1 特点:基于矩阵的数值计算;高级编程语言;图形与可视化;工具箱提供面向具体应用领域的功能;丰富的数据I/O 工具;提供与其它高级语言的接口;支持多平台(PC / Macintosh / UNIX);开放与可扩展的体系结构 2 使用Simulink来建模、仿真和分析各种动态系统(包括连续系统、离散系统和混合系统),将是一件轻松的事情 3
启用Simulink并建立系统模型 • 启动Simulink有两种方式: • 用命令行方式启动Simulink。(>>simulink) • 使用工具栏按钮启动Simulink • 建立系统模型,完成Simulink系统模型的编辑之后,需要保存系统模型,然后设置模块参数与系统仿真参数,最后便可以进行系统的仿真。
Simulink模块库简介与使用 Simulink的模块库浏览器
构建Simulink框图 创建模型 添加模块 连接模块 设置仿真参数 运行模型仿真 运行结果图示
Simulink是如何工作的 模型基本结构 信号源模块 被模拟的系统模块 输出显示模块 系统的输入,包括常数信号源,函数信号发生器和自定义信号 中心模块,仿真建模主要部分 显示形式包括图形显示,示波器显示和输出到文件或Matlab工作间 仿真运行原理 模块初始化 模型执行 确定模块更新次序
Simulink使用实例 一个生长在罐中的细菌的简单模型 假设细菌的出生率和当前细菌的总数成正比,且死亡率和当前的总数的平方成正比。若比x代表当前细菌的总数,则细菌的出生率表示为: birth_rate=bx 细菌的死亡率表示为 death_rate=px² 细菌数量的总变化率可表示为出生率与死亡率之差。于是此系统可表示为如下的微分方程: x´=∂x/∂t=bx-px² 假设b=1/h,p=0.5/h,当前细菌的总数为100,计算一个小时后罐中的细菌总数。 解:解答此题只需对x´从0到1积分。 创建Simulink模型 1.添加模块(积分模块,两个增益模块,求和模块,乘法模块,示波器模块) 2.连接模块 3.设置仿真参数(增益参数,求和模块,初始化变量—积分模块,终止时间—模型参数 ) 4.运行模型
模块连接解释 × x´=∂x/∂t=bx-px² 0.5 Product Gain - 1 - + S Sum Integrator Scope Gain1
微分方程的Simulink建模与求解 建立起微分方程的 Simulink 模型 可以用 sim( ) 函数对其模型直接求解 得出微分方程的数值解
例: 求解Lorenz模型的状态方程,初值为 求解Lorenz模型的状态方程, 编写函数: function xdot = lorenzeq(t,x) xdot=[-8/3*x(1)+x(2)*x(3); -10*x(2)+10*x(3); -x(1)*x(2)+28*x(2)-x(3)];
>>t_final=100; x0=[0;0;1e-10]; [t,x]=ode45('lorenzeq',[0,t_final],x0); plot(t,x); figure; % 打开新图形窗口 plot3(x(:,1),x(:,2),x(:,3)); axis([10 42 -20 20 -20 25]); % 根据实际数值手动 设置坐标系 comet3(x(:,1),x(:,2),x(:,3));
当然我们可以直接观察Matlab工具箱原有的Lorenz • 输入 • >>Lorenz;
下面我们用Simulink来进行仿真,并进行比较 把下面的函数写入到M文件,命名Lorenz1,方便调用; >>beta=8/3;rho=10;sigma=28; [t,x]=sim('c7mlor1b',[0,100]);plot(t,x);figure;comet3(x(:,1),x(:,2),x(:,3)); >>%comet,采用动画效果 结果我们在Matlab实现 我们在命令窗口输入: >>Lorenz1;
【例】求解延迟微分方程式,用Simulink搭建微分方程模型,并得出其数值解【例】求解延迟微分方程式,用Simulink搭建微分方程模型,并得出其数值解 第一个方程式变换成: 求解: 将方程理解成想x(t)为传递函数模型1/(s+3)的输出信号,而该函数的输入信号为上式的右边。第二个方程可以理解为:y(t)是传递函数模块4/(s^2+3s+2)的输出信号而该模块的输入信号为x(t),在x(t)和y(t)信号上连接延迟模块Transport Delay可以得出信号的延迟。
主要模块 当然,先把输出函数放到M文件里,方便调用 Delay.m >>[t,x]=sim('c7mdde2',[0,10]);plot(t,x) 结果显示双击Scope即可
我们也可以用上例的方法,选择三个状态变量选择三个积分器,做出Simulink模型我们也可以用上例的方法,选择三个状态变量选择三个积分器,做出Simulink模型 一阶状态方程模型:
【例】 这类微分方程又称作中性延迟微分方程,所以单纯采用dde23()(隐式龙格-库塔)无法解,但是可以通过建模求解,考虑原始方程,可以安排一个积分器,使得其输出为x(t),其输入自然为x‘(t),分别给这两个信号连接延迟环节,并设置延迟常数搭建模型如下
非线性分数阶微分方程近似解法 • 利用 Oustaloup 滤波器近似,可以构造出 • Simulink 模块 • c10mfode.mdl • 模块可以直接应用与建模
采用Simulink的模块封装技术 封装模块 分数阶微分滤波器 要求双击封装模块时显示的是右边的对话框,即允许用户填写设计Oustaloup滤波器所需的参数。
下面我们在模块封装初始化栏目应该填写下图所示语句,以便在使用模块前先自动设计出滤波器,并根据阶次正确显示图标(Edit mask ) 注意这里调用了ousta_fod函数,我们将在M文件里给出
【例】求解分数阶线性微分方程 选择: 变换: 模型:c10mfode1.mdl
【例10-41】求解分数阶非线性微分方程 模型: c10mfode2.mdl
MATLAB数字电路仿真 组合逻辑电路设计和仿真 • 编码器的设计 • 所谓编码,就是在选定的一系列二值代码中赋予每个代码固定的含义,执行编码功能的电路统称为编码器。 • 例如键盘电路就应用了编码器,当我们敲击“a”键时,键盘送入电脑的只是一个脉冲值,而最后显示在屏幕上的确实ASCII码字符,这中间就是通过了一个编码器,该电路将键盘送入的脉冲信号转化为对应的ASCII码。 • 本中将要实现的是8线3线编码器,他的功能是对输入断的8个信号进行编码,输出三位二进制数。要求输入信号每次只有一个是0,其余7个1.其中值为0的信号是待编的信号。 • 主要模块:逻辑运算模块(即与非 门,4个,logioal Operator);离散信号激励源(Discrete Pulse Generator);示波器(Scope)
真值表 逻辑表达式:
实现步骤: (1)添加模块; • (2)设置模块参数:双击模块如图设置
Amplitude:方波信号的幅度 Period:方波信号的周期(以采样时间为单位) Pulse width:脉冲宽度(即电平为1的时间) Phase delay:相位延迟(即开始的时间) Sample Time:采取时间长度,单位为秒 J0到J7要求为低电平,所以将它们周期设为8,脉冲宽度为7,相位延迟依次为-7到0,这样在0时刻J0为低电平,其余为高;过一个采样时间J1为低电平,其余为高,一直下去。 (3)Ctrl+e运行
从J0到J1以8为周期,依次出现0电平 由图中可以清楚的看出,输出的三位二进制码(Y2Y1Y0)依次为:000、001、010、011、100、101、110、111
真值表(*表示任意值(0或1)) 译码器的设计 原理和编码器一样 • 模块多了个常数源(constant) 逻辑表达式: A2,A1,A0的周期设为2,脉宽1,采样时间分为4,2,1,这样A2,A1,A0构成的三位二进制数将以8为周期,从000-111,即第一秒为001,第八秒为111,然后第九秒为000,循环。S1周期为12,脉宽11,采样时间为1,其余不变
在输入波形图中,三位二进制数A2A1A0的确是从000到111,控制信号S也的确在11—12秒之间产生一个负脉冲,这个负脉冲将3线8线译码器置为不工作的状态。可以预见,在输出波形的11-12秒间,8个输出应该都是1.在输出的图上我们看到,输入的三位二进制代码分别被“翻译”成了8种不同的输出,在输入波形图中,三位二进制数A2A1A0的确是从000到111,控制信号S也的确在11—12秒之间产生一个负脉冲,这个负脉冲将3线8线译码器置为不工作的状态。可以预见,在输出波形的11-12秒间,8个输出应该都是1.在输出的图上我们看到,输入的三位二进制代码分别被“翻译”成了8种不同的输出, 即Y0到Y7依次为低电平,同时我们注意到 在11-12秒中间,8个输出都变成了高电平 ,这反映了控制端的作用。
全加器设计 B=1,Y= A • 1.一位全加器的设计 • 首先我们设计一位的不带进位的加法器,半加器,就是一个与或运算 B=0,Y=A 下面我们看一位全加器,有三个输入,分别是A、B和来自低位的进位C;还有两个输出端,分别是和数S以及向高位的进位D。真值表为
模块主要有逻辑运算模块,离散脉冲源,示波器,子系统;模块主要有逻辑运算模块,离散脉冲源,示波器,子系统; 四位全加器脉冲源参数设置 子系统
从这个波形图我们可以读出加数的值,从而可以做一下计算,看一下理论上的结果应该是怎样,再与电路输出的波形进行比较。理论计算结果如下:从这个波形图我们可以读出加数的值,从而可以做一下计算,看一下理论上的结果应该是怎样,再与电路输出的波形进行比较。理论计算结果如下: 0~5秒 A3A2A1A0=0001 B3B2B1B0=0001 DS3S2S1S0=00010 5~10秒 A3A2A1A0=0010 B3B2B1B0=0011 DS3S2S1S0=00101 10~15秒 A3A2A1A0=0100 B3B2B1B0=0111 DS3S2S1S0=01011 15~20秒 A3A2A1A0=1000 B3B2B1B0=1110 DS3S2S1S0=10110 双击示波器Scope打开输出波形,可以看出我们的计算和实际输出是一致的,从而实现我们的仿真。