Main Content

Kalman Filter

離散時間または連続時間の線形システムの状態の推定

  • ライブラリ:
  • Control System Toolbox / State Estimation

    System Identification Toolbox / Estimators

  • Kalman Filter block

説明

Kalman Filter ブロックを使用して、プロセスおよび測定ノイズ共分散データが与えられた状態空間プラント モデルの状態を推定します。状態空間モデルは時変にできます。状態空間モデルおよびノイズ共分散行列がすべて時不変の場合は、定常状態カルマン フィルターの実装を使用し、それ以外では時変カルマン フィルターを使用します。

カルマン フィルターは、Continuous-Time Estimation (System Identification Toolbox)およびDiscrete-Time Estimation (System Identification Toolbox)の連続または離散の推定問題に最適な解を提供します。

Kalman Filter ブロックは、次の点で kalman コマンドと異なります。

  • kalman(sys,...) を呼び出すと、sys には行列 G と行列 H が含まれていると想定されます。具体的には、sys.B は形式 [B G] になり、sys.D は形式 [D H] になります。Kalman Filter ブロックに LTI 変数を指定する場合、指定された LTI 変数に G および H を含めることは想定されていません。それらはオプションとして別々に扱います。

  • kalman コマンドで作成されるフィルターは、既定で [yhat;xhat] を出力します。ブロックは、既定で xhat のみを出力します。

  • Kalman コマンドは、離散時間システムの共分散行列 P および Z の両方を出力できます。ブロックは、そのようなシステムの P または Z のみを出力できます。

制限

  • プラントとノイズのデータは以下の制約を満たさなければなりません。

    • (C,A) が検出可能である。

    • R¯>0 および Q¯N¯R¯1N¯T0

    • (AN¯R¯1C,Q¯N¯R¯1N¯T) では、虚軸 (離散時間では単位円) に非可制御モードがない。ここで、

      Q¯=GQGTR¯=R+HN+NTHT+HQHTN¯=G(QHT+N)

  • 連続時間カルマン フィルターは、Function-Call Subsystem または Triggered Subsystem では使用できません。

端子

入力

すべて展開する

既知の入力 u(t) または u[k]

依存関係

この端子を有効にするには、[入力端子 u の追加] パラメーターを選択します。このパラメーターは既定で選択されています。

推定された状態を更新する測定出力 y[n]

n 行 n 列の状態 (またはシステム) 行列。

依存関係

この端子を有効にするには、[モデル ソース] パラメーターを [入力端子] に設定します。

n 行 p 列の入力行列。

依存関係

この端子を有効にするには、[モデル ソース] パラメーターを [入力端子] に設定し、[入力端子 u の追加] パラメーターを選択します。

q 行 p 列の出力行列。

依存関係

この端子を有効にするには、[モデル ソース] パラメーターを [入力端子] に設定します。

q 行 p 列の直達 (またはフィードフォワード) 行列。システム モデルに直達がない場合、[D] はゼロ行列になります。

依存関係

この端子を有効にするには、[モデル ソース] パラメーターを [入力端子] に設定し、[入力端子 u の追加] パラメーターを選択します。

状態空間方程式におけるノイズ変換。

依存関係

この端子を有効にするには、[G 行列と H 行列を使用 (既定値 G=I、H=0)] パラメーターを選択します。

状態空間方程式におけるノイズ変換。

依存関係

この端子を有効にするには、[G 行列と H 行列を使用 (既定値 G=I、H=0)] パラメーターを選択します。

プロセス ノイズの共分散行列。次のいずれかで指定します。

  • 実数の非負のスカラー。[Q] は、対角にスカラーをもつ Nw 行 Nw 列の対角行列です。Nw はモデルのプロセス ノイズ入力の数です。

  • 実数の非負のスカラーのベクトル。[Q] は、Nw 行 Nw 列の対角行列であり、[Q] の対角にベクトルの要素をもちます。

  • Nw 行 Nw 列の半正定値行列。

依存関係

この端子を有効にするには、[時不変 Q] パラメーターを選択解除します。

