4步教你學會使用matlab模糊控制工具箱

gameboy12615發表於2011-04-27

原帖地址:http://blog.sina.com.cn/s/blog_408540af0100avnv.html

 

      Matlab模糊控制工具箱為模糊控制器的設計提供了一種非常便捷的途徑,通過它我們不需要進行復雜的模糊化、模糊推理及反模糊化運算,只需要設定相應引數,就可以很快得到我們所需要的控制器,而且修改也非常方便。下面將根據模糊控制器設計步驟,一步步利用Matlab工具箱設計模糊控制器。

首先我們在Matlab的命令視窗(command window)中輸入fuzzy,回車就會出來這樣一個視窗。

 4步教你學會使用matlab模糊控制工具箱

下面我們都是在這樣一個視窗中進行模糊控制器的設計。

1.確定模糊控制器結構:即根據具體的系統確定輸入、輸出量。

這裡我們可以選取標準的二維控制結構,即輸入為誤差e和誤差變化ec,輸出為控制量u。注意這裡的變數還都是精確量。相應的模糊量為EECU,我們可以選擇增加輸入(Add Variable)來實現雙入單出控制結構。

4步教你學會使用matlab模糊控制工具箱

2.輸入輸出變數的模糊化:即把輸入輸出的精確量轉化為對應語言變數的模糊集合。

首先我們要確定描述輸入輸出變數語言值的模糊子集,如{NBNMNSZOPSPMPB},並設定輸入輸出變數的論域,例如我們可以設定誤差E(此時為模糊量)、誤差變化EC、控制量U的論域均為{-3-2-10123};然後我們為模糊語言變數選取相應的隸屬度函式。

在模糊控制工具箱中,我們在Member Function Edit中即可完成這些步驟。首先我們開啟Member Function Edit視窗.

4步教你學會使用matlab模糊控制工具箱

4步教你學會使用matlab模糊控制工具箱

然後分別對輸入輸出變數定義論域範圍,新增隸屬函式,以E為例,設定論域範圍為[-3 3],新增隸屬函式的個數為7.

 4步教你學會使用matlab模糊控制工具箱

然後根據設計要求分別對這些隸屬函式進行修改,包括對應的語言變數,隸屬函式型別。

4步教你學會使用matlab模糊控制工具箱

3.模糊推理決策演算法設計:即根據模糊控制規則進行模糊推理,並決策出模糊輸出量。

首先要確定模糊規則,即專家經驗。對於我們這個二維控制結構以及相應的輸入模糊集,我們可以制定49條模糊控制規則(一般來說,這些規則都是現成的,很多教科書上都有),如圖。

4步教你學會使用matlab模糊控制工具箱

制定完之後,會形成一個模糊控制規則矩陣,然後根據模糊輸入量按照相應的模糊推理演算法完成計算,並決策出模糊輸出量。

4.對輸出模糊量的解模糊:模糊控制器的輸出量是一個模糊集合,通過反模糊化方法判決出一個確切的精確量,凡模糊化方法很多,我們這裡選取重心法。

    4步教你學會使用matlab模糊控制工具箱

5.然後Export to disk,即可得到一個.fis檔案,這就是你所設計的模糊控制器。

 >>http://blog.sina.com.cn/xianfa110

 

======================================================================================

MATLAB功能強大,很多同學用其做控制演算法的模擬 

但是其中的fuzzy logic controller剛開始用常常容易出錯 

常見報錯: 

1MinMax 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
2An 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。 

  

以下是解決方案: 

  

1fis編輯器(MATLABcommand 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,強烈推薦你用這個。

好了,這些都解決了,我們就可以模擬了,例如給個方波訊號,可以得到模擬曲線如下

   

 

相關文章