作者:paradoxfx 現在的專業軟件都是越做越大,功能成倍成倍地增加,而處理的對象也是越來越復雜,特別是使用一些仿真軟件在高精度下建模仿真的時候,因為PC上硬件的發展速度慢于軟件功能復雜化的速度,就造成了我們的仿真看起來是越跑越慢了。那以電子、通信、控制等領域都廣泛使用的Simulink為例,有沒有什么好的辦法能讓我們的仿真速度更快一點呢?在此總結一下,我們可以在以下的幾點中進行一些改進。 首先是模型的搭建問題。在Simulink環境中建模時,以s域的表達式進行建模時問題要少一些,增大誤差限、取消過零檢測等可以提高發展速度,減少警告信息。而z域的情況下要注意的問題會多一點。第一點是把模型中的代數環(Algebraic Loop)要消除掉;因為z域處理的數據都是一拍一拍按照采樣周期處理的,所以如果一個數據既作為輸入,同時又無延時地作為輸出,就產生了數值處理的問題,造成仿真速度顯著下降,處理的方法一般也不難,把反饋加一個延時環節就好了。另外就是仿真步長的問題,在能保證仿真精度的情況下,盡量使用大的步長可以顯著提高仿真速度;這個最大的仿真步長自然可以按照香農采樣定律來確定,但是一般情況下選擇仿真步長為4-10倍的最大采樣頻率是足夠了。 其次是可以改變仿真的模式。在老版本Simulink中,這個選擇很少,但是新版本有了Normal、Accelerator和Rapid Accelerator、HIL等模式。硬件在回路HIL顯然速度最快,但是好多時候并不適用,因為首先要有相應的硬件,其次是仿真對象要支持代碼生成。因為Simulink用的是一種解釋性的語言,normal模式就可以理解為Matlab解釋一句,操作系統執行一句,速度自然不會太快;Accelerator則是把一部分共享模塊編譯為庫文件,例如dll進行調用,相當于混合模式,既有解釋-執行,也有直接調用,速度;Rapid Accelerator則是把整個模型編譯為操作系統下獨立運行的程序,少了Simulink解釋給操作系統的工作,自然運行速度快,代價則是需要一定的時間來編譯模型;這種模式對PC的硬件配置要求是相對比較高的,內存少于3GB時容易出錯。 再者就是有一些模塊會顯著拖慢仿真速度,它們相當于“木桶理論”中的那塊“短板”了。例如Simulink中的X-Y圖這樣實時刷新繪圖的模塊。如果模式中有這個模塊,則仿真的時候它會緩慢地刷新X-Y圖,仿真速度肯定快不了。如果有別的方法替代則可以加快仿真速度,例如先把數據保存到工作空間里,等仿真結束之后再繪制X-Y圖等。一些非線性的模塊,例如一個非線性的MOSFET模型,自然也比理想開關所需要的仿真時間長。 第四種方法是并行執行和分布式執行,相當于多個人一起完成一項工作,前提是要有并行執行的許可和分布式執行的許可。并行執行就是在多核CPU的計算機上,打開多個Matlab,然后自動或者手動分配進行并行處理;分布式執行則是多臺計算機使用高速網絡互聯之后分別處理。這種仿真方法其速度提高非常顯著,特別是在處理大量迭代計算的時候,不過不是一般的開發者所能具備的。 此外,從2012b以后的版本開始,Simulink自帶了Simulink Performance Advisor工具,可以幫助我們發現影響仿真速度的瓶頸,并提出相應的建議。不過它無法或者我們搭建模型的意圖是神馬,所以還需要我們在搭建模式的時候就按照前面幾條建議進行一些必要的修改。 |