4步教你學會使用matlab模糊控制工具箱
原帖地址:http://blog.sina.com.cn/s/blog_408540af0100avnv.html
Matlab模糊控制工具箱為模糊控制器的設計提供了一種非常便捷的途徑,通過它我們不需要進行復雜的模糊化、模糊推理及反模糊化運算,只需要設定相應引數,就可以很快得到我們所需要的控制器,而且修改也非常方便。下面將根據模糊控制器設計步驟,一步步利用Matlab工具箱設計模糊控制器。
首先我們在Matlab的命令視窗(command window)中輸入fuzzy,回車就會出來這樣一個視窗。
下面我們都是在這樣一個視窗中進行模糊控制器的設計。
1.確定模糊控制器結構:即根據具體的系統確定輸入、輸出量。
這裡我們可以選取標準的二維控制結構,即輸入為誤差e和誤差變化ec,輸出為控制量u。注意這裡的變數還都是精確量。相應的模糊量為E,EC和U,我們可以選擇增加輸入(Add Variable)來實現雙入單出控制結構。
2.輸入輸出變數的模糊化:即把輸入輸出的精確量轉化為對應語言變數的模糊集合。
首先我們要確定描述輸入輸出變數語言值的模糊子集,如{NB,NM,NS,ZO,PS,PM,PB},並設定輸入輸出變數的論域,例如我們可以設定誤差E(此時為模糊量)、誤差變化EC、控制量U的論域均為{-3,-2,-1,0,1,2,3};然後我們為模糊語言變數選取相應的隸屬度函式。
在模糊控制工具箱中,我們在Member Function Edit中即可完成這些步驟。首先我們開啟Member Function Edit視窗.
然後分別對輸入輸出變數定義論域範圍,新增隸屬函式,以E為例,設定論域範圍為[-3 3],新增隸屬函式的個數為7.
然後根據設計要求分別對這些隸屬函式進行修改,包括對應的語言變數,隸屬函式型別。
3.模糊推理決策演算法設計:即根據模糊控制規則進行模糊推理,並決策出模糊輸出量。
首先要確定模糊規則,即專家經驗。對於我們這個二維控制結構以及相應的輸入模糊集,我們可以制定49條模糊控制規則(一般來說,這些規則都是現成的,很多教科書上都有),如圖。
制定完之後,會形成一個模糊控制規則矩陣,然後根據模糊輸入量按照相應的模糊推理演算法完成計算,並決策出模糊輸出量。
4.對輸出模糊量的解模糊:模糊控制器的輸出量是一個模糊集合,通過反模糊化方法判決出一個確切的精確量,凡模糊化方法很多,我們這裡選取重心法。
5.然後Export to disk,即可得到一個.fis檔案,這就是你所設計的模糊控制器。
>>http://blog.sina.com.cn/xianfa110
======================================================================================
MATLAB功能強大,很多同學用其做控制演算法的模擬
但是其中的fuzzy logic controller剛開始用常常容易出錯
常見報錯:
1、MinMax blocks do not accept 'boolean' signals. The input signal(s) of block 'mkkzq1/Subsystem/Fuzzy Logic Controller with Ruleviewer/Fuzzy Logic Controller/FIS Wizard/Defuzzification1/Max (COA)' must be one of the MATLAB 'uint8', 'uint16', 'uint32', 'int8', 'int16', 'int32', 'single', or 'double' data types
2、An error occurred while propagating data type 'boolean' from block 'mkkzq1/Subsystem/Fuzzy Logic Controller with Ruleviewer/Fuzzy Logic Controller/FIS Wizard/Defuzzification1/Zero Strength (COA)', output port 1。
以下是解決方案:
1、fis編輯器(MATLAB的command window中鍵入fuzzy開啟)中,建立好規則後,file-export-to workspace
2、對於7.0版本,simulink模型視窗選單中,Simulation-Configuration Parameters-Implement logic signals as boolean data前面預設的勾選去掉
3.而對於6.5及以前版本,則是在SIMULATION -SIMULATION PARAMETERS-ADVANCED中將boolean logic signals選為off,強烈推薦用這個
用FIS(Mamdani)設計完模糊控制器之後,連線到控制系統中進行模擬,每次總出現這兩個錯誤:
1)Block error Max(coa): MinMax blocks do not accept'boolean'signals.
2)block error Zero strength(coa):An error occurred while propagating data type'boolean'from block'....',outport 1
解決方案:
在simulink parameter中,找到advance選項卡,把第一二個選項設為off。
====================================================================================
matlab/simulink模糊控制器應用例項
前面我們已經利用模糊控制工具箱設計好了一個模糊控制器(假定我們存為fuzzy1.fis),下面我們檢驗一下,看看我們的控制器到底怎麼樣。以一個簡單的電機控制為例,我們在Simulink中建立了它的模糊控制系統如下:
在用這個控制器之前,需要用readfis指令將fuzzy1.fis載入到matlab的工作空間,比如我們用這樣的指令:myFLC=readfis(‘fuzzy1.fis’);就建立了一個叫myFLC的結構體到工作空間,並在fuzzy logic controller中引數設為:myFLC。
可以看到,在模糊控制器的輸入和輸出均有一個比例係數,我們叫它量化因子,它反映的是模糊論域範圍與實際範圍之間的比例關係,例如,模糊控制器輸入輸出的論域範圍均為[-3,3],而實際誤差的範圍是[-10,10],誤差變化率範圍是[-100,100],控制量的範圍是[-24,24],那麼我們就可以算出量化因子分別為0.3,0.03,8。量化因子的選取對於模糊控制器的控制效果有很大的影響,因此要根據實際情況認真選取哦。
好,現在我們可以設定模擬步長,比如定步長的10ms,就可以執行了。
執行後,產生這樣一個錯誤:
MinMax blocks do not accept 'boolean' signals. The input signal(s) of block 'test_fuzzy/Fuzzy Logic Controller/FIS Wizard/Defuzzification1/Max (COA)' must be one of the MATLAB 'uint8', 'uint16', 'uint32', 'int8', 'int16', 'int32', 'single', or 'double' data types
我想很多朋友做模糊控制的時候都會遇到這個情況。沒關係,這裡提供兩個解決辦法:
1.直接在Defuzzification1這個模組中的那個比較環節後加入資料型別轉換模組,將boolean轉化為double型,或者雙擊那個比較模組,選中show additional parameters,將輸出資料型別改為specify via dialog,然後選uint(8)即可;但是在模擬之後,又會發現很多地方都存在這個問題,因此你不得不一個一個去修改,如果你不怕累的話。
2.第二個方法是最簡單的,直接在simulation parameters->advanced將boolean logic signals選為off,強烈推薦你用這個。
好了,這些都解決了,我們就可以模擬了,例如給個方波訊號,可以得到模擬曲線如下
相關文章
- matlab模糊控制工具箱使用和模糊控制pid例項參考Matlab
- MATLAB模糊資料工具箱的使用Matlab
- 模糊控制在matlab中常見的疑難問題及模糊邏輯工具箱的使用Matlab
- MATLAB模糊邏輯工具箱函式Matlab函式
- 模糊神經網路工具箱函式使用神經網路函式
- MATLAB中神經網路工具箱的使用Matlab神經網路
- MATLAB神經網路工具箱使用介紹Matlab神經網路
- MATLAB地圖工具箱學習總結(三)地圖工具箱的基本知識Matlab地圖
- 工程數學 實驗5-MATLAB最最佳化工具箱的使用Matlab
- 模糊邏輯工具箱在Simulink中…
- 【MATLAB生信分析】MATLAB生物資訊分析工具箱(二)Matlab
- MATLAB地圖工具箱學習總結(四)自定義投影Matlab地圖
- MATLAB地圖工具箱學習總結(一)從地圖投影說起Matlab地圖
- MATLAB地圖工具箱學習總結(二)大圓和恆向線Matlab地圖
- MATLAB的神經網路工具箱介紹Matlab神經網路
- matlab練習程式(旋轉、徑向模糊)Matlab
- “21天教你學會C++”C++
- 21天教你學會C++C++
- 六招教你學會破解(轉)
- 瞬間教你學會使用java中list的retainAll方法JavaAI
- matlab練習程式(模糊集影象增強)Matlab
- 科學計算與Matlab筆記:第3章:Matlab程式流程控制Matlab筆記
- 教你學會Git——團隊協作Git
- MATLAB神經網路工具箱(簡單操作介紹)Matlab神經網路
- 一篇文章,教你學會GitGit
- 10 個例子教你學會 ncat (nc) 命令
- MATLAB神經網路工具箱(程式碼簡單實現)Matlab神經網路
- 基於GSP工具箱的NILM演算法matlab模擬演算法Matlab
- 帶你從零開始,快速學會 Matlab GUIMatlabGUI
- 奈學教你五分鐘學會分散式事務分散式
- 使用Spring Security控制會話Spring會話
- “21天教你學會C++”,不要太在意~C++
- 學會使用dockerDocker
- iOS專案開發實戰——學會使用TableView列表控制元件(一)iOSView控制元件
- iOS專案開發實戰——學會使用TableView列表控制元件(二)iOSView控制元件
- 一分鐘教你學會搭建ngrok內網穿透內網穿透
- 小紅書投放收藏指南來咯 教你學會品牌投放CUZ
- 【Matlab 控制】模仿繪製動態影像Matlab