説明

状態推定装置、電子機器及びプログラム

【課題】 カルマンフィルターの演算において、固定小数点数を用い、固定小数点位置を調整しながら演算を行うことにより、計算量を抑えつつ、演算の破綻を回避できる状態推定装置等の提供。
【解決手段】 状態推定装置100は、カルマンフィルターの演算処理を行う演算部120と、演算部120を制御する制御部140と、演算結果を記憶する記憶部160と、を含む。そして、演算部120は、演算処理の中で、固定小数点数として表現される誤差共分散の演算処理を行う。制御部140は、過去の演算結果に基づいて、現在の誤差共分散の固定小数点位置の決定処理を行う。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、状態推定装置、電子機器及びプログラム等に関係する。
【背景技術】
【0002】
カルマンフィルターにおいて、内部状態変数の演算処理を行う方法として、内部状態変数や観測量を固定小数点数により表現して演算を行う手法と、内部状態変数や観測量を浮動小数点数により表現して演算を行う手法が考えられる。
【0003】
固定小数点数により表現して演算を行う手法では、小数点位置を固定的に決めておき、表現可能な範囲の値を用いて演算を行う。例えば、32ビットにより表現される固定小数点数において、2の補数表現で符号ビットを考慮し、固定小数点位置がビット番号30と31の間であるとする場合には、[−1,+1)の範囲の値が表現できる。この時、最小分解能は、1/231である。
【0004】
また、適応フィルターの演算処理において、固定小数点数を用いる発明としては特許文献1に記載される従来技術がある。
【先行技術文献】
【特許文献】
【0005】
【特許文献1】特開2009―302885号公報
【発明の概要】
【発明が解決しようとする課題】
【0006】
カルマンフィルターにおいて、内部状態変数や観測量を固定小数点数により表現して演算を行う手法には、演算中にオーバーフローが発生し、演算結果が不定値となり、演算が破綻する場合があるという問題点がある。
【0007】
一方、内部状態変数や観測量を浮動小数点数により表現して演算を行う手法では、演算を破綻させずに行うことはできるものの、計算量が増大してしまうという問題点がある。
【0008】
本発明の幾つかの態様によれば、カルマンフィルターの演算において、固定小数点数を用い、固定小数点位置を調整しながら演算を行うことにより、計算量を抑えつつ、演算の破綻を回避できる状態推定装置、電子機器及びプログラム等を提供できる。
【課題を解決するための手段】
【0009】
本発明の一態様は、カルマンフィルターの演算処理を行う演算部と、前記演算部を制御する制御部と、カルマンフィルターの演算処理の演算結果を記憶する記憶部と、を含み、前記演算部は、前記演算処理として、固定小数点数として表現される誤差共分散の演算処理を行い、前記制御部は、過去の前記演算結果に基づいて、現在の前記誤差共分散の固定小数点位置の決定処理を行うことを特徴とする状態推定装置に関係する。
【0010】
本発明の一態様では、過去の演算結果に基づいて、現在の誤差共分散の固定小数点位置の決定処理を行う。よって、誤差共分散の固定小数点位置を調整しつつ、カルマンフィルターの演算処理を行うことが可能となる。
【0011】
本発明の一態様では、前記制御部は、前記誤差共分散についての過去の前記演算結果に基づいて、現在の前記誤差共分散の前記固定小数点位置についての前記決定処理を行ってもよい。
【0012】
これにより、過去の誤差共分散の演算結果に基づいて、現在の誤差共分散の固定小数点位置を調整し、カルマンフィルターの演算処理を行うこと等が可能になる。
【0013】
また、本発明の一態様では、前記制御部は、過去の前記誤差共分散の絶対値における上位ビットに基づいて、現在の前記誤差共分散の前記固定小数点位置についての前記決定処理を行ってもよい。
【0014】
これにより、過去の誤差共分散の絶対値における上位ビットに基づいて、現在の誤差共分散の固定小数点位置を調整し、カルマンフィルターの演算処理を行うこと等が可能になる。
【0015】
また、本発明の一態様では、前記制御部は、過去の前記誤差共分散の絶対値における前記上位ビットにより表される値が、第一の閾値以上である場合には、前記決定処理として、前記誤差共分散の前記固定小数点位置を算術右シフトにより変更するために用いられるシフト量である右シフト量を決定する処理を行い、前記右シフト量を前記演算部に通知し、前記演算部は、前記制御部から前記右シフト量を通知された場合に、前記右シフト量に基づき、前記誤差共分散を算術右シフトしてもよい。
【0016】
これにより、過去の誤差共分散の絶対値における上位ビットにより表される値が第一の閾値を超えている場合には、誤差共分散を算術右シフトし、カルマンフィルターの演算処理中にオーバーフローが発生しないように固定小数点位置を調整すること等が可能になる。
【0017】
また、本発明の一態様では、前記制御部は、過去の前記誤差共分散の絶対値における前記上位ビットにより表される値が、第二の閾値以下である場合には、前記決定処理として、前記誤差共分散の前記固定小数点位置を算術左シフトにより変更するために用いられるシフト量である左シフト量を決定する処理を行い、前記左シフト量を前記演算部に通知し、前記演算部は、前記制御部から前記左シフト量を通知された場合に、前記左シフト量に基づき、前記誤差共分散を算術左シフトしてもよい。
【0018】
これにより、過去の誤差共分散の絶対値における上位ビットにより表される値が第二の閾値以下である場合には、誤差共分散を算術左シフトし、カルマンフィルターの演算処理の正確度を高めるように固定小数点位置を調整すること等が可能になる。
【0019】
また、本発明の一態様では、前記制御部は、過去の前記誤差共分散の正負判断を行い、過去の前記誤差共分散の正負に応じて、過去の前記誤差共分散に任意のビット列を加算し、前記ビット列の加算によって得られるオーバーフローフラグの値に基づいて、現在の前記誤差共分散の前記固定小数点位置についての前記決定処理を行ってもよい。
【0020】
これにより、誤差共分散の絶対値を求めずに、誤差共分散の正負の判断を行い、任意のビット列を加算して、その際のオーバーフローフラグの値に基づいて、誤差共分散の固定小数点位置を調整すること等が可能になる。
【0021】
また、本発明の一態様では、前記演算部は、飽和演算命令により、前記誤差共分散の前記演算処理を行い、前記制御部は、前記演算処理において、飽和が発生したと判断する場合には、前記誤差共分散の前記固定小数点位置を変更するためのシフト量を決定し、前記シフト量を演算部に通知し、前記演算部は、前記制御部から通知された前記シフト量に基づいて、前記演算処理前の前記誤差共分散を算術シフトし、前記固定小数点位置を変更してもよい。
【0022】
これにより、カルマンフィルターの演算処理を飽和演算により行い、演算処理中に飽和が発生したか否かによって、固定小数点位置を変更する否かを決定し、固定小数点位置を調整すること等が可能になる。
【0023】
また、本発明の一態様では、前記演算部は、前記誤差共分散が行列で表される場合に、前記演算処理の中で、固定小数点数として各要素を表現される誤差共分散行列の演算処理を行い、前記制御部は、前記誤差共分散が行列で表される場合に、過去の前記誤差共分散行列の各要素に基づいて、現在の前記誤差共分散行列の各要素についての前記固定小数点位置の前記決定処理を行うってもよい。
【0024】
これにより、誤差共分散が行列で表される場合に、誤差共分散行列の各要素の値に基づいて、誤差共分散行列の各要素についての固定小数点位置を調整すること等が可能になる。
【0025】
また、本発明の一態様では、前記制御部は、前記誤差共分散が行列で表される場合に、過去の前記誤差共分散行列の対角要素に基づいて、現在の前記誤差共分散行列の各要素についての前記固定小数点位置の前記決定処理を行ってもよい。
【0026】
これにより、誤差共分散が行列で表される場合に、誤差共分散行列の対角要素の値に基づいて、誤差共分散行列の各要素についての固定小数点位置を調整すること等が可能になる。
【0027】
また、本発明の一態様では、前記演算部は、前記誤差共分散及び状態推定値の予測処理と観測更新を行い、前記制御部は、前記予測処理における前記誤差共分散の前記固定小数点位置の前記決定処理を行い、前記観測更新における前記誤差共分散の前記固定小数点位置の前記決定処理を行ってもよい。
【0028】
これにより、観測更新と予測処理のそれぞれについて、誤差共分散の固定小数点位置を調整すること等が可能になる。
【0029】
また、本発明の一態様では、前記制御部は、P=FPF+Qの演算処理により、前記誤差共分散Pを求める場合に、FPF及びQの前記固定小数点位置を、前記誤差共分散Pの前記固定小数点位置と同じ位置とする前記決定処理を行ってもよい。
【0030】
これにより、P=FPF+Qの演算処理により、誤差共分散Pを求める場合に、FPF及びQの固定小数点位置を、誤差共分散Pの固定小数点位置と同じ位置とする決定処理を行い、計算量を増加させずに、FPF及びQの固定小数点位置の調整すること等が可能になる。
【0031】
また、本発明の一態様では、前記制御部は、S=HPH+Rの演算処理により、観測残差の共分散Sを求める場合に、HPH及びRの前記固定小数点位置を、前記誤差共分散Pの前記固定小数点位置と同じ位置とする前記決定処理を行ってもよい。
【0032】
これにより、S=HPH+Rの演算処理により、観測残差の共分散Sを求める場合に、HPH及びRの固定小数点位置を、誤差共分散Pの固定小数点位置と同じ位置とする決定処理を行い、計算量を増加させずに、HPH及びRの固定小数点位置の調整すること等が可能になる。
【0033】
また、本発明の他の態様では、前記状態推定装置を含むことを特徴とする電子機器に関係する。
【0034】
また、本発明の他の態様では、上記各部としてコンピューターを機能させるプログラム、又は該プログラムを記憶したコンピューター読み取り可能な情報記憶媒体に関係する。
【図面の簡単な説明】
【0035】
【図1】本実施形態の状態推定装置の構成例。
【図2】固定小数点と上位ビットの説明図。
【図3】図3(A)、図3(B)は、算術右シフトにより固定小数点位置を変更する手法の説明図。
【図4】図4(A)、図4(B)は、算術左シフトにより固定小数点位置を変更する手法の説明図。
【図5】図5(A)〜図5(D)は、Pが正の値である場合に、第1のビット列を用いて固定小数点位置を変更する手法の説明図。
【図6】図6(A)〜図6(D)は、Pが正の値である場合に、第2のビット列を用いて固定小数点位置を変更する手法の説明図。
【図7】図7(A)〜図7(D)は、Pが負の値である場合に、第3のビット列を用いて固定小数点位置を変更する手法の説明図。
【図8】図8(A)〜図8(D)は、Pが負の値である場合に、第4のビット列を用いて固定小数点位置を変更する手法の説明図。
【図9】固定小数点位置を調整しながらカルマンフィルターの演算を行う手法のフローチャート。
【図10】固定小数点位置を調整する手法のフローチャート。
【発明を実施するための形態】
【0036】
以下、本実施形態について説明する。なお、以下に説明する本実施形態は、特許請求の範囲に記載された本発明の内容を不当に限定するものではない。また本実施形態で説明される構成の全てが、本発明の必須構成要件であるとは限らない。
【0037】
1.概要
本実施形態では、カルマンフィルターの演算において、観測量や内部状態変数などを固定小数点数として扱い、演算を行う。これにより、内部状態変数等を浮動小数点数として演算を行う場合と比較して、計算量の削減を図ることができる。
【0038】
また、本実施形態では、カルマンフィルターの演算において、オーバーフローが発生しないように、誤差共分散の固定小数点位置を動的に変更する。誤差共分散は、カルマンフィルターの演算の中で、最もダイナミックレンジが広いと考えられるためである。これにより、誤差共分散の演算中にオーバーフローが発生し、演算結果が不定値となり、演算が破綻することを防ぐことができる。
【0039】
さらに、本実施形態では、誤差共分散以外の内部状態変数の一部又は全てについて、固定小数点位置を誤差共分散の固定小数点位置と一致させる。これにより、状態推定値や観測残差等の内部状態変数の固定小数点位置を、計算量を増加させずに、オーバーフローが発生しないように調整することができる。
【0040】
以下、本実施形態のシステム構成例を説明し、その後、フローチャートを用いて本実施形態の処理の詳細について説明する。
【0041】
2.システム構成例
次に、図1に本実施形態の状態推定装置及びこれを含む電子機器の構成例を示す。
【0042】
状態推定装置100は、演算部120と、制御部140と、記憶部160と、を含む。また、状態推定装置100を含む電子機器の例としては、センサーや外部制御部や操作部や表示部などを含む携帯端末などが挙げられる。なお、状態推定装置100及びこれを含む電子機器は、図1の構成に限定されず、これらの一部の構成要素を省略したり、他の構成要素を追加するなどの種々の変形実施が可能である。
【0043】
次に各部で行われる処理について説明する。
【0044】
演算部120は、カルマンフィルターの演算処理を行う。制御部140は、演算部120を制御する。記憶部160は、カルマンフィルターの演算処理の演算結果を記憶する。
【0045】
ここで、カルマンフィルターの概要を簡単に説明する。
【0046】
カルマンフィルターは、直接観測不可能な値を、観測可能な値を用いて精度良く推定する際に用いられる状態推定器である。
【0047】
例えば、ある時刻tにおいて、あるシステムの観測不可能な状態量Xを求めたい場合を考える。Xは直接観測できない値であるが、逆にXを用いれば、観測可能な値である観測量Zを、(1)式で表せることが分かっている。
【0048】
【数1】

