跳轉到內容

控制系統/狀態空間方程

來自華夏公益教科書,開放的書籍,開放的世界

時域方法

[編輯 | 編輯原始碼]

控制的“經典”方法(我們一直在學習的)主要基於變換域。當我們想要一般控制系統時,我們使用拉普拉斯變換(對於數字系統使用 Z 變換)來表示它,當我們想要檢查系統的頻率特性時,我們使用傅立葉變換。問題出現了,我們為什麼要這樣做呢?

讓我們看一個基本的二階拉普拉斯變換傳遞函式

我們可以根據系統的輸入和輸出將此方程分解

現在,當我們對我們的方程進行拉普拉斯逆變換時,我們可以看到

拉普拉斯變換轉換了我們正在處理二階微分方程的事實。拉普拉斯變換將系統從時域移到複頻域,以便我們能夠將系統研究和處理為代數多項式,而不是線性常微分方程。鑑於微分方程的複雜性,我們為什麼要在時域工作呢?

事實證明,為了將我們高階微分方程分解成多個一階方程,人們可以找到一種新的方法來輕鬆地作業系統,而無需使用積分變換。這個問題的解決辦法是狀態變數。透過獲取我們多個一階微分方程並以向量形式分析它們,我們不僅可以使用簡單的矩陣代數做我們在時域中做的事情,而且現在我們可以輕鬆地處理多輸入多輸出系統,而無需新增很多不必要的複雜性。這說明了為什麼控制的“現代”狀態空間方法變得流行起來。

狀態空間

[編輯 | 編輯原始碼]

在狀態空間系統中,系統的內部狀態由一個稱為狀態方程的方程顯式地考慮。系統輸出由當前系統狀態和當前系統輸入的組合給出,透過輸出方程。這兩個方程組成了一個方程組,統稱為狀態空間方程。狀態空間是包含系統所有可能內部狀態的向量空間。

為了使用狀態空間方法對系統進行建模,系統必須滿足此要求

  1. 系統必須是“集總的”

在此上下文中,“集總”意味著我們可以找到一個有限維狀態空間向量,它完全描述了系統的所有此類內部狀態。

本文主要考慮線性狀態空間系統,其中狀態方程和輸出方程滿足疊加原理。但是,狀態空間方法對於非線性系統同樣有效,儘管某些特定方法不適用於非線性系統。

狀態空間符號的核心是狀態的概念。系統的狀態是指系統內部元素的當前值,這些元素獨立於系統輸出變化(但並非完全無關)。本質上,系統的狀態是對系統內部元件值的顯式說明。以下是一些示例

考慮一個具有輸入和輸出端子的電路。該電路可以包含任意數量的電感器和電容器。狀態變數可以分別表示電感器和電容器的磁場和電場。

考慮一個彈簧-質量-阻尼器系統。狀態變數可以表示彈簧的壓縮量,或阻尼器的加速度。

考慮一個化學反應,其中將某些試劑倒入一個混合容器中,輸出是隨時間推移產生的化學產物的量。狀態變數可以表示容器中未反應化學物質的量,或其他屬性,例如容器中的熱能量,這些熱能可以促進反應。

狀態變數

[編輯 | 編輯原始碼]

使用狀態空間方程對系統進行建模時,我們首先需要定義三個向量

輸入變數
SISO(單輸入單輸出)系統只有一個輸入值,但 MIMO(多輸入多輸出)系統可能有多個輸入。我們需要定義系統的所有輸入並將它們排列成一個向量。
輸出變數
這是系統輸出值,在 MIMO 系統的情況下,我們可能有多個輸出值。輸出變數應該相互獨立,並且只依賴於輸入向量和狀態向量的線性組合。
狀態變數
狀態變數代表系統內部隨時間變化的值。例如,在電路中,節點電壓或網格電流可以作為狀態變數。在機械系統中,彈簧、重力和阻尼器施加的力可以作為狀態變數。

