。
この例は、控制系统工具箱™の粒子滤波ブロックの使用方法を示します。離散時間伝達関数のパラメーター推定問題を再定式化し,状態の推定問題として再帰的に解きます。
控制系统工具箱には非线形の状态推定を行うためのSimulink的ブロックが3つあ金宝appります。
粒子滤波:离散时间の粒子フィルターアルゴリズムを実装します。
扩展卡尔曼滤波器:1次离散时间の拡张カルマンフィルターアルゴリズムを実装します。
无味卡尔曼滤波:離散時間のアンセンテッドカルマンフィルターアルゴリズムを実装します。
これらのブロックは,さまざまなサンプルレートで动作する复数のセンサーを使用した状态推定をサポートします。これらのブロックの使用に关する一般的なワークフローは次のとおりです。
MATLABまたはSi金宝appmulink的关数を使用してプラントとセンサーの动作をモデル化します。
ブロックブロックのパラメーターをを构しし。
フィルターをシミュレートして结果を解析し,フィルターの性能の信頼度を得ます。
ハードウェアにフィルターを展开します.金宝appsimulink译码器™ソフトウェアソフトウェア使使て,これらのフィルターのを生成できでき。
この例では粒子滤波ブロックを使用し,このワークフローの最初の2つの手順を示します。最後の2つの手順については”次のステップ」の节で简単に说明します。この例の目标は,离散时间伝达关数(出力误差モデル)のパラメーターを再帰的に推定することです。ここでは新しい情报が着信すると各タイムステップでモデルのパラメーターが更新されます。
拡张カルマンフィルターに关心がある场合,「复数のマルチレートセンサーをもつ非线形システムの状态の推定」の例を参照してください。アンセンテッドカルマンフィルターの使用手顺は拡张カルマンフィルターの场合と似ています。
サンプルファイルフォルダーをMATLABパスに追加します。
让addpath(完整文件(matlabroot,'例子'那“控制”那“主要”));
大半の状态推定アルゴリズムは,タイムステップ间におけるプラントの状态の変化を记述するプラントモデル(状态迁移关数)に依存します。この关数は通常,で表されます。ここでxは状態wはプロセスノイズ,uはたとえばシステム入力やパラメーターといったオプションの追加入力です。粒子滤波ブロックには,この関数を少し異なる構文でのように指定しなければなりません。違いは以下のとおりです。
粒子フィルターは多くの状態仮説(粒子)の軌跡を追うことによって機能し,ブロックはすべての状態仮説を一度に関数に渡します。状,具体的には態ベクトルに个の要素があり个の粒子の使用を选択した场合,は次元をもち,その各列が状态仮说なります。
关节内で状態仮説に対するプロセスノイズの影响を计算する。ブロックでは,プロセスノイズの确率分布についての仮定が行われず,入力としてを必要としません。
关节はMATLAB编码器™の制限に準拠するMATLAB関数か,仿真软件功能ブ金宝appロックにすることができます。を作成した後,粒子滤波ブロック内に関数名を指定します。
この例では,離散時間伝達関数のパラメーター推定問題を,状態の推定問題として定式化し直します。この伝達関数は,離散時間プロセスのダイナミクスを表現するか,ゼロ次ホールドなど何らかの連続時間ダイナミクスに信号リコンストラクターを連動させたものを表現することができます。次の1次離散時間の伝達関数のパラメーター推定に関心があると仮定します。
ここで,はプラント出力,はプラント入力,は測定ノイズ,はが成り立つむだ時間演算子です。伝達関数をとしてパラメーター化します。ここで,とは推定対象となるパラメーターです。伝達関数とパラメーターは,状態ベクトルの選択によって,必要な状態空間形式で複数の方法により表現することができます。1つの選択肢としてがあり,ここで2番目と3番目の状態がパラメーターの推定値を表します。したがって,伝達関数を同じく次のように記述することができます。
測定ノイズ項はセンサーモデリングで处理されます。この例では上记の式を,计算の效率性のためにベクトル化された形式を用いてMATLAB关数で実装します。
类型pfBlockStateTransitionFcnExample
函数xNext = pfBlockStateTransitionFcnExample (x, u) % pfBlockStateTransitionFcnExample粒子状态转换函数%过滤器,估算参数%的输出,一阶,离散时间传递% % %函数模型输入:% x -粒子,NumberOfStates-by-NumberOfParticles矩阵% u -系统输入,一个标量% %输出:实现状态转移函数% xNext = [x(1)*x(2) + x(3)*u;% x (2);% x (3)];%在矢量形式(为所有粒子)。xNext = x;xNext (1) = bsxfun (@times x (1:) - x (2:)) + x (3:) * u;添加一个小的过程噪声(相对于每个状态的预期大小),以增加粒子多样性1飞行;1 e 1], randn(大小(xNext))); end
粒子滤波ブロックには,各状态仮说の尤度(确率)を计算する测定尤度关数を指定しなければなりません。この关数はの形式をとります。は要素のベクトルで,はは选択する子の数です。内の要素は,内の粒子(列)の尤度です。はセンサー测定値です。はオプションの入力引数で,これは状態遷移関数の入力と異なるものを指定できます。
センサーはこの例の最初の状态を测定します。この例では,実际の测定値と予测された测定値の误差がガウス分布に従うと仮定していますが,尤度の计算には任意の确率分布またはその他の方法を使用できます。を作成し,粒子滤波ブロック内に关数名を指定します。
类型pfBlockMeasurementLikelihoodFcnExample
函数= pfBlockMeasurementLikelihoodFcnExample可能性(粒子,测量)% pfBlockMeasurementLikelihoodFcnExample测量粒子滤波% %的似然函数是第一个国家输入% %:% - % NumberOfStates-by-NumberOfParticles矩阵测量粒子系统输出,一个标量% %输出:% likelihood -一个具有NumberOfParticles元素的向量,其第n %元素是第n个粒子的可能性%#codegen % Predicted measurement yHat = particles(1,:);假设误差分布在每个多元正态分布上,%均值为0,方差为1。计算相应的概率%密度函数e = bsxfun(@minus, yHat, measurement(:)');% Error numberOfMeasurements = 1;μ= 0;%均值=眼(测量数);% Variance measurementErrorProd = dot((e-mu), Sigma \ (e-mu), 1);c = 1/√((2*pi)^numberOfMeasurements * det(Sigma));可能性= c * exp(-0.5 * measureenterrorprod); end
粒子滤波ブロックを推定用に构成します。状态迁移关数と测定尤度关数の名前,粒子の数およびその初期分布を指定します。
ブロックダイアログの[システムモデル]タブで,次のパラメーターを指定します。
状态迁移
[関数]に状态迁移关数pfBlockStateTransitionFcnExample
关指定します。关键名称を力して[适用]をクリックすると,ブロックは关数に追加の入力があることを検出して入力端子StateTransitionFcnInputsを作成します。この端子にシステム入力を接続します。
寿期
[粒子数]に10000
を指定します。通常は粒子の数が多いほど优れた推定が得られますが,计算コストは増加します。
[分布]に高斯
を指定して,多変量ガウス分布から粒子の初期セットを取得します。その后,[平均]に[0;0;0]
を指定します。これは,3つの状态があり,これが最适な推定であるためです。[共分散]に诊断([10 5 100])
を指定して,3番目の状态の推定の分散(不确かさ)が大きく,最初の2つは分散が小さいことを指定します。この粒子の初期セットは,可能な真の状态をカバーするのに十分な幅に広がっている(分散が大きい)ことが重要です。
测定1
[関数]に,測定尤度関数の名前pfBlockMeasurementLikelihoodFcnExample
を指定します。
サンプル時間
ブロックダイアログの下载にある[サンプル时间]に1を入力します。状态迁移关数と测定尤度关数の间にサンプル时间の相违がみられる场合や,サンプル时间の异なる复数のセンサーを使用する场合,これらを[ブロック出力,マルチレート]タブで构成できます。
粒子フィルターは,尤度の低い低い子をし,尤度の高度ものをて新闻しい子をシードます。[リサンプリング]グループの下のオプションによって制御されます。この例では既定の設定を使用します。
既定では,ブロックは状態仮説の平均値をその尤度で加重したものだけを出力します。すべての粒子や重みを表示したり,状態推定の別の抽出方法を選択するには,[ブロック出力,マルチレート]タブのオプションを使用します。
简単なテストとして,ホワイトノイズ入力をもつ真のプラントモデルをシミュレートします。プラントからの入力およびノイズを含む测定値が粒子滤波ブロックに渡されます。次のSimulink的モデルはこのセ金宝appットアップを表します。
open_system (“pfBlockExample”)
システムをシミュレートして,推定されたパラメーターと実際のパラメーターを比較します。
SIM(“pfBlockExample”) open_system (“pfBlockExample /参数估计”)
プロットには分子と分母の実际のパラメーターと,その粒子フィルター推定値が表示されています。推定値は10タイムステップ后に真値にほぼ收束します。初期状态推定が真値から远い场合でも收束が得られます。
ここではアプリケーションで粒子フィルターが予想どおりに机能しない场合に备えて,潜在的な実装の问题とトラブルシューティングのアイデアをいくつか示します。
通常,粒子フィルターのトラブルシューティングを行う场合,粒子とその重みのセットを调查します。これらを取得するには,ブロックダイアログの[ブロック出力,マルチレート]タブにある[すべての粒子を出力]と(输出所有的权重)を选択します。
最初の正常性チェックとして,状態遷移関数と測定尤度関数がシステムの動作を適切に捉えていることを確認します。システムのシミュレーションモデルがある(よってシミュレーション内の実際の状態にアクセスできる)場合,実際の状態でフィルターを初期化してみることができます。その後,状態遷移関数によって実際の状態の時間伝播が正確に計算され,また測定尤度関数によってこれらの粒子で高い尤度が計算されるかどうかを検証できます。
粒子の初期セットは重要です。シミュレーションの开始时に少なくとも一部の粒子が高い尤度をもつことを确认してください。実际の状态が状态仮说の初期の広がりの外にある场合,推定値が不正确になったり発散したりする可能性があります。
状态推定の精度が最初は良好であるが,时间とともに劣化する场合,粒子が缩退したり粒子の精度が悪化したりする问题が起きている可能性があります[2]。粒子の缩退は粒子の分布が広すぎる场合に発生し,粒子の精度悪化はリサンプリングの后に粒子が块を形成するために発生します。粒子の缩退は,直接リサンプリングの结果,粒子の精度悪化につながります。この例で使用されている状態遷移関数内での人工的なプロセス ノイズの追加は、実用的なアプローチの 1 つです。このような問題の解決方法については多くの文献が公開されており、アプリケーションによってはさらに体系的な方法を利用できる可能性もあります。[1]、[2] は有用な参考資料です。
状态推定の検证:シミュレーションでフィルターから予想どおりの性能が得られるようになったら,通常は幅広いモンテカルロ法シミュレーションを使用してこの性能をさらに検证します详细については,金宝appSimulink中でのオンライン状态推定の検证を参照してください。粒子滤波ブロックダイアログの[ランダム性)グループのオプションを使用してこれらのシミュレーションを実行できます。
コードの生成:粒子滤波ブロックは,Simulink的编码器™金宝appソフトウェアを使用したÇおよびC ++コードの生成をサポートしますこのブロックに提供する关数は,MATLAB编码器™ソフトウェア(MATLAB关数を使用してシステムをモデル化している场合)およびSi金宝appmulink的编码器ソフトウェア(Simulink的功能ブロックを使用してシステムをモデル化している场合)の制限に准拠しなければなりません。
この例では,控制系统工具箱の粒子滤波ブロックを使用する方法を示しました。ここでは离散时间の伝达关数のパラメーターを再帰的に推定し,新しい情报の着信に合わせて各タイムステップでパラメーターを更新しました。
close_system (“pfBlockExample”,0)
MATLABパスからサンプルファイルフォルダーを削除します。
rmpath (fullfile (matlabroot,'例子'那“控制”那“主要”));
[1]西蒙,丹。最优状态估计:卡尔曼,H无穷大,和非线性方法。John Wiley&Sons,2006年。
[2]杜塞,阿诺,和Adam M.约翰森。“粒子的指南过滤和平滑:十五年后”。非线性滤波12.656-704手册(2009):3。
扩展卡尔曼滤波器|粒子滤波|Unscented Kalman Filter.