一、Simulink 系統(tǒng)的仿真與分析
- 系統(tǒng)的模型建立之后,選擇仿真參數(shù)和數(shù)值算法,便可以啟動仿真程序?qū)υ撓到y(tǒng)進(jìn)行仿真。
1. 設(shè)置仿真參數(shù)
- 在系統(tǒng)仿真過程中,事先必須對仿真算法、輸出模式等各種仿真參數(shù)進(jìn)行設(shè)置。在模型編輯窗口打開仿真參數(shù)設(shè)置對話框有以下方法。
- (1) 單擊工具欄中的 Model Configuration Parameters 按鈕。
- (2) 選擇 Simulation ? \longrightarrow ?Model Configuration Parameters 命令。
- 打開的仿真參數(shù)設(shè)置窗口如下圖所示。
- 在仿真參數(shù)設(shè)置窗口中,仿真參數(shù)分為以下 7 類。
- (1) Solver 參數(shù):用于設(shè)置仿真起始和終止時間,選擇微分方程求解算法并為其規(guī)定參數(shù),以及選擇某些輸出選項。
- (2) Data Import/Export 參數(shù):用于管理工作空間數(shù)據(jù)的導(dǎo)入和導(dǎo)出。
- (3) Optimization 參數(shù):用于設(shè)置仿真優(yōu)化模式。
- (4) Diagnostics 參數(shù):用于設(shè)置在仿真過程中出現(xiàn)各類錯誤時發(fā)出警告的等級。
- (5) Hardware Implementation 參數(shù):用于設(shè)置實現(xiàn)仿真的硬件。
- (6) Model Referencing 參數(shù):用于設(shè)置參考模型。
- (7) Simulation Target 參數(shù):用于設(shè)置仿真模型目標(biāo)。
1.1 Solver 參數(shù)設(shè)置
- Solver(求解算法)是利用模型中所含的信息來計算系統(tǒng)動態(tài)行為的數(shù)值積分算法。
- Simulink 提供的求解算法可支持多種系統(tǒng)的仿真,其中包括任何規(guī)模的連續(xù)時間(模擬)、離散時間(數(shù)字)、混雜(混合信號)和多采樣率系統(tǒng)。
- 這些求解算法可以對剛性系統(tǒng)以及具有不連續(xù)過程的系統(tǒng)進(jìn)行仿真??梢灾付ǚ抡孢^程的參數(shù),包括求解算法的類型和屬性、仿真的起始時間和結(jié)束時間以及是否加載或保存仿真數(shù)據(jù)。
- 此外,還可以設(shè)置優(yōu)化和診斷信息。在仿真參數(shù)設(shè)置窗口左側(cè)窗格中選擇 Solver 選項,在右側(cè)窗格中會列出所有 Solver 參數(shù),如圖12-8所示。
- (1) 設(shè)置仿真起始和終止時間(Simulink time)。在 Start time 和 Stop time 兩個編輯框中,通過直接輸入數(shù)值來設(shè)置仿真起始時間和終止時間,時間單位是秒 (s)。
- (2) 仿真算法的選擇(Solver options)。在 Type 下拉列表框中設(shè)定算法類別:Fixed-step(固定步長)和 Variable-step(變步長)算法,在 Solver 下拉列表框中選擇具體算法。
- 仿真算法根據(jù)步長的變化分為固定步長類算法和變步長類算法。固定步長是指在仿真過程中計算步長不變,而變步長是指在仿真過程中要根據(jù)計算的要求改變步長。對于這兩類算法,它們所對應(yīng)的相關(guān)選項及具體算法都有所不同。
- 在采用變步長類算法時,首先應(yīng)該指定允許的誤差限,包括相對誤差限(Relative Tolerance)和絕對誤差限(Absolute Tolerance),當(dāng)計算過程中的誤差超過該誤差限時,系統(tǒng)將自動調(diào)整步長,步長的大小將決定仿真的精度。
- 在采用變步長類算法時還要設(shè)置所允許的最大步長(Max Step Size),在默認(rèn)值(Auto)的情況下,系統(tǒng)所給定的最大步長為(終止時間起始時間) /50。
- 在一般情況下,系統(tǒng)所給的最大步長已經(jīng)足夠,但如果用戶所進(jìn)行的仿真時間過長,則默認(rèn)步長值就非常大,有可能出現(xiàn)失真的情況,這時應(yīng)根據(jù)需要設(shè)置較小的步長。
- 在采用固定步長算法時,要先設(shè)置固定步長。由于固定步長算法的步長不變,所以此時不設(shè)定誤差限,而多了一個模型類型(Tasking Mode for Periodic Sample Times)的選項,該選項包括 Auto(默認(rèn)值)、SingleTasking(單任務(wù)和 MultiTasking(多任務(wù))。
- 單任務(wù)是指各模塊的采樣速率相同,不檢測采樣速率的傳遞;多任務(wù)是指在模型中模塊具有不同的采樣速率,同時檢測模塊之間采樣速率的傳遞;默認(rèn)值則根據(jù)模塊的采樣速率是否相同來決定采用單任務(wù)還是多任務(wù)。
- 變步長和固定步長包含多種不同的具體算法。一般情況下,連續(xù)系統(tǒng)仿真應(yīng)該選擇 ode45 變步長算法,對剛性問題可以選擇變步長的 ode15s 算法,離散系統(tǒng)一般默認(rèn)選擇固定步長的 discrete(no continuous states)算法,要注意在仿真模型中含有連續(xù)環(huán)節(jié)時不能采用該仿真算法,而可以采用諸如 4 階 Runge-Kutta 法這樣的算法來求解問題。
1.2 Data lmport/Export 參數(shù)設(shè)置
- 導(dǎo)入的數(shù)據(jù)包括輸入信號和初始狀態(tài),輸入信號可以用標(biāo)準(zhǔn)信號或自定義函數(shù)生成。
- 導(dǎo)出的數(shù)據(jù)包括輸出信號和仿真過程的狀態(tài)數(shù)據(jù),可以用于生成圖形或進(jìn)行其他處理。Data ImportExport(數(shù)據(jù)導(dǎo)入/導(dǎo)出)參數(shù)選項如下圖所示,包含 Load from workspace、Save to workspace or file 和 Simulation Data Inspector 三個部分。
- (1) Load from workspace(從工作空間中載入數(shù)據(jù))。在仿真過程中,如果模型中有輸入端口(In 模塊),可從工作空間直接把數(shù)據(jù)載入到輸入端口,即先勾選 Data Import/Export 參數(shù)選項中的 Input 復(fù)選框,然后在后面的編輯框中輸入數(shù)據(jù)的變量名。變量名可以采用不同的輸入形式。
- ① 矩陣形式。如果以矩陣形式輸入變量名,則矩陣的列數(shù)必須比模型的輸入端口數(shù)多一個,MATLAB把矩陣的第一列默認(rèn)為時間向量,后面的每一列對應(yīng)每一個輸入端口,矩陣的第一行表示某一時刻各輸入端口的輸入狀態(tài)。
- 另外,也可以把矩陣分開來表示,即 MATLAB 默認(rèn)的表示方法 [ t , u ] [t,u] [t,u],其中 t t t 是一維時間列向量,表示仿真時間, u u u 是和 t t t 長度相等的 n 維列向量(n 表示輸入端口的數(shù)量),表示狀態(tài)值。
- 例如,我們在命令行窗口中定義 t t t和 u u u。
>> t=(0:0.1:10)';
>> u=[sin(t),cos(t).*sin(t),exp(-2*t).*sin(t)];
- 則 3 個輸入端口輸入的數(shù)據(jù)與時間的關(guān)系分別為 sin ? t \sin t sint、 cos ? t sin ? t \cos t\sin t costsint 和 e ? 2 ? t sin ? t e^{-2*t}\sin t e?2?tsint。
- ② 包含時間數(shù)據(jù)的結(jié)構(gòu)形式。對于包含時間數(shù)據(jù)的結(jié)構(gòu),在 MATLAB 中有非常嚴(yán)格的規(guī)定,即在結(jié)構(gòu)中必須有兩個名字不能改變的頂級成員:time 和 signals。
- 在 time 成員中包含一個列向量,表示仿真時間;signals 成員是一個向量,向量中的每個元素對應(yīng)一個輸入端口,并且每個元素必須包含一個名字同樣不能改變的 values 成員,values 成員也包含一個列向量, 對應(yīng)于輸入端口的輸入數(shù)據(jù)。
- 例如,對于上例,我們?nèi)舾臑榘瑫r間數(shù)據(jù)的結(jié)構(gòu)輸入,則命令格式如下:
>> t=(0:0.1:10)';
>> A.time=t;
>> A.signals(1).values=sin(t);
>> A.signals(2).values=cos(t).*sin(t);
>> A.signals(3).values=exp(-2*t).*sin(t);
- 在 Input 復(fù)選框右側(cè)的文本框中輸入 A,則產(chǎn)生的仿真曲線與上面矩陣形式數(shù)據(jù)輸入后的輸出曲線完全相同。
- 在 Input 復(fù)選框的下面,還有一個 Initial state 復(fù)選框,它表示的是模塊的初始化狀態(tài)。對模塊進(jìn)行初始化的方法是,先勾選 Initial state 復(fù)選框,然后在右側(cè)的文本框中輸入初始化數(shù)據(jù)的變量名。變量要求的形式與前面的輸入端口數(shù)據(jù)的變量形式基本相同,但變量中的數(shù)據(jù)個數(shù)必須和狀態(tài)模塊數(shù)相同。
- (2) Save to workspace or file(保存到工作空間或文件)。在 Save to workspace or file 區(qū)域中,可以選擇的選項有 Time(時鐘)、States(狀態(tài))、Output(輸出端口)、Final states(最終狀態(tài))、Signal logging(信號)等。
- 同載入數(shù)據(jù)的形式一樣, 保存數(shù)據(jù)也有矩陣、結(jié)構(gòu)和包含時間數(shù)據(jù)的結(jié)構(gòu) 3 種形式,在 Format 下拉列表框中可以根據(jù)需要進(jìn)行選擇。對于不同的保存形式來說,Time 的格式是不變的,總是對應(yīng)仿真的采樣時間。
2. 運行仿真與仿真結(jié)果分析
2.1 運行仿真
- 在 MATLAB 中,可以在 Simulink 模型編輯窗口以交互方式運行仿真。Simulink 仿真有 3 種模式,可以通過在模型編輯窗口選擇 Simulation ? \longrightarrow ?Mode 命令進(jìn)行設(shè)置。
- (1) Normal:標(biāo)準(zhǔn)模式(默認(rèn)設(shè)置),以解釋方式運行,仿真過程中能夠靈活地更改模型參數(shù)和顯示結(jié)果,但仿真運行慢。
- (2) Accelerator:加速器模式,通過創(chuàng)建和執(zhí)行已編譯的目標(biāo)代碼來提高仿真性能,而且在仿真過程中能夠較靈活地更改模型參數(shù)。加速模式下運行的是模型編譯生成的 s 函數(shù),不能提供模型覆蓋率信息。
- (3) Rapid Accelerator:快速加速器模式,能夠比 Accelerator 模式更快地進(jìn)行模型仿真,該模式不支持調(diào)試器和性能評估器。
- 設(shè)置完仿真參數(shù)之后,單擊模型編輯窗口工具欄中的 Run 按鈕,或選擇 Simulation ? \longrightarrow ?Run 命令,便可啟動對當(dāng)前模型的仿真。
- Simulink 支持使用仿真步進(jìn)器(Simulation Stepper)進(jìn)行調(diào)試,便于逐步查看示波器上的仿真數(shù)據(jù),或檢查系統(tǒng)改變狀態(tài)的方式及時間。單擊模型編輯窗口工具欄中的 Step Forward 按鈕,開始單步仿真。單擊模型編輯窗口工具欄中的 Stop 按鈕,終止單步仿真。
- 運行仿真前,單擊模型編輯窗口工具欄中的 Stepping Options 按鈕,在打開的對話框中勾選 Enable stepping back 復(fù)選框,在仿真時單擊模型編輯窗口工具欄中的 Step Back 按鈕,回溯仿真過程。
2.2 仿真結(jié)果分析
- Simulink 提供了多種有助于了解仿真行為的調(diào)試工具。使用 Simulink 中提供的查看器和示波器查看信號,實現(xiàn)仿真行為可視化。還可以將仿真結(jié)果導(dǎo)出到 MATLAB 工作區(qū),以便使用 MATLAB 算法以及可視化工具來查看和分析數(shù)據(jù)。
- 在仿真過程中,用戶可以設(shè)置不同的輸出方式來觀察仿真結(jié)果。為了觀察仿真結(jié)果的變化軌跡可以采用 3 種方法。
- (1) 把仿真結(jié)果送給 Scope 模塊或者 XYGraph 模塊。Scope 模塊顯示系統(tǒng)輸出量對于仿真時間的變化曲線,XYGraph 模塊顯示送到該模塊上的兩個信號中的一個對另一個的變化關(guān)系。
- (2) 把仿真結(jié)果送到輸出端口,將結(jié)果導(dǎo)出到工作空間,然后用 MATLAB 命令畫出該變量的變化曲線。在運行這個模型的仿真之前,先在 Configuration Parameters 對話框的 Data Impot/Export 選項卡中,規(guī)定時間變量和輸出變量的名稱(假定分別設(shè)定為 t t t 和 y y y),那么,當(dāng)仿真結(jié)束后,時間值保存在時間變量t中,對應(yīng)的輸出端口的信號值保留在輸出變量 y y y 中,這時可以在命令行窗口使用 whos 命令查看內(nèi)存變量,也可以使用繪圖命令繪制系統(tǒng)輸出量的變化曲線。
- (3) 把輸出結(jié)果送到 To Workspace 模塊,在 To Workspace 模塊參數(shù)對話框中填入輸出變量名稱,并在 Save format 下拉列表中選擇 Array 選項,從而將結(jié)果直接存入工作空間,然后用 MATLAB 命令畫出該變量的變化曲線。
- 仿真輸出結(jié)果還有其他一些輸出方式,例如,使用 Display 模塊可以顯示輸出數(shù)值。
- 例如,我們利用 Simulink 構(gòu)建函數(shù)曲線 y = 5 r + 16 y=5r+16 y=5r+16。
- Simulink 的 Sources 模塊庫中提供了時鐘、脈沖、正弦波等常用信號源,可利用這些常用信號源和 Simulink 模塊庫中提供的求和、乘積、增益以及 MATLAB 函數(shù)等其他模塊進(jìn)行適當(dāng)?shù)倪B接組合,即可構(gòu)建所需的各種信號源。
- 下面采用兩種方法來構(gòu)建函數(shù)曲線,一種方法是采用 MATLAB Function 模塊,另一種方法是采用基本模塊的組合連接。
- 方法 1:采用 MATLAB Function 模塊構(gòu)建仿真模型。
- (1) 啟動 Simulink 并打開模型編輯窗口,將所需模塊添加到模型中。在 Simulink Library Browser 窗口單擊 Sources 模塊庫,在右側(cè)的窗口中找到 Clock(時鐘)模塊,然后用鼠標(biāo)將其拖到模型編輯窗口。
- 同樣,在 User-Defined Functions(用戶自定義函數(shù))模塊庫中拖出 MATLAB Function(MATLAB 函數(shù))模塊,在 Sinks 模塊庫中拖出 To Workspace(輸出到工作空間)模塊、Scope(示波器)模塊進(jìn)行連接組合,其模型如下圖所示。
- (2) 設(shè)置模塊參數(shù)。雙擊 MATLAB Function 模塊,建立其信號源的函數(shù)。
function y=f(t)
y=5*t*t+16;
- 雙擊兩個輸出到工作空間模塊,分別輸入變量名為 t t t 和 y y y,仿真參數(shù)取默認(rèn)值。
- (3) 啟動仿真,函數(shù)曲線下圖所示。
- 方法 2:采用基本模塊組合構(gòu)建仿真模型。
- 構(gòu)建該信號源該信號源的另一種方法石將一些常用的數(shù)學(xué)模塊進(jìn)行組合建模,其模型如下圖所示。
文章來源:http://www.zghlxwxcb.cn/news/detail-772891.html
- 模型中用到了 Clock(時鐘)、Constant(常數(shù))、Gain(增益)、Product(乘積)和 Sum(求和)等模塊。雙擊增益模塊輸入 5,常數(shù)模塊輸入 16,最后設(shè)置仿真參數(shù)即可。其輸出結(jié)果與方法 1 相同。
- 與方法 1 相比,該方法采用的模塊數(shù)較多一些。另外,模型中還采用 XY Graph 模塊將輸出信號的軌跡顯示出來。
- 例如,我們利用 Simulink 仿真求 I = ∫ 0 1 x ln ? ( 1 + x ) d x I=\int_{0}^{1}x\ln \left ( 1+x\right)\mathrmn5n3t3zx I=∫01?xln(1+x)dx。
- 首先打開模型編輯窗口,將所需模塊添加到模型中。在 Simulink Library Browser 窗口中單擊 Sources 模塊庫,將 Clock 模塊拖到模型編輯窗口。
- 在用戶定義模塊庫 User-Defined Functions 中把函數(shù)模塊 Fcn 拖到模型編輯窗口,在連續(xù)系統(tǒng)模塊庫 Continuous 中把 Integrator 模塊拖到模型編輯窗口,在 Sinks 模塊庫中把 Display 模塊拖到模型編輯窗口。
- 然后,我們設(shè)置模塊參數(shù)并連接各個模塊組成仿真模型。雙擊 Fcn 模塊,打開 Block Parameters 對話框,在 Expression 欄中輸入 u*log(1+u),其余模塊參數(shù)不用設(shè)置。
- 設(shè)置模塊參數(shù)后,用連線將各個模塊連接起來組成仿真模型,如下圖所示。
文章來源地址http://www.zghlxwxcb.cn/news/detail-772891.html
- 設(shè)置系統(tǒng)仿真終止時間為 1s,運行仿真模型,Display 模塊顯示仿真結(jié)果為 0.25。
到了這里,關(guān)于MATLAB 之 Simulink系統(tǒng)的仿真與分析的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!