測定ノイズの共分散行列。次のいずれかで指定します。

  • 実数の正のスカラー。[R] は、対角にスカラーをもつ Ny 行 Ny 列の対角行列です。Ny はモデルの測定出力の数です。

  • 実数の正のスカラーのベクトル。[R] は、Ny 行 Ny 列の対角行列であり、[R] の対角にベクトルの要素をもちます。

  • Ny 行 Ny 列の正定値行列。

依存関係

この端子を有効にするには、[時不変 R] パラメーターを選択解除します。

プロセスおよび測定ノイズの相互共分散行列。Nw 行 Ny 列の行列として指定します。行列 [Q N; NT R] は、正定値でなければなりません。

依存関係

この端子を有効にするには、[時不変 N] パラメーターを選択解除します。

初期時点における行列 [P]

依存関係

この端子を有効にするには、[モデル ソース] パラメーターを [入力端子] に設定し、[ソース] パラメーターを [入力端子] に設定します。

初期時点での推定状態。

依存関係

この端子を有効にするには、[ソース] パラメーターを [入力端子] に設定します。

この端子は測定値の更新を制御し、スカラー信号を受け取ります。

依存関係

この端子を有効にするには、[入力端子 Enable を追加して測定値の更新を制御] パラメーターを選択します。

指定された初期値を使用して、推定状態およびパラメーター共分散行列をリセットする制御信号。リセットがトリガーされるタイミングの詳細については、External Reset (System Identification Toolbox)を参照してください。

依存関係

この端子を有効にするには、[外部リセット] パラメーターを [なし] 以外の任意の値に設定します。

出力

すべて展開する

線形システムの推定状態。

線形システムの推定出力。

依存関係

この端子を有効にするには、[推定されたモデル出力 y の出力] パラメーターを選択します。

出力端子 [Z] をブロックに追加します。

この端子を有効にするには、[状態推定誤差の共分散 Z の出力] パラメーターを選択します。

依存関係

この端子を有効にするには、[時間領域] パラメーターを [離散時間] に設定し、[現在の測定値 y[n] を使用して xhat[n] を改善] パラメーターを選択します。

出力端子 [P] をブロックに追加します。

この端子を有効にするには、[状態推定誤差の共分散 P の出力] パラメーターを選択します。

依存関係

この端子を有効にするには、[時間領域] パラメーターを [連続時間] に設定するか、[時間領域] パラメーターを [離散時間] に設定して [現在の測定値 y[n] を使用して xhat[n] を改善] パラメーターを選択解除します。

メモ

  • [イネーブル][リセット] 以外のすべての入力端子は、データ型は同じでなければなりません (single または double)。

  • [イネーブル] および [リセット] 端子は、singledoubleint8uint8int16uint16int32uint32 および boolean データ型をサポートします。

パラメーター

すべて展開する

フィルター設定

  • 離散時間 (既定) — ブロックは離散時間状態を推定します。

  • 連続時間 — ブロックは連続時間状態を推定します。

    Kalman Filter ブロックが同期状態制御 (State Control (HDL Coder) ブロックを参照) を備えたモデル内にある場合、[連続時間] は選択できません。

プログラムでの使用

ブロック パラメーター: TimeDomain
型: string、文字ベクトル
値: "Discrete-Time" | "Continuous-Time"
既定: "Discrete-Time"

離散時間のカルマン フィルターの現在の推定器バリアントを使用します。このパラメーターを選択しない場合、遅延推定器 (バリアント) が使用されます。

このパラメーターは、[時間領域][離散時間] の場合にのみ使用できます。

プログラムでの使用

ブロック パラメーター: UseCurrentEstimator
型: string、文字ベクトル
値: "off" | "on"
既定: "on"

ブロックのサンプル時間。-1 または正のスカラーとして指定します。

既定値は -1 です。これは、ブロックがモデル内のブロックのコンテキストに基づいてサンプル時間を継承することを意味します。すべてのブロックの入力端子で、サンプル時間が同じでなければなりません。

依存関係

