基於matlab/Simulink的參數辨識

基於Simulink的辨識
Simulink自帶Parameter Estimation功能。可以對Simulink模型中的參數進行估計。MATLAB的Parameter Estimation官方說明中有一個電池參辨識的例子(見[Simulink參數辨識官方示例])。使用Simulink進行辨識的步驟爲:
1. 建立Simulink模型,將需要辨識的參數用base workspace中的變量表示。
2. 打開菜單欄中Analysis選項下的Parameter Estimation功能。
3. 打開Transient Data, 導入使用實驗或其他方法得到的輸入、輸出數據(由於用不到狀態數據所以不用設置States)。在這裏,輸入數據爲電池的電流,輸出數據爲電池的端電壓。由於電池參數隨SOC而變化,輸入數據只能爲脈衝放電的那一段數據,認爲這段時間內電池的SOC沒有太大變化。當然也可以將模型建立爲與SOC有關的,但這樣就過於複雜了。
4. 打開Variables,設置需要辨識的參數。在這裏可以設置參數的初始值、範圍等。由於使用的算法一般只能找到一個局部最優解,並不能保證爲全局最優解,所以初始值的設置還是比較重要的。對於鋰電池來說,電阻一般爲mΩ量級,時間常數爲10s~1000s。
5. 打開Estimation,進行參數估計的相關設置。勾選要用的Data Set和Parameters。使用Estimation Options進行估計算法的設置。MATLAB提供了幾種優化算法,一般選非線性最小方差。比較重要的兩個參數是參數截止誤差(Parameter tolerance)和函數截止誤差(Function tolerance)。只要滿足了兩次迭代的參數或cost function的不超過截止誤差,迭代就會停止。在Parallel Options中可以選擇啓用parallel pool來進行多線程加速,但是有時候會失敗。
6. 點擊Start就可以開始了,勾選Show progress views可以看到仿真輸出和參數的變化。
7. 按照同樣的方法進行其他SOC下的參數辨識。也可以在Simulink中建立一個模塊,對輸入進行篩選,對不同的SOC使用不同的參數。可以一次性辨識出參數-SOC的關係。
這種方法的優點是簡單易用。幾乎全部爲圖形化操作,不需要寫代碼,只需要搭建好Simulink模型就可以進行估計了,而且幾乎可以估計任何線性、非線性的模型。缺點是速度慢、效率低。每次迭代都需要編譯並運行仿真程序很多次,這個過程程序十分卡頓。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章