Extended Kalman Filter
拡張カルマン フィルターを使用した離散時間非線形システムの状態の推定

ライブラリ:
Control System Toolbox /
State Estimation
System Identification Toolbox /
Estimators
説明
Extended Kalman Filter ブロックは、1 次離散時間拡張カルマン フィルター アルゴリズムを使用して離散時間の非線形システムの状態を推定します。
状態 x、入力 u、出力 y、プロセス ノイズ w および測定ノイズ v をもつプラントについて考えます。プラントを非線形システムとして表現できると仮定します。
このブロックは、システムの状態遷移関数と測定関数および拡張カルマン フィルター アルゴリズムを使用して、現在のタイム ステップに対する状態の推定値 を生成します。アルゴリズムの詳細については、オンライン状態推定のための拡張カルマン フィルター アルゴリズムおよびアンセンテッド カルマン フィルター アルゴリズムを参照してください。
システムの非線形の状態遷移関数と測定関数を作成し、これらの関数をブロックで指定します。このブロックは、異なるサンプリング レートで動作する複数のセンサーをもつシステムの状態推定をサポートします。それぞれがシステムの 1 つのセンサーに対応する測定関数を最大 5 つ指定できます。また、状態遷移関数と測定関数のヤコビアンを指定することもできます。これらを指定しない場合、ソフトウェアはヤコビアンを数値的に計算します。詳細については、状態遷移関数と測定関数を参照してください。
端子
入力
y1,y2,y3,y4,y5 — 測定されたシステム出力
ベクトル
ブロックで指定した各測定関数に対応する、測定されたシステム出力。端子の個数は、システム内の測定関数の個数に等しくなります。最大 5 つの測定関数を指定できます。たとえば、システムに 2 つのセンサーがある場合、ブロックに 2 つの測定関数を指定します。最初の端子 [y1] は既定で利用可能です。[適用] をクリックすると、ソフトウェアは 2 番目の測定関数に対応する端子 [y2] を生成します。
端子は N 次元のベクトルとして指定します。ここで N は、対応するセンサーで測定される数量の数です。たとえば、システムにオブジェクトの位置と速度を測定するセンサーが 1 つある場合、端子は [y1] の 1 つだけです。この端子は、位置と速度に対応する値をもつ 2 次元ベクトルとして指定されます。
依存関係
最初の端子 [y1] は既定で利用可能です。[y2] ~ [y5] の端子は、[測定値の追加] をクリックし、[適用] をクリックすると生成されます。
データ型: single
| double
StateTransitionFcnInputs — 状態遷移関数への追加のオプション入力引数
スカラー | ベクトル | 行列
状態遷移関数 f
に渡される、状態 x
とプロセス ノイズ w
以外の追加のオプション入力引数。状態遷移関数の詳細については、状態遷移関数と測定関数を参照してください。
システムに非加法性のプロセス ノイズがあり、状態遷移関数 f
が次の形式であると仮定します。
x(k+1) = f(x(k),w(k),StateTransitionFcnInputs)
ここで、k
はタイム ステップ、StateTransitionFcnInputs
は x
と w
以外の追加の入力引数です。
MATLAB® 関数 (.m
ファイル) を使用して f
を作成する場合、[適用] をクリックすると、ソフトウェアによって端子 [StateTransitionFcnInputs] が生成されます。この端子への入力はスカラー、ベクトル、または行列として指定できます。
状態遷移関数が複数の追加の入力をもつ場合、Simulink Function (Simulink) ブロックを使用して関数を指定します。Simulink Function ブロックを使用する際、追加の入力は Inport (Simulink) ブロックを使って Simulink Function ブロックに直接提供します。Extended Kalman Filter ブロック内に追加の入力用の入力端子は生成されません。
依存関係
この端子は次の両方の条件が満たされる場合にのみ生成されます。
MATLAB 関数を使用して [関数] に
f
を指定しており、f
が MATLAB パス上にある場合。x
とw
以外に、f
で必要とされる追加の入力引数が 1 つだけの場合。
データ型: single
| double
MeasurementFcn1Inputs,MeasurementFcn2Inputs,MeasurementFcn3Inputs,MeasurementFcn4Inputs,MeasurementFcn5Inputs — 各測定関数への追加のオプション入力引数
スカラー | ベクトル | 行列
測定関数に渡される、状態 x
と測定ノイズ v
以外の追加のオプション入力。測定関数の詳細については、状態遷移関数と測定関数を参照してください。
[MeasurementFcn1Inputs] は指定した最初の測定関数に対応し、それ以降も同様です。たとえば、システムに 3 つのセンサーと非加法性測定ノイズがある場合、3 つの測定関数 h1
、h2
、h3
は次の形式を取ります。
y1[k] = h1(x[k],v1[k],MeasurementFcn1Inputs)
y2[k] = h2(x[k],v2[k],MeasurementFcn2Inputs)
y3[k] = h3(x[k],v3[k])
ここで、k
はタイム ステップ、MeasurementFcn1Inputs
と MeasurementFcn2Inputs
は h1
と h2
への追加の入力引数です。
[関数] で MATLAB 関数 (.m
ファイル) を使用して h1
、h2
、および h3
を指定する場合、[適用] をクリックすると、ソフトウェアは [MeasurementFcn1Inputs] と [MeasurementFcn2Inputs] の端子を生成します。これらの端子への入力はスカラー、ベクトル、または行列として指定できます。
測定関数が複数の追加の入力をもつ場合、Simulink Function (Simulink) ブロックを使用して関数を指定します。Simulink Function ブロックを使用する際、追加の入力は Inport (Simulink) ブロックを使って Simulink Function ブロックに直接提供します。Extended Kalman Filter ブロック内に追加の入力用の入力端子は生成されません。
依存関係
測定関数 h
に対応する端子は、次の両方の条件が満たされる場合にのみ生成されます。
MATLAB 関数を使用して [関数] に
h
を指定しており、h
が MATLAB パス上にある場合。x
とv
以外に、h
で必要とされる追加の入力引数が 1 つだけの場合。
データ型: single
| double
Q — 時変プロセス ノイズ共分散
スカラー | ベクトル | 行列
時変プロセス ノイズ共分散。[プロセス ノイズ] パラメーターの値に応じて、スカラー、ベクトルまたは行列として指定します。
[プロセス ノイズ] が
[加法性]
— 共分散をスカラー、Ns 要素のベクトル、または Ns 行 Ns 列の行列として指定します。ここで Ns はシステムの状態の数です。プロセス ノイズ項の間に相互相関がなく、すべての項が同じ分散をもつ場合は、スカラーを指定します。プロセス ノイズ項の間に相互相関がなく、すべての項が異なる分散をもつ場合は、長さ Ns のベクトルを指定します。[プロセス ノイズ] が
[非加法性]
— 共分散を W 行 W 列の行列として指定します。ここで W は状態遷移関数のプロセス ノイズ項の数です。
依存関係
この端子は、プロセス ノイズ共分散を [時変] に指定した場合に生成されます。[適用] をクリックすると端子が表示されます。
データ型: single
| double
R1,R2,R3,R4,R5 — 時変測定ノイズ共分散
行列
システムの最大 5 つの測定関数の時変測定ノイズ共分散。行列として指定します。行列のサイズは、対応する測定関数の [測定ノイズ] パラメーターの値によって異なります。
[測定ノイズ] が
[加法性]
— 共分散を N 行 N 列の行列として指定します。ここで N はシステムの測定値の数です。[測定ノイズ] が
[非加法性]
— 共分散を V 行 V 列の行列として指定します。ここで V は対応する測定関数の測定ノイズ項の数です。
依存関係
端子は、対応する測定関数の測定ノイズ共分散を [時変] に指定した場合に生成されます。[適用] をクリックすると端子が表示されます。
データ型: single
| double
Enable1,Enable2,Enable3,Enable4,Enable5 — 測定データが利用可能な場合に推定状態の補正を有効にする
スカラー
最初の測定関数に対応する端子 [y1] において、測定された出力データをすべての時間点で使用できないと仮定します。[Enable1] 端子で 0
以外の信号値を使用して、測定データが利用可能な場合に推定状態の補正をイネーブルにします。測定データが利用できない場合は端子値を 0
に指定します。同様に、ith の測定関数で、端子 [yi
] のすべての時間点で測定された出力データを利用できない場合、対応する端子 [Enablei
] を 0
以外の値に指定します。
依存関係
測定関数に対応する端子は、その測定関数で [イネーブル端子の追加] を選択した場合に生成されます。[適用] をクリックすると端子が表示されます。
データ型: single
| double
| Boolean
出力
xhat — 推定された状態
ベクトル
推定された状態。サイズが Ns のベクトルとして返されます。ここで Ns はシステムの状態の数です。個々の状態にアクセスするには、Selector (Simulink) ブロックを使用します。
[現在の測定値を使用して状態推定値を改善] パラメーターが選択されている場合、ブロックは、時間 k
までに測定された出力を使って推定された、タイム ステップ k
での修正された状態推定 を出力します。このパラメーターをオフにすると、ブロックは、前の時間 k-1
までに測定された出力を使って推定された、時間 k
の予測された状態推定 を返します。フィルターがフィードバック ループにあり Simulink モデルに代数ループがある場合は、このパラメーターをクリアします。
データ型: single
| double
P — 状態推定誤差の共分散
行列
状態推定誤差の共分散。Ns 行 Ns 列の行列として返されます。ここで Ns はシステムの状態の数です。個々の共分散にアクセスするには、Selector (Simulink) ブロックを使用します。
依存関係
この端子は、[システム モデル] タブで [状態推定誤差の共分散の出力] を選択して [適用] をクリックすると生成されます。
データ型: single
| double
パラメーター
[システム モデル] タブ
状態遷移関数 — 状態遷移関数名
myStateTransitionFcn
(既定値) | 関数名
この状態遷移関数は、タイム ステップ k で状態ベクトルが与えられた場合の、タイム ステップ k+1 でシステムの Ns 要素をもつ状態ベクトルを計算します。Ns は非線形システムの状態の数です。状態遷移関数を作成し、[関数] にその関数名を指定します。たとえば、vdpStateFcn.m
という状態遷移関数を作成して保存した場合、[関数] に vdpStateFcn
を指定します。
作成する関数への入力は、[プロセス ノイズ] でプロセス ノイズを加法性として指定するか、非加法性として指定するかによって異なります。
[プロセス ノイズ] が
[加法性]
— 状態遷移関数 f は前のタイム ステップでの状態値の関数として状態が変化する方法を指定します。x(k+1) = f(x(k),Us1(k),...,Usn(k))
ここで
x(k)
は時間k
で推定された状態であり、Us1,...,Usn
はシステム入力やサンプル時間など、状態遷移関数で要求された任意の追加入力引数です。加法性のプロセス ノイズを使用した状態遷移関数の例を確認するには、コマンド ラインでedit vdpStateFcn
を入力します。[プロセス ノイズ] が
[非加法性]
— 状態遷移関数はプロセス ノイズw
の関数として状態が変化する方法も指定します。x(k+1) = f(x(k),w(k),Us1(k),...,Usn(k))
詳細については、状態遷移関数と測定関数を参照してください。
f は Simulink Function (Simulink) ブロックを使用して作成するか、MATLAB 関数 (.m
ファイル) としても作成できます。
MATLAB 関数を使用できるのは、f に
x
とw
以外の追加の入力引数Us1
が 1 つある場合のみです。x(k+1) = f(x(k),w(k),Us1(k))
ソフトウェアはこの引数を指定する追加の入力端子 [StateTransitionFcnInputs] を生成します。
Simulink Function ブロックを使用する場合、Simulink Function ブロック内で Argument Inport (Simulink) ブロックを使って
x
とw
を指定し、追加の入力Us1,...,Usn
を指定するには Inport (Simulink) ブロックを使用します。Extended Kalman Filter ブロックにUs1,...,Usn
は提供しません。
プログラムでの使用
ブロック パラメーター: StateTransitionFcn |
型: 文字ベクトル、string |
既定: 'myStateTransitionFcn' |
ヤコビアン — 状態遷移関数のヤコビアン
off
(既定値) | on
状態遷移関数 f のヤコビアン。以下のいずれかとして指定します。
off
— ヤコビアンがソフトウェアによって数値的に計算されます。この計算によって処理時間が長くなり、状態推定の数値が不正確になる場合があります。on
— ヤコビアンを計算する関数をユーザーが作成し、[ヤコビアン] にその関数名を指定します。たとえば、vdpStateJacobianFcn.m
がヤコビ関数の場合、[ヤコビアン] をvdpStateJacobianFcn
に指定します。Simulink Function (Simulink) ブロックを使用して状態遷移関数 f を作成する場合、Simulink Function ブロックを使ってヤコビアンを作成します。MATLAB 関数 (.m
ファイル) を使用して f を作成する場合、MATLAB 関数を使ってヤコビアンを作成します。この関数は、状態とプロセス ノイズに対する状態遷移関数の偏導関数を計算します。ヤコビ関数に対する入力数は、状態遷移関数の入力数と等しくなければならず、両方の関数において同じ順序で指定しなければなりません。ヤコビ関数の出力数は [プロセス ノイズ] パラメーターによって異なります。
[プロセス ノイズ] が
[加法性]
— この関数は状態に関する状態遷移関数 f の偏導関数 () を計算します。出力は Ns 行 Ns 列のヤコビ行列です。ここで Ns は状態の数です。加法性のプロセス ノイズに対するヤコビ関数の例を確認するには、コマンド ラインで
edit vdpStateJacobianFcn
を入力します。[プロセス ノイズ] が
[非加法性]
— この関数は、プロセス ノイズ項に関する状態遷移関数 f の偏導関数 () である 2 番目の出力も返さなければなりません。2 番目の出力は Ns 行 W 列の行列として返されます。ここで W は状態遷移関数のプロセス ノイズ項の数です。
プログラムでの使用
ブロック パラメーター: HasStateTransitionJacobianFcn |
型: 文字ベクトル |
値: 'off' 、'on' |
既定: 'off' |
ブロック パラメーター: StateTransitionJacobianFcn |
型: 文字ベクトル、string |
既定: '' |
プロセス ノイズ — プロセス ノイズ特性
加法性
(既定値) | 非加法性
プロセス ノイズ特性。次のいずれかの値として指定されます。
加法性
— プロセス ノイズw
は加法性であり、[関数] に指定する状態遷移関数 f は次の形式を取ります。x(k+1) = f(x(k),Us1(k),...,Usn(k))
ここで
x(k)
は時間k
での推定状態であり、Us1,...,Usn
は状態遷移関数で要求された任意の追加入力引数です。非加法性
— プロセス ノイズは非加法性であり、状態遷移関数は前のタイム ステップで状態 "および" プロセス ノイズの関数として状態が変化する方法を指定します。x(k+1) = f(x(k),w(k),Us1(k),...,Usn(k))
プログラムでの使用
ブロック パラメーター: HasAdditiveProcessNoise |
型: 文字ベクトル |
値: 'Additive' 、'Nonadditive' |
既定: 'Additive' |
共分散 — 時不変プロセス ノイズ共分散
1
(既定値) | スカラー | ベクトル | 行列
時不変プロセス ノイズ共分散。[プロセス ノイズ] パラメーターの値に応じて、スカラー、ベクトルまたは行列として指定します。
[プロセス ノイズ] が
[加法性]
— 共分散をスカラー、Ns 要素のベクトル、または Ns 行 Ns 列の行列として指定します。ここで Ns はシステムの状態の数です。プロセス ノイズ項の間に相互相関がなく、すべての項が同じ分散をもつ場合は、スカラーを指定します。プロセス ノイズ項の間に相互相関がなく、すべての項が異なる分散をもつ場合、長さ Ns のベクトルを指定します。[プロセス ノイズ] が
[非加法性]
— 共分散を W 行 W 列の行列として指定します。ここで W はプロセス ノイズ項の数です。
プロセス ノイズ共分散が時変の場合、[時変] を選択します。ブロックは、時変共分散を指定する入力端子 [Q] を生成します。
依存関係
このパラメーターは、プロセス ノイズを [時変] として指定しない場合に有効になります。
プログラムでの使用
ブロック パラメーター: ProcessNoise |
型: 文字ベクトル、string |
既定: '1' |
時変 — 時変プロセス ノイズ共分散
'off'
(既定値) | 'on'
このパラメーターを選択すると、ブロックには、時変プロセス ノイズ共分散を指定する追加の入力端子 [Q] が含まれます。
プログラムでの使用
ブロック パラメーター: HasTimeVaryingProcessNoise |
型: 文字ベクトル |
値: 'off' 、'on' |
既定: 'off' |
初期状態 — 初期状態推定値
0
(既定値) | ベクトル
初期状態推定値。Ns 要素ベクトルとして指定します。ここで Ns はシステムの状態の数です。システムに関する知識に基づいて、初期状態値を指定します。
プログラムでの使用
ブロック パラメーター: InitialState |
型: 文字ベクトル、string |
既定: '0' |
初期の共分散 — 状態推定誤差の共分散
1
(既定値) | スカラー | ベクトル | 行列
状態推定誤差の共分散。スカラー、Ns 要素のベクトル、または Ns 行 Ns 列の行列として指定します。ここで Ns はシステムの状態の数です。スカラーまたはベクトルを指定すると、対角線上にスカラーまたはベクトルの要素をもつ Ns 行 Ns 列の対角行列が作成されます。
[初期状態] に指定する初期状態の値に確信がもてない場合、共分散に高い値を指定します。
プログラムでの使用
ブロック パラメーター: InitialStateCovariance |
型: 文字ベクトル、string |
既定: '1' |
関数 — 測定関数名
myMeasurementFcn
(既定値) | 関数名
この測定関数は、タイム ステップ k で状態ベクトルが与えられた場合の、タイム ステップ k で非線形システムの N の要素をもつ出力測定ベクトルを計算します。測定関数を作成し、[関数] にその関数名を指定します。たとえば、vdpMeasurementFcn.m
という測定関数を作成して保存した場合、[関数] に vdpMeasurementFcn
を指定します。
作成する関数への入力は、[測定ノイズ] で測定ノイズを加法性として指定するか、非加法性として指定するかによって異なります。
[測定ノイズ] が
[加法性]
— 測定関数 h は状態値の関数として測定値が変化する方法を指定します。y(k) = h(x(k),Um1(k),...,Umn(k))
ここで
y(k)
とx(k)
は時間k
で推定された出力と推定された状態であり、Um1,...,Umn
は測定関数で要求されたオプションの入力引数です。たとえば、オブジェクトの追跡にセンサーを使用する場合、追加入力をセンサーの位置にすることができます。加法性のプロセス ノイズを使用した測定関数の例を確認するには、コマンド ラインで
edit vdpMeasurementFcn
を入力します。[測定ノイズ] が
[非加法性]
— 測定関数は測定ノイズv
の関数として出力測定値が変化する方法も指定します。y(k) = h(x(k),v(k),Um1(k),...,Umn(k))
非加法性のプロセス ノイズを使用した測定関数の例を確認するには、コマンド ラインで
edit vdpMeasurementNonAdditiveNoiseFcn
を入力します。
詳細については、状態遷移関数と測定関数を参照してください。
h は Simulink Function (Simulink) ブロックを使用して作成するか、MATLAB 関数 (.m
ファイル) としても作成できます。
MATLAB 関数を使用できるのは、h に
x
とv
以外の追加の入力引数Um1
が 1 つある場合のみです。y[k] = h(x[k],v[k],Um1(k))
ソフトウェアは i 番目の測定関数にこの引数を指定する追加の入力端子 [MeasurementFcn
i
Inputs] を生成します。Simulink Function ブロックを使用する場合、Simulink Function ブロック内で Argument Inport (Simulink) ブロックを使って
x
とv
を指定し、追加の入力Um1,...,Umn
を指定するには Inport (Simulink) ブロックを使用します。Extended Kalman Filter ブロックにUm1,...,Umn
は提供しません。
システムに複数のセンサーがある場合、複数の測定関数を指定できます。[測定値の追加] ボタンを使用して最大 5 つの測定関数を指定できます。測定関数を削除するには、[測定値の削除] を使用します。
プログラムでの使用
ブロック パラメーター: MeasurementFcn1 、MeasurementFcn2 、MeasurementFcn3 、MeasurementFcn4 、MeasurementFcn5 |
型: 文字ベクトル、string |
既定: 'myMeasurementFcn' |
ヤコビアン — 測定関数のヤコビアン
off
(既定値) | on
測定関数 h のヤコビアン。以下のいずれかとして指定します。
off
— ヤコビアンがソフトウェアによって数値的に計算されます。この計算によって処理時間が長くなり、状態推定の数値が不正確になる場合があります。on
— 測定関数 h のヤコビアンを計算する関数をユーザーが作成し、[ヤコビアン] にその関数名を指定します。たとえば、vdpMeasurementJacobianFcn.m
がヤコビ関数の場合、MeasurementJacobianFcn
をvdpMeasurementJacobianFcn
として指定します。Simulink Function (Simulink) ブロックを使用して h を作成する場合、Simulink Function ブロックを使ってヤコビアンを作成します。MATLAB 関数 (.m
ファイル) を使用して h を作成する場合、MATLAB 関数を使ってヤコビアンを作成します。この関数は、状態および測定ノイズに対して測定関数 h の偏導関数を計算します。ヤコビ関数に対する入力数は、測定関数に対する入力数と等しくなければならず、両方の関数において同じ順序で指定しなければなりません。ヤコビ関数の出力数は [測定ノイズ] パラメーターによって異なります。
[測定ノイズ] が
[加法性]
— 関数は状態に関する測定関数の偏導関数 () を計算します。出力は N 行 Ns 列のヤコビ行列です。ここで N はシステムの測定値の数で、Ns は状態の数です。加法性の測定ノイズに対するヤコビ関数の例を確認するには、コマンド ラインで
edit vdpMeasurementJacobianFcn
を入力します。[測定ノイズ] が
[非加法性]
— 関数は測定ノイズ項に関する測定関数の偏導関数 () である 2 番目の出力も返します。2 番目の出力は N 行 V 列のヤコビ行列として返されます。ここで V は測定ノイズ項の数です。
プログラムでの使用
ブロック パラメーター: HasMeasurementJacobianFcn1 、HasMeasurementJacobianFcn2 、HasMeasurementJacobianFcn3 、HasMeasurementJacobianFcn4 、HasMeasurementJacobianFcn5 |
型: 文字ベクトル |
値: 'off' 、'on' |
既定: 'off' |
ブロック パラメーター: MeasurementJacobianFcn1 、MeasurementJacobianFcn2 、MeasurementJacobianFcn3 、MeasurementJacobianFcn4 、MeasurementJacobianFcn5 |
型: 文字ベクトル |
既定: '' |
測定ノイズ — 測定ノイズ特性
加法性
(既定値) | 非加法性
測定ノイズ特性。次のいずれかの値として指定されます。
加法性
— 測定ノイズv
は加法性であり、[関数] に指定する測定関数 h は次の形式を取ります。y(k) = h(x(k),Um1(k),...,Umn(k))
ここで
y(k)
とx(k)
は時間k
で推定された出力と推定された状態であり、Um1,...,Umn
は測定関数で要求されたオプションの入力引数です。非加法性
— 測定ノイズは非加法性であり、測定関数は状態 "および" 測定ノイズの関数として出力測定値が変化する方法を指定します。y(k) = h(x(k),v(k),Um1(k),...,Umn(k))
プログラムでの使用
ブロック パラメーター: HasAdditiveMeasurementNoise1 、HasAdditiveMeasurementNoise2 、HasAdditiveMeasurementNoise3 、HasAdditiveMeasurementNoise4 、HasAdditiveMeasurementNoise5 |
型: 文字ベクトル |
値: 'Additive' 、'Nonadditive' |
既定: 'Additive' |
測定値がラップされている — 測定値のラップの有効化
off
(既定値) | on
このパラメーターを選択すると、測定値のラップが有効になり、モデルの状態に依存しない循環測定がある場合に状態が推定されます。このパラメーターを選択する場合、指定する測定関数に次の 2 つの出力が含まれていなければなりません。
タイム ステップ "k" の状態ベクトルが与えられた場合の測定値。タイム ステップ "k" における非線形システムの "N" 要素の出力測定ベクトルとして指定します。"N" はシステムの測定値の数です。
測定値のラップの範囲。"N" 行
2
列の行列として指定します。1 列目に最小測定範囲、2 列目に最大測定範囲を指定します。
[測定値がラップされている] チェック ボックスをオンにすると、定義した範囲内で測定残差がラップされ、正しくない測定残差の値によるフィルターの発散を防ぐのに役立ちます。例については、拡張カルマン フィルターを使用したラップされた測定値による状態推定を参照してください。
プログラムでの使用
ブロック パラメーター: HasMeasurementWrapping1 、HasMeasurementWrapping2 、HasMeasurementWrapping3 、HasMeasurementWrapping4 、HasMeasurementWrapping5 |
型: 文字ベクトル |
値: 'off' 、'on' |
既定: 'off' |
共分散 — 時不変プロセス ノイズ共分散
1
(既定値) | スカラー | ベクトル | 行列
時不変プロセス ノイズ共分散。[プロセス ノイズ] パラメーターの値に応じて、スカラー、ベクトルまたは行列として指定します。
[プロセス ノイズ] が
[加法性]
— 共分散をスカラー、Ns 要素のベクトル、または Ns 行 Ns 列の行列として指定します。ここで Ns はシステムの状態の数です。プロセス ノイズ項の間に相互相関がなく、すべての項が同じ分散をもつ場合は、スカラーを指定します。プロセス ノイズ項の間に相互相関がなく、すべての項が異なる分散をもつ場合、長さ Ns のベクトルを指定します。[プロセス ノイズ] が
[非加法性]
— 共分散を W 行 W 列の行列として指定します。ここで W はプロセス ノイズ項の数です。
プロセス ノイズ共分散が時変の場合、[時変] を選択します。ブロックは、時変共分散を指定する入力端子 [Q] を生成します。
依存関係
このパラメーターは、プロセス ノイズを [時変] として指定しない場合に有効になります。
プログラムでの使用
ブロック パラメーター: ProcessNoise |
型: 文字ベクトル、string |
既定: '1' |
時変 — 時変測定ノイズ共分散
off
(既定値) | on
最初の測定関数の測定ノイズ共分散にこのパラメーターを選択すると、ブロックに追加の入力端子 [R1] が含まれます。[R1] には時変測定ノイズ共分散を指定します。同様に、ith の測定関数に [時変] を選択すると、ブロックにはその関数の時変測定ノイズ共分散を指定する追加の入力端子 [Ri
] が含まれます。
プログラムでの使用
ブロック パラメーター: HasTimeVaryingMeasurementNoise1 、HasTimeVaryingMeasurementNoise2 、HasTimeVaryingMeasurementNoise3 、HasTimeVaryingMeasurementNoise4 、HasTimeVaryingMeasurementNoise5 |
型: 文字ベクトル |
値: 'off' 、'on' |
既定: 'off' |
イネーブル端子の追加 — 測定データが利用できる場合のみ推定状態の補正を有効にする
off
(既定値) | on
最初の測定関数に対応する端子 [y1] において、測定された出力データをすべての時間点で使用できないと仮定します。[イネーブル端子の追加] を選択して、入力端子 [Enable1] を生成します。この端子で信号を使用して、測定データが利用できる場合にのみ推定状態の補正をイネーブルにします。同様に、ith 測定関数の端子 [yi
] において、測定出力データがすべての時間点で利用できない場合には、対応する [イネーブル端子の追加] を選択します。
プログラムでの使用
ブロック パラメーター: HasMeasurementEnablePort1 、HasMeasurementEnablePort2 、HasMeasurementEnablePort3 、HasMeasurementEnablePort4 、HasMeasurementEnablePort5 |
型: 文字ベクトル |
値: 'off' 、'on' |
既定: 'off' |
現在の測定値を使用して状態推定値を改善 — 修正された状態推定と予測された状態推定の選択
on
(既定値) | off
このパラメーターを選択すると、ブロックは、時間 k
までに測定された出力を使って推定された、タイム ステップ k
での修正された状態推定 を出力します。このパラメーターをオフにすると、ブロックは、前の時間 k-1
までに測定された出力を使って推定された、時間 k
の予測された状態推定 を返します。フィルターがフィードバック ループにあり Simulink モデルに代数ループがある場合は、このパラメーターをクリアします。
プログラムでの使用
ブロック パラメーター: UseCurrentEstimator |
型: 文字ベクトル |
値: 'off' 、'on' |
既定: 'on' |
状態推定誤差の共分散の出力 — 状態推定誤差の共分散の出力
off
(既定値) | on
このパラメーターを選択すると、状態推定誤差の共分散の出力端子 [P] がブロックに生成されます。
プログラムでの使用
ブロック パラメーター: OutputStateCovariance |
型: 文字ベクトル |
値: 'off' 、'on' |
既定: 'off' |
データ型 — ブロック パラメーターのデータ型
double
(既定値) | single
このパラメーターはすべてのブロック パラメーターのデータ型の指定に使用します。
プログラムでの使用
ブロック パラメーター: DataType |
型: 文字ベクトル |
値: 'single' 、'double' |
既定: 'double' |
サンプル時間 — ブロックのサンプル時間
1
(既定値) | 正のスカラー
ブロックのサンプル時間。正のスカラーとして指定します。状態遷移関数と測定関数のサンプル時間が異なる場合、代わりに [マルチレート] タブで [マルチレート処理を有効にする] を選択し、[マルチレート] タブでサンプル時間を指定します。
依存関係
このパラメーターは、[マルチレート] タブの [マルチレート処理を有効にする] パラメーターが off
である場合に使用できます。
プログラムでの使用
ブロック パラメーター: SampleTime |
型: 文字ベクトル、string |
既定: '1' |
[マルチレート] タブ
マルチレート処理を有効にする — 状態遷移関数と測定関数への異なるサンプル時間の指定を有効にする
off
(既定値) | on
状態遷移関数と測定関数のサンプル時間が異なる場合はこのパラメーターを選択します。サンプル時間は [マルチレート] タブの [サンプル時間] で指定します。
プログラムでの使用
ブロック パラメーター: EnableMultirate |
型: 文字ベクトル |
値: 'off' 、'on' |
既定: 'off' |
サンプル時間 — 状態遷移関数と測定関数のサンプル時間
正のスカラー
状態遷移関数と測定関数のサンプル時間が異なる場合、[サンプル時間] を指定します。測定関数のサンプル時間は、状態遷移のサンプル時間の正の整数倍で指定します。指定するサンプル時間は次の入力端子に対応します。
状態遷移関数に対応する端子 — 状態遷移関数の追加の入力 [StateTransitionFcnInputs] および時変プロセス ノイズ共分散 [Q]。これらの端子のサンプル時間は常に状態遷移関数のサンプル時間に等しくなければなりませんが、測定関数のサンプル時間と異なっても構いません。
ith 測定関数に対応する端子 — 測定された出力 [y
i
]、測定関数への追加の入力 [MeasurementFcni
Inputs]、端子 [Enablei
] でのイネーブル信号、および時変測定ノイズ共分散 [Ri
]。同じ測定関数におけるこれらの端子のサンプル時間は常に同じでなければなりませんが、状態遷移関数および他の測定関数のサンプル時間と異なっても構いません。
依存関係
このパラメーターは、[マルチレート] タブの [マルチレート処理を有効にする] パラメーターが on
である場合に使用できます。
プログラムでの使用
ブロック パラメーター: StateTransitionFcnSampleTime 、MeasurementFcn1SampleTime1 、MeasurementFcn1SampleTime2 、MeasurementFcn1SampleTime3 、MeasurementFcn1SampleTime4 、MeasurementFcn1SampleTime5 |
型: 文字ベクトル、string |
既定: '1' |
詳細
状態遷移関数と測定関数
アルゴリズムは指定した状態遷移関数と測定関数を使用して非線形システムの状態推定 を計算します。それぞれがシステムの 1 つのセンサーに対応する測定関数を最大 5 つ指定できます。ソフトウェアを使用して、これらの関数にノイズを加法性または非加法性として指定することができます。
加法性ノイズ項 — 状態遷移方程式と測定方程式は次の形式で表されます。
ここで f は、タイム ステップ間の状態
x
の変化を記述する非線形の状態遷移関数です。非線形の測定関数 h は、x
をタイム ステップk
での測定値y
に関連付けます。w
とv
はそれぞれ、ゼロ平均の無相関プロセス ノイズと測定ノイズです。これらの関数は、方程式のus
とum
で表される追加のオプション入力引数をもつこともできます。たとえば、追加引数はタイム ステップk
または非線形システムに対する入力u
にすることもできます。このような引数は複数存在する可能性があります。両方の方程式において、ノイズ項は加法性であることに注意してください。つまり、
x(k+1)
はプロセス ノイズw(k)
に線形に関連し、y(k)
は測定ノイズv(k)
に線形に関連します。加法性ノイズ項の場合、状態遷移関数と測定関数でノイズ項を指定する必要はありません。これらの項はソフトウェアによって関数の出力に追加されます。非加法性ノイズ項 — ソフトウェアでは、状態 x[k] と測定値 y[k] がそれぞれプロセス ノイズと測定ノイズの非線形関数である、より複雑な状態遷移関数と測定関数もサポートされます。ノイズ項が非加法性な場合、状態遷移方程式と測定方程式は次の形式で表されます。
拡張機能
C/C++ コード生成
Simulink® Coder™ を使用して C および C++ コードを生成します。
指定する状態遷移関数、測定関数、およびヤコビ関数は、コード生成をサポートする MATLAB コマンドと Simulink ブロックのみを使用しなければなりません。コード生成をサポートするブロックの一覧については、コード生成をサポートする Simulink 組み込みブロック (Simulink Coder)を参照してください。コード生成をサポートするコマンドの一覧については、C/C++ コードの生成でサポートされている関数およびオブジェクト (MATLAB Coder)を参照してください。
生成されたコードは、Extended Kalman Filter ブロックそのものが使用するアルゴリズムとは異なるアルゴリズムを使用します。次の 2 つの方法を使用して得られた結果に数値の違いがあることが分かります。
バージョン履歴
R2017a で導入R2020b: 数値の変更
R2020b 以降、Extended Kalman Filter アルゴリズムの数値処理の改善により、前のバージョンで得られた結果とは異なる結果が生成される可能性があります。
参考
ブロック
関数
トピック
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)