【0049】
(1)式において、kはステップ数、Xは時刻tにおけるシステムの状態推定値、Zは時刻tにおいて入力される観測量、Hは観測行列、Vは観測雑音を示している。なお、Hは物理法則や測定等によって予め確定した行列である。(1)式を観測方程式という。
【0050】
また、時刻tにおけるシステムの状態量Xは、1ステップ前の時刻tk-1の状態量Xk-1をもとに、次のように表現されることが分かっているとする。
【0051】
【数2】

【0052】
(2)式において、Xk-1は時刻tk-1におけるシステムの状態量、Fは状態遷移行列、Bは駆動行列、Uは制御入力、Wはシステム雑音(白色雑音)を示している。なお、F及びBは、物理法則や測定等によって予め確定した行列である。(2)式を状態方程式という。
【0053】
ここで、(1)式に観測により得られた観測量Zを代入すれば、真の状態量Xが求められるようにも思えるが、観測雑音Vが不明であるため、(1)式から直接に真の状態量Xを求めることはできない。
【0054】
そこで、まず、(2)式において、システム雑音Wがないと仮定した場合を考え、その場合の(2)式に相当する(3)式により、状態推定値Xk|k-1を求める。
【0055】
【数3】

【0056】
(3)式において、Xk|k-1は時刻tk-1において推定した時刻tのシステムの状態推定値であり、Xk-1|k-1は時刻tk-1において推定した時刻tk-1のシステムの状態推定値である。
【0057】
次に、(1)式において、観測誤差がないと仮定した場合を考え、その場合の(1)式に相当する(4)式により、観測誤差がないと仮定した場合の観測量の予測値Zk,eを求める。(4)式のXk|k-1は(3)式により求められたものである。
【0058】
【数4】

