Unscented Kalman Filter
アンセンテッド カルマン フィルターを使用した離散時間非線形システムの状態の推定
ライブラリ:
Control System Toolbox /
State Estimation
System Identification Toolbox /
Estimators
説明
Unscented Kalman Filter ブロックは、離散時間アンセンテッド カルマン フィルター アルゴリズムを使用して離散時間の非線形システムの状態を推定します。
状態 x、入力 u、出力 y、プロセス ノイズ w および測定ノイズ v をもつプラントについて考えます。プラントを非線形システムとして表現できると仮定します。
このブロックは、システムの状態遷移関数と測定関数およびアンセンテッド カルマン フィルター アルゴリズムを使用して、現在のタイム ステップに対する状態推定 を生成します。アルゴリズムの詳細については、オンライン状態推定のための拡張カルマン フィルター アルゴリズムおよびアンセンテッド カルマン フィルター アルゴリズムを参照してください。
システムの非線形の状態遷移関数と測定関数を作成し、これらの関数をブロックで指定します。このブロックは、異なるサンプリング レートで動作する複数のセンサーをもつシステムの状態推定をサポートします。それぞれがシステムの 1 つのセンサーに対応する測定関数を最大 5 つ指定できます。詳細については、状態遷移関数と測定関数を参照してください。
例
複数のマルチレート センサーをもつ非線形システムの状態の推定
Extended Kalman Filter ブロックを使用して、異なるサンプリング レートで動作する複数のセンサーをもつシステムの状態を推定する。
端子
入力
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 ブロックに直接提供します。Unscented Kalman Filter ブロック内に追加の入力用の入力端子は生成されません。例については、Online State Estimation Using Identified Models - Nonlinear Models (System Identification Toolbox)を参照してください。
依存関係
この端子は次の両方の条件が満たされる場合にのみ生成されます。
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],v[k],MeasurementFcn1Inputs)
y2[k] = h2(x[k],v[k],MeasurementFcn2Inputs)
y3[k] = h3(x[k],v[k])
ここで、k
はタイム ステップ、MeasurementFcn1Inputs
と MeasurementFcn2Inputs
は h1
と h2
への追加の入力引数です。
[関数] で MATLAB 関数 (.m
ファイル) を使用して h1
、h2
、および h3
を指定する場合、[適用] をクリックすると、ソフトウェアは [MeasurementFcn1Inputs] と [MeasurementFcn2Inputs] の端子を生成します。これらの端子への入力はスカラー、ベクトル、または行列として指定できます。
測定関数が複数の追加の入力をもつ場合、Simulink Function (Simulink) ブロックを使用して関数を指定します。Simulink Function ブロックを使用する際、追加の入力は Inport (Simulink) ブロックを使って Simulink Function ブロックに直接提供します。Unscented Kalman Filter ブロック内に追加の入力用の入力端子は生成されません。例については、Online State Estimation Using Identified Models - Nonlinear Models (System Identification Toolbox)を参照してください。
依存関係
測定関数 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) ブロックを使用します。Simulink Function ブロック内の Argument Inport (Simulink) ブロックと Argument Outport (Simulink) ブロックの [引数名] パラメーターは相互に異なっていなければなりません。Unscented Kalman Filter ブロックにUs1,...,Usn
は提供しません。例については、Online State Estimation Using Identified Models - Nonlinear Models (System Identification Toolbox)を参照してください。
プログラムでの使用
ブロック パラメーター: StateTransitionFcn |
型: 文字ベクトル、string |
既定: 'myStateTransitionFcn' |
プロセス ノイズ — プロセス ノイズ特性
加法性
(既定値) | 非加法性
プロセス ノイズ特性。次のいずれかの値として指定されます。
加法性
— プロセス ノイズ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' |
Alpha — シグマ ポイントの広がり
1e-3
(既定値) | 0 ~ 1 のスカラー値
アンセンテッド カルマン フィルター アルゴリズムでは、システムの状態を平均の状態値と分散をもつ確率変数として扱います。次のタイム ステップの状態とその統計プロパティを計算するために、このアルゴリズムでは最初にアンセンテッド変換を使用して平均値の周りに分散される状態値のセットを生成します。これらの生成された状態値をシグマ ポイントと呼びます。アルゴリズムは、各シグマ ポイントを状態遷移関数と測定関数への入力として使用して、新しい一連の変換された状態点と測定値を取得します。変換された点は、次のタイム ステップでの状態および状態推定誤差の共分散値を計算するために使用されます。
平均の状態値の周りのシグマ ポイントの広がりは、2 つのパラメーター [Alpha] および [Kappa] によって制御されます。3 番目のパラメーター [Beta] は、状態および測定共分散の計算中に変換された点の重みに影響します。
Alpha — 平均の状態値の周りのシグマ ポイントの広がりを決定します。0 ~ 1 のスカラー値 (
0
< [Alpha] <=1
) として指定します。これは通常、小さい正の数値です。シグマ ポイントの広がりは [Alpha] に比例します。値が小さいほど、シグマ ポイントは平均の状態に近くなります。Kappa — 2 番目のスケーリング パラメーター。通常は 0 に設定されます。値が小さいほど、シグマ ポイントは平均の状態に近くなります。広がりは
Kappa
の平方根に比例します。Beta — 状態の分布の事前情報を組み込みます。ガウス分布の場合、[Beta] = 2 が最適です。
状態および状態の共分散の分布がわかっている場合は、これらのパラメーターを調整して分布の高次モーメントの変換を取得できます。アルゴリズムが追跡できるのは、状態の確率分布の単一のピークのみです。システムの状態分布に複数のピークがある場合、これらのパラメーターを調整してシグマ ポイントが単一のピークの周りにとどまるようにすることができます。たとえば、小さい [Alpha] を選択して、平均の状態値に近いシグマ ポイントを生成します。
詳細については、アンセンテッド カルマン フィルター アルゴリズムを参照してください。
プログラムでの使用
ブロック パラメーター: Alpha |
型: 文字ベクトル、string |
既定: '1e-3' |
Beta — 状態分布の特性
2
(既定値) | 0 以上のスカラー値
変換されたシグマ ポイントの重みを調整するために使用される状態分布の特性。0 以上のスカラー値で指定します。ガウス分布の場合、Beta
=2 が最適な選択です。
詳細については、[Alpha] の説明を参照してください。
プログラムでの使用
ブロック パラメーター: Beta |
型: 文字ベクトル、string |
既定: '2' |
Kappa — シグマ ポイントの広がり
0
(既定値) | 0 ~ 3 のスカラー値
平均の状態値の周りのシグマ ポイントの広がり。0 ~ 3 のスカラー値 (0
<= [Kappa] <= 3
) として指定します。[Kappa] は通常 0
として指定されます。値が小さいほど、シグマ ポイントは平均の状態に近くなります。広がりは [Kappa] の平方根に比例します。詳細については、[Alpha] の説明を参照してください。
プログラムでの使用
ブロック パラメーター: Kappa |
型: 文字ベクトル、string |
既定: '0' |
関数 — 測定関数名
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))
ソフトウェアはこの引数を指定する追加の入力端子 [MeasurementFcnInput] を生成します。
Simulink Function ブロックを使用する場合、Simulink Function ブロック内で Argument Inport (Simulink) ブロックを使って
x
とv
を指定し、追加の入力Um1,...,Umn
を指定するには Inport (Simulink) ブロックを使用します。Simulink Function ブロック内の Argument Inport (Simulink) ブロックと Argument Outport (Simulink) ブロックの [引数名] パラメーターは相互に異なっていなければなりません。Unscented Kalman Filter ブロックにUm1,...,Umn
は提供しません。例については、Online State Estimation Using Identified Models - Nonlinear Models (System Identification Toolbox)を参照してください。
システムに複数のセンサーがある場合、複数の測定関数を指定できます。[測定値の追加] ボタンを使用して最大 5 つの測定関数を指定できます。測定関数を削除するには、[測定値の削除] を使用します。
プログラムでの使用
ブロック パラメーター: MeasurementFcn1 、MeasurementFcn2 、MeasurementFcn3 、MeasurementFcn4 、MeasurementFcn5 |
型: 文字ベクトル、string |
既定: 'myMeasurementFcn' |
測定ノイズ — 測定ノイズ特性
加法性
(既定値) | 非加法性
測定ノイズ特性。次のいずれかの値として指定されます。
加法性
— 測定ノイズ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 列目に最大測定範囲を指定します。
[測定値のラップを有効にする] チェック ボックスをオンにすると、定義した範囲内で測定残差がラップされ、正しくない測定残差の値によるフィルターの発散を防ぐのに役立ちます。例については、拡張カルマン フィルターを使用したラップされた測定値による状態推定を参照してください。
プログラムでの使用
ブロック パラメーター: EnableMeasurementWrapping1 、EnableMeasurementWrapping2 、EnableMeasurementWrapping3 、EnableMeasurementWrapping4 、EnableMeasurementWrapping5 |
型: 文字ベクトル |
値: 'off' 、'on' |
既定: 'off' |
共分散 — 時不変測定ノイズ共分散
1
(既定値) | 行列
時不変測定ノイズ共分散。行列として指定します。行列のサイズは [測定ノイズ] パラメーターの値によって異なります。
[測定ノイズ] が
[加法性]
— 共分散を N 行 N 列の行列として指定します。ここで N はシステムの測定値の数です。[測定ノイズ] が
[非加法性]
— 共分散を V 行 V 列の行列として指定します。ここで V は測定ノイズ項の数です。
測定ノイズ共分散が時変の場合、[時変] を選択します。ブロックは、ith の測定関数の時変共分散を指定する入力端子 [Ri
] を生成します。
依存関係
このパラメーターは、プロセス ノイズを [時変] として指定しない場合に有効になります。
プログラムでの使用
ブロック パラメーター: MeasurementNoise1 、MeasurementNoise2 、MeasurementNoise3 、MeasurementNoise4 、MeasurementNoise5 |
型: 文字ベクトル、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 Coder)を参照してください。コード生成をサポートするコマンドの一覧については、C/C++ コードの生成でサポートされている関数およびオブジェクト (MATLAB Coder)を参照してください。
生成されたコードは、Unscented Kalman Filter ブロックそのものが使用するアルゴリズムとは異なるアルゴリズムを使用します。次の 2 つの方法を使用して得られた結果に数値の違いがあることが分かります。
バージョン履歴
R2017a で導入R2020b: 数値の変更
R2020b 以降、Unscented 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)