このパラメーターは、[時間領域][離散時間] で、[モデル ソース][個々の A、B、C、D 行列] または [入力端子] である場合にのみ使用できます。サンプル時間は、[モデル ソース][LTI 状態空間変数] の場合に LTI 状態空間変数から取得されます。

プログラムでの使用

ブロック パラメーター: Ts
型: string、文字ベクトル
値: "-1" | スカラー
既定: "-1"

モデル パラメーター

システム モデル
  • LTI 状態空間変数[変数] で指定されたモデルを使用します。既定値は ss(0.95,1,1,0) です。モデルのサンプル時間は、[時間領域] パラメーターと一致しなければなりません。つまり、[時間領域] が [離散時間] の場合、モデルは離散時間でなければなりません。

  • 個々の A、B、C、D 行列 — ブロック パラメーターに [A][B][C]、および [D] を指定します。

  • 入力端子 — Kalman Filter ブロックへの入力信号として、行列 [A][B][C][D] を指定します。このオプションを選択した場合、ブロックには追加の入力端子 [A][B][C][D] が含められます。ブロック パラメーターの [状態数][入力数]、および [出力数] も指定しなければなりません。

プログラムでの使用

ブロック パラメーター: ModelSource
型: string、文字ベクトル
値: "LTI State-Space Varaible" | "Individual A, B, C, D matrices" | "Input port"
既定: "LTI State-Space Variable"

行列 [A] を指定します。実数の正方でなければなりません。既定値は 0.95 です。

依存関係

この端子を有効にするには、[モデル ソース] パラメーターを [個々の A、B、C、D 行列] に設定します。

プログラムでの使用

ブロック パラメーター: A
型: string、文字ベクトル
値:"real matrix"
既定: "0.95"

行列 [B] を指定します。実数行列で、行数が行列 [A] と同じでなければなりません。既定値は 1 です。

依存関係

この端子を有効にするには、[モデル ソース] パラメーターを [個々の A、B、C、D 行列] に設定します。

プログラムでの使用

ブロック パラメーター: B
型: string、文字ベクトル
値:"real matrix"
既定: "1"

行列 [C] を指定します。実数行列で、列数が行列 [A] と同じでなければなりません。既定値は 1 です。

依存関係

この端子を有効にするには、[モデル ソース] パラメーターを [個々の A、B、C、D 行列] に設定します。

プログラムでの使用

ブロック パラメーター: C
型: string、文字ベクトル
値:"real matrix"
既定: "1"

行列 [D] を指定します。実数行列であり、行数は行列 [C] と同じで、列数は行列 [B] と同じでなければなりません。既定値は 0 です。

依存関係

この端子を有効にするには、[モデル ソース] パラメーターを [個々の A、B、C、D 行列] に設定します。

プログラムでの使用

ブロック パラメーター: D
型: string、文字ベクトル
値:"real matrix"
既定: "0"

推定される状態数。正の整数として指定します。既定値は 1 です。

依存関係

この端子を有効にするには、[モデル ソース] パラメーターを [入力端子] に設定します。

プログラムでの使用

ブロック パラメーター: NumberOfStates
型: string、文字ベクトル
値: "1" | scalar
既定: "1"

モデルにおける既知の入力の数。正の整数として指定します。既定値は 1 です。

依存関係

この端子を有効にするには、[モデル ソース] パラメーターを [入力端子] に設定します。

プログラムでの使用

ブロック パラメーター: NumberOfInputs
型: string、文字ベクトル
値: "1" | scalar
既定: "1"

モデルにおける測定出力の数。正の整数として指定します。既定値は 1 です。

依存関係

この端子を有効にするには、[モデル ソース] パラメーターを [入力端子] に設定します。

プログラムでの使用

ブロック パラメーター: NumberOfOutputs
型: string、文字ベクトル
値: "1" | scalar
既定: "1"
初期推定
  • ダイアログ — ダイアログ ボックスで値を直接指定します。

  • 入力端子 — 入力端子から値を継承します。既定値は 10 です。ブロックには、追加の入力端子 [X0] が含まれます。時変カルマン フィルターを使用する場合、2 番目の入力端子 [P0] が追加されます。[X0][P0] は、それぞれパラメーター [初期状態 x[0]] および [状態推定誤差の共分散 P[0]] と同じ条件を満たさなければなりません。