我們用 u 表示輸入變數,用 y 表示輸出變數,用 x 表示狀態變數。本質上,我們有以下關係

其中 f(x, u) 是我們的系統。此外,狀態變數可以隨著當前狀態和系統輸入的變化而變化

其中 x' 是狀態變數的變化率。我們將在下一章定義 f(u, x)g(u, x)

多輸入多輸出

[edit | edit source]

在拉普拉斯域中,如果我們想考慮具有多個輸入和多個輸出的系統,我們將需要依靠疊加原理來為每個輸入和輸出建立一組聯立拉普拉斯方程。對於這樣的系統,經典方法不僅不能簡化情況,而且由於需要先將方程組轉換為頻域,進行操作,然後再轉換回時域,因此操作起來實際上會更加困難。然而,拉普拉斯域技術可以與後面幾章討論的態空間技術相結合,以發揮兩種技術的最佳優勢。我們將在 MIMO 系統章節 中討論 MIMO 系統。

態空間方程

[edit | edit source]

在態空間系統表示中,我們有一組兩個方程:一個用於確定系統狀態的方程,另一個用於確定系統輸出的方程。我們將使用變數 y(t) 作為系統的輸出,x(t) 作為系統的狀態,u(t) 作為系統的輸入。我們使用符號 x'(t)(注意撇號)表示系統狀態向量的導數,作為對系統當前狀態和當前輸入的依賴。象徵性地,我們說存在變換 gh,它們顯示了這種關係

注意:
如果 x'(t)y(t) 不是 x(t)u(t) 的線性組合,則該系統被稱為非線性系統。我們將在以後的章節中嘗試討論非線性系統。

第一個方程表明系統狀態變化依賴於前一個系統狀態、系統的初始狀態、時間和系統輸入。第二個方程表明系統輸出依賴於當前系統狀態、系統輸入和當前時間。

如果系統狀態變化 x'(t) 和系統輸出 y(t) 是系統狀態和輸入向量的線性組合,那麼我們可以說這些系統是線性系統,我們可以用矩陣形式重新寫它們


[狀態方程]


[輸出方程]

如果系統本身是時不變的,我們可以如下重新寫它們

狀態方程顯示了系統當前狀態及其輸入與系統未來狀態之間的關係。輸出方程顯示了系統狀態及其輸入與輸出之間的關係。這些方程表明,在給定系統中,當前輸出依賴於當前輸入和當前狀態。未來狀態也依賴於當前狀態和當前輸入。

重要的是要注意,特定系統的態空間方程不是唯一的,透過使用行操作操縱 ABCD 矩陣,可以有無限多種方法來表示這些方程。但是,這些矩陣有許多“標準形式”,這使得某些計算更容易。在這些形式之間進行轉換需要線性代數的知識。

態空間基定理
任何可以用有限個 n 階微分方程或 n 階差分方程來描述的系統,或者任何可以用它們來近似的系統,都可以用態空間方程來描述。因此,態空間方程的通解是所有這些方程組的解。

矩陣:A B C D

[edit | edit source]

我們的系統具有以下形式

為了強調這些量可能不是簡單的標量,而是向量,我們對它們進行了加粗處理。如果這些系統是時不變的,我們可以透過移除時間變數來簡化它們。

現在,如果我們對這些函式關於時間 *t0* 的輸入和狀態向量求偏導數,我們將得到系統的矩陣。

在我們的時不變狀態空間方程中,我們將這些矩陣及其關係寫成

我們有四個常數矩陣:*A*,*B*,*C* 和 *D*。我們將在下面解釋這些矩陣。

