kalman
状態の推定用のカルマン フィルターの設計
構文
説明
[
は、プラント モデルを kalmf
,L
,P
] = kalman(sys
,Q
,R
,N
)sys
およびノイズ共分散データを Q
、R
、N
としてカルマン フィルターを作成します。この関数では、次のブロック線図に示す設定のカルマン推定器で使用するカルマン フィルターを計算します。
既知入力を u およびプロセス ノイズ入力を w としてモデル sys
を作成し、w が sys
への最後の Nw 入力で構成されるようにします。"真" のプラント出力 yt は、sys
のすべての出力で構成されています。ノイズの共分散データ Q
、R
および N
も指定します。返されるカルマン フィルター kalmf
は、既知入力 u とノイズを含む測定値 y を取り、真のプラント出力の推定 とプラント状態の推定 を生成する状態空間モデルです。kalman
は、カルマン ゲイン L
と定常偏差の共分散行列 P
も返します。
例
SISO プラント用のカルマン フィルターの設計
以下のブロック線図に示されているように、入力に加法性ホワイト ノイズ "w" および出力に "v" をもつプラントに対するカルマン フィルターを設計します。
プラントは、次の状態空間行列をもち、サンプル時間が指定されていない (Ts = -1
) 離散時間プラントであると仮定します。
A = [1.1269 -0.4940 0.1129 1.0000 0 0 0 1.0000 0]; B = [-0.3832 0.5919 0.5191]; C = [1 0 0]; D = 0; Plant = ss(A,B,C,D,-1); Plant.InputName = 'un'; Plant.OutputName = 'yt';
kalman
を使用するには、ノイズ w
の入力をもつモデル sys
を指定しなければなりません。したがって、Plant
は入力 un = u + w
を取るため、sys
は Plant
とは同じにはなりません。ノイズ入力の加算結合を作成して、sys
を作成できます。
Sum = sumblk('un = u + w'); sys = connect(Plant,Sum,{'u','w'},'yt');
同様に、sys = Plant*[1 1]
を使用できます。
ノイズ共分散を指定します。プラントには 1 つのノイズ入力と 1 つの出力があるため、これらの値はスカラーになります。実際には、これらの値はシステムのノイズ源のプロパティであり、システムの測定値またはその他の情報により判別します。この例では、両方のノイズ源に単位共分散があり、相関していない (N
= 0) ものと仮定します。
Q = 1; R = 1; N = 0;
フィルターを設計します。
[kalmf,L,P] = kalman(sys,Q,R,N); size(kalmf)
State-space model with 4 outputs, 2 inputs, and 3 states.
カルマン フィルター kalmf
は、2 つの入力と 4 つの出力をもつ状態空間モデルです。kalmf
は、入力としてプラント入力信号 "u" とノイズを含むプラント出力 を取ります。最初の出力は、推定された真のプラント出力 です。残りの 3 つの出力は、状態推定値 です。kalmf
の入力名と出力名を調べて、kalman
でそれらに適宜ラベル付けされていることを確認します。
kalmf.InputName
ans = 2x1 cell
{'u' }
{'yt'}
kalmf.OutputName
ans = 4x1 cell
{'yt_e'}
{'x1_e'}
{'x2_e'}
{'x3_e'}
カルマン ゲイン L
を調べます。3 つの状態をもつ SISO プラントの場合、L
は 3 要素の列ベクトルになります。
L
L = 3×1
0.3586
0.3798
0.0817
kalmf
を使用してノイズによる測定誤差を削減する方法を示す例については、カルマン フィルター処理を参照してください。
MIMO プラント用のカルマン フィルターの設計
3 つの入力をもち、その中の 1 つがプロセス ノイズ "w"、2 つが測定出力を表すプラントについて考えます。プラントには次の 4 つの状態があります。
次の状態空間行列と仮定して、sys
を作成します。
A = [-0.71 0.06 -0.19 -0.17; 0.06 -0.52 -0.03 0.30; -0.19 -0.03 -0.24 -0.02; -0.17 0.30 -0.02 -0.41]; B = [ 1.44 2.91 0; -1.97 0.83 -0.27; -0.20 1.39 1.10; -1.2 0 -0.28]; C = [ 0 -0.36 -1.58 0.28; -2.05 0 0.51 0.03]; D = zeros(2,3); sys = ss(A,B,C,D); sys.InputName = {'u1','u2','w'}; sys.OutputName = {'y1','y2'};
プラントに 1 つのプロセス ノイズ入力のみがあるため、共分散 "Q" はスカラーになります。この例では、プロセス ノイズに単位共分散があるものと仮定します。
Q = 1;
kalman
は、Q
の次元を使用して、既知入力はどれで、ノイズ入力はどれかを判別します。スカラー Q
の場合、他に指定しない限り、kalman
は 1 つがノイズ入力と仮定し、最後の入力を使用します (非測定出力をもつプラントを参照)。
2 つの出力の測定ノイズについては、2 行 2 列のノイズ共分散行列を指定します。この例では、最初の出力に単位分散を使用し、2 番目の出力に 1.3 の分散を使用します。非対角要素値を 0 に設定して、2 つのノイズ チャネルが無相関であることを示します。
R = [1 0; 0 1.3];
カルマン フィルターを設計します。
[kalmf,L,P] = kalman(sys,Q,R);
入力と出力を調べます。kalman
は、kalmf
の入力と出力が表す内容を追跡するのに役立つ、kalmf
の InputName
プロパティ、OutputName
プロパティ、InputGroup
プロパティ、および OutputGroup
プロパティを使用します。
kalmf.InputGroup
ans = struct with fields:
KnownInput: [1 2]
Measurement: [3 4]
kalmf.InputName
ans = 4x1 cell
{'u1'}
{'u2'}
{'y1'}
{'y2'}
kalmf.OutputGroup
ans = struct with fields:
OutputEstimate: [1 2]
StateEstimate: [3 4 5 6]
kalmf.OutputName
ans = 6x1 cell
{'y1_e'}
{'y2_e'}
{'x1_e'}
{'x2_e'}
{'x3_e'}
{'x4_e'}
したがって、2 つの既知入力 u1
および u2
は kalmf
の最初の 2 つの入力で、2 つの測定出力 y1
および y2
は kalmf
への最後の 2 つの入力です。kalmf
の出力では、最初の 2 つが推定出力で、残りの 4 つが状態推定です。カルマン フィルターを使用するには、カルマン フィルター処理で SISO プラントについて説明されている方法と類似の方法で、これらの入力をプラントとノイズ信号に接続します。
非測定出力をもつプラント
4 つの入力と 2 つの出力をもつプラントについて考えます。最初の入力と 3 番目の入力は既知ですが、2 番目と 4 番目の入力はプロセス ノイズを表します。プラントには 2 つの出力もありますが、2 番目の出力のみ測定されます。
次の状態空間行列を使用して、sys
を作成します。
A = [-0.37 0.14 -0.01 0.04; 0.14 -1.89 0.98 -0.11; -0.01 0.98 -0.96 -0.14; 0.04 -0.11 -0.14 -0.95]; B = [-0.07 -2.32 0.68 0.10; -2.49 0.08 0 0.83; 0 -0.95 0 0.54; -2.19 0.41 0.45 0.90]; C = [ 0 0 -0.50 -0.38; -0.15 -2.12 -1.27 0.65]; D = zeros(2,4); sys = ss(A,B,C,D,-1); % Discrete with unspecified sample time sys.InputName = {'u1','w1','u2','w2'}; sys.OutputName = {'yun','ym'};
kalman
を使用してこのシステムのフィルターを設計するには、入力引数 known
および sensors
を使用して、既知となるプラントへの入力と、測定される出力を指定します。
known = [1 3]; sensors = [2];
ノイズ共分散を指定して、フィルターを設計します。
Q = eye(2); R = 1; N = 0; [kalmf,L,P] = kalman(sys,Q,R,N,sensors,known);
kalmf
の入力ラベルと出力ラベルを調べると、フィルターが必要とする入力と、フィルターで返される出力がわかります。
kalmf.InputGroup
ans = struct with fields:
KnownInput: [1 2]
Measurement: 3
kalmf.InputName
ans = 3x1 cell
{'u1'}
{'u2'}
{'ym'}
kalmf
は、入力として sys
の 2 つの既知入力および sys
のノイズを含む測定出力を取ります。
kalmf.OutputGroup
ans = struct with fields:
OutputEstimate: 1
StateEstimate: [2 3 4 5]
kalmf
の最初の出力は、測定されたプラント出力の真の値の推定値です。残りの出力は、状態推定値です。
入力引数
sys
— プロセス ノイズを含むプラント モデル
ss
モデル
プロセス ノイズを含むプラント モデル。状態空間 (ss
) モデルとして指定します。プラントは、既知入力 u とホワイト プロセス ノイズ入力 w をもちます。プラント出力 yt
には、測定ノイズは含まれません。
次のようなプラント モデルの状態空間行列を作成できます。
kalman
では、出力にガウス ノイズ v を仮定します。したがって、連続時間の場合、kalman
が機能する状態空間方程式は次のようになります。
離散時間の場合、状態空間方程式は次のようになります。
known
入力引数を使用しない場合、kalman
は Q
のサイズを使用して、ノイズ入力である sys
の入力を判別します。この例では、kalman
は最後の Nw = size(Q,1)
入力をノイズ入力として扱います。ノイズ入力 w
が sys
の最後の入力でない場合、known
入力引数を使用して既知のプラント入力を指定できます。kalman
では、残りの入力を確率的として扱います。
プラント行列のプロパティに対する追加の制約については、制限を参照してください。
Q
— プロセス ノイズ共分散
スカラー | 行列
プロセス ノイズ共分散。スカラーまたは Nw 行 Nw 列の行列として指定します。ここで Nw はプラントのノイズ入力の数です。kalman
は Q
のサイズを使用して、ノイズ入力である sys
の入力を判別し、known
入力引数で他に指定しない限り、ノイズである最後の Nw = size(Q,1)
入力を取ります。
kalman
は、プロセス ノイズ w が共分散 Q
= E(wwT) をもつガウス ノイズであると仮定します。プラントに 1 つのプロセス ノイズ入力のみがある場合、Q
は w の分散と等しいスカラーになります。プラントに複数の無相関のノイズ入力がある場合、Q
は対角行列になります。実際には、測定を行うか、システムのノイズ プロパティについての、経験や知識に基づく推測によって、Q
の適切な値を特定します。
R
— 測定ノイズ共分散
スカラー | 行列
測定ノイズ共分散。スカラーまたは Ny 行 Ny 列の行列として指定します。ここで Ny はプラント出力の数です。kalman
は、測定ノイズ v が共分散 R
= E(vvT) をもつホワイト ノイズであると仮定します。プラントに 1 つの出力チャネルのみがある場合、R
は v の分散と等しいスカラーになります。プラントに、無相関の測定ノイズをもつ複数の出力チャネルがある場合、R
は対角行列になります。実際には、測定を行うか、システムのノイズ プロパティについての、経験や知識に基づく推測によって、R
の適切な値を特定します。
測定ノイズ共分散に対する追加の制約については、制限を参照してください。
N
— ノイズ相互共分散
0 (既定値) | スカラー | 行列
ノイズ相互共分散。スカラーまたは Nw 行 Ny 列の行列として指定します。kalman
は、プロセス ノイズ w と測定ノイズ v が N
= E(wvT) を満たすことを前提としています。2 つのノイズ源が相関しない場合は、N
を省略できます。これは N = 0
と設定するのと同じです。実際には、測定を行うか、システムのノイズ プロパティについての、経験や知識に基づく推測によって、N
の適切な値を特定します。
sensors
— sys
の測定された出力
ベクトル
sys
の測定された出力。測定される sys
の出力を特定するインデックスのベクトルとして指定します。たとえば、システムに 3 つの出力があっても、測定されるのは、sys
の最初と 3 番目の出力にあたる 2 つの出力であるとします。この場合は、sensors = [1 3]
と設定します。
known
— sys
の既知入力
ベクトル
sys
の既知入力。既知 (確定的) の入力を特定するインデックスのベクトルとして指定します。たとえば、システムに 3 つの入力があっても、既知となるのは最初と 2 番目の入力のみです。この場合は、known = [1 2]
と設定します。kalman
は、sys
の残りのすべての入力を確率的と解釈します。
出力引数
kalmf
— カルマン推定器
ss
モデル
カルマン推定器 (カルマン フィルター)。状態空間 (ss
) モデルとして返されます。結果として得られる推定器には、入力 および出力 があります。言い換えれば、kalmf
は入力としてプラント入力 u およびノイズを含むプラント出力 y を取り、出力として、推定されたノイズのないプラント出力 および推定状態値 を生成します。
kalman
では、kalmf
の InputName
、OutputName
、InputGroup
、および OutputGroup
プロパティが自動的に設定されるため、どの信号にどの入力と出力が対応するのか追跡できます。
Mx
, My
— 状態推定器のイノベーション ゲイン
配列
離散時間システムの状態推定器のイノベーション ゲイン。配列として返されます。
Mx
および My
は、type
= 'current'
の場合にのみ関連します。これは離散時間システムの既定の推定器です。連続時間 sys
または type
= 'delayed'
の場合、Mx = My = []
となります。
'current'
タイプの推定器の場合、Mx
および My
は、更新の式におけるイノベーション ゲインです。
ノイズ入力 w からプラント出力 y への直達がない場合 (つまり、H = 0 の場合、離散時間の推定を参照)、 となり、出力の推定値は に単純化されます。
配列 Mx
および My
の次元は、次のように sys
の次元によって異なります。
Mx
— Nx 行 Ny 列です。ここで Nx はプラント内の状態の数、Ny は出力の数です。My
— Ny 行 Ny 列です。
kalman
による Mx
および My
の取得の詳細については、離散時間の推定を参照してください。
制限
プラントとノイズ データは以下の条件を満たさなければなりません。
(C,A) は検出可能です。ここで
および となり、ここで
は、連続時間の場合は虚軸または離散時間の場合は単位円に非可制御モードがありません。
アルゴリズム
連続時間の推定
既知入力 u、プロセス ノイズ w、および測定ノイズ v をもつ連続時間プラントについて考えます。
ノイズ信号 w および v は次を満たします。
カルマン フィルター、つまりカルマン推定器は、定常偏差の共分散を最小化する状態推定値 を計算します。
カルマン フィルターは、次の状態方程式と出力方程式をもっています。
フィルター ゲイン L を取得するために、kalman
は代数リカッチ方程式を解きます。
ここで、
P は対応する代数リカッチ方程式を解きます。
推定器は既知の入力 u と測定値 y を使用して、出力と状態の推定 および を生成します。
離散時間の推定
離散プラントは、次のように求められます。
離散時間の場合、ノイズ信号 w および v は次を満たします。
離散時間推定器は、次の状態方程式をもっています。
kalman
は離散リカッチ方程式を解いて、ゲイン行列 L を取得します。
ここで、
kalman
は離散時間のカルマン推定器の 2 つのバリアント、現在の推定器 (type
= 'current'
) と遅延推定器 (type
= 'delayed'
) を計算できます。
現在の推定器 — までの使用可能なすべての測定値を使用して、出力推定 および状態推定 を生成します。この推定器は、次の出力方程式をもっています。
ここで、イノベーション ゲイン Mx および My は次のように定義されます。
したがって、Mx は、新しい測定値 を使用して状態推定 を更新します。
同様に、My は更新された出力推定を計算します。
H = 0 の場合、 となり、出力推定は に単純化されます。
遅延推定器 — yv[n–1] までの測定値のみを使用して、出力推定 と状態推定 を生成します。この推定器は次の出力方程式をもっています。
遅延推定器は制御ループ内で展開する方が簡単です。
バージョン履歴
R2006a より前に導入
MATLAB コマンド
次の MATLAB コマンドに対応するリンクがクリックされました。
コマンドを MATLAB コマンド ウィンドウに入力して実行してください。Web ブラウザーは MATLAB コマンドをサポートしていません。
Select a Web Site
Choose a web site to get translated content where available and see local events and offers. Based on your location, we recommend that you select: .
You can also select a web site from the following list:
How to Get Best Site Performance
Select the China site (in Chinese or English) for best site performance. Other MathWorks country sites are not optimized for visits from your location.
Americas
- América Latina (Español)
- Canada (English)
- United States (English)
Europe
- Belgium (English)
- Denmark (English)
- Deutschland (Deutsch)
- España (Español)
- Finland (English)
- France (Français)
- Ireland (English)
- Italia (Italiano)
- Luxembourg (English)
- Netherlands (English)
- Norway (English)
- Österreich (Deutsch)
- Portugal (English)
- Sweden (English)
- Switzerland
- United Kingdom (English)