【0059】
そして、実際に観測により得られた観測量Zk,rとZk,eとの差をとる。
【0060】
【数5】

【0061】
Δを観測残差という。観測残差は、以下の3値に起因する値である。一つ目の値は、雑音がないとした場合における、状態推定値から求めた観測量の推定値(観測推定量)と、実際の観測量との誤差である。そして、二つ目の値は、観測雑音Vであり、三つ目の値は、システム雑音Wである。
【0062】
さらに、観測残差Δの共分散Sを算出する。観測残差Δの共分散Sは、システムの状態推定値Xから求められた観測推定量の確からしさと、観測雑音とシステム雑音がどの程度含まれているかを表すものである。つまり、観測残差Δの共分散Sをできるだけ小さくすることができれば、観測雑音とシステム雑音を抑圧しつつ、観測推定量を確からしいものにすることができる。さらに、観測推定量の正確性が担保されれば、観測推定量を求める際に参照された状態推定値の正確さも期待できる。
【0063】
したがって、観測残差Δの共分散Sをできるだけ小さくするように制御すれば、システムの状態推定値も確からしいものとなる。
【0064】
カルマンフィルターでは、以上の原理を基に、観測更新と予測処理との2つの処理を繰り返し行う。観測更新とは、外部から与えられる(実際に観測した)観測量Zk,rを利用して1ステップ前に予測した状態推定値Xk|k-1及び誤差共分散Pk|k-1を更新する処理である。一方、予測処理とは、更新した状態推定値Xk|k及び誤差共分散Pk|kから次のステップの状態推定値Xk+1|k及び誤差共分散Pk+1|kを予測する処理である。そして、カルマンフィルターは、この2つの処理を繰り返すことにより、尤もらしい状態推定値Xを推定する。
【0065】
まず、観測更新は、次式(6)〜(9)で定式化される。
【0066】
【数6】