プログラムでの使用

ブロック パラメーター: InitialEstimateSource
型: string、文字ベクトル
値: "Dialog" | "Input port"
既定: "Dialog"

初期状態推定値を、実数のスカラーまたはベクトルとして指定します。スカラーを指定する場合、すべての初期状態推定値はこのスカラーに設定されます。ベクトルを指定する場合、ベクトルの長さはモデル内の状態の数と一致しなければなりません。既定値は 0 です。

依存関係

この端子を有効にするには、[ソース] パラメーターを [ダイアログ] に設定します。

プログラムでの使用

ブロック パラメーター: X0
型: string、文字ベクトル
値: "0" | scalar | vector
既定: "0"

離散時間カルマン フィルターでの初期状態推定誤差の共分散 P[0]、または連続時間での P(0) を指定します。このパラメーターは次のいずれかとして指定しなければなりません。

  • 実数の非負のスカラー。[P] は対角にスカラーをもつ Ns 行 Ns 列の対角行列です。Ns はモデル内の状態数です。

  • 実数の非負のスカラーのベクトル。[P] は、Ns 行 Ns 列の対角行列であり、[P] の対角にベクトルの要素をもちます。

  • Ns 行 Ns 列の半正定値行列。

依存関係

この端子を有効にするには、[モデル ソース] パラメーターを [入力端子] に、[ソース] パラメーターを [ダイアログ] 設定します。

プログラムでの使用

ブロック パラメーター: P0
型: string、文字ベクトル
値: "10" | scalar| vector | matrix
既定: "10"
ノイズ特性

[変数] で指定された状態空間モデルに存在する、事前に同定されたカルマン ゲインを使用するかどうかを指定します。

依存関係

このパラメーターを有効にするには、以下の条件を満たす必要があります。

  • [モデル ソース][LTI 状態空間変数] に設定されており、[変数] が非ゼロの [K] 行列をもつ同定された状態空間モデル (idss (System Identification Toolbox)) である。

  • [時不変 Q][時不変 R]、および [時不変 N] の各パラメーターを選択する。

  • [G 行列と H 行列を使用 (既定値 G=I、H=0)] パラメーターを選択している場合は、[時不変 G] および [時不変 H] パラメーターも選択しなければならない。

プログラムでの使用

ブロック パラメーター: UseK
型: string、文字ベクトル
値: "off" | "on"
既定: "off"

既定は、G=I および H=0 です。このオプションを選択する場合、[G] および [H] のパラメーターを指定しなければなりません。

プログラムでの使用

ブロック パラメーター: UseGH
型: string、文字ベクトル
値: "off" | "on"
既定: "off"

これは、行列 [A] と同じ行数をもつ実数行列でなければなりません。既定値は 1 です。

依存関係

このパラメーターを有効にするには、[G 行列と H 行列を使用 (既定値 G=I、H=0)] パラメーターを選択します。

プログラムでの使用

ブロック パラメーター: G
型: string、文字ベクトル
値: スカラー | ベクトル | 行列
既定: "1"

このオプションを選択解除すると、ブロックには追加の入力端子 [G] が含められます。

プログラムでの使用

ブロック パラメーター: TimeInvariantG
型: string、文字ベクトル
値: "off" | "on"
既定: "on"

これは、行列 [C] 行列と同じ行数と、行列 [G] 行列と同じ列数をもつ実数行列でなければなりません。既定値は 0 です。

依存関係

このパラメーターを有効にするには、[G 行列と H 行列を使用 (既定値 G=I、H=0)] パラメーターを選択します。

プログラムでの使用

ブロック パラメーター: H
型: string、文字ベクトル
値: スカラー | ベクトル | 行列
既定: "0"

このオプションを選択解除すると、ブロックには追加の入力端子 [H] が含められます。

プログラムでの使用