矩陣 A
矩陣 *A* 是 **系統矩陣**,它描述了當前狀態如何影響狀態變化 *x'*。如果狀態變化不依賴於當前狀態,則 *A* 將是零矩陣。狀態矩陣的指數,*eAt* 稱為 **狀態轉移矩陣**,這是一個我們將在下面描述的重要函式。
矩陣 B
矩陣 *B* 是 **控制矩陣**,它決定了系統輸入如何影響狀態變化。如果狀態變化不依賴於系統輸入,則 *B* 將是零矩陣。
矩陣 C
矩陣 *C* 是 **輸出矩陣**,它決定了系統狀態與系統輸出之間的關係。
矩陣 D
矩陣 *D* 是 **前饋矩陣**,它允許系統輸入直接影響系統輸出。我們之前考慮過的一種基本的反饋系統沒有前饋元素,因此對於我們已經考慮過的大多數系統,*D* 矩陣是零矩陣。

矩陣維度

[edit | edit source]

由於我們將多個矩陣和向量加減和相乘,我們需要絕對確保矩陣具有相容的維度,否則方程將是未定義的。對於整數 *p*,*q* 和 *r*,系統矩陣和向量的維度定義如下

向量 矩陣

矩陣維度
A: p × p
B: p × q
C: r × p
D: r × q

如果矩陣和向量的維度不匹配,則方程無效,結果將毫無意義。矩陣和向量必須具有相容的維度,否則它們不能使用矩陣運算組合。

在本書的其餘部分,我們將使用右側的小模板作為關於矩陣維度的提醒,以便我們能夠在整本書中保持一致的符號。

符號簡寫

[edit | edit source]

系統的狀態方程和輸出方程可以用矩陣 ABCD 表示。由於這些方程的形式總是相同的,我們可以使用有序四元組來表示一個系統。我們可以使用簡寫 (A, B, C, D) 來表示完整的 state-space 表示。此外,由於狀態方程對我們以後的分析非常重要,我們可以寫一個有序對 (A, B) 來表示狀態方程

獲取狀態方程

[edit | edit source]

狀態方程的優點是,它們可以用來透明地描述連續和離散系統。有些教材會區分離散和連續情況下的符號,但本教材不會做出這種區分。相反,我們將選擇對連續和離散系統都使用通用的係數矩陣 ABCD。偶爾,本書可能會使用下標 C 來表示矩陣的連續時間版本,並使用下標 D 來表示同一矩陣的離散時間版本。其他教材可能會使用字母 FHG 表示連續系統,並使用 ΓΘ 表示離散系統。但是,如果我們跟蹤我們的時域系統,我們就不需要擔心這樣的符號。

從微分方程

[edit | edit source]

假設我們有一個關於輸入 u(t) 和輸出 y(t) 的一般三階微分方程

我們可以用以下方式建立狀態變數向量 x

現在我們得到以下3個一階微分方程:

現在,我們可以用各個x分量來定義狀態向量x,並且我們也可以建立未來狀態向量。

,

有了這些,我們可以為系統組裝狀態空間方程:

當然,這只是一個簡單的例子,但大多數讀者應該能夠理解這種方法。

從傳遞函式

[edit | edit source]

從拉普拉斯域傳遞函式獲得狀態空間方程的方法與從時域微分方程獲得狀態空間方程的方法非常相似。我們將從拉普拉斯域到狀態空間域轉換系統描述的過程稱為實現。我們將在後面的章節中更詳細地討論實現。一般來說,假設我們有一個形式如下所示的傳遞函式:

我們可以將我們的ABCD矩陣寫成如下形式:

這種形式的方程被稱為系統的可控規範形,我們將在後面討論。

注意,要執行此方法,分母和分子多項式必須是首一多項式,即最高階項的係數必須為 1。如果最高階項的係數不是 1,則必須將方程除以該係數以使其變為 1。

狀態空間表示

[edit | edit source]

需要注意的是,狀態變數x 是使用者定義的,因此是任意的。對於特定問題,定義x 的方法有很多,每種方法都會導致不同的狀態空間方程。

注意:使用狀態空間方程來表示系統有無限多種等效方法。有些方法比其他方法更好。一旦獲得這些狀態空間方程,就可以根據需要對其進行操作,以使其採用特定的形式。