【0067】
【数7】

【0068】
【数8】

【0069】
【数9】

【0070】
なお、(6)〜(9)において、Sは、上述した観測残差Δの共分散である。Pk|k-1は、時刻tk-1において推定した時刻tのシステムの状態推定値Xk|k−1と、時刻tの実際の状態量Xとの差の共分散(誤差共分散)である。また、観測行列Hは、状態推定値Xの次元を観測量Zの次元に変換するための変換行列として用いられる。観測行列Hを1ステップ前に予測された状態推定値Xk|k-1に作用させることで、観測量の予測値Zk,eが得られる。さらに、Kはカルマンゲインと呼ばれる補正係数である。カルマンゲインKは、予測された状態推定値Xk|k-1を重視するか、Zk,rとZk,eとの差Δを重視するかを決定付けるパラメーター値として用いられる。カルマンゲインKは、観測誤差Rの大きさによって決定付けられる。観測誤差Rは、観測量Zに含まれる想定誤差の大きさを表すパラメーター(想定誤差パラメーター)である。観測誤差Rは、期待値(平均値)を“0”とする正規分布型のホワイトノイズと仮定して設定される。なお、Iは単位行列である。
【0071】
式(8)は、Zk,rとZk,eとの差Δを用いて、状態推定値Xk|kを更新することを表している。
【0072】
また、式(9)は、1ステップ前に予測された誤差共分散Pk|k-1とカルマンゲインKと観測行列Hとを用いて、誤差共分散Pk|kを更新することを表している。
【0073】
一方、予測処理は、次式(10)及び(11)で定式化される。
【0074】
【数10】

【0075】
【数11】