ブロック パラメーター: TimeInvariantH
型: string、文字ベクトル
値: "off" | "on"
既定: "on"

モデル内のプロセス ノイズ入力の数を指定します。既定値は 1 です。

依存関係

このパラメーターは、[時不変 G][時不変 H] が選択解除されている場合にのみ使用できます。それ以外の場合、この情報は行列 [G] または行列 [H] から推定されます。

プログラムでの使用

ブロック パラメーター: NumberOfProcessNoiseInputs
型: string、文字ベクトル
値: スカラー
既定: "1"

以下のいずれかとして指定します。

  • 実数の非負のスカラー。[Q] は、対角にスカラーをもつ Nw 行 Nw 列の対角行列です。Nw はモデルのプロセス ノイズ入力の数です。

  • 実数の非負のスカラーのベクトル。[Q] は、Nw 行 Nw 列の対角行列であり、[Q] の対角にベクトルの要素をもちます。

  • Nw 行 Nw 列の半正定値行列。

依存関係

このパラメーターを有効にするには、[時不変 Q] パラメーターを選択します。

プログラムでの使用

ブロック パラメーター: Q
型: string、文字ベクトル
値: スカラー | ベクトル | 行列
既定: "0.05"

このパラメーターを選択解除すると、ブロックには追加の入力端子 [Q] が含められます。

プログラムでの使用

ブロック パラメーター: TimeInvariantQ
型: string、文字ベクトル
値: "off" | "on"
既定: "on"

以下のいずれかとして指定します。

  • 実数の正のスカラー。[R] は、対角にスカラーをもつ Ny 行 Ny 列の対角行列です。Ny はモデルの測定出力の数です。

  • 実数の正のスカラーのベクトル。[R] は、Ny 行 Ny 列の対角行列であり、[R] の対角にベクトルの要素をもちます。

  • Ny 行 Ny 列の正定値行列。

依存関係

このパラメーターを有効にするには、[時不変 R] パラメーターを選択します。

プログラムでの使用

ブロック パラメーター: R
型: string、文字ベクトル
値: スカラー | ベクトル | 行列
既定: "1"

このパラメーターを選択解除すると、ブロックには追加の入力端子 [R] が含められます。

プログラムでの使用

ブロック パラメーター: TimeInvariantR
型: string、文字ベクトル
値: "off" | "on"
既定: "on"

このパラメーターを Nw 行 Ny 列の行列として指定します。行列 [Q N; NT R] は、正定値でなければなりません。

依存関係

このパラメーターを有効にするには、[時不変 N] パラメーターを選択します。

プログラムでの使用

ブロック パラメーター: N
型: string、文字ベクトル
値: スカラー | ベクトル | 行列
既定: "0"

このパラメーターを選択解除すると、ブロックには追加の入力端子 [N] が含められます。

プログラムでの使用

ブロック パラメーター: TimeInvariantN
型: string、文字ベクトル
値: "off" | "on"
既定: "on"

オプション

追加の入力端子

モデル内に既知の入力 u(t) または u[k] が含まれる場合、このオプションを選択します。このパラメーターは既定で選択されています。このパラメーターを選択解除すると、ブロックから入力端子 [u] が削除され、ブロック ダイアログ ボックスから [B][D]、および [入力数] のパラメーターが削除されます。

プログラムでの使用

ブロック パラメーター: AddInputPort
型: string、文字ベクトル
値: "off" | "on"
既定: "on"

測定値の更新を制御する場合、このオプションを選択します。ブロックには、追加の入力端子 [Enable] が含められます。入力端子 [Enable] はスカラー信号を受け入れます。既定で、このパラメーターは選択されません。

既定では、ブロックは各タイム ステップで測定の更新を行い、測定出力に基づいて状態および出力推定 x^ および y^ を改善します。端子 [Enable] 信号が 0 の場合、現在のサンプル時間での測定値更新はスキップされます。具体的な状態推定の方程式は、連続時間カルマン フィルターで x^˙(t)=A(t)x^(t)+B(t)u(t)、離散時間で x^[n+1|n]=A[n]x^[n|n1]+B[n]u[n] になります。