考慮前面的連續時間示例。我們可以將方程改寫為以下形式

.

現在我們定義狀態變數

以及一階導數

(這裡可能存在錯誤。沒有考慮到:。將五行前的內容封裝起來:。)

那麼該系統的狀態空間方程將由以下公式給出:

x 也可以用在任何數量的變數變換中,作為數學上的方便。但是,變數 yu 對應於物理訊號,不能像 x 一樣任意選擇、重新定義或變換。

示例:啞變數

[編輯 | 編輯原始碼]

某型載人飛機的升降控制可以用以下公式表示:

其中 α 是飛機航行的方向,θ 是飛機所指的方向(姿態),δ 是副翼的角度(來自飛行員的控制輸入)。該方程並非正確格式,因此我們需要建立一些啞變數

這將為我們提供狀態方程:

從該方程可以看出,儘管我們得到了有效的狀態方程,但變數 θ1θ2 不一定對應於任何可測量的物理事件,而是使用者構造的啞變數,用於幫助定義系統。但是請注意,變數 α 和 δ 確實對應於物理值,不能更改。

離散化

[編輯 | 編輯原始碼]

如果我們有一個在連續時間內定義的系統(A, B, C, D),我們可以將該系統離散化,以便使用數字計算機執行等效過程。我們可以使用導數的定義,如下所示

將此代入狀態方程,並進行一些近似(暫時忽略極限),我們得到

我們可以移除這個極限,因為在離散系統中,樣本之間的時間間隔是正數且不可忽略。根據定義,離散系統僅在某些時間點定義,而不是像極限所指示的那樣在所有時間點定義。在離散系統中,我們只對系統在離散點的值感興趣。如果這些點以每T秒(取樣時間)均勻間隔,則系統的樣本出現在t = kT處,其中k是一個整數。將kT代入我們上面給出的方程,我們得到

或者,使用我們之前開發的方括號速記,我們可以寫成

以這種形式,狀態空間系統可以使用軟體非常容易地實現到數字計算機系統中,而不是使用複雜的模擬硬體。我們將在後面的章節中更詳細地討論這種關係和數字系統。

我們將寫出離散時間狀態空間方程為

關於符號的說明

[編輯 | 編輯原始碼]

變數T在控制系統中是一個常見變數,特別是在討論連續時間系統的起點和終點,或討論數字系統的取樣時間時。然而,字母T的另一個常見用法是表示矩陣的轉置操作。為了緩解這種歧義,我們將用prime表示矩陣的轉置

其中A'是矩陣A的轉置。

prime符號也經常用於表示時間導數。我們將在討論的大多數矩陣都是時不變的;因為我們永遠不會對時不變矩陣求時間導數,所以沒有歧義。但是,對於時變矩陣,我們將使用以下符號來區分時間導數和轉置

轉置。
時間導數。

請注意,某些隨時間變化的變數沒有用(t)字尾編寫,例如變數xyu。對於這些變數,prime的預設行為是時間導數,例如在狀態方程中。如果需要對其中一個向量進行轉置,則會顯式新增(t)'字尾,以對應於我們上面的符號。

對於需要使用厄米特轉置的例項,我們將使用符號

這種表示法在其他文獻中很常見,並且在此處沒有明顯的歧義。

MATLAB 表示

[edit | edit source]
此操作可以使用以下 MATLAB 命令執行

狀態空間系統可以使用 4 個系統矩陣 A、B、C 和 D 在 MATLAB 中表示。我們可以使用 ss 函式建立一個系統資料結構

sys = ss(A, B, C, D);

以這種方式建立的系統可以像之前描述的傳遞函式描述一樣進行操作。要將傳遞函式轉換為狀態空間表示,我們可以使用 tf2ss 函式

[A, B, C, D] = tf2ss(num, den);

要執行相反的操作,我們可以使用 ss2tf 函式

[num, den] = ss2tf(A, B, C, D);
華夏公益教科書