【0076】
なお、(11)式において、Qはシステム雑音と呼ばれ、システムのモデル誤差を表す正規分布に従う誤差行列として定義される。状態遷移行列Fは、観測更新で更新された状態推定値Xk|kから次のステップの状態推定値Xk+1|kへの遷移を表す行列として定義される。
【0077】
(3)式〜(11)式にて、表される値等をまとめて、カルマンフィルターの内部状態変数と呼ぶ。
【0078】
以上がカルマンフィルターの概要である。なお、カルマンフィルターは拡張カルマンフィルターであってもよい。
【0079】
以上の本実施形態では、カルマンフィルターの演算処理を行う演算部120と、演算部120を制御する制御部140と、カルマンフィルターの演算処理の演算結果を記憶する記憶部160と、を含む。そして、演算部120は、演算処理として、固定小数点数として表現される誤差共分散の演算処理を行い、制御部140は、過去の演算結果に基づいて、現在の誤差共分散の固定小数点位置の決定処理を行う。
【0080】
固定小数点数とは、コンピューターにおける実数の近似値の表現方式の一つである。固定小数点数では整数部分に用いるビット数と小数部分に用いるビット数をあらかじめ固定して表現する。具体的な例を図2に示す。図2では、32ビットの固定小数点数により、誤差共分散Pを表現しており、FPが固定小数点である。
【0081】
また、固定小数点位置とは、固定小数点の位置のことをいい、図2においては、ビット番号25と26の間が固定小数点位置となる。なお、固定小数点位置はビット番号0〜31の範囲内である必要はなく、例えばビット番号16〜47の範囲内で調整するものであってもよい。
【0082】
本実施形態の一態様では、過去の演算結果に基づいて、現在の誤差共分散の固定小数点位置の決定処理を行う。よって、誤差共分散の固定小数点位置を調整しつつ、カルマンフィルターの演算処理を行うことが可能となる。
【0083】
これにより、浮動小数点数によりカルマンフィルターの演算処理を行う場合に対して、少ない計算量で、演算処理を行うことができる。また、オーバーフローを発生させないように、固定小数点位置を調整して、演算することができる。
【0084】
また、制御部140は、誤差共分散についての過去の演算結果に基づいて、現在の誤差共分散の固定小数点位置についての決定処理を行ってもよい。
【0085】
これにより、過去の誤差共分散の演算結果に基づいて、現在の誤差共分散の固定小数点位置を調整し、カルマンフィルターの演算処理を行うこと等が可能になる。
【0086】
また、制御部140は、過去の誤差共分散の絶対値における上位ビットに基づいて、現在の誤差共分散の固定小数点位置についての決定処理を行ってもよい。
【0087】
上位ビットとは、誤差共分散を固定小数点数により表した場合のMSB(Most Significant Bit)側に位置する任意の数のビットのことである。例えば、図2においては、上位ビット数を4とし、HBを上位ビットとしている。
【0088】
これにより、過去の誤差共分散の絶対値における上位ビットに基づいて、現在の誤差共分散の固定小数点位置を調整し、カルマンフィルターの演算処理を行うこと等が可能になる。
【0089】
また、制御部140は、過去の誤差共分散の絶対値における上位ビットにより表される値が、第一の閾値以上である場合には、決定処理として、誤差共分散の固定小数点位置を算術右シフトにより変更するために用いられるシフト量である右シフト量を決定する処理を行い、右シフト量を演算部120に通知し、演算部120は、制御部140から右シフト量を通知された場合に、右シフト量に基づき、誤差共分散を算術右シフトしてもよい。
【0090】
上位ビットにより表される値とは、具体的に図2においては、2進数で0001、10進数では1となる。
【0091】
また、第一の閾値とは、算術右シフトを行うか否かを判断するための閾値である。
【0092】
さらに、シフト量とは、算術シフトを行う際のビット移動量のことをいう。また、LSB(Least Significant Bit)側に算術シフトすることを算術右シフトといい、MSB側に算術シフトすることを算術左シフトという。シフト量の中で、算術右シフトをする際のシフト量のことを右シフト量といい、算術左シフトをする際のシフト量のことを左シフト量という。
【0093】
これにより、過去の誤差共分散の絶対値における上位ビットにより表される値が第一の閾値を超えている場合には、誤差共分散を算術右シフトし、カルマンフィルターの演算処理中にオーバーフローが発生しないように固定小数点位置を調整すること等が可能になる。
【0094】
具体例を図3(A)、図3(B)に示す。図3(A)においては、誤差共分散Pを浮動小数点数により表している。図3(A)においては、固定小数点がFP1であり、Pの整数部分がIP1、小数部分がDP1に相当する。さらに、第一の閾値を10進数で3としている。この場合においては、上位ビットにより表される値が7であり、第一の閾値以上であるため、算術右シフトを行うことが決定される。なお、この例では、右シフト量を一律1と設定している。
【0095】
一方、図3(B)には、算術右シフト後の誤差共分散Pを表している。算術右シフト後には、Pの整数部分がIP2、小数部分がDP2となる。その結果、整数部分がIP1からIP2へと拡大され、オーバーフローが発生しにくくなる。
【0096】
また、制御部140は、過去の誤差共分散の絶対値における上位ビットにより表される値が、第二の閾値以下である場合には、決定処理として、誤差共分散の固定小数点位置を算術左シフトにより変更するために用いられるシフト量である左シフト量を決定する処理を行い、左シフト量を演算部に通知し、演算部120は、制御部140から左シフト量を通知された場合に、左シフト量に基づき、誤差共分散を算術左シフトしてもよい。
【0097】
第二の閾値とは、算術左シフトを行うか否かを判断するための閾値である。
【0098】
これにより、過去の誤差共分散の絶対値における上位ビットにより表される値が第二の閾値以下である場合には、誤差共分散を算術左シフトし、カルマンフィルターの演算処理の正確度を高めるように固定小数点位置を調整すること等が可能になる。
【0099】
具体例を図3(A)、図3(B)と同様に、図4(A)、図4(B)に示す。図4(A)においては、固定小数点がFP3であり、Pの整数部分がIP3、小数部分がDP3に相当する。さらに、第二の閾値を10進数で0としている。この場合においては、上位ビットにより表される値が0であり、第二の閾値以下であるため、算術左シフトを行うことが決定される。なお、この例では、左シフト量を一律1と設定している。
【0100】
一方、図4(B)には、算術左シフト後の誤差共分散Pを表している。算術左シフト後には、Pの整数部分がIP4、小数部分がDP4となる。その結果、小数部分がDP3からDP4へと拡大され、より正確度の高い演算処理を行うことができるようになる。
【0101】
また、制御部140は、過去の誤差共分散の正負判断を行い、過去の誤差共分散の正負に応じて、過去の誤差共分散に任意のビット列を加算し、ビット列の加算によって得られるオーバーフローフラグの値に基づいて、現在の誤差共分散の固定小数点位置についての決定処理を行ってもよい。
【0102】
任意のビット列とは、誤差共分散について演算処理を行う場合に、オーバーフローが発生するか否かを擬似的に判定するために用いるビット列のことをいう。具体例については後述する。
【0103】
また、オーバーフローフラグとは、ステータスレジスターの中のフラグビットの一つであり、カルマンフィルターの演算において、オーバーフローが発生したか否かをビットの状態によって判別することができるフラグのことをいう。なお、オーバーフローフラグをゼロフラグなどの他のフラグビットに置き換えて、同様の機能を実現する実施形態も本発明に含まれるのものとする。
【0104】
具体例を図5(A)〜図8(D)を用いて説明する。
【0105】
図5(A)〜図6(D)は、誤差共分散Pの値が正である場合を示している。
【0106】
図5(A)は、固定小数点がFP5である正の誤差共分散Pを示しており、図5(B)は任意のビット列Mを示している。このビット列Mは、誤差共分散が正の場合において、誤差共分散を算術右シフトして、整数部分を拡大させるか否かの判断をするために用いられる。本例では、誤差共分散Pの上位4ビットにより表される値が10進数で3以上であれば、オーバーフローが発生する可能性が高いと仮定し、その際には算術右シフトを行い、誤差共分散Pの整数部分を拡大させる。そこで、この判断を行う際に、図5(B)に示すビット列Mを用い、整数部分を拡大する必要があるかを判断する。この判断は、図5(C)に示すように、誤差共分散Pに任意のビット列Mを加算したビット列P&Mを求め、この時、オーバーフローフラグOFが1であるか否かを判断することによって行われる。この例においては、オーバーフローフラグが1であるので、上位4ビットにより表される値が3以上であると判断し、右シフト量を1とする算術右シフトを行う。その様子を示しているのが図5(D)であり、固定小数点がFP5からFP6に移動している。これにより、整数部分が拡大し、オーバーフローが発生しにくくなっている。一方、上位4ビットにより表される値が3よりも小さい場合には、何もしない。
【0107】
次に、図6(A)は、固定小数点がFP7である正の誤差共分散Pを示しており、図6(B)は任意のビット列Mを示している。このビット列Mは誤差共分散が正の場合において、誤差共分散を算術左シフトして、小数部分を拡大させるか否かの判断をするために用いられる。つまり、誤差共分散Pが正である場合、負である場合のそれぞれにおいて、算術右シフトをするか否かを判断するビット列と、算術左シフトをするか否かを判断するビット列の2種類のビット列をあらかじめ設定しておく。本例では、誤差共分散Pの上位4ビットにより表される値が10進数で0であれば、演算処理の正確度が低下する可能性が高いと仮定し、その際には算術左シフトを行い、誤差共分散Pの小数部分を拡大させる。そこで、この判断を行う際に、図6(B)に示すビット列Mを用い、小数部分を拡大する必要があるかを判断する。この判断は、図6(C)に示すように、誤差共分散Pに任意のビット列Mを加算したビット列P&Mを求め、この時、オーバーフローフラグOFが0であるか否かを判断することによって行われる。この例においては、オーバーフローフラグが0であるので、上位4ビットにより表される値が0であると判断し、左シフト量を1とする算術左シフトを行う。その様子を示しているのが図6(D)であり、固定小数点がFP7からFP8に移動している。これにより、小数部分が拡大し、演算処理の正確度の向上を期待することができる。一方、上位4ビットにより表される値が0よりも大きい場合には、何もしない。
【0108】
図7(A)〜図8(D)は、誤差共分散Pの値が負である場合を示している。
【0109】
誤差共分散Pの値が負である場合にも、同様に2種類のビット列を用意しておく。その一例として、図7(B)に示す任意のビット列Mは、Pの上位4ビットにより表される値が−3以下であるかを判断するために用いられる。一方、図8(B)に示す任意のビット列Mは、Pの上位4ビットにより表される値が−1であるかを判断するために用いられる。
【0110】
例えば、図7(C)に示すように、誤差共分散Pに任意のビット列Mを加算した結果、オーバーフローフラグが0であるので、上位4ビットにより表される値が−3以下であると判断し、右シフト量を1とする算術右シフトを行う。その様子を示しているのが図7(D)であり、固定小数点がFP9からFP10に移動している。これにより整数部分が拡大される。一方、上位4ビットにより表される値が−3よりも小さい場合、すなわちオーバーフローフラグが1である場合には、何もしない。
【0111】
同様に、図8(C)に示すように、誤差共分散Pに任意のビット列Mを加算した結果、オーバーフローフラグが1であるので、上位4ビットにより表される値が−1であると判断し、左シフト量を1とする算術左シフトを行う。その様子を示しているのが図8(D)であり、固定小数点がFP11からFP12に移動している。これにより小数部分が拡大される。一方、上位4ビットにより表される値が−1よりも小さい場合、すなわちオーバーフローフラグが0である場合には、何もしない。
【0112】
このように、誤差共分散の絶対値を求めずに、誤差共分散の正負の判断を行い、任意のビット列を加算して、その際のオーバーフローフラグの値に基づいて、誤差共分散の固定小数点位置を調整すること等が可能になる。
【0113】
また、演算部120は、飽和演算命令により、誤差共分散の演算処理を行い、制御部140は、演算処理において、飽和が発生したと判断する場合には、誤差共分散の固定小数点位置を変更するためのシフト量を決定し、シフト量を演算部120に通知し、演算部120は、制御部140から通知されたシフト量に基づいて、演算処理前の誤差共分散を算術シフトし、固定小数点位置を変更してもよい。
【0114】
飽和演算とは、サチュレート演算ともいい、数値の上限と下限が決まっており、演算結果がその値を超えた場合は上限値又は下限値になる演算をいう。
【0115】
これにより、カルマンフィルターの演算処理を飽和演算により行い、演算処理中に飽和が発生したか否かによって、固定小数点位置を変更する否かを決定し、固定小数点位置を調整すること等が可能になる。
【0116】
また、演算部120は、誤差共分散が行列で表される場合に、演算処理の中で、固定小数点数として各要素を表現される誤差共分散行列の演算処理を行い、制御部140は、誤差共分散が行列で表される場合に、過去の誤差共分散行列の各要素に基づいて、現在の誤差共分散行列の各要素についての固定小数点位置の決定処理を行ってもよい。
【0117】
行列の各要素の固定小数点位置が異なると、積和の度に固定小数点位置の整合性を取る必要があるため、一つの行列内では同じ固定小数点位置で表現することとする。
【0118】
具体的には、誤差共分散が行列で表される場合というのは、観測量Zが行列である場合である。この場合には、(6)式、(9)式、(11)式における誤差共分散Pも行列で表される。なお、それに伴い(4)式から(11)式における各項(例えば、X、H、Sなど)も行列で表される。
【0119】
ここで、状態推定値Xについての誤差共分散は、Xを計算した時の確からしさを意味する。
【0120】
また、状態推定値Xが(12)式で表すような行列であり、
【0121】
【数12】