メモ

端子 [Enable] を有効にすることで、測定値の更新を制御できます。既定では、Kalman Filter が測定値を更新します。

プログラムでの使用

ブロック パラメーター: AddEnablePort
型: string、文字ベクトル
値: "off" | "on"
既定: "off"

このパラメーターは、ブロックがリセットされるタイミングの制御に役立ちます。タイム ステップ t でブロックをリセットするとします。ブロックが t で有効の場合、ソフトウェアはブロック ダイアログで、または入力端子 [P0] および [X0] で指定された初期パラメーター値を使用して、状態を推定します。つまり、t においてブロックは時間の更新を行い、有効の場合には、リセット後に測定値を更新します。ブロックは、これらの更新された推定値を出力します。

次のいずれかを指定します。

  • なし (既定) — 推定状態 x^ および状態推定誤差の共分散行列 [P] の値はリセットされません。

  • 立ち上がり — 制御信号が負または 0 の値から正の値に立ち上がる際にリセットをトリガーします。初期値が負の場合、0 に立ち上がるとリセットをトリガーします。

  • 立ち下がり — 制御信号が正または 0 の値から負の値に立ち下がる時点でリセットをトリガーします。初期値が正の場合、0 に立ち下がるとリセットをトリガーします。

  • 両方 — 制御信号が立ち上がる際または立ち下がる際にリセットをトリガーします。

  • レベル — 次のいずれかの場合にリセットをトリガーします。

    • 制御信号が現在のタイム ステップで非ゼロの場合。

    • 制御信号が前のタイム ステップでの非ゼロから現在のタイム ステップでの 0 に変化した場合。

  • レベル保持 — 制御信号が現在のタイム ステップで非ゼロの場合、リセットをトリガーします。

[なし] 以外のオプションを選択すると、[リセット] 入力端子がブロックに追加され、リセット制御の入力信号が提供されます。

プログラムでの使用

ブロック パラメーター: ExternalReset
型: string、文字ベクトル
値: "None" | "Rising" | "Falling"| "Either"| "Level"| "Level hold"
既定: "None"
追加の出力端子

出力端子 y^ をブロックに追加して、推定されたモデル出力を出力します。既定で、このパラメーターは選択されません。

プログラムでの使用

ブロック パラメーター: OutputEstimatedY
型: string、文字ベクトル
値: "off" | "on"
既定: "off"

出力端子 [Z] をブロックに追加します。行列 [Z] は、[時間領域][離散時間] で、[現在の測定値 y[n] を使用して xhat[n] を改善] パラメーターが選択されている場合にのみ指定されます。それ以外の場合は、Algorithms (System Identification Toolbox)節で説明されているように、行列 [P] が指定されます。

既定で、このパラメーターは選択されません。

プログラムでの使用

ブロック パラメーター: OutputZ
型: string、文字ベクトル
値: "off" | "on"
既定: "off"

出力端子 [P] をブロックに追加します。既定で、このパラメーターは選択されません。

依存関係

この端子を有効にするには、[時間領域] パラメーターを [連続時間] に設定するか、[時間領域] パラメーターを [離散時間] に設定して [現在の測定値 y[n] を使用して xhat[n] を改善] パラメーターを選択解除します。

プログラムでの使用

ブロック パラメーター: OutputP
型: string、文字ベクトル
値: "off" | "on"
既定: "off"

アルゴリズム

すべて展開する

参照

[1] Franklin, Gene F., J. David Powell, and Michael L. Workman. Digital Control of Dynamic Systems. 2nd ed. Reading, Mass: Addison-Wesley, 1990.

[2] Lewis, Frank L. Optimal Estimation: With an Introduction to Stochastic Control Theory. New York: Wiley, 1986.

拡張機能

C/C++ コード生成
Simulink® Coder™ を使用して C および C++ コードを生成します。

PLC コード生成
Simulink® PLC Coder™ を使用して構造化テキスト コードを生成します。

バージョン履歴

R2014b で導入

すべて展開する