版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
第7章Simulink的應(yīng)用
7.1Simulink工作平臺的啟動
7.2Simulink仿真原理7.3Simulink模塊庫7.4仿真模型的建立和模塊參數(shù)及屬性的設(shè)置7.5其他應(yīng)用模塊集及Simulink擴展庫
Simulink是采用模塊組合的方法來創(chuàng)建動態(tài)系統(tǒng)的計算機模型,其主要特點是快速、準確。對于比較復(fù)雜的非線性系統(tǒng),效果更為明顯。Simulink可以用于模擬線性與非線性系統(tǒng),連續(xù)與非連續(xù)系統(tǒng),或它們的混合系統(tǒng)。除此之外,它還提供了圖形動畫處理方法,以方便用戶觀察系統(tǒng)仿真的整個過程。7.1Simulink的功能7.1Simulink工作平臺啟動Simulink,通常有兩種方法:(1)在MATLAB命令窗口中直接輸入Simulink命令;(2)在MATLAB工具欄上單擊Simulink按鈕,如圖7.1所示。
圖7.1啟動Simulink
這樣就可打開了Simulink的SimulinkLibraryBrower(庫模塊瀏覽器),如圖7.2所示。在菜單欄中執(zhí)行File/New/Model命令,就建立了一個名為untitled的模型窗口,如圖7.3所示。在建立了空的模塊窗口后,用戶可以在此窗口中創(chuàng)建自己需要的Simulink模型。圖7.2庫模塊瀏覽器
圖7.3新建的空白模塊窗口
7.2
Simulink的仿真原理7.2.1Simulink仿真模塊通常,Simulink仿真系統(tǒng)包括輸入(Input)、狀態(tài)(states)和輸出(Output)三個部分?!ぽ斎肽K:即信號源模塊,包括常數(shù)字信號源和用戶自定義信號;·狀態(tài)模塊:即被模擬的系統(tǒng)模塊,是系統(tǒng)建模的核心和主要部分;·輸出模塊:即信號顯示模塊,它能夠以圖形方式、文件格式進行顯示。注意:在設(shè)計一個模型時,必須先確定這三個部分的意義,以及它們之間的聯(lián)系;Simulink的仿真模型并非一定要完全包括這三個部分,它可以缺少其中一個或者兩個;Simulink的狀態(tài)模塊可以是連續(xù)的、離散的,或者它們二者的結(jié)合。三個量之間的關(guān)系可以用下面方程來述:
t是當(dāng)前時間矢量,x是當(dāng)前狀態(tài)矢量,u是輸入矢量,y是輸出矢量,xd是派生的離散狀態(tài)矢量,xc是派生的連續(xù)狀態(tài)矢量。7.2
Simulink的仿真原理7.2.2Simulink仿真過程1.初始化階段①對模型的參數(shù)進行估計,得到它們實際計算的值。②展開模型的各個層次;③按照更新的次序?qū)δP瓦M行排序;④確定那些顯式化的信號屬性,并檢查每個模塊是否能夠接受連接它們輸入端的信號;⑤確定所有非顯式的信號采樣時間模塊的采樣時間;⑥分配和初始化存儲空間,以便存儲每個模塊的狀態(tài)和當(dāng)前值的輸出。7.2.2Simulink仿真過程2.模型執(zhí)行階段模型仿真是通過數(shù)值積分來進行完成的,計算數(shù)值積分可以采用以下兩步來進行:①按照秩序計算每個模塊的積分;②根據(jù)當(dāng)前輸入和狀態(tài)來決定狀態(tài)的微分,得到微分矢量,然后把它返回給解法器,以計算下一個采樣點的狀態(tài)矢量。在每一個時間步中,Simulink依次解決下列問題:
·按照秩序更新模塊的輸出;
·按照秩序更新模塊的狀態(tài);
·檢查模塊連續(xù)狀態(tài)的不連續(xù)點;
·計算下一個仿真時間步的時間。7.3.1連續(xù)模塊庫(Continuous)
在連續(xù)模塊(Continuous)庫中包括了常見的連續(xù)模塊,這些模塊如圖所示。
7.3Simulink模塊庫
在庫模塊瀏覽器中單擊Simulink前面的“+”號,就能夠看到Simulink的模塊庫,如圖7.2所示。
4.傳遞函數(shù)模塊(TransferFcn)功能:用執(zhí)行一個線性傳遞函數(shù)。5.零極點傳遞函數(shù)模塊(Zero-Pole)功能:用于建立一個預(yù)先指定的零點、極點,并用延遲算子s表示的連續(xù)。6.存儲器模塊(Memory)功能:保持輸出前一步的輸入值。7.傳輸延遲模塊(TransportDelay)功能:用于將輸入端的信號延遲指定的時間后再傳輸給輸出信號。8.可變傳輸延遲模塊(VariableTransportDelay)功能:用于將輸入端的信號進行可變時間的延遲。1.積分模塊(Integrator):功能:對輸入變量進行積分。說明:模塊的輸入可以是標量,也可以是矢量;輸入信號的維數(shù)必須與輸入信號保持一致。2.微分模塊(Derivative)功能:通過計算差分?u/
?t近似計算輸入變量的微分。3.線性狀態(tài)空間模塊(State-Space)功能:用于實現(xiàn)以下數(shù)學(xué)方程描述的系統(tǒng):7.3.2離散模塊庫(Discrete)
離散模塊庫(Discrete)主要用于建立離散采樣的系統(tǒng)模型,包括的主要模塊,如圖所示。1.零階保持器模塊(Zero-Order-Hold)功能:在一個步長內(nèi)將輸出的值保持在同一個值上。2.單位延遲模塊(UnitDelay)功能:將輸入信號作單位延遲,并且保持一個采樣周期相當(dāng)于時間算子z-1
。3.離散時間積分模塊(DiscreteTimeIntegrator)功能:在構(gòu)造完全離散的系統(tǒng)時,代替連續(xù)積分的功能。使用的積分方法有:向前歐拉法、向后歐拉法、梯形法。4.離散狀態(tài)空間模塊(DiscreteStateSpace)功能:用于實現(xiàn)如下數(shù)學(xué)方程描述的系統(tǒng):5.離散濾波器模塊(DiscreteFilter)功能:用于實現(xiàn)無限脈沖響應(yīng)(IIR)和有限脈沖響應(yīng)(FIR)的數(shù)字濾波器。6.離散傳遞函數(shù)模塊(DiscreteTransferFcn)功能:用于執(zhí)行一個離散傳遞函數(shù)。7.離散零極點傳遞函數(shù)模塊(DiscreteZero-Pole)功能:用于建立一個預(yù)先指定的零點、極點,并用延遲算子z-1表示的離散系統(tǒng)。8.一階保持器模塊(FirstOrderHold)功能:在一定時間間隔內(nèi)保持一階采樣。7.3.3函數(shù)與表格模塊庫(Function&Table)
函數(shù)與表格模塊庫(Function&Table)主要實現(xiàn)各種一維、二維或者更高維函數(shù)的查表,另外用戶還可以根據(jù)自己需要創(chuàng)建更復(fù)雜的函數(shù)。該模塊庫包括多個主要模塊、如圖7.7所示。1.一維查表模塊(Look-UpTable)
一維查表模塊(Look-UpTable)實現(xiàn)對單路輸入信號的查表和線性插值。2.二維查表模塊(Look-UpTable2-D)功能:根據(jù)給定的二維平面網(wǎng)格上的高度值,把輸入的兩個變量經(jīng)過查表、插值,計算出模塊的輸出值,并返回這個值。說明:對二維輸入信號進行分段線性變換。3.自定義函數(shù)模塊(Fcn)功能:用于將輸入信號進行指定的函數(shù)運算,最后計算出模塊的輸出值。說明:輸入的數(shù)學(xué)表達式應(yīng)符合C語言編程規(guī)范;與MATLAB中的表達式有所不同,不能完成矩陣運算。4.MATLAB函數(shù)模塊(MATLABFcn)功能:對輸入信號進行MATLAB函數(shù)及表達式的處理。說明:模塊為單輸入模塊;能夠完成矩陣運算。注意:從運算速度角度,Mathfunction模塊要比Fcn模塊慢。當(dāng)需要提高速度時,可以考慮采用Fcn
或者S函數(shù)模塊。5.S-函數(shù)模塊(S-Function)功能:按照Simulink標準,編寫用戶自己的Simulink函數(shù)。它能夠?qū)ATLAB語句、C語言等編寫的函數(shù)放在Simulink模塊中運行,最后計算模塊的輸出值。7.3.4數(shù)學(xué)模塊庫(Math)
數(shù)學(xué)模塊庫(Math)包括多個數(shù)學(xué)運算模塊,如圖7.8所示。3.矢量的點乘模塊(DotProduct)功能:矢量的點乘模塊(DotProduct)用于實現(xiàn)輸入信號的點積運算。4.增益模塊(Gain)功能:增益模塊(Gain)的作用是把輸入信號乘以一個指定的增益因子,使輸入產(chǎn)生增益。1.求和模塊(Sum)功能:求和模塊(Sum)用于對多路輸入信號進行求和運算,并輸出結(jié)果。2.乘法模塊(Product)功能:乘法模塊(Product)用于實現(xiàn)對多路輸入的乘積、商、矩陣乘法或者模塊的轉(zhuǎn)置等。5.常用數(shù)學(xué)函數(shù)模塊(MathFunction)功能:用于執(zhí)行多個通用數(shù)學(xué)函數(shù),其中包含exp、log、log10、square、sqrt、pow、reciprocal、hypot、rem、mod等。6.三角函數(shù)模塊(TrigonometricFunction)功能:用于對輸入信號進行三角函數(shù)運算,共有10種三角函數(shù)供選擇。7.特殊數(shù)學(xué)模塊特殊數(shù)學(xué)模塊中包括求最大最小值模塊(MinMax)、取絕對值模塊(Abs)、符號函數(shù)模塊(Sign)、取整數(shù)函數(shù)模塊(RoundingFunction)等。8.數(shù)字邏輯函數(shù)模塊數(shù)字邏輯函數(shù)模塊包括復(fù)合邏輯模塊(CombinationalLogic)、邏輯運算符模塊(LogicalOperator)、位邏輯運算符模塊(BitwiseLogicalOperator)等。9.關(guān)系運算模塊(RelationalOperator)
關(guān)系符號包括:==(等于)、≠(不等于)、<(小于)、<=(小于等于)、>(大于)、>=(大于等于)等。10.復(fù)數(shù)運算模塊復(fù)數(shù)運算模塊包括計算復(fù)數(shù)的模與幅角(ComplextoMagnitude-Angle)、由模和幅角計算復(fù)數(shù)(Magnitude-AngletoComplex)、提取復(fù)數(shù)實部與虛部模塊(ComplextoRealandImage)、由復(fù)數(shù)實部和虛部計算復(fù)數(shù)(RealandImagetoComplex)。7.3.5非線性模塊(Nonlinear)非線性模塊(Nonlinear)中包括一些常用的非線性模塊,如圖7.9所示。1.比率限幅模塊(RateLimiter)功能:用于限制輸入信號的一階導(dǎo)數(shù),使得信號的變化率不超過規(guī)定的限制值。2.飽和度模塊(Saturation)功能:用于設(shè)置輸入信號的上下飽和度,即上下限的值,來約束輸出值。3.量化模塊(Quantizer)功能:用于把輸入信號由平滑狀態(tài)變成臺階狀態(tài)。4.死區(qū)輸出模塊(DeadZone)功能:在規(guī)定的區(qū)內(nèi)沒有輸出值。5.繼電模塊(Relay)功能:繼電模塊(Relay)用于實現(xiàn)在兩個不同常數(shù)值之間進行切換。6.選擇開關(guān)模塊(Switch)功能:根據(jù)設(shè)置的門限來確定系統(tǒng)的輸出。7.3.6信號與系統(tǒng)模塊庫(signals&Systems)信號與系統(tǒng)模塊庫(signals&Systems)包括的主要模塊如圖7.11所示。1.Bus信號選擇模塊(BusSelector)功能:用于得到從Mux模塊或其它模塊引入的Bus信號。2.混路器模塊(Mux)功能:把多路信號組成一個矢量信號或者Bus信號。3.分路器模塊(Demux)功能:把混路器組成的信號按照原來的構(gòu)成方法分解成多路信號。4.信號合成模塊(Merge)功能:把多路信號進行合成一個單一的信號。5.接收/傳輸信號模塊(From/Goto)功能:接收/傳輸信號模塊(From/Goto)常常配合使用,F(xiàn)rom模塊用于從一個Goto模塊中接收一個輸入信號,Goto模塊用于把輸入信號傳遞給From模塊。6.初始值設(shè)定模塊(IC)功能:初始值設(shè)定模塊(IC)用于設(shè)定與輸出端口連接的模塊的初始值。7.3.7信號輸出模塊(Sinks)
信號輸出模塊(Sinks)包括的主要模塊如圖7.12所示。圖7.12輸出顯示模塊庫1.示波器模塊(Scope)功能:顯示在仿真過程中產(chǎn)生的輸出信號,用于在示波器中顯示輸入信號與仿真時間的關(guān)系曲線,仿真時間為x軸。2.二維信號顯示模塊(XYGraph)功能:在MATLAB的圖形窗口中顯示一個二維信號圖,并將兩路信號分別作為示波器坐標的x軸與y軸,同時把它們之間的關(guān)系圖形顯示出來。3.顯示模塊(Display)功能:按照一定的格式顯示輸入信號的值??晒┻x擇的輸出格式包括:short、long、short_e、long_e、bank等。4.輸出到文件模塊(ToFile)功能:按照矩陣的形式把輸入信號保存到一個指定的MAT文件。第一行為仿真時間,余下的行則是輸入數(shù)據(jù),一個數(shù)據(jù)點是輸入矢量的一個分量。5.輸出到工作空間模塊(ToWorkspace)功能:把信號保存到MATLAB的當(dāng)前工作空間,是另一種輸出方式。6.終止信號模塊(Terminator)功能:中斷一個未連接的信號輸出端口。7.結(jié)束仿真模塊(Stopsimulation)功能:停止仿真過程。當(dāng)輸入為非零時,停止系統(tǒng)仿真。7.3.8信號源模塊庫(Sources)信號源模塊庫(Sources)包括的主要模塊如圖7.13所示。圖7.13信號源模塊庫1.輸入常數(shù)模塊(Constant)功能:產(chǎn)生一個常數(shù)。該常數(shù)可以是實數(shù),也可以是復(fù)數(shù)。2.信號源發(fā)生器模塊(SignalGenerator)功能:產(chǎn)生不同的信號,其中包括:正弦波、方波、鋸齒波信號。3.從文件讀取信號模塊(FromFile)功能:從一個MAT文件中讀取信號,讀取的信號為一個矩陣,其矩陣的格式與ToFile模塊中介紹的矩陣格式相同。如果矩陣在同一采樣時間有兩個或者更多的列,則數(shù)據(jù)點的輸出應(yīng)該是首次出現(xiàn)的列。4.從工作空間讀取信號模塊(FromWorkspace)功能:從MATLAB工作空間讀取信號作為當(dāng)前的輸入信號。5.隨機數(shù)模塊(RandomNumber)功能:產(chǎn)生正態(tài)分布的隨機數(shù),默認的隨機數(shù)是期望為0,方差為1的標準正態(tài)分布量。6.帶寬限制白噪聲模塊(BandLimitedWhiteNoise)功能:實現(xiàn)對連續(xù)或者混雜系統(tǒng)的白噪聲輸入。7.其它模塊除以上介紹的常用模塊外,還包括其模塊。各模塊功能可通過以下方法查看:先進入Simulink工作窗口,在菜單中執(zhí)行Help/SimulinkHelp命令,這時就會彈出Help界面。然后用鼠標展開UsingSimulink\BlockReference\SimulinkBlockLibraries就可以看到Simulink的所有模塊。查看相應(yīng)的模塊的使用方法和說明信息即可。
7.4仿真模型的建立與模塊參數(shù)與屬性的設(shè)置1.仿真模塊的建立首先啟動Simulink命令,建立一個空的模塊窗口“untitled”,然后利用Simulink提供的模塊庫,在此窗口中創(chuàng)建自己需要的Simulink模型。具體方法:在模塊庫瀏覽器中找到所需模塊,選中該模塊后右擊鼠標,把它加入到一個模型窗口中即可完成模塊的建立。
圖7.14添加模塊
2.模塊參數(shù)與屬性的設(shè)置
方法:在所建立的模型窗口中,選中相應(yīng)的模塊,單擊右擊鼠標,在彈出的快捷菜單中單擊“Blockparameters”選項(如圖7.15所示),即可打開該模塊的參數(shù)設(shè)置對話框,如圖7.16(a)所示。右擊鼠標,在彈出的快捷菜單中單擊“BlockProperties”選項,即可打開該模塊的屬性設(shè)置對話框,如圖7.16(b)所示。圖7.15Blockparamenters選項
3.模塊的連接
一般情況下,每個模塊都有一個或者多個輸入口或者輸出口。輸入口通常是模塊的左邊的“>”符號;輸出口是右邊的“>”符號。
模塊的連接方法:把鼠標指針放到模塊的輸出口,這時,鼠標指針將變?yōu)椤?”十字形;然后,拖運鼠標至其它模塊的輸入口,這時信號線就變成了帶有方向箭頭的線段。此時,說明這兩個模塊的連接成功,否則需要重新進行連接。4.運行仿真在運行仿真之前,首先保存已設(shè)置和連接的模型,然后就可以運行仿真。值得注意的是,在本例中,我們只對模塊參數(shù)進行了設(shè)置,對仿真平臺的仿真參數(shù)沒有設(shè)置,而是采用了默認值。然而,在實際應(yīng)用中,對仿真參數(shù)以及Scope模塊參數(shù)的設(shè)置卻非常重要,下面仍然以[例7-1]為例,對這兩種參數(shù)的設(shè)置作詳細介紹。
2.仿真參數(shù)及Scope模塊參數(shù)的設(shè)置(1)設(shè)置仿真參數(shù)通常,當(dāng)設(shè)置完成各功能模塊的屬性參數(shù)后,在仿真啟動前還需要完成仿真時間、仿真解算器等相關(guān)仿真參數(shù)的設(shè)置。
在仿真模型窗口中,點擊窗口中的“Simulation”按鈕,如圖7.23(a)所示,點擊“SimulationParameters”按鈕,彈出一個名為“SimulationParametersxxxx”的對話窗口,如圖7.23(b)所示。在該對話框中,主要涉及Solver(仿真解算器)、WorkspaceI/O(工作空間接口)、Diagnostics(診斷方式)、Advanced(高級設(shè)置)以及Real-timeWorkshop(實時工作)等五個對話單元。
(a)Simulation按鈕下拉菜單
(b)Simulation仿真參數(shù)
圖7.23仿真參數(shù)的設(shè)定對話框
在Solver(仿真解算器)對話框中,它涉及了仿真時間,選擇解算器類型、解算器參數(shù)以及一些輸出選項的選擇,現(xiàn)將它們的使用方法說明如下:
Simulinktime(仿真時間)的輸入欄涉及兩個參數(shù):Statetime(起始時間)、Endtime(結(jié)束時間);在Solveroptions(解算器選項)對話框中,首先是兩個下拉菜單:Type(仿真步長模式)和解算器類型選擇。在Type(仿真步長模式)下拉菜單中有兩種選擇:Variable-step(變步長)和Fixed-step(固定步長)。變步長模式可以在仿真的過程中改變步長,提供誤差控制和過零檢測;固定步長模式在仿真過程中提供固定的步長,不提供誤差控制和過零檢測。在“解算器類型選擇”下拉菜單中,根據(jù)仿真步長模式分了兩大類型。第一類:變步模式的解算器。對于變步模式的解算器類型有:ode45、ode23、ode113、ode15s、ode23s、ode23t、ode23tb和discrete?!de45:它是仿真參數(shù)對話框的缺省值,四/五階龍格-庫塔法,適用于大多數(shù)連續(xù)或離散系統(tǒng),但不適用于剛性(stiff)系統(tǒng)。它是單步解算器,即在計算時,它僅需要最近處理時刻的結(jié)果。一般來說,面對一個仿真問題最好首選ode45試試。·ode23:二/三階龍格-庫塔法,它在誤差限要求不高和求解的問題不太難的情況下,可能會比ode45更有效。它不適用于剛性系統(tǒng),也是一個單步解算器?!de113:是一種階數(shù)可變的解算器,它的誤差容許要求嚴格的情況下通常比ode45有效。ode113是一種多步解算器,即在計算當(dāng)前輸出時,它需要以前多個時刻的解。它不適用于剛性系統(tǒng)。·ode15s:是一種基于數(shù)字微分公式的解算器(NDFS),也是一種多步解算器,適用于剛性系統(tǒng)。當(dāng)用戶估計要解決的問題比較難,或者不能使用ode45(或使用效果不好)的情況下,可以選用ode15s。·ode23s:是一種單步解算器,專門應(yīng)用于剛性系統(tǒng),在弱誤差允許下的效率優(yōu)于ode15s。它能解決某些ode15s所不能有效解決的剛性問題?!de23t:是梯形規(guī)則的一種自由插值實現(xiàn)。這種解算器適用于求解適度剛性的問題而用戶又需要一個無數(shù)字振蕩的解算器的情況?!de23tb:是TR-BDF2的一種實現(xiàn)。TR-BDF2是具有兩個階段的隱式龍格-庫塔公式?!iscrete:當(dāng)Simulink檢查到模型沒有連續(xù)狀態(tài)時使用它。第二類:固定模式的解算器。對于固定模式的解算器類型有:ode5、ode4、ode3、ode2、ode1和discrete。·ode5:它是仿真參數(shù)對話框的缺省值,是ode45的固定步長版本,適用于大多數(shù)連續(xù)離散系統(tǒng),不適用于剛性系統(tǒng)。·ode4:四階龍格-庫塔法,具有一定計算精度。·ode3:固定步長的二/三階龍格-庫塔法。·ode2:改進的歐拉法。·ode1:歐拉法?!iscrete:是一個實現(xiàn)積分的固定步長解算器,它適合于離散無連續(xù)狀態(tài)的系統(tǒng)。在變步模式下,用戶可以設(shè)置最大的和推薦的初始步長參數(shù),缺省情況下,步長自動地確定,它由值auto表示?!綧aximumstepsize】最大步長參數(shù)。它決定了解算器能夠使用的最大時間步長,它的缺省值為“仿真時間/50”,即整個仿真過程中至少取50個樣點,但這樣的取法對于仿真時間較長的系統(tǒng)則可能帶來取樣點過于稀疏,而使仿真結(jié)果失真。一般建議對于仿真時間不超過15秒的采用默認值即可,對于超過15秒的每秒至少保證5個采樣點,對于超過100秒的,每秒至少保證3個采樣點。【Initialstepsize】最大步長參數(shù)。一般建議使用“auto”默認值即可?!綬elativetolerance】相對誤差。它指誤差相對于狀態(tài)的值,是一個百分比,缺省值為1e-3,表示狀態(tài)的計算值要精確到0.1%。【Absolutiontolerance】絕對誤差。它表示值的門限,或者是在狀態(tài)值為零的情況下,可以接受的誤差。如果它被設(shè)成“auto”,那么Simulink為每一個狀態(tài)設(shè)置初始絕對誤差為1e-6。在固定步長模式下,用戶只有“解算器類型”和“Mode(處理模型)”兩項可供選擇。對于初學(xué)者來說,建議絕大部分使用“Solver”的默認設(shè)置。在Simulink的仿真參數(shù)設(shè)置對話框中,“WorkspaceI/O”是一個較重要的設(shè)置參數(shù),它主要用來設(shè)置Simulink仿真平臺與MATLAB工作空間交換數(shù)據(jù)的有關(guān)選項,如圖7.24的所示,各選項含義如下:【Loadfromworkspace】從工作空間獲取數(shù)據(jù)。當(dāng)選中前面的復(fù)選框即可從MATLAB工作空間獲取時間和輸入變量,一般時間變量定義為t,輸入變量定義為u。Initialstate用來定義獲取的狀態(tài)初始值的變量名?!維avetoworkspace】將仿真數(shù)據(jù)存入工作空間。用來設(shè)置存入MATLAB工作空間的變量類型和變量名,選中變量類型前的復(fù)選框使相應(yīng)的變量有效。一般存往工作空間的變量包括輸出時間向量(Time)、狀態(tài)向量(State)和輸出變量(Output)。Finalstate用來定義從MATLAB工作空間獲得的變量名?!維aveoption】用來設(shè)置存往工作空間的相關(guān)選項。Limitdatapointstolast用來設(shè)定Simulink仿真結(jié)果存往MATLAB工作空間的數(shù)據(jù)點數(shù);Decimation設(shè)定從仿真數(shù)據(jù)中抽取數(shù)據(jù)的采樣因子,它的缺省值為1,即對一個仿真數(shù)據(jù)都保存;若設(shè)為2,則每間隔一個時刻提取仿真數(shù)據(jù)來保存。Format用來說明返回數(shù)據(jù)的格式,包括數(shù)組(Array)、結(jié)構(gòu)(structure)以及帶時間的結(jié)構(gòu)(structurewithtime),初次使用時,建議使用它的默認設(shè)置。其它對話框,在一般的仿真過程中很少使用到,建議使用它的默認設(shè)置。(2)Scope模塊參數(shù)雙擊Scope模塊,就可以打開Scope的顯示界面,如圖7.26所示,點擊它的左上角的“Parameters”按鈕,彈出它的屬性參數(shù)對話框,如圖7.27所示,在Scope模塊的General(通用)參數(shù)中,最重要的就是顯示軸數(shù)“Numberofaxes”。在Simulink中,顯示軸的默認數(shù)為“1”,如果要顯示2個或3個參數(shù)的波形,就需要將顯示軸數(shù)設(shè)為2或3。圖7.26Scope顯示窗口
圖7.27Scope模塊的General參數(shù)設(shè)置窗口
在Scope模塊的Datahistory(數(shù)據(jù)顯示)參數(shù)中(如圖7.28所示),如果要將仿真生成的數(shù)據(jù)保存到MATLAB中的工作空間(Workspace)中去,就需要將“Savedatatoworkspace”選擇欄勾上(√),且需要給這個變量取名,在Simulink中,該變量的默認名為“Scopedata”,讀者可根據(jù)需要自行修改,但所取名需遵循變量命名原則,否則會出錯。在[例7-1]中若按圖7.28所示進行設(shè)置,當(dāng)再次運行仿真模型后,Scope模塊中的數(shù)據(jù)將保存到MATLAB中的工作空間(Workspace)中去,其變量名為“ScopeData”,且為二維向量,如圖7.29所示。
圖7.28Datahistory參數(shù)設(shè)置窗口
圖7.29Workspace顯示傳輸?shù)淖兞?/p>
1.Simulink仿真注意(1)Simulink的數(shù)據(jù)類型由于Simulink在仿真過程中,始終都要檢查模型的類型安全性。模型的類型安全性是指從該模型產(chǎn)生的代碼不出現(xiàn)上溢或者下溢現(xiàn)象,當(dāng)產(chǎn)生溢出現(xiàn)象時,系統(tǒng)將出錯誤。查看模塊的數(shù)據(jù)類型的方法是:在模型窗口的菜單中執(zhí)行Format/PortDataTypes命令,這樣每個模塊支持的數(shù)據(jù)類型就顯示出來了。要取消數(shù)據(jù)類型的查看方式,單擊PortDataTypes去掉其前面的勾號即可。7.4.3Simulink仿真注意與技巧圖7.30查看模塊支持的數(shù)據(jù)類型(2)數(shù)據(jù)的傳輸在仿真過程中,Simulink首先查看有沒有特別設(shè)置的信號的數(shù)據(jù)類型,以及檢驗信號的輸入和輸出端口的數(shù)據(jù)類型是否產(chǎn)生沖突。如果有沖突,Simulink將停止仿真,并給出一個出錯提示對話框,在此對話框中將顯示出錯的信號以及端口,并把信號的路徑以高亮顯示。遇到該情形,必須改變數(shù)據(jù)類型以適應(yīng)模塊的需要。(3)提高仿真速度
Simulink仿真過程,仿真的性能受諸多因素的影響,包括模型的設(shè)計和仿真參數(shù)的選擇等。對于大多數(shù)問題,使用Simulink系統(tǒng)默認的解法和仿真參數(shù)值就能夠比較好地解決。因素及解決方法:(1)仿真的時間步長太小。針對這種情況可以把最大仿真步長參數(shù)設(shè)置為默認值auto。(2)仿真的時間過長??勺们闇p小仿真的時間。(3)選擇了錯誤的解法。針對這種情況可以通過改變解法器來解決。(4)仿真的精度要求過高。仿真時,如果絕對誤差限度太小,則會使仿真在接近零的狀態(tài)附近耗費過多時間。通常,相對誤差限為0.1%就已經(jīng)足夠了。(5)模型包含一個外部存儲塊。盡量使用內(nèi)置存儲模塊。(4)改善仿真精度檢驗仿真精度的方法是:通過修改仿真的相對誤差限和絕對誤差限,并在一個合適的時間跨度反復(fù)運行仿真,對比仿真結(jié)果有無大的變化,如果變化不大,表示解是收斂的。說明仿真的精度是有效的,結(jié)果是穩(wěn)定的。如果仿真結(jié)果不穩(wěn)定,其原因可參是系統(tǒng)本身不穩(wěn)定或仿真解法不適合。如果仿真的結(jié)果不精確,其原因很可能是:(1)模型有取值接近零的狀態(tài)。如果絕對誤差過大,會使仿真在接近零區(qū)域運行的仿真時間太小。解決的辦法是修改絕對誤差參數(shù)或者修改初始的狀態(tài)。(2)如果改變絕對誤差限還不能達到預(yù)期的誤差限,則修改相對誤差限,使可接受的誤差降低,并減小仿真的步長。2.Simulink仿真技巧■連接分支信號線先連接好單根信號線,然后將鼠標指針放在已經(jīng)連接好的信號線上,同時按住“Ctrl”鍵,拖動鼠標,連接到另一個模塊。這樣就可以根據(jù)需由一個信號源模塊,引出多條信號線。如圖7.28所示。圖7.35引出多條信號線示例
■模塊的編輯技巧(1)調(diào)整模塊大小
(2)在同一窗口復(fù)制模塊(3)刪除模塊(4)編輯模塊標簽7.5其它應(yīng)用模塊集和Simulink擴展庫1.通信模塊集(CommunicationsBlockset)圖7.38通信模塊集中的模塊庫2.?dāng)?shù)字信號處理模塊集(DSPBlockset)3.電力系統(tǒng)模塊集(PowerSystemBlockset)4.Simulink擴展庫
?擴展信號輸出模塊庫(AdditionalSinks)圖7.35擴展信號輸出模塊庫?擴展離散庫(AdditionalDiscrete)?擴展線性庫(AdditionalLinear)圖7.43擴展離散庫圖7.44擴展線性庫?轉(zhuǎn)換庫(Transformations)圖7.45轉(zhuǎn)換模塊庫?觸發(fā)模塊庫(FlipFlops)圖7.46觸發(fā)模塊庫?線性化庫(Linearization)圖7.47線性化庫?宇航模塊庫(AirspaceBlocks)圖7.48宇航模塊庫【例7-3】利用Simulink建立求解的仿真模型,并求其精確值。
首先,在Simulink的模塊庫中尋找相應(yīng)的模塊。在Sources模塊庫中調(diào)出Clock模塊,在Math模塊庫中調(diào)出Product、Gain、Mathfunction(指數(shù)函數(shù)eu)模塊,在Continuous模塊庫中調(diào)出Integrator模塊,在Sinks模塊庫中調(diào)出Display模塊,建立如圖7.51所示的仿真模型。然后,設(shè)置仿真參數(shù),將Simulinktime欄目中Starttime設(shè)為0,Stoptime設(shè)為1.0。最后,運行該仿真模型,所得結(jié)果在Display模塊中顯示為0.7468,如圖7.51所示。圖7.51積分仿真模型【例7-4】已知某系統(tǒng)的開環(huán)傳遞函數(shù)為,試求(1)繪制系統(tǒng)的奈奎斯特(Nyquist)曲線,判斷閉環(huán)系統(tǒng)的穩(wěn)定性,并求出該系統(tǒng)的單位階躍響應(yīng);(2)給系統(tǒng)增加一個開環(huán)極點p=2,求此時的奈奎斯特曲線,判斷此種情況下閉環(huán)系統(tǒng)的穩(wěn)定性,并繪制該系統(tǒng)的單位階躍響應(yīng)曲線。圖7.52(a)未增加極點的仿真模型圖7.52(b)增加一個極點后的仿真模型【例7-6】
試利用Simulink仿真平臺,建立脈幅調(diào)制(PAM)和正交幅度調(diào)制(QAM)的仿真模型,并對二者的抗噪聲性能進行比較。圖7.57PAM調(diào)制的仿真模型圖7.58QAM調(diào)制的仿真模型7.7S-function模塊設(shè)計圖7.60S-function界面Simulink中的函數(shù)也稱之為系統(tǒng)函數(shù),簡稱S-函數(shù)。用戶通過編寫S-函數(shù),可以向S-函數(shù)中添加自己的算法,該算法可以用MATLAB編寫,也可以用C語言等其他編程語言進行編寫。這里只介紹如何用M文件編輯器編寫S-function,即M文件S-函數(shù)的編寫。1.M文件S-函數(shù)模版S-function模塊存放在函數(shù)與表格模塊庫(Function&Table)中。鼠標雙擊S-function模塊,將彈出如圖7.60所示的對話界面,用戶只需在S-函數(shù)文件名(S-functionname)欄輸入S-函數(shù)的文件名(注意,不需要輸入它的擴展名),在S-函數(shù)參數(shù)(S-functionparameters)欄輸入S-函數(shù)所需要的參數(shù)(各個參數(shù)以逗號分隔),就可構(gòu)建一個基于S-function的仿真模塊。M文件S-函數(shù)的一般格式為:function[sys,x0,str,ts]=sfuncname(t,x,u,flag,p1,p2,...)其中,sfuncname是S-函數(shù)的名稱。在M文件S-函數(shù)中,輸入?yún)?shù)的個數(shù)可以動態(tài)變化,但前4個輸入?yún)?shù)t,x,u和flag是S-函數(shù)黙認參數(shù),它們的次序不能變動,代表的意義如表7.8所示。4個數(shù)輸出參數(shù)sys,x0,str和ts也是S-函數(shù)黙認參數(shù),是固定的,它們的次序也不能變,代表的意義如表7.9所示。M文件S-函數(shù)根據(jù)Simulink提供的flag參數(shù)調(diào)用不同的子函數(shù),并且向Simulink返回相應(yīng)的結(jié)果。表7.10列出了flag參數(shù)的含義。輸入?yún)?shù)說明t代表當(dāng)前仿真時間,該參數(shù)通常用于決定下一個采樣時刻,或者在多采樣速率系統(tǒng)中,用來區(qū)分不同的采樣時刻,并據(jù)此進行不同的處理。x表示狀態(tài)量,該參數(shù)是必須的,甚至在系統(tǒng)中不存在狀態(tài)向量時也是如此。它具有很靈活的運用,可為空。u表示輸入向量flag是一個控制在每一個仿真階段調(diào)用哪一個函數(shù)的參數(shù),由Simulink在調(diào)用時自動取值,即flag充當(dāng)S-函數(shù)的行為標示。表7.8輸入?yún)?shù)說明sys是一個通用的輸出參數(shù),它所輸出值的意義取決于flag的值。x0是初始狀態(tài)值(沒有狀態(tài)向量時是一個空矩陣[]),這個輸出參數(shù)只在flag值為0時才有效,其他時候都會被忽略。str這個參數(shù)沒有具體意義,是MathWorks公司為將來的應(yīng)用保留的,M文件S-函數(shù)必須把它設(shè)為空矩陣[]。ts是一個m×2的矩陣,它的兩列分別表示采樣時間間隔和偏移。表7.9flagS-函數(shù)名稱說明0mdlInitializeSizesS-函數(shù)的初始化,包括抽樣間隔、連續(xù)狀態(tài)和離散狀態(tài)的初始設(shè)置等。1mdlDerivatives計算連續(xù)狀態(tài)變量的導(dǎo)數(shù)。2mdlUpdate更新離散狀態(tài)的數(shù)值。3mdlOutputs計算S-函數(shù)的輸出4mdlGetTimeOfNextVarHit計算下一次仿真的時間,只適用于可變步長仿真。9mdlTerminate結(jié)束仿真。表7.10Simulink提供了一個M文件S-函數(shù)模板sfuntmpl.m,存放在MATLAB安裝目錄下的simulink\blocks中。用戶只需按照此模板,結(jié)合自己所要仿真系統(tǒng)的屬性,對模板中的相關(guān)參數(shù)和子程序進行修改調(diào)整,就可構(gòu)建出基于S-函數(shù)的仿真模塊。function[sys,x0,str,ts]=sfuntmpl(t,x,u,flag)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%M文件S-函數(shù)的功能及參數(shù)說明%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%switchflag,case0,%當(dāng)flag=0時,調(diào)用mdlInitializeSizes函數(shù)執(zhí)行初始化[sys,x0,str,ts]=mdlInitializeSizes;case1,%當(dāng)flag=1時,調(diào)用mdlDerivatives函數(shù)計算連續(xù)狀態(tài)的數(shù)值sys=mdlDerivatives(t,x,u);case2,%當(dāng)flag=2時,調(diào)用mdlUpdate函數(shù)計算離散狀態(tài)的數(shù)值sys=mdlUpdate(t,x,u);case3,%當(dāng)flag=3時,調(diào)用mdlOutputs函數(shù)計算輸出sys=mdlOutputs(t,x,u);case4,%當(dāng)flag=4時,調(diào)用mdlGetTimeOfNextVarHit函數(shù)計算下一個抽樣時刻sys=mdlGetTimeOfNextVarHit(t,x,u);case9,%當(dāng)flag=9時,調(diào)用mdlTerminate函數(shù)結(jié)束仿真sys=mdlTerminate(t,x,u);otherwise%當(dāng)flag等于其他值時表示仿真過程出錯error(['Unhandledflag=',num2str(flag)]);end%endsfuntmpl%==========================================================%mdlInitializeSizes%S-函數(shù)的初始化%向Simulink返回S-函數(shù)各種變量的長度、初始設(shè)置和采樣時間設(shè)置%==========================================================function[sys,x0,str,ts]=mdlInitializeSizes%調(diào)simsizes獲得一個用于存放長度信息的結(jié)構(gòu),-1表示動態(tài)確定的長度sizes=simsizes;sizes.NumContStates=0;%設(shè)置連續(xù)狀態(tài)的個數(shù)sizes.NumDiscStates=0;%設(shè)置離散狀態(tài)的個數(shù)sizes.NumOutputs=0;%設(shè)置輸出變量的個數(shù)sizes.NumInputs=0;%設(shè)置輸入變量的個數(shù)sizes.DirFeedthrough=1;%設(shè)置直接反饋的狀態(tài)(1表示有直接反饋,0表示則沒有)sizes.NumSampleTimes=1;%設(shè)置采樣時間的個數(shù)(大于等于1)sys=simsizes(sizes);%通過simsizes把sizes結(jié)構(gòu)返回給sysx0=[];%設(shè)置S-函數(shù)的初始狀態(tài)x0str=[];%設(shè)置S-函數(shù)的保留參數(shù)str(應(yīng)該設(shè)置為空向量[])ts=[00];%初始化采樣時間%endmdlInitializeSizes%==========================================================%mdlDerivatives%計算S-函數(shù)連續(xù)狀態(tài)的導(dǎo)數(shù),返回給Simulink進行積分計算%==========================================================functionsys=mdlDerivatives(t,x,u)sys=[];%endmdlDerivatives%==========================================================%mdlUpdate%更新S-函數(shù)的離散狀態(tài)并且向Simulink返回這些狀態(tài)的數(shù)值%==========================================================functionsys=mdlUpdate(t,x,u)sys=[];%endmdlUpdate%==========================================================%mdlOutputs%計算S-函數(shù)的輸出變量并且通過sys參數(shù)返回給Simulink作為模塊的輸出%==========================================================functionsys=mdlOutputs(t,x,u)sys=[];%endmdlOutputs2.設(shè)計S-function函數(shù)仿真實例為了讀者理解和掌握S-function函數(shù)的編制方法和使用技巧,下面通過實例來說明。(1)連續(xù)狀態(tài)S-function【例7-7】①定義S-function的M函數(shù)文件在M文件編輯窗口中鍵入如下程序并保存為exm7_7_sfunc.m。function[sys,x0,str,ts]=exm7_7_sfunc(t,x,u,flag)%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%連續(xù)系統(tǒng)狀態(tài)模型x'=Ax+Bu,y=Cx+Du%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%A=[-0.1,-0.5;10,2];B=[-1,5;1,-2];C=[1,5;-1,2];D=[-1,0.1;4,-0.2];switchflag,case0,%當(dāng)flag=0時,調(diào)用mdlInitializeSizes函數(shù)執(zhí)行初始化[sys,x0,str,ts]=mdlInitializeSizes(A,B,C,D);case1,%當(dāng)flag=1時,調(diào)用mdlDerivatives函數(shù)重新計算連續(xù)狀態(tài)的導(dǎo)數(shù)sys=mdlDerivatives(t,x,u,A,B,C,D);case3,%當(dāng)flag=3時,調(diào)用mdlOutputs函數(shù)計算輸出sys=mdlOutputs(t,x,u,A,B,C,D);case{2,4,9}%當(dāng)flag=2、4、9時,沒有定義相應(yīng)的處理函數(shù)sys=[];otherwise%當(dāng)flag等于其他值時表示仿真過程出錯二維碼7-2error(['Unhandledflag=',num2str(flag)]);end%結(jié)束exm7_7_sfunc%====================================================================%mdlInitializeSizes%S-函數(shù)的初始化%向Simulink返回S-函數(shù)各種變量的長度、初始設(shè)置和采樣時間設(shè)置%====================================================================function[sys,x0,str,ts]=mdlInitializeSizes(A,B,C,D)sizes=simsizes;%調(diào)simsizes獲得一個用于存放長度信息的結(jié)構(gòu)sizes.NumContStates=2;%設(shè)置2個連續(xù)狀態(tài)sizes.NumDiscSta
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 中考語文文言文對比閱讀(全國)01 《詠雪》對比閱讀(原卷版)
- 2025輔警招聘考試題庫及答案
- 2026年智能按摩美容儀項目商業(yè)計劃書
- 2026年智能嬰兒監(jiān)護儀項目項目建議書
- 2026年智能門窗磁極標識貼項目公司成立分析報告
- 2026年穿出人設(shè)項目建議書
- 2025~2026學(xué)年甘肅省天水市張家川回族自治縣縣木河鄉(xiāng)木河中學(xué)九年級上學(xué)期第一次階段性作業(yè)道德與法治、歷史試卷~初中道德與法治
- 碩士研究論文
- 有名的議論文
- 吾日三省吾身議論文
- 2024年《廣西壯族自治區(qū)建筑裝飾裝修工程消耗量定額》(上冊)
- DBJT15-101-2022 建筑結(jié)構(gòu)荷載規(guī)范
- 2025年部編版新教材語文七年級上冊期末復(fù)習(xí)計劃
- 礦產(chǎn)企業(yè)管理辦法
- 2025秋季學(xué)期國開電大專本科《經(jīng)濟法學(xué)》期末紙質(zhì)考試名詞解釋題庫珍藏版
- 建筑設(shè)計防火規(guī)范-實施指南
- 2025國開《中國古代文學(xué)(下)》形考任務(wù)1234答案
- 肺部感染中醫(yī)護理
- 租地合同協(xié)議書合同
- 《肺炎的CT表現(xiàn)》課件
- 糧食倉儲設(shè)施建設(shè)維修資金申請報告
評論
0/150
提交評論