【0122】
Xについての誤差共分散Pが(13)式で表すような行列である場合に、
【0123】
【数13】

【0124】
誤差共分散の要素pijは、xの値を計算した時のxの値の確からしさを表す。
【0125】
本実施形態によれば、例えば、誤差共分散の要素の絶対値の中で最も大きい値pklの値に基づき、誤差共分散行列の各要素についての固定小数点位置を調整すること等が可能になる。
【0126】
また、制御部140は、誤差共分散が行列で表される場合に、過去の誤差共分散行列の対角要素に基づいて、現在の誤差共分散行列の各要素についての固定小数点位置の決定処理を行ってもよい。
【0127】
対角要素は、行列の対格線上にある要素のことをいい、(13)式の例でいうと、pii等ことである。piiは、xの値を計算した時のx自身の確からしさ、いわゆる自己相関を表す。そのため、xの値の確からしさを知りたい場合には最も有用な情報となる。
【0128】
これにより、誤差共分散が行列で表される場合に、誤差共分散行列の対角要素の値に基づいて、誤差共分散行列の各要素についての固定小数点位置を調整すること等が可能になる。
【0129】
また、演算部120は、誤差共分散及び状態推定値の予測処理と観測更新を行い、制御部140は、予測処理における誤差共分散の固定小数点位置の決定処理を行い、観測更新における誤差共分散の固定小数点位置の決定処理を行ってもよい。
【0130】
これにより、観測更新と予測処理のそれぞれについて、誤差共分散の固定小数点位置を調整すること等が可能になる。
【0131】
また、制御部140は、(11)式に示すP=FPF+Qの演算処理により、誤差共分散Pを求める場合に、FPF及びQの固定小数点位置を、誤差共分散Pの固定小数点位置と同じ位置とする決定処理を行ってもよい。
【0132】
内部状態変数の加算時において、固定小数点位置の余計な調整を行わなずに、そのまま加算を行うためには、加算する内部状態変数の固定小数点位置をあらかじめ揃えておく必要がある。
【0133】
例えば、(11)式のP=FPF+Qの演算を考える。この場合、FPFとQの固定小数点位置が、左辺のPと同じ固定小数点位置であれば、固定小数点位置の調整をせずに加算を行うことができる。つまり、Pと、FPF、Qの固定小数点位置を全て同一にすればよい。
【0134】
これにより、P=FPF+Qの演算処理により、誤差共分散Pを求める場合に、FPF及びQの固定小数点位置を、誤差共分散Pの固定小数点位置と同じ位置とする決定処理を行い、計算量を増加させずに、FPF及びQの固定小数点位置の調整すること等が可能になる。
【0135】
また、制御部140は、(6)式に示すS=HPH+Rの演算処理により、観測残差の共分散Sを求める場合に、HPH及びRの固定小数点位置を、誤差共分散Pの固定小数点位置と同じ位置とする決定処理を行ってもよい。
【0136】
例えば、(6)式のS=HPH+Rの演算を考える。この場合、HPHとRの固定小数点位置が、左辺のSと同じ固定小数点位置であれば、固定小数点位置の調整をせずに加算を行うことができる。つまり、Sと、HPH、Rの固定小数点位置を全て同一にすればよい。さらに、HPHの固定小数点位置を、Pの固定小数点位置と同一にすれば、Pと、FPF、HPH、Q、S、Rの固定小数点位置を全て同一にすることができ、演算量のさらなる削減を図ることができる。
【0137】
これにより、S=HPH+Rの演算処理により、観測残差の共分散Sを求める場合に、HPH及びRの固定小数点位置を、誤差共分散Pの固定小数点位置と同じ位置とする決定処理を行い、計算量を増加させずに、HPH及びRの固定小数点位置の調整すること等が可能になる。
【0138】
なお本実施形態の状態推定装置等は、プログラムにより実現してもよい。この場合には、CPU等のプロセッサーがプログラムを実行することで、本実施形態の状態推定装置等が実現される。具体的には情報記憶媒体に記憶されたプログラムが読み出され、読み出されたプログラムをCPU等のプロセッサーが実行する。ここで、情報記憶媒体(コンピューターにより読み取り可能な媒体)は、プログラムやデータなどを格納するものであり、その機能は、光ディスク(DVD、CD等)、HDD(ハードディスクドライブ)、或いはメモリー(カード型メモリー、ROM等)などにより実現できる。そしてCPU等のプロセッサーは、情報記憶媒体に格納されるプログラム(データ)に基づいて本実施形態の種々の処理を行う。即ち情報記憶媒体には、本実施形態の各部としてコンピューター(操作部、処理部、記憶部、出力部を備える装置)を機能させるためのプログラム(各部の処理をコンピューターに実行させるためのプログラム)が記憶される。
【0139】
3.処理の流れ
以下では、図9と図10のフローチャートを用いて、本実施形態の処理の流れについて説明する。
【0140】
3.1 固定小数点位置を調整しながらカルマンフィルターの演算を行う処理の詳細
図9のフローチャートに示すように、まず、一定期間が経過しているかを判断する(S1)。一定期間が経過している場合には、固定小数点位置の調整を行う(S2)。固定小数点位置の調整後、または一定期間が経過していないと判断する場合には、カルマンフィルターの観測更新処理を行う(S3)。そして、最後に予測処理を行う(S4)。
【0141】
以上の処理を一定周期で行う。
【0142】
3.1.1 固定小数点位置を調整する処理の詳細
図10のフローチャートに示すように、前回の誤差共分散行列の各要素の絶対値のうち最大となる値を特定する(S10)。次に、特定した値に上位4ビットにより表される値を特定する(S11)。そして、この上位4ビットにより表される値が第一の閾値より大きいかを判断する(S12)。第一の閾値以上であると判断する場合には、右シフト量を決定する(S13)。一方、第一の閾値以下であると判断する場合には、上位4ビットにより表される値が第二の閾値以下であるかを判断する(S14)。第二の閾値以下であると判断する場合には、左シフト量を決定する(S15)。右シフト量又は左シフト量が決定された場合には、シフト量に基づいて誤差共分散Pを算術シフトする(S16)。最後に、算術シフト後、または、上位ビットにより表される値が第二の閾値以下であると判断する場合には、FPF、HPH、Q、S、Rの固定小数点位置を、全てPの固定小数点位置と同一にする(S17)。
【0143】
以上のように本実施形態について詳細に説明したが、本発明の新規事項および効果から実体的に逸脱しない多くの変形が可能であることは当業者には容易に理解できるであろう。従って、このような変形例はすべて本発明の範囲に含まれるものとする。例えば、明細書又は図面において、少なくとも一度、より広義または同義な異なる用語と共に記載された用語は、明細書又は図面のいかなる箇所においても、その異なる用語に置き換えることができる。また状態推定装置及びこれを含む電子機器の構成、動作も本実施形態で説明したものに限定されず、種々の変形実施が可能である。
【符号の説明】
【0144】
100 状態推定装置、120 演算部、140 制御部、160 記憶部

【特許請求の範囲】
【請求項1】
カルマンフィルターの演算処理を行う演算部と、
前記演算部を制御する制御部と、
前記カルマンフィルターの演算処理の演算結果を記憶する記憶部と、
を含み、
前記演算部は、
前記演算処理として、固定小数点数として表現される誤差共分散の演算処理を行い、
前記制御部は、
過去の前記演算結果に基づいて、現在の前記誤差共分散の固定小数点位置の決定処理を行うことを特徴とする状態推定装置。
【請求項2】
請求項1において、
前記制御部は、
前記誤差共分散についての過去の前記演算結果に基づいて、現在の前記誤差共分散の前記固定小数点位置についての前記決定処理を行うことを特徴とする状態推定装置。
【請求項3】
請求項2において、
前記制御部は、
過去の前記誤差共分散の絶対値における上位ビットに基づいて、現在の前記誤差共分散の前記固定小数点位置についての前記決定処理を行うことを特徴とする状態推定装置。
【請求項4】
請求項3において、
前記制御部は、
過去の前記誤差共分散の絶対値における前記上位ビットにより表される値が、第一の閾値以上である場合には、前記決定処理として、前記誤差共分散の前記固定小数点位置を算術右シフトにより変更するために用いられるシフト量である右シフト量を決定する処理を行い、前記右シフト量を前記演算部に通知し、
前記演算部は、
前記制御部から通知された前記右シフト量に基づき、前記誤差共分散を算術右シフトすることを特徴とする状態推定装置。
【請求項5】
請求項3又は4において、
前記制御部は、
過去の前記誤差共分散の絶対値における前記上位ビットにより表される値が、第二の閾値以下である場合には、前記決定処理として、前記誤差共分散の前記固定小数点位置を算術左シフトにより変更するために用いられるシフト量である左シフト量を決定する処理を行い、前記左シフト量を前記演算部に通知し、
前記演算部は、
前記制御部から通知された前記左シフト量に基づき、前記誤差共分散を算術左シフトすることを特徴とする状態推定装置。
【請求項6】
請求項2において、
前記制御部は、
過去の前記誤差共分散の正負判断を行い、過去の前記誤差共分散の正負に応じて、過去の前記誤差共分散に任意のビット列を加算し、前記ビット列の加算によって得られるオーバーフローフラグの値に基づいて、現在の前記誤差共分散の前記固定小数点位置についての前記決定処理を行うことを特徴とする状態推定装置。
【請求項7】
請求項2において、
前記演算部は、
飽和演算命令により、前記誤差共分散の前記演算処理を行い、
前記制御部は、
前記演算処理において、飽和が発生したと判断する場合には、前記誤差共分散の前記固定小数点位置を変更するためのシフト量を決定し、前記シフト量を演算部に通知し、
前記演算部は、
前記制御部から通知された前記シフト量に基づいて、前記演算処理前の前記誤差共分散を算術シフトし、前記固定小数点位置を変更することを特徴とする状態推定装置。
【請求項8】
請求項2乃至7のいずれかにおいて、
前記演算部は、
前記誤差共分散が行列で表される場合に、前記演算処理として、固定小数点数として各要素を表現される誤差共分散行列の演算処理を行い、
前記制御部は、
過去の前記誤差共分散行列の各要素に基づいて、現在の前記誤差共分散行列の各要素についての前記固定小数点位置の前記決定処理を行うことを特徴とする状態推定装置。
【請求項9】
請求項8において、
前記制御部は、
過去の前記誤差共分散行列の対角要素に基づいて、現在の前記誤差共分散行列の各要素についての前記固定小数点位置の前記決定処理を行うことを特徴とする状態推定装置。
【請求項10】
請求項1乃至9のいずれかにおいて、
前記演算部は、
前記誤差共分散及び状態推定値の予測処理と観測更新を行い、
前記制御部は、
前記予測処理における前記誤差共分散の前記固定小数点位置の前記決定処理を行い、前記観測更新における前記誤差共分散の前記固定小数点位置の前記決定処理を行うことを特徴とする状態推定装置。
【請求項11】
請求項10において、
前記制御部は、
P=FPF+Qの演算処理により、前記誤差共分散Pを求める場合に、FPF及びQの前記固定小数点位置を、前記誤差共分散Pの前記固定小数点位置と同じ位置とする前記決定処理を行うことを特徴とする状態推定装置。
【請求項12】
請求項10又は11において、
前記制御部は、
S=HPH+Rの演算処理により、観測残差の共分散Sを求める場合に、HPH及びRの前記固定小数点位置を、前記誤差共分散Pの前記固定小数点位置と同じ位置とする前記決定処理を行うことを特徴とする状態推定装置。
【請求項13】
請求項1乃至12のいずれかに記載の状態推定装置を含むことを特徴とする電子機器。
【請求項14】
カルマンフィルターの演算処理を行う演算部と、
前記演算部を制御する制御部と、
前記カルマンフィルターの演算処理の演算結果を記憶する記憶部として、
コンピューターを機能させ、
前記演算部は、
前記演算処理として、固定小数点数として表現される誤差共分散の演算処理を行い、
前記制御部は、
過去の前記演算結果に基づいて、現在の前記誤差共分散の固定小数点位置の決定処理を行うことを特徴とするプログラム。

【図1】
image rotate

【図9】
image rotate

【図10】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate

【図7】
image rotate

【図8】
image rotate


【公開番号】特開2012−203566(P2012−203566A)
【公開日】平成24年10月22日(2012.10.22)
【国際特許分類】
【出願番号】特願2011−66398(P2011−66398)
【出願日】平成23年3月24日(2011.3.24)
【出願人】(000002369)セイコーエプソン株式会社 (51,324)