以下、図面を参照しながら本発明の実施形態に係るマップ生成装置(以下、「本生成装置」とも称呼される。)について説明する。本生成装置は、図1(A)に示したモーター制御ECU(電子制御装置)10を試験・評価するための装置である。試験・評価がなされて開発されたモーター制御ECU10は、駆動源として3相巻線(コイル)を備える電動機を搭載する車両(即ち、ハイブリッド車又は電気自動車)に搭載され、「その電動機及び電動機に電力を供給するインバータ(即ち、モーターアッシーMA)」を制御するように構成されている。
より具体的に述べると、車両に搭載されたモーター制御ECU10はモーターアッシーMAに対してPWM信号(入力制御信号)を送信する。更に、モーター制御ECU10はモーターアッシーMAから電動機を流れる電流及び電動機の回転角度等を表す信号(出力結果信号)を受信する。
図1(B)に示されるように、シミュレータ30は、モーターアッシーMAに代わりモーター制御ECU10に接続され、モーターアッシーMAの動作を模擬する。即ち、シミュレータ30は、モーター制御ECU10から入力制御信号を受信し、その入力制御信号に対応する出力結果信号を算出し、その出力結果信号をモーター制御ECU10へ出力する。
車両に搭載された電動機は高速回転する場合があるので、シミュレータ30は入力制御信号を受信する都度、その入力制御信号に対応する出力結果信号を高速に且つ精度良く算出する必要がある。そのため、シミュレータ30は、マップを記憶・格納するFPGAを搭載している。本生成装置は、図1(B)において間引きマップ生成装置60として示されていて、そのFPGAに記憶されるマップを生成する。
そのマップは、複数の離散的入力値と、その離散的入力値に対応する離散的出力値と、の組合せを規定したルックアップテーブルである。FPGAは、入力制御信号に対応する出力結果信号を演算する際にそのマップを参照する。その結果、シミュレータ30は、極めて高速に且つ精度良く出力結果信号を算出することができる。シミュレータ30がマップを参照しながら入力制御信号に対応する出力結果信号を演算する方法は、便宜上「特定方法」とも称呼される。
ところで、そのマップは、例えば、電動機及びインバータの設計諸元から計算上求められる入力制御信号と出力結果信号との組合せ、又は、実際にモーターアッシーMAを作動させた際に取得される入力制御信号と出力結果信号との組合せ、等に基づいて生成される。このように作成されるマップは、膨大なデータを含んでいて、本明細書において「元マップ」とも称呼される。
しかし、シミュレータ30が搭載するFPGAに記憶可能なマップのデータ数(容量)には上限があるため、元マップをそのままFPGAに記憶させることは困難であることが多い。そこで、間引きマップ生成装置60は、元マップが含んでいる離散的入力値及び離散的出力値の組合せの一部を間引く(即ち、データを削除する)「間引き処理」を実行することにより、元マップよりも少ない数のデータを有する間引きマップを生成する。更に、間引きマップ生成装置60は、シミュレータ30に間引きマップのデータを提供する。シミュレータ30のFPGAは、その間引きマップを記憶する。従って、シミュレータ30のFPGAは、マップ生成装置60が生成した間引きマップを参照する工程を経て出力結果信号を算出する。
図2は、モーター制御ECU10、シミュレータ30及びマップ生成装置60の具体的構成を示している。
シミュレータ30は、シミュレータ30の全体を制御するコントローラ40及びモーターアッシーMAを模擬するベースボード50を含んでいる。
コントローラ40は、汎用コンピュータであり、CPU41、CPUが実行するプログラム及びマップ等を記憶するハードディスクドライブ(HDD)42並びにデータを一時的に記憶するRAM43等を含んでいる。
ベースボード50は、複数又は単数のFPGA51及びインタフェース部52を含んでいる。
CPU41は、シミュレータ30の起動時、HDD42に記憶された論理演算プログラム及びマップ等をFPGA51にロードする。FPGA51は、CPU41によってロードされた論理演算プログラム及びマップ等を集積回路へと変換し、その集積回路によって後述されるインバータ70及び電動機80を模擬する。インタフェース部52は、モーター制御ECU10からの入力制御信号を受信し且つ模擬されたセンサ信号(即ち、出力結果信号)をモーター制御ECU10に対して送信する。
マップ生成装置60は、汎用コンピュータであり、CPU61、CPU61が実行するプログラム及びマップ等を記憶するHDD62並びにデータを一時的に記憶するRAM63等を含んでいる。HDD62は、別途生成された元マップのデータを記憶している。
マップ生成装置60は元マップに対して後述する間引き処理を行って間引きマップを生成し、この間引きマップのデータをコントローラ40に送信する。加えて、マップ生成装置60は、論理演算プログラム及びマップ等をFPGA51に直接ロードすることができる。
モーター制御ECU10は、予め設定された「電動機80の目標トルクTr*及びインバータ70の入力電圧Vi」に基づいて入力制御信号(PWM信号)を生成し、入力制御信号をベースボード50へ出力する。ベースボード50は、入力制御信号に応じて電動機の動作を間引きマップを参照しながら模擬し、その電動機に流れる電流及び電動機の回転角度を表すセンサ信号(即ち、出力結果信号)を生成する。ベースボード50は、出力結果信号をモーター制御ECU10へ出力する。なお、目標トルクTr*及び入力電圧Viは、例えば、コントローラ40からの信号に基づいて変更されても良い。
図3はモーターアッシーMAが含んでいるインバータ70及び電動機80の構成を示している。インバータ70は、U相アーム、V相アーム及びW相アームを含む。これらのアームは、それぞれが一対の入力端子部(Tp、Tn)間に挿入され、互いに並列に接続されている。入力端子部(Tp、Tn)には図示しない直流電源によって入力電圧Viが印加されている。
インバータ70のU相アームは、IGBT71a及びIGBT72aを備える。IGBT71a及びIGBT72aには、ダイオード71b及びダイオード72bがそれぞれ逆並列接続されている。IGBT71aとIGBT72aとは、ダイオード71bのアノードとダイオード72bのカソードとが接続されるように、互いに直列に接続されている。IGBT71aとIGBT72aとの接続点は、電動機80のU相コイルに接続されている。
インバータ70のV相アームは、IGBT73a及びIGBT74aを備える。IGBT73a及びIGBT74aには、ダイオード73b及びダイオード74bがそれぞれ逆並列接続されている。IGBT73aとIGBT74aとは、ダイオード73bのアノードとダイオード74bのカソードとが接続されるように、互いに直列に接続されている。IGBT73aとIGBT74aとの接続点は、電動機80のV相コイルに接続されている。
インバータ70のW相アームは、IGBT75a及びIGBT76aを備える。IGBT75a及びIGBT76aには、ダイオード75b及びダイオード76bがそれぞれ逆並列接続されている。IGBT75aとIGBT76aとは、ダイオード75bのアノードとダイオード76bのカソードとが接続されるように、互いに直列に接続されている。IGBT75aとIGBT76aとの接続点は、電動機80のW相コイルに接続されている。
<本マップ生成装置の作動>
次に、マップ生成装置60の作動(間引きマップの生成処理)について説明する。マップ生成装置60のCPU61(以下、単に「CPU」とも称呼される。)は、間引きマップを生成するとき、図4にフローチャートにより示された間引きマップ生成処理ルーチンを実行する。
即ち、CPUは、ステップ400から処理を開始してステップ405に進み、HDD62から元マップを読み出す。次いで、CPUは、ステップ410に進み、マップ生成装置60の運用者によって入力されたシミュレーション誤差閾値範囲を読み込む。
シミュレーション誤差閾値範囲は、シミュレータ30が間引きマップに基づいてモーターアッシーMAの動作を模擬したとき、シミュレーション精度の悪化の程度がどの範囲で許容されるかを規定した数値である。シミュレーション精度の悪化度合いは、精度相関値(本例において、後述する精度相関値Ixu)によって表される。
シミュレータ30が間引きマップに基づいてモーターアッシーMAの動作を模擬したときの出力結果信号と、元マップに基づいてモーターアッシーMAの動作を模擬したときの出力結果信号と、の差分が大きくなるほど精度相関値Ixuは大きくなる。換言すれば、シミュレーション精度が悪化するほど精度相関値Ixuは大きな値になる。シミュレーション誤差閾値範囲は、精度相関値Ixuの上限値Ixumax及び下限値Ixuminによって規定される。
次いで、CPUは、ステップ415に進み、シミュレータ30が元マップを記憶している場合にモーターアッシーMAの動作を模擬したときに出力する出力結果信号を元マップを用いて算出し、その出力結果信号を所定のサンプリング周期毎にRAM63に記憶させる。より具体的に述べると、CPUは、シミュレータ30が予め定められた一連の入力制御信号を受信したときに算出する特定の出力結果信号をマップ生成装置60上にて算出する。
本例において、一連の入力制御信号は、電動機を安定状態にて1回転させる際にモーター制御ECU10が出力するPWM信号であり、特定の出力信号は電動機のU相コイルに流れる電流iuである。RAM63に記憶された元マップに基づくU相電流iuの変化の例が、図5の曲線iu1により示されている。シミュレータ30が元マップを記憶していると仮定した場合にモーターアッシーMAの動作を模擬したときに出力する出力結果信号は、便宜上「第1の出力結果信号」とも称呼される。
次いで、CPUは、ステップ420に進み、マップ誤差閾値ethを所定の初期値に設定する。マップ誤差閾値ethは、間引き処理において参照させる値である。マップ誤差閾値ethが大きいほど間引き処理において省略(削除)できる「離散的入力値及び離散的出力値の組合せ」の数が増加する。一方、マップ誤差閾値ethが大きいほどシミュレーション精度が悪化し、以て、精度相関値Ixuが大きな値になる。
次いで、CPUは、ステップ425に進み、マップ誤差閾値ethに基づいて元マップに対する間引き処理を実行する。間引き処理の詳細については後述される。
次いで、CPUは、ステップ430に進み、シミュレータ30が間引きマップを記憶している場合にモーターアッシーMAの動作を模擬したときに出力する出力結果信号を間引きマップを用いて算出し、その出力結果信号を所定のサンプリング周期毎にRAM63に記憶させる。即ち、ステップ415と同様の処理を元マップの代わりに間引きマップに基づいて実行する。RAM63に記憶された間引きマップに基づくU相電流iuの変化の例が、図5の曲線iu2により示されている。シミュレータ30が間引きマップを記憶していると仮定した場合にモーターアッシーMAの動作を模擬したときに出力する出力結果信号は、便宜上「第2の出力結果信号」とも称呼される。
次いで、CPUは、ステップ435に進み、精度相関値Ixuを算出する。より具体的に述べると、CPUは、サンプリング周期毎に電流iu1と電流iu2との差分Duを算出する。即ち、複数の差分Duが算出される。図5には、時刻t1時点における差分Duである差分Du(t1)が示されている。更に、CPUは、算出された複数の差分Duの2乗平均平方根である精度相関値Ixuを算出する。
次いで、CPUは、ステップ440に進み、精度相関値Ixuが上限値Ixumaxと下限値Ixuminとの間に含まれているか否か(即ち、Ixumin<Ixu<Ixumaxが成立しているか否か)を判定する。精度相関値Ixuが上限値Ixumaxと下限値Ixuminとの間に含まれていなければ、CPUは、ステップ440にて「No」と判定してステップ445に進み、マップ誤差閾値ethを修正する。
より具体的に述べると、精度相関値Ixuが下限値Ixuminよりも小さければ、CPUは、マップ誤差閾値ethの値を所定値Δethだけ増加させる(即ち、eth←eth+Δeth)。一方、精度相関値Ixuが上限値Ixumaxよりも大きければ、CPUは、マップ誤差閾値ethの値を所定値Δethだけ低下させる(即ち、eth←eth−Δeth)。
ただし、今回算出された精度相関値Ixu(このときのマップ誤差閾値をethAとする)が下限値Ixuminよりも小さく且つ前回算出された精度相関値Ixu(このときのマップ誤差閾値をethBとする)が上限値Ixumaxよりも大きい場合、CPUは、マップ誤差閾値ethを誤差閾値ethA及び誤差閾値ethBの平均値に等しい値に設定する(即ち、eth=(ethA+ethB)/2)。
同様に、今回算出された精度相関値Ixu(このときのマップ誤差閾値をethCとする)が上限値Ixumaxよりも大きく且つ前回算出された精度相関値Ixu(このときのマップ誤差閾値をethDとする)が下限値Ixuminよりも小さい場合、CPUは、マップ誤差閾値ethを誤差閾値ethC及び誤差閾値ethDの平均値に等しい値に設定する(即ち、eth=(ethC+ethD)/2)。
次いで、CPUは、ステップ425に戻り、修正されたマップ誤差閾値ethに基づいて元マップに対する間引き処理を実行する。
マップ誤差閾値ethの設定、元マップに対する間引き処理、及び、精度相関値Ixuの算出、を繰り返した結果、精度相関値Ixuが上限値Ixumaxと下限値Ixuminとの間に含まれていれば、CPUはステップ440にて「Yes」と判定してステップ450に進む。
ステップ450にてCPUは、このとき生成されている間引きマップをシミュレータ30が記憶するマップとして決定し、その間引きマップをコントローラ40へ出力し、ステップ495に進んで本ルーチンを終了する。
<マップの間引き処理>
次に、CPUが図4のステップ425にて実行する元マップに対する間引き処理の概要を説明する。この間引き処理は、一つの離散的入力値に対して一つの離散的出力値が決まる1次元マップはもとより、複数種類の離散的入力値の組合せに対して一つの離散的出力値が決まる多次元マップに対しても適用することができる。本例において、元マップは3次元マップであるが(詳細は後述される。)、便宜上、1次元マップの間引き処理、2次元マップの間引き処理、及び、3次元マップの間引き処理の順に説明する。
<1;1次元マップの間引き処理>
先ず、1次元マップの間引き処理について説明する。
1次元マップは、以下の複数の離散的入力値X1と、それぞれがその入力値のそれぞれに対応する離散的出力値Yとの組み合わせを規定するルックアップテーブルである。
入力値X1={x1(1),x1(2),・・・x1(n1)・・・,x1(N1)}
出力値Y=y(x1(n1))
ただし、n1は1からN1までの整数であり、本明細書において「項番号」とも称呼される。N1は入力値X1の総数である。
このようにデータの削減がなされていないマップは、以下において便宜上「元マップ」とも称呼される。なお、出力値Y=y(x1(n1))は、単に、y(n1)とも表記される。また、説明の便宜上、本例において、N1=6とする。
入力値X1の中で以下に述べる間引き処理の結果として元マップから省略(削除)不可能であった項番号(即ち、間引かれずに残った入力値を特定する項番号)を表す数列ni1は、以下のように表記される。
ni1={ni1(1),ni1(2),・・・,ni1(Ni1)}
加えて、元マップから省略不可能であった入力値Xi1は、以下のように表記される。
Xi1={xi1(1),・・・,xi1(Ni1)}
図6は、入力値x1(n1)に対する出力値y(n1)の一例を示す。図6には点P1(x1(1),y(1))〜点P6(x1(6),y(6))が記号「○」(白丸)及び記号「●」(黒丸)によりプロットされている。本実施形態の間引き処理においては、x1(1)及びx1(N1)は省略されない。
本実施形態の1次元マップの間引き処理においては、先ず、点P2を示すデータ(x1(2),y(2))が省略可能であるか否かが判定される。より具体的に述べると、点P1を示すデータ(x1(1),y(1))と点P3を示すデータ(x1(3),y(3))とを用いた線形補間(直線補間)により点P2を示すデータ(x1(2),y(2))に対応する点P2a1を示すデータ(出力値Y)が算出(推定)される。
なお、以下において、線形補間によって推定されたy(n1)は、「推定値ya(n1)」とも表記される。従って、点P2a1を示すデータは(x1(2),ya(2)))と表記される。図6において、このように線形補間によって推定された点(x1(n1),ya(n1))は記号「□」(白四角)によりプロットされている。
次に、推定値ya(2)と実際の出力値y(2)(出力値の真値)との間の誤差err(図6において誤差e2a)が算出される(err=e2a=|ya(2)−y(2)|)。そして、この誤差errが「所定のマップ誤差閾値eth」以下であれば(err≦eth)、点P2を示すデータ(x1(2),y(2))は省略(削除)可能であると判定される。本例において、誤差e2aはマップ誤差閾値ethよりも小さいので(即ち、e2a<eth)、点P2を示すデータ(x1(2),y(2))は省略可能であると判定される。
次いで、点P2を示すデータ(x1(2),y(2))に加えて点P3を示すデータ(x1(3),y(3))も省略可能であるか否かが判定される。この場合、既に省略可能であると判定された点P2を示すデータ(x1(2),y(2))を用いることなく、点P1を示すデータ(x1(1),y(1))と点P4を示すデータ(x1(4),y(4))とを用いた線形補間により、点P2に対応する点P2a2を示すデータ(x1(2),ya(2))及び点P3に対応する点P3aを示すデータ(x1(3),ya(3))が算出(推定)される。
次に、推定値ya(2)と実際の出力値y(2)との間の誤差err(図6において誤差e2b)が算出される(err=e2b=|ya(2)−y(2)|)。更に、推定値ya(3)と実際の出力値y(3)との間の誤差err(図6において誤差e3)が算出される(err=e3=|ya(3)−y(3)|)。
そして、これらの誤差err(e2b及びe3)の何れもがマップ誤差閾値eth以下であれば、点P2を示すデータ(x1(2),y(2))及び点P3を示すデータ(x1(3),y(3))の両方が省略(削除)可能であると判定される。
しかし、本例においては、e2b>eth且つe3>ethであるので、点P3を示すデータ(x1(3),y(3))は省略可能ではないと判定される。
次いで、点P4を示すデータ(x1(4),y(4))が省略可能であるか否かが判定される。この場合、点P4を示すデータ(x1(4),y(4))よりも項番号が小さく且つ既に省略不可能であると判定されたデータの中の点P4に最も近いデータである点P3を示すデータ(x1(3),y(3))と、点P4を示すデータ(x1(4),y(4))よりも項番号が大きく且つ省略可能・不可能の判定がなされていないデータの中の点P4に最も近いデータである点P5を示すデータ(x1(5),y(5))と、を用いた線形補間により、点P4に対応する点P4aを示すデータ(x1(4),ya(4))が算出(推定)される。
次に、推定値ya(4)と実際の出力値y(4)との間の誤差err(図6において誤差e4a)が算出される(err=e4a=|ya(4)−y(4)|)。本例において、ya(4)とy(4)との間の誤差err(=e4a)はマップ誤差閾値eth以下であるので(即ち、e4a≦eth)、点P4を示すデータ(x1(4),y(4))は省略可能であると判定される。
同様に、点P4を示すデータ(x1(4),y(4))に加えて点P5を示すデータ(x1(5),y(5))も省略可能であるか否かが判定される。この場合、既に省略可能であると判定された点P4を示すデータ(x1(4),y(4))を用いることなく、既に省略不可能と判断された点P3を示すデータ(x1(3),y(3))と点P6を示すデータ(x1(6),y(6))とを用いた線形補間により、点P4に対応する点P4bを示すデータ(x1(4),ya(4))及び点P5に対応する点P5aを示すデータ(x1(5),ya(5))が算出(推定)される。
次に、推定値ya(4)と実際の出力値y(4)との間の誤差err(図6において誤差e4b)が算出される(err=e4b=|ya(4)−y(4)|)。更に、推定値ya(5)と実際の出力値y(5)との間の誤差err(図6において誤差e5)が算出される(err=e5=|ya(5)−y(5)|)。
本例において、ya(4)とy(4)との間の誤差e4b及びya(5)とy(5)との間の誤差e5は、何れもマップ誤差閾値eth以下であるので(即ち、e4b≦eth
且つe5≦eth)、点P4を示すデータ(x1(4),y(4))及び点P5を示すデータ(x1(5),y(5))は共に省略可能であると判定される。
以上から理解されるように、本実施形態の間引き処理により、図6に示した例に係る1次元マップにおいて、データ(x1(2),y(2))、(x1(4),y(4))及び(x1(5),y(5))が元マップから省略(削除)される。換言すると、データ(x1(2),y(2))、(x1(4),y(4))及び(x1(5),y(5))が削除されたマップ(即ち、「間引きマップ」)を用いて出力値Yを線形補間により推定したとしても、その推定値と真値との誤差errはマップ誤差閾値eth以下となる。
なお、入力値X1の中で間引き処理の結果として元マップから省略不可能であった項番号を表す数列niは、以下のようになる。
ni1={1,3,6}
更に、入力値X1の中で省略不可能であった入力値Xi1は、以下のようになる。
Xi1={xi1(1),xi1(3),xi1(6)}
<2;2次元マップの間引き処理>
次に、2次元マップの間引き処理について説明する。
2次元マップは、以下の「複数の離散的入力値X1及び複数の離散的入力値X2」と、それぞれが「入力値X1の一つと入力値X2の一つとの組み合わせ(群)」のそれぞれに対応する複数の離散的出力値Yとの組み合わせを規定するルックアップテーブルである。
入力値X1={x1(1),・・・x1(n1)・・・,x1(N1)}
入力値X2={x2(1),・・・x2(n2)・・・,x2(N2)}
出力値Y=y(x1(n1),x2(n2))
ただし、n1は1からN1までの整数であり、n2は1からN2までの整数である。n1及びn2は「項番号」とも称呼される。N1は入力値X1の総数であり、N2は入力値X2の総数である。なお、出力値Y=y(x1(n1),x2(n2))は、単に、y(n1,n2)とも表記される。また、説明の便宜上、本例において、N1=6且つN2=4とする。
入力値X1の中で以下に述べる間引き処理の結果として元マップから省略(削除)不可能であった項番号(即ち、間引かれずに残った入力値を特定する項番号)を表す数列ni1は、以下のように表記される。
ni1={ni1(1),ni1(2),・・・,ni1(Ni1)}
同様に、入力値X2の中で以下に述べる間引き処理の結果として元マップから省略(削除)不可能であった項番号(即ち、間引かれずに残った入力値を特定する項番号)を表す数列ni2は、以下のように表記される。
ni2={ni2(1),ni2(2),・・・,ni2(Ni2)}
加えて、入力値X1の中で以下に述べる間引き処理の結果として元マップから省略不可能であった入力値Xi1は、以下のように表記される。
Xi1={xi1(1),・・・,xi1(Ni1)}
同様に、入力値X2の中で以下に述べる間引き処理の結果として元マップから省略不可能であった入力値Xi2は、以下のように表記される。
Xi2={xi2(1),・・・,xi2(Ni2)}
本実施形態の間引き処理においては、x1(1)及びx1(N1)並びにx2(1)及びx2(N2)は省略されない。
以下の説明において、項番号n1のうちの特定の値ns1(ns1は「2」乃至「N1−1」の整数)について、出力値y(x1(ns1),x2(n2))が省略可能であるとき、「x1(ns1)は省略可能である。」とも表記される。同様に、項番号n2のうちの特定の値ns2(ns2は「2」乃至「N2−1」の整数)について、出力値y(x1(n1),x2(ns2))が省略可能であるとき、「x2(ns2)は省略可能である。」とも表記される。
2次元マップの間引き処理においては、先ず、1次元マップの場合と同様に入力値X1の中から省略可能な値が抽出され、その後、その結果に基づいて入力値X2の中から省略可能な値が抽出される。
<<2.1;入力値X1の間引き>>
先ず、n2=1(即ち、入力値X2=x2(1))であるとき、x1(2)が省略(削除)可能であるか否かが判定される。即ち、入力値X=(x1(2)、x2(1))、出力値Y=y(x1(2),x2(1))からなるデータが省略可能であるか否かが判定される。
より具体的に述べると、図7に示したように、点P11を示すデータ[x1(1),x2(1),y{x1(1),x2(1)}]と点P31を示すデータ[x1(3),x2(1),y{x1(3),x2(1)}]とを用いた線形補間(直線補間)により点P21を示すデータ[x1(2),x2(1),y{x1(2),x2(1)}]に対応するデータ(出力値Y)が算出(推定)される。即ち、推定値ya(x1(2),x2(1))が算出される。推定値ya(x1(2),x2(1))と実際の出力値y(x1(2),x2(1))との間の誤差err(=|ya−y|)が、所定のマップ誤差閾値eth以下であれば、n2=1(即ち、入力値X2=x2(1))に対して、x1(2)は省略可能であると判定される。即ち、点P21を示すデータ[x1(2),x2(1),y{x1(2),x2(1)}])は省略可能であると判定される。一方、上記誤差errが、マップ誤差閾値ethより大きければ、n2=1に対して、x1(2)は省略不可能であると判定される。
図7の例において、x1(2)(即ち、点P21を示すデータ)は省略可能である。そこで、1次元マップに対する間引き処理と同様、n2=1(即ち、入力値X2=x2(1))であるとき、x1(3)が省略(削除)可能であるか否かが判定される。即ち、点P11を示すデータと点P41を示すデータとを用いた線形補間により点P21及び点P31を示すデータの出力値がそれぞれ算出(推定)され、それらのそれぞれの出力値と真の出力値との誤差がマップ誤差閾値ethより大きいか否かが判定される。そして、図7の例においては、その誤差の何れもがマップ誤差閾値eth以下であるので、それら両データ(点P21及び点P31を示すデータ)は省略可能と判定される。
更に、点P11を示すデータと点P51を示すデータとを用いた線形補間により点P21、点P31及び点41を示すデータの出力値がそれぞれ算出(推定)され、それらのそれぞれの出力値と真の出力値との誤差がマップ誤差閾値ethより大きいか否かが判定される。図7の例においては、点41を示すデータの出力値と真の出力値との誤差がマップ誤差閾値ethより大きい。従って、点P21及び点31を示すデータは省略可能であるが、点P41を示すデータは省略可能ではない。換言すると、x1(2)及びx1(3)は省略可能であるが、x1(4)は省略可能でない。
同様にして、n2=2,3,4のそれぞれに対して「x1(1)の次に省略不可能なx1(n1)が探索される。図7の例においては、以下のとおりである。
n2=2であるときx1(1)の次に省略不可能なx1(n1)はx1(5)である。即ち、点P22、点P32及び点P42に係るデータは省略され得る。
n2=3であるときx1(1)の次に省略不可能なx1(n1)はx1(6)である。即ち、点P23、点P33、点P43及び点P53に係るデータは省略され得る。
n2=4であるときx1(1)の次に省略不可能なx1(n1)はx1(5)である。即ち、点P24、点P34及び点P44に係るデータは省略され得る。
従って、n2のそれぞれに対する「x1(1)の次に省略不可能なx1(n1)」におけるn1の最小値は、n2=1であるときのn1=4であることが判る。そこで、x1(2)及びx1(3)が省略可能であると判定される。即ち、xi1(2)=4であることが判る。
次いで、xi1(3)の値が探索される。より具体的に述べると、n2=1,2,3,4のそれぞれについて「x1(4)の次に省略不可能なx1(n1)」が探索され、そのn1のそれぞれの内の最小値がxi1(3)となる。ただし、x1(6)は省略不可能であるので、実際にはx1(5)が省略可能であるか否かが判定される。この点につき、図8を参照して説明する。
図8は、図7の例と同じマップを表すグラフである。既に点P41を示すデータは省略できないことが判っているので、点P41を示すデータと点P61を示すデータとを用いた線形補間により点P51を示すデータが算出(推定)される。即ち、推定値ya(x1(5),x2(1))が算出される。
推定値ya(x1(5),x2(1))と実際の出力値y(x1(5),x2(1))との間の誤差err(=|ya−y|)が、マップ誤差閾値eth以下であれば、n2=1(即ち、入力値X2=x2(1))に対して、x1(5)は省略可能であると判定される。即ち、点P51を示すデータは省略可能であると判定される。一方、上記誤差errが、マップ誤差閾値ethより大きければ、n2=1に対して、x1(5)は省略不可能であると判定される。
本例において、n2=1に対してx1(5)は省略可能である。同様に、点P42のデータと点P62のデータとに基づいて点P52のデータが省略可能であるか否か等、n2=2,3,4の何れの場合も、x1(5)は省略可能である。従って、n2のそれぞれに対する「x1(4)の次に省略不可能なx1(n1)」におけるn1の最小値は、n1=6であることが判る。即ち、xi1(3)=6であることが判る。
以上より、入力値X1の中で省略不可能であった項を表す数列は、以下のように表される。
ni1={1,4,6}
この場合、入力値の中で省略不可能であった入力値Xi1は、以下のように表される。
Xi1={xi1(1),xi1(4),xi1(6)}
<<2.2;入力値X2の間引き>>
入力値X1の間引き処理が終了すると入力値X2の間引き処理を行う。入力値X2の間引き処理においては、先ず、x2(2)が省略可能であるか否かが判定される。より具体的に述べると、上述した例の入力値X1の間引き処理の結果によれば、ni1(2)=4であってx1(2)及びx1(3)は省略可能である。
そこで、
y(x1(1),x2(1))(図9(A)において、点P11)、
y(x1(4),x2(1))(図9(A)において、点P41)、
y(x1(1),x2(3))(図9(A)において、点P13)及び
y(x1(4),x2(3))(図9(A)において、点P43)
に基づいて、これら4つの点を頂点とする四角形に含まれる点であって、「点P11及び点41に係る入力値X2=x2(1)」並びに「点P13及び点43に係る入力値X2=x2(3)」と入力値X2が異なる各点(図9(A)において記号「△」により示された、点P12、点P22、点P32及び点P42)に対応する出力値Yが2次元の線形補間(直線補間)をすることによって推定される。即ち、以下の4つの値が算出される。
点P12に対応する推定値ya(x1(1),x2(2))
点P22に対応する推定値ya(x1(2),x2(2))
点P32に対応する推定値ya(x1(3),x2(2))
点P42に対応する推定値ya(x1(4),x2(2))
次いで、推定された出力値と実際の出力値との間の誤差errが、何れも所定のマップ誤差閾値eth以下であるか否かが判定される。
即ち、以下の不等式のそれぞれが成立するか否かが判定される。
|ya(x1(1),x2(2))−y(x1(1),x2(2))|≦eth
|ya(x1(2),x2(2))−y(x1(2),x2(2))|≦eth
|ya(x1(3),x2(2))−y(x1(3),x2(2))|≦eth
|ya(x1(4),x2(2))−y(x1(4),x2(2))|≦eth
これらの4つの不等式が成立すれば、x2(2)は省略可能であると判定される。即ち、点P12、点P22、点P32及び点P42に係るデータは省略可能である。これに対し、これらの4つの不等式の少なくとも1つが不成立であると(即ち、上記誤差errのうちの何れかがマップ誤差閾値ethよりも大きければ)、x2(2)は省略不可能であると判定される。即ち、点P12及び点P42に係るデータは省略不可能であると判定される。ただし、点P22、点P32に係るデータは、上述した入力値X1の間引き処理の結果に基づいて省略される。
なお、上述した「入力値X1の間引き処理」において、
点P12に対応する出力値y(x1(1),x2(2))及び
点P42に対応する出力値y(x1(4),x2(2))
に基づく1次元の線形補間によって点P22及び点P32に係るデータは省略可能であると判定されている。しかし、点P12及び点P42に係るデータが省略された場合、点P12及び点P42に係るデータに基づいて点P22及び点P32に係る出力値Yを推定することができなくなる。そのため、「入力値X2の間引き処理」において、点P11、点P41、点P13及び点P43に基づく2次元の線形補間によって点P22及び点P32に係る出力値Yが省略可能であるか否かが改めて確認される。
一方、以下の4つの点については、改めて推定値ya及び誤差errを算出する処理は行う必要がない。
点P21に対応する推定値ya(x1(2),x2(1))、
点P31に対応する推定値ya(x1(3),x2(1))、
点P23に対応する推定値ya(x1(2),x2(3))及び
点P33に対応する推定値ya(x1(3),x2(3))
次に、上記誤差errが何れもマップ誤差閾値eth以下であれば(即ち、上記2つの不等式が成立している場合)、x2(2)に加えてx2(3)も省略可能であるか否かが判定される。
より具体的に述べると、図9(B)における「点P11、点P41、点P14及び点P44」に対応する出力値Yに基づいて、図9(B)における「点P12、点P22、点P32、点P42、点P13、点P23、点P33及び点P43に対応する出力値Yが算出(推定)される。なお、この場合、「点P21、点P31、点P24及び点P34」に対応する出力値Yの推定値ya及びその誤差errを算出する必要はない。
これらの推定された出力値と実際の出力値との間の誤差errのそれぞれが、何れも所定のマップ誤差閾値eth以下であれば、x2(2)及びx2(3)は省略可能であると判定される。一方、これらの誤差errのうちの何れかがマップ誤差閾値ethよりも大きければ、x2(3)は省略不可能であると判定される。
上記処理を繰り返すことによって、入力値X2に含まれる値x2(n2)のうち省略可能な値が探索される。
例えば、図9(B)に示した例において、点P12、点P22、点P32、点P42、点P13、点P23、点P33及び点P43のうちの少なくとも一つの点に対応する出力値Yの推定値yaに係る誤差errが所定のマップ誤差閾値ethよりも大きいと仮定すると、x2(3)は省略不可能であると判定される。即ち、Xi2(2)=3となる。本例において、N2=4であるので、入力値X2における最後から二番目の値(即ち、X2(N2−1)が省略不可能であることが判明した。上述したように、X2(N2)は省略不可能であるので、全ての入力値X2について省略可能か否かが判定されたことになる。
以上から、本例において、入力値X2の中で上記間引き処理の結果として元マップから省略(削除)不可能であった項番号を表す数列ni2は、以下のようになる。
ni2={1,3,4}
この場合、入力値の中で省略不可能であった入力値Xi2は、以下のように表される。
Xi2={xi2(1),xi2(3),xi2(4)}
<3;3次元マップの間引き処理>
次に、3次元マップの間引き処理について説明する。
3次元マップは、以下の「複数の離散的入力値X1、複数の離散的入力値X2及び複数の離散的入力値X3」と、それぞれが「入力値X1の一つと入力値X2の一つと入力値X3の一つの組み合わせ(群)」のそれぞれに対応する複数の離散的出力値Yとの組み合わせを規定するルックアップテーブルである。
入力値X1={x1(1),・・・,x1(N1)}
入力値X2={x2(1),・・・,x2(N2)}
入力値X3={x3(1),・・・,x3(N3)}
出力値Y=y(x1(n1),x2(n2),x3(n3))
ただし、n1は1からN1までの整数であり、n2は1からN2までの整数であり、n3は1からN3までの整数である。n1、n2及びn3は「項番号」とも称呼される。N1は入力値X1の総数であり、N2は入力値X2の総数であり、N3は入力値X3の総数である。なお、出力値Y=y(x1(n1),x2(n2),x3(n3))は、単に、y(n1,n2,n3)とも表記される。また、説明の便宜上、本例において、N1=6、N2=4且つN3=5とする。
数列ni1、数列ni2、入力値Xi1及び入力値Xi2の表記形式は上述したとおりであるが、以下に改めて記す。
ni1={ni1(1),ni1(2),・・・,ni1(Ni1)}
ni2={ni2(1),ni2(2),・・・,ni2(Ni2)}
Xi1={xi1(1),・・・,xi1(Ni1)}
Xi2={xi2(1),・・・,xi2(Ni2)}
更に、入力値X3の中で以下に述べる間引き処理の結果として元マップから省略(削除)不可能であった項番号(即ち、間引かれずに残った入力値を特定する項番号)を表す数列ni3は、以下のように表記される。
ni3={ni3(1),ni3(2),・・・,ni3(Ni3)}
加えて、元マップから省略不可能であった入力値Xi3は、以下のように表記される。
Xi3={xi3(1),・・・,xi3(Ni3)}
なお、本実施形態の間引き処理においては、1次元マップ及び2次元マップに対する間引き処理と同様、x1(1)及びx1(N1)、x2(1)及びx2(N2)、並びに、x3(1)及びx3(N3)は省略されない。
3次元マップの間引き処理においても、2次元マップの間引き処理と同様に、先ず、入力値X1に含まれる値であって省略可能な値が抽出され、次いで、入力値X2に含まれる値であって省略可能な値が抽出され、更に、入力値X3に含まれる値であって省略可能な値が抽出される。
<<3.1;入力値X1の間引き>>
先ず、n2=1且つn3=1であるとき、x1(2)が省略可能であるか否かが判定される。より具体的に述べると、
y(x1(1),x2(1),x3(1))と、
y(x1(3),x2(1),x3(1))と、
とを用いた一次元の線形補間(直線補間)により、
y(x1(2),x2(1),x3(1))が推定される。即ち、ya(x1(2),x2(1),x3(1))が算出される。
推定値ya(x1(2),x2(1),x3(1))と実際の出力値y(x1(2),x2(1),x3(1))との間の誤差errが上記と同様に算出され、その誤差errが所定のマップ誤差閾値eth以下であれば、n2=1且つn3=1に対して、x1(2)は省略可能であると判定される。
一方、上記誤差errが、マップ誤差閾値ethより大きければ、n2=1且つn3=1に対してx1(2)は省略不可能であると判定される。
n2=1且つn3=1に対してx1(2)は省略可能であると判定された場合、n2=1且つn3=1に対して「x1(2)に加えてx1(3)も省略可能」であるか否かが判定される。即ち、「x1(1)の次に省略不可能なx1(n1)」が探索される。以下、このような処理がn2及びn3を変更しながら繰り返される。
全ての「x2(n2)及びx3(n3)の組合せ」について「x1(1)の次に省略不可能なx1(n1)」が探索されると、x2(n2)及びx3(n3)の組合せのそれぞれに対応する「x1(1)の次に省略不可能なx1(n1)」の集合におけるn1の最小値が判明する。このn1の最小値が、ni1(2)となる。同様の処理を繰り返すことによって、入力値X1に含まれる値であって省略可能な値が抽出される。
次に、1次元マップ及び2次元マップの場合と同様に、例えば、入力値X1の中で省略不可能であった項を表す数列が以下のように表されたとする。
ni1={1,4,6}
この場合、入力値の中で省略不可能であった入力値Xi1は、以下のように表される。
Xi1={xi1(1),xi1(4),xi1(6)}
<<3.2;入力値X2の間引き>>
入力値X1の間引き処理が終了すると入力値X2の間引き処理を行う。入力値X2の間引き処理においては、先ず、n3=1に対してx2(2)が省略可能であるか否かが判定される。例えば、上述した入力値X1の間引き処理の結果の例によれば、ni1(2)=4であるから、x1(2)及びx1(3)は省略可能である。そこで、
y(x1(1),x2(1),x3(1))、
y(x1(4),x2(1),x3(1))、
y(x1(1),x2(3),x3(1))及び
y(x1(4),x2(3),x3(1))
に基づいて、これら4つの点を頂点とする四角形に含まれる点であって、推定値yaに係る誤差errがマップ誤差閾値eth以下であることが既に判明している点を除いた各点に対応する出力値Yが2次元の線形補間をすることによって推定される。
即ち、以下の4つの値が算出される。
ya(x1(1),x2(2),x3(1))
ya(x1(2),x2(2),x3(1))
ya(x1(3),x2(2),x3(1))
ya(x1(4),x2(2),x3(1))
算出された4つの推定値yaのそれぞれと、実際の出力値のそれぞれと、の間の誤差errが、何れも所定のマップ誤差閾値eth以下であればn3=1に対してx2(2)は省略可能であると判定される。
一方、上記誤差errの少なくとも一つが、マップ誤差閾値ethより大きければ、n3=1に対してx2(2)は省略不可能であると判定される。
n3=1に対してx2(2)が省略不可能であると判定された場合、x2(2)に加えてx2(3)も省略可能であるか否かが判定される。即ち、「x2(1)の次に省略不可能なx2(n2)」が探索される。同様にn3=2,3,4,5のそれぞれに対して「x2(1)の次に省略不可能なx2(n2)」が探索される。
その結果、n3のそれぞれに対する「x2(1)の次に省略不可能なx2(n2)」の集合におけるn2の最小値が判明する。このn2の最小値が、ni2(2)となる。同様の処理を繰り返すことによって入力値X2に含まれる値であって省略可能な値が抽出される。
ここで、例えば、入力値X2の中で省略不可能であった項を表す数列は、以下のように表されると仮定する。
ni2={1,3,4}
この場合、入力値の中で省略不可能であった入力値Xi2は、以下のように表される。
Xi2={xi2(1),xi2(3),xi2(4)}
<<3.3;入力値X3の間引き>>
入力値X2の間引き処理が終了すると入力値X3の間引き処理を行う。入力値X3の間引き処理においては、先ず、x3(2)が省略可能であるか否かが判定される。より具体的に述べると、上述した入力値X1及び入力値X2の間引きの結果の例によれば、Ni1(2)=4且つNi2(2)=3であるから、x1(2)、x1(3)及びx2(2)は省略可能である。
そこで、
y(x1(1),x2(1),x3(1))(図10において、点P111)、
y(x1(4),x2(1),x3(1))(図10において、点P411)、
y(x1(1),x2(3),x3(1))(図10において、点P131)及び
y(x1(4),x2(3),x3(1))(図10において、点P431)並びに
y(x1(1),x2(1),x3(3))(図10において、点P113)、
y(x1(4),x2(1),x3(3))(図10において、点P413)、
y(x1(1),x2(3),x3(3))(図10において、点P133)及び
y(x1(4),x2(3),x3(3))(図10において、点P433)
に基づいて、これら8つの点を頂点とする直方体に含まれる点であって、「点P111、点P411、点P131及び点P431に係る入力値X3=x3(1)」並びに「点P113、点P413、点P133及び点P433に係る入力値X3=x3(3)」と入力値X3が異なる各点(図10において、入力値X3=x3(2)である記号「△」により示された各点)に対応する出力値Yが3次元の線形補間(直線補間)をすることによって推定される。
即ち、以下の12個の推定値が算出される。
ya(x1(1),x2(1),x3(2))(図10において、点P112)、
ya(x1(2),x2(1),x3(2))(図10において、点P212)、
ya(x1(3),x2(1),x3(2))(図10において、点P312)、
ya(x1(4),x2(1),x3(2))(図10において、点P412)、
ya(x1(1),x2(2),x3(2))(図10において、点P122)、
ya(x1(2),x2(2),x3(2))(図10において、点P222)、
ya(x1(3),x2(2),x3(2))(図10において、点P322)、
ya(x1(4),x2(2),x3(2))(図10において、点P422)、
ya(x1(1),x2(3),x3(2))(図10において、点P132)、
ya(x1(2),x2(3),x3(2))(図10において、点P232)、
ya(x1(3),x2(3),x3(2))(図10において、点P332)及び
ya(x1(4),x2(3),x3(2))(図10において、点P432)。
このように算出された上記12個の推定値yaのそれぞれと、実際の出力値Yのそれぞれと、の間の誤差errが、何れも所定のマップ誤差閾値eth以下であればx3(2)は省略可能であると判定される。これに対し、上記誤差errのうちの何れかがマップ誤差閾値ethよりも大きければ、x3(2)は省略不可能であると判定される。
x3(2)が省略可能であると判定された場合、x3(2)に加えてx3(3)も省略可能であるか否かが判定される。
上記処理を繰り返すことによって、入力値X3に含まれる値x3(n3)のうち省略可能な値が探索される。入力値X2の場合と同様に、例えば、入力値X3の中で省略不可能であった項を表す数列が以下のように表されると仮定する。
ni3={1,3,5}
この場合、入力値の中で省略不可能であった入力値Xi3は、以下のように表される。
Xi3={xi3(1),xi3(3),xi3(5)}
以上が、3次元マップの間引き処理である。3次元以上のマップに対しても、上述の間引き処理の次元を拡張することにより間引き処理を行うことができる。
<間引き処理の詳細>
次に、マップ生成装置60のCPU61(以下、単に「CPU」とも称呼される。)が実行する、間引き処理の詳細について図11〜図16を参照しながら説明する。
(1)入力値X1の間引き処理
CPUは、3次元マップの間引きを実行するとき、先ず、入力値X1に含まれる値であって省略可能な値を探索する。その際、CPUは、図11にフローチャートにより示された処理を実行する。即ち、CPUは、ステップ1100から処理を開始してステップ1105に進み、変数i1の値を「1」に設定し、カウンタc1の値を「2」に設定する。
カウンタc1は、入力値X1に含まれる値であって省略不可能な値のカウントに用いられる。x1(1)は省略されないので、即ち、「省略不可能な最初の入力値X1」は自明であるので、カウンタc1の値を「1」に設定して「省略不可能な最初の入力値X1」を探索する処理は実行されない。カウンタc1=2である場合、「省略不可能な2番目の入力値X1」が探索されていることを表している。
次いで、CPUは、ステップ1110に進み、変数n3の値を「1」に設定する。次いで、CPUは、ステップ1115に進み、変数n2の値を「1」に設定する。次いで、CPUは、ステップ1120に進み、図12にフローチャートにより示されたサブルーチンAを実行する。
サブルーチンAにおいて、CPUは、入力値X2=x2(n2)且つ入力値X3=x3(n3)であるとき、入力値X1に含まれる値であってc1番目に省略不可能な入力値X1の値ni1n2n3(c1)を探索する。この値ni1n2n3(c1)は、x1(i1)の次に省略不可能な入力値X1の値ということもできる。
CPUは、サブルーチンAを実行するとき、ステップ1200から処理を開始し、ステップ1205に進んで、カウンタc1、変数i1、変数n2、変数n3の値を読み込む。次いで、CPUは、ステップ1210に進み、変数j1の値を変数i1よりも「2」だけ大きい値に設定する(即ち、j1←i1+2)。
次いで、CPUは、ステップ1215に進み、
y(i1,n2,n3)及びy(j1,n2,n3)に基づく1次元の線形補間によってy(i1+1,n2,n3)〜y(j1−1,n2,n3)のそれぞれの値を推定する。即ち、CPUは、推定値ya(i1+1,n2,n3)〜推定値ya(j1−1,n2,n3)を算出する。
例えば、変数i1=1、変数j1=3、変数n2=1且つ変数n3=1であれば(即ち、CPUが初めてステップ1215の処理を実行したとき)、CPUは、y(1,1,1)及びy(3,1,1)に基づいて、ya(2,1,1)を算出する。
次いで、CPUは、ステップ1220に進み、推定値yaのそれぞれと、その推定値yaに対応する元々の出力値Yと、の差分である誤差errを算出する。更に、CPUは、誤差errの最大値Emaxを算出する。次いで、CPUは、ステップ1225に進み、最大値Emaxがマップ誤差閾値ethよりも大きいか否かを判定する。
最大値Emaxがマップ誤差閾値eth以下である場合、即ち、y(i1+1,n2,n3)〜y(j1−1,n2,n3)のそれぞれが省略可能であり得る場合、CPUは、ステップ1225にて「No」と判定してステップ1230に進む。
ステップ1230にてCPUは、変数j1が入力値X1の総数N1に等しいか否かを判定する。変数j1が総数N1に等しくない場合(即ち、変数j1が総数N1より小さい場合)、CPUは、ステップ1230にて「No」と判定してステップ1235に進み、変数j1の値を「1」だけ増加させ、ステップ1215に戻る。この場合、CPUは、更に長く連続した範囲(即ち、入力値X1がi1+1からj1−1までの範囲)に含まれる入力値x1が省略可能であるか否かの探索を行う。
例えば、変数i1=1、変数j1=4、変数n2=1且つ変数n3=1であれば(即ち、上記の例と比較して変数j1の値が「1」だけ増加していれば)、CPUは、ステップ1215にてy(1,1,1)及びy(4,1,1)に基づいて、ya(2,1,1)及びya(3,1,1)を算出する。
CPUがステップ1215に戻り、入力値X1の値がどこまで省略可能であるか否かの探索を行った結果、誤差errの最大値Emaxが誤差閾値よりも大きくなれば、CPUは、ステップ1225に進んだとき「Yes」と判定してステップ1240に進み、ni1n2n3(c1)の値を「j1−1」に設定する。即ち、入力値X2=x2(n2)且つ入力値X3=x3(n3)であるときx1(j1−1)は省略不可能な値であると判定される。
例えば、このとき、カウンタc1=2、変数i1=1、変数j1=4、変数n2=1且つ変数n3=1であれば、Ni111(2)=3となる。即ち、y(1,1,1)及びy(3,1,1)に基づいて、ya(2,1,1)を精度良く算出できる(即ち、誤差errがマップ誤差閾値eth以下となる)ことが判明している。
次いで、CPUは、ステップ1295に進んで本サブルーチンを一旦終了する。
一方、ステップ1225にて「No」と判定され且つ変数j1が総数N1に達している場合、CPUは、ステップ1230にて「Yes」と判定してステップ1245に進み、省略不可能な入力値X1の値ni1n2n3(c1)に入力値X1の総数N1を設定する。即ち、入力値X1の上端値であるx1(N1)は省略不可能であるので、更に入力値x1が省略可能であるか否かの探索は行われない。更に、CPUは、ステップ1295に進んで本サブルーチンを一旦終了する。
CPUは、図12のサブルーチンAを終了したとき、図11のステップ1125に進み、変数n2が入力値X2の総数N2に等しいか否かを判定する。
変数n2が総数N2よりも小さければ、CPUは、ステップ1125にて「No」と判定してステップ1130に進み、変数n2の値を「1」だけ増加させ、ステップ1120に戻って図12のサブルーチンAを再度実行する。即ち、CPUは、変数n2を増加したうえで入力値X1に含まれる値であって入力値x1(i1)の次に省略不可能な入力値X1の値ni1n2n3(c1)を探索する。
変数n2が増加した結果、総数N2と等しくなれば、CPUは、ステップ1125にて「Yes」と判定してステップ1135に進み、変数n3が入力値X3の総数N3に等しいか否かを判定する。
変数n3が総数N3よりも小さければ、CPUは、ステップ1135にて「No」と判定してステップ1140に進み、変数n3の値を「1」だけ増加させ、ステップ1115に戻って変数n2の値を「1」に戻したうえで図12のサブルーチンAを再度実行する。即ち、CPUは、あらゆる変数n2と変数n3の組合せに対してサブルーチンAを実行することによって入力値x1(i1)の次に省略不可能な入力値X1の値ni1n2n3(c1)を探索する。
あらゆる変数n2と変数n3の組合せに対して値ni1n2n3(c1)が取得されると、CPUは、ステップ1135に進んだとき「Yes」と判定してステップ1140に進む。ステップ1140にてCPUは、ni1(c1)に「あらゆる変数n2と変数n3の組合せに対して算出された複数の値ni1n2n3(c1)」の内の最小値を設定する。換言すれば、任意の変数n2と変数n3の組合せに対してni1(c1−1)とni1(c1)との間に含まれる入力値X1は省略可能であるといえる。
次いで、CPUは、ステップ1145に進み、ni1(c1)が「入力値X1の総数N1−2」より大きいか否かを判定する。ni1(c1)が「N1−2」以下であれば、CPUは、ステップ1145にて「No」と判定してステップ1150に進む。ステップ1150にてCPUは、変数i1にni1(c1)を設定し、カウンタc1の値を「1」だけ増加させ、更に、ステップ1110に戻る。即ち、この場合、CPUは更に、省略可能な入力値X1の値を探索する。
一方、ni1(c1)が「N1−2」より大きければ、CPUは、ステップ1145にて「Yes」と判定してステップ1155に進み、ni1(c1)が「N1−1」に等しいか否かを判定する。ni1(c1)が「N1−1」に等しい場合、CPUは、ステップ1155にて「Yes」と判定してステップ1160に進む。
この場合、x1(N1−1)が省略不可能な値であると判定されている。x1(N1)は省略されない値であるので、CPUは、更に省略可能な入力値X1の値を探索する必要は無い。そこで、ステップ1160にてCPUは、省略不可能な入力値X1の集合である数列Xi1の最後の項としてx1(Ni1)を追加する。即ち、CPUは、ni1(C1+1)をN1に等しい値に設定し、数列Xi1の項数Ni1をカウンタc1に「1」を加えた値に設定する。次いで、CPUは、ステップ1195に進んで本ルーチンを終了する。
一方、ni1(c1)が「N1−1」と等しくない場合(即ち、ni1(c1)=N1である場合)、CPUは、ステップ1155にて「No」と判定してステップ1165に進み、数列Xi1の項数Ni1をカウンタc1に等しい値に設定する。更に、CPUは、ステップ1195に進んで本ルーチンを終了する。
(2)入力値X2の間引き処理
省略可能な入力値X1の探索が終了すると、CPUは、入力値X2に含まれる値であって省略可能な値を探索する。その際、CPUは、図13にフローチャートにより示された処理を実行する。即ち、CPUは、ステップ1300から処理を開始してステップ1305に進み、変数i2の値を「1」に設定し、カウンタc2の値を「2」に設定する。
次いで、CPUは、ステップ1310に進み、変数n3の値を「1」に設定する。次いで、CPUは、ステップ1315に進み、変数m1の値を「1」に設定する。変数n3は入力値X3の項番号を表すのに対して、変数m1は省略不可能であった入力値X1、即ち、Xi1の項番号を表す。換言すれば、変数n3は1からN3までの整数であるのに対して、変数m1は1からNi1までの整数である。
次いで、CPUは、ステップ1320に進み、図14にフローチャートにより示されたサブルーチンBを実行する。サブルーチンBにおいて、CPUは、入力値Xi1=xi1(m1)且つ入力値X3=x3(n3)であるとき、入力値X2に含まれる値であってc2番目に省略不可能な入力値X2の値ni2m1n3(c2)を探索する。この値ni2m1n3(c2)は、x2(i2)の次に省略不可能な入力値X2の値ということもできる。
CPUは、サブルーチンBを実行するとき、ステップ1400から処理を開始し、ステップ1405に進んで、カウンタc2、変数i2、変数m1、変数n3の値を読み込む。次いで、CPUは、ステップ1410に進み、変数j2の値を変数i2よりも「2」だけ大きい値に設定する(即ち、j2←i2+2)。
次いで、CPUは、ステップ1415に進み、
y(ni1(m1),i2,n3)及びy(ni1(m1),j2,n3)並びに
y(ni1(m1+1),i2,n3)及びy(ni1(m1+1),j2,n3)
に基づく2次元の線形補間によって
y(k1,k2,n3)(ただし、k1=ni1(m1),…,ni1(m+1)、k2=i2+1,…,j2−1)の値を推定する。即ち、CPUは、推定値ya(k1,k2,n3)を算出する。ただし、CPUは、上述した省略可能な入力値X1の探索の際に省略の可否が既に判定された出力値yに対応する推定値yaを算出しない。
例えば、変数i2=1、変数j2=3、変数m1=1且つ変数n3=1であり、
ni1(1)=1且つni1(2)=4であれば、
CPUは、
y(1,1,1)及びy(4,1,1)並びに
y(1,3,1)及びy(4,3,1)
に基づいて
ya(1,2,1)及びya(4,2,1)
を算出する(図9(A)と同様の事例)。
次いで、CPUは、ステップ1420に進み、推定値yaのそれぞれと、その推定値yaに対応する元々の出力値Yと、の差分である誤差errを算出する。更に、CPUは、誤差errの最大値Emaxを算出する。次いで、CPUは、ステップ1425に進み、最大値Emaxがマップ誤差閾値ethよりも大きいか否かを判定する。
最大値Emaxがマップ誤差閾値eth以下である場合、CPUは、ステップ1425にて「No」と判定してステップ1430に進む。
ステップ1430にてCPUは、変数j2が入力値X2の総数N2に等しいか否かを判定する。変数j2が総数N2に等しくない場合(即ち、変数j2が総数N2より小さい場合)、CPUは、ステップ1430にて「No」と判定してステップ1435に進み、変数j2の値を「1」だけ増加させ、ステップ1415に戻る。この場合、CPUは、更に長く連続した範囲(即ち、入力値X2がi2+1からj2−1までの範囲)に含まれる入力値X2が省略可能であるか否かの探索を行う。
例えば、変数i2=1、変数j2=4、変数m1=1且つ変数n3=1であり、
ni1(1)=1且つni1(2)=4であれば(即ち、上記の例と比較して変数j1の値が「1」だけ増加していれば)、CPUは、ステップ1415にて
y(1,1,1)及びy(4,1,1)並びに
y(1,4,1)及びy(4,4,1)
に基づいて
ya(1,2,1)及びya(4,2,1)並びに
ya(1,3,1)及びya(4,3,1)
を算出する(図9(B)と同様の事例)。
CPUがステップ1415に戻り、入力値X2の値がどこまで省略可能であるか否かの探索を行った結果、誤差errの最大値Emaxが誤差閾値よりも大きくなれば、CPUは、ステップ1425に進んだとき「Yes」と判定してステップ1440に進み、ni2m1n3(c2)の値を「j2−1」に設定する。即ち、入力値Xi1=xi1(m1)且つ入力値X3=x3(n3)であるときx2(j2−1)は省略不可能な値であると判定される。
例えば、このとき、カウンタc2=2、変数i2=1、変数j2=4、変数m1=1且つ変数n3=1であれば、Ni211(2)=3となる。
次いで、CPUは、ステップ1495に進んで本サブルーチンを一旦終了する。
一方、ステップ1425にて「No」と判定され且つ変数j2が総数N2に達している場合、CPUは、ステップ1430にて「Yes」と判定してステップ1445に進み、省略不可能な入力値X2の値ni2m1n3(c2)に入力値X2の総数N2を設定する。即ち、入力値X2の上端値であるx2(N2)は省略不可能であるので、更に入力値X2が省略不可能であるか否かの探索は行われない。更に、CPUは、ステップ1495に進んで本サブルーチンを一旦終了する。
CPUは、図14のサブルーチンBを終了したとき、図13のステップ1325に進み、変数m1が「数列Xi1の項数Ni1−1」に等しいか否かを判定する。
変数m1が「項数Ni1−1」よりも小さければ、CPUは、ステップ1325にて「No」と判定してステップ1330に進み、変数m1の値を「1」だけ増加させ、ステップ1320に戻って図14のサブルーチンBを再度実行する。即ち、CPUは、変数m1を増加したうえで入力値X2に含まれる値であって入力値x2(i2)の次に省略不可能な入力値X2の値ni2m1n3(c2)を探索する。
変数m1が増加した結果、「項数Ni1−1」と等しくなれば、CPUは、ステップ1325にて「Yes」と判定してステップ1335に進み、変数n3が入力値X3の総数N3に等しいか否かを判定する。
変数n3が総数N3よりも小さければ、CPUは、ステップ1335にて「No」と判定してステップ1340に進み、変数n3の値を「1」だけ増加させ、ステップ1315に戻って変数m1の値を「1」に戻したうえで図14のサブルーチンBを再度実行する。即ち、CPUは、あらゆる変数m1と変数n3の組合せに対してサブルーチンBを実行することによって入力値x2(i2)の次に省略不可能な入力値X2の値ni2m1n3(c2)を探索する。
あらゆる変数m1と変数n3の組合せに対して値ni2m1n3(c2)が取得されると、CPUは、ステップ1335に進んだとき「Yes」と判定してステップ1340に進む。ステップ1340にてCPUは、ni2(c2)に「あらゆる変数m1と変数n3の組合せに対して算出された複数の値ni2m1n3(c2)」の内の最小値を設定する。換言すれば、任意の変数m1と変数n3の組合せに対してni2(c2−1)とni2(c2)との間に含まれる入力値X2は省略可能であるといえる。
次いで、CPUは、ステップ1345に進み、ni2(c2)が「入力値X2の総数N2−2」より大きいか否かを判定する。ni2(c2)が「N2−2」以下であれば、CPUは、ステップ1345にて「No」と判定してステップ1350に進む。ステップ1350にてCPUは、変数i2にni2(c2)を設定し、カウンタc2の値を「1」だけ増加させ、更に、ステップ1310に戻る。即ち、この場合、CPUは更に、省略可能な入力値X2の値を探索する。
一方、ni2(c2)が「N2−2」より大きければ、CPUは、ステップ1345にて「Yes」と判定してステップ1355に進み、ni2(c2)が「N2−1」に等しいか否かを判定する。ni2(c2)が「N2−1」に等しい場合、CPUは、ステップ1355にて「Yes」と判定してステップ1360に進む。
ステップ1360にてCPUは、省略不可能な入力値X2の集合である数列Xi2の最後の項としてx2(Ni2)を追加する。即ち、CPUは、ni2(C2+1)をN2に等しい値に設定し、数列Xi2の項数Ni2をカウンタc2に「1」を加えた値に設定する。次いで、CPUは、ステップ1395に進んで本ルーチンを終了する。
一方、ni2(c2)が「N2−1」と等しくない場合(即ち、ni2(c2)=N2である場合)、CPUは、ステップ1355にて「No」と判定してステップ1365に進み、数列Xi2の項数Ni2をカウンタc2に等しい値に設定する。更に、CPUは、ステップ1395に進んで本ルーチンを終了する。
(3)入力値X3の間引き処理
省略可能な入力値X2の探索が終了すると、CPUは、入力値X3に含まれる値であって省略可能な値を探索する。その際、CPUは、図15にフローチャートにより示された処理を実行する。即ち、CPUは、ステップ1500から処理を開始してステップ1505に進み、変数i3の値を「1」に設定し、カウンタc3の値を「2」に設定する。
次いで、CPUは、ステップ1510に進み、変数m2の値を「1」に設定する。変数m2は、変数m1と同様に、省略不可能であった入力値X2、即ち、Xi2の項番号を表す。換言すれば、変数m2は1からNi2までの整数である。
次いで、CPUは、ステップ1515に進み、変数m1の値を「1」に設定する。次いで、CPUは、ステップ1520に進み、図16にフローチャートにより示されたサブルーチンCを実行する。
サブルーチンCにおいて、CPUは、入力値Xi1=xi1(m1)且つ入力値Xi2=xi2(m2)であるとき、入力値X3に含まれる値であってc3番目に省略不可能な入力値X3の値ni3m1m2(c3)を探索する。この値ni3m1m2(c3)は、x3(i3)の次に省略不可能な入力値X3の値ということもできる。
CPUは、サブルーチンCを実行するとき、ステップ1600から処理を開始し、ステップ1605に進んで、カウンタc3、変数i3、変数m1、変数m2の値を読み込む。次いで、CPUは、ステップ1610に進み、変数j3の値を変数i3よりも「2」だけ大きい値に設定する(即ち、j3←i3+2)。
次いで、CPUは、ステップ1615に進み、
y(ni1(m1),ni2(m2),i3)及び
y(ni1(m1),ni2(m2),j3)、
y(ni1(m1+1),ni2(m2),i3)及び
y(ni1(m1+1),ni2(m2),j3)、
y(ni1(m1),ni2(m2+1),i3)及び
y(ni1(m1),ni2(m2+1),j3)並びに
y(ni1(m1+1),ni2(m2+1),i3)及び
y(ni1(m1+1),ni2(m2+1),j3)
に基づいて、入力値X1、入力値X2及び入力値X3のそれぞれが互いに直交する3次元グラフにおける「これら8つの入力値の組み合わせに対応する点を頂点とする直方体」に含まれる各点に対応する入力値に対する出力値を推定する。即ち、CPUは、推定値yaを算出する(図10と同様の事例)。ただし、CPUは、上述した省略可能な入力値X1及び入力値X2の探索の際に省略の可否が既に判定された出力値yに対応する推定値yaを算出しない。
次いで、CPUは、ステップ1620に進み、推定値yaのそれぞれと、その推定値yaに対応する元々の出力値Yと、の差分である誤差errを算出する。更に、CPUは、誤差errの最大値Emaxを算出する。次いで、CPUは、ステップ1625に進み、最大値Emaxがマップ誤差閾値ethよりも大きいか否かを判定する。
最大値Emaxがマップ誤差閾値eth以下である場合、CPUは、ステップ1625にて「No」と判定してステップ1630に進む。
ステップ1630にてCPUは、変数j3が入力値X3の総数N3に等しいか否かを判定する。変数j3が総数N3に等しくない場合(即ち、変数j3が総数N3より小さい場合)、CPUは、ステップ1630にて「No」と判定してステップ1635に進み、変数j3の値を「1」だけ増加させ、ステップ1615に戻る。この場合、CPUは、更に長く連続した範囲(即ち、入力値X3がi3+1からj3−1までの範囲)に含まれる入力値X3が省略可能であるか否かの探索を行う。
CPUがステップ1615に戻り、入力値X3の値がどこまで省略可能であるか否かの探索を行った結果、誤差errの最大値Emaxが誤差閾値よりも大きくなれば、CPUは、ステップ1625に進んだとき「Yes」と判定してステップ1640に進み、ni3m1m2(c3)の値を「j3−1」に設定する。即ち、入力値Xi1=xi1(m1)且つ入力値Xi2=xi2(m2)であるときx3(j3−1)は省略不可能な値であると判定される。
次いで、CPUは、ステップ1695に進んで本サブルーチンを一旦終了する。
一方、ステップ1625にて「No」と判定され且つ変数j3が総数N3に達している場合、CPUは、ステップ1630にて「Yes」と判定してステップ1645に進み、省略不可能な入力値X3の値ni3m1m2(c3)に入力値X3の総数N3を設定する。即ち、入力値X3の上端値であるx3(N3)は省略不可能であるので、更に入力値X3が省略不可能であるか否かの探索は行われない。更に、CPUは、ステップ1695に進んで本サブルーチンを一旦終了する。
CPUは、図16のサブルーチンCを終了したとき、図15のステップ1525に進み、変数m1が「数列Xi1の項数Ni1−1」に等しいか否かを判定する。
変数m1が「項数Ni1−1」よりも小さければ、CPUは、ステップ1525にて「No」と判定してステップ1530に進み、変数m1の値を「1」だけ増加させ、ステップ1520に戻って図16のサブルーチンCを再度実行する。即ち、CPUは、変数m1を増加したうえで入力値X3に含まれる値であって入力値x3(i3)の次に省略不可能な入力値X3の値ni3m1m2(c3)を探索する。
変数m1が増加した結果、「項数Ni1−1」と等しくなれば、CPUは、ステップ1525にて「Yes」と判定してステップ1535に進み、変数m2が「数列Xi2の項数Ni2−1」に等しいか否かを判定する。
変数m2が「項数Ni2−1」よりも小さければ、CPUは、ステップ1535にて「No」と判定してステップ1540に進み、変数m2の値を「1」だけ増加させ、ステップ1515に戻って変数m1の値を「1」に戻したうえで図16のサブルーチンCを再度実行する。即ち、CPUは、あらゆる変数m1と変数m2の組合せに対してサブルーチンCを実行することによって入力値x3(i3)の次に省略不可能な入力値X3の値ni3m1m2(c3)を探索する。
あらゆる変数m1と変数m2の組合せに対して値ni3m1m2(c3)が取得されると、CPUは、ステップ1535に進んだとき「Yes」と判定してステップ1540に進む。ステップ1540にてCPUは、ni3(c3)に「あらゆる変数m1と変数m2の組合せに対して算出された複数の値ni3m1m2(c3)」の内の最小値を設定する。換言すれば、任意の変数m1と変数m2の組合せに対してni3(c3−1)とni3(c3)との間に含まれる入力値X3は省略可能であるといえる。
次いで、CPUは、ステップ1545に進み、ni3(c3)が「入力値X3の総数N3−2」より大きいか否かを判定する。ni3(c3)が「N3−2」以下であれば、CPUは、ステップ1545にて「No」と判定してステップ1550に進む。ステップ1550にてCPUは、変数i3にni3(c3)を設定し、カウンタc3の値を「1」だけ増加させ、更に、ステップ1510に戻る。即ち、この場合、CPUは更に、省略可能な入力値X3の値を探索する。
一方、ni3(c3)が「N3−2」より大きければ、CPUは、ステップ1545にて「Yes」と判定してステップ1555に進み、ni3(c3)が「N3−1」に等しいか否かを判定する。ni3(c3)が「N3−1」に等しい場合、CPUは、ステップ1555にて「Yes」と判定してステップ1560に進む。
ステップ1560にてCPUは、省略不可能な入力値X3の集合である数列Xi3の最後の項としてx3(Ni3)を追加する。即ち、CPUは、ni3(C3+1)をN3に等しい値に設定し、数列Xi3の項数Ni3をカウンタc3に「1」を加えた値に設定する。次いで、CPUは、ステップ1595に進んで本ルーチンを終了する。
一方、ni3(c3)が「N3−1」と等しくない場合(即ち、ni3(c3)=N3である場合)、CPUは、ステップ1555にて「No」と判定してステップ1565に進み、数列Xi3の項数Ni3をカウンタc3に等しい値に設定する。更に、CPUは、ステップ1595に進んで本ルーチンを終了する。
(4)間引き処理のまとめ
CPUは、上述した間引き処理を実行することによって元マップ(3次元マップ)に対する間引きマップを生成する。FPGA54は、この間引きマップを用いて上述したシミュレーション動作(即ち、インバータ70及び電動機80の模擬)を行う。なお、FPGA54は、間引きマップを参照する際、参照すべき入力値と出力値との組合せが省略されている場合、上記間引き処理において用いられた線形補間と同様の処理によって推定値yaを算出する。
ここでは、3次元マップの間引き処理について説明したが、CPUは4次元以上の多次元マップに対しても同様に間引き処理を実行することができる。例えば、元マップが、X1、X2、X3及びX4の組合せから構成される入力値と、それぞれが出力値のそれぞれに対応している出力値から構成される4次元マップであれば、CPUは、3次元マップの場合と同様に間引き処理を実行することができる。より具体的に述べると、CPUは、入力値X1に含まれる値であって省略可能な値を探索し、次に、入力値X2に含まれる値であって省略可能な値を探索し、更に、入力値X3に含まれる値であって省略可能な値を探索したうえで、入力値X4に含まれる値であって省略可能な値を探索する。
<シミュレータの作動>
次に、シミュレータ30によるモーター制御ECU10の試験について説明する。シミュレータ30は、モーターアッシーMA、即ち、インバータ70及び電動機80の作動を模擬する。即ち、シミュレータ30は、インバータ70のIGBT71a〜IGBT76aを制御するためのPWM信号をモーター制御ECU10から受信する一方、モーター制御ECU10に対して電流iu、電流iv及び電流iw並びに電動機80の回転角θのそれぞれを表すセンサ信号を出力する。
より具体的に述べると、モーター制御ECU10は、入力電圧Viが所定値であるときに電動機80が所定の目標トルクTr*に等しいトルクを発生するようにPWM信号を生成し、そのPWM信号をシミュレータ30へ送信する。シミュレータ30は、入力電圧Viが上記所定値であるときにインバータ70がモーター制御ECU10から受信したPWM信号によって制御された結果、電動機80に流れる電流を算出する。例えば、シミュレータ30は、電動機80のU相コイルに流れる電流iuを下式(1)に示される電圧電流方程式に基づいて算出する。
ただし、上記式(1)において、
VはU相コイルに印加される電圧であって入力電圧Viに等しい電圧、
RはU相コイルの抵抗、
LはU相コイルの自己インダクタンス、
ωは電動機80のロータの回転速度(角速度)、
φはU相コイルを貫通する磁束の密度である。
しかし、インダクタンスL及び磁束密度φは時々刻々と変化するパラメータであるため、これらのパラメータを逐次算出することはシミュレータ30にとって負荷が大きい。そこでシミュレータ30は、入力電圧Vi、U相コイルに印加される電圧波形と同U相コイルに流れる電流波形との位相差β、及び、回転角θの組合せ(入力値)からインダクタンスL(出力値)を取得するマップA、並びに、これらの入力値から磁束密度φを取得するマップBを記憶している。
マップA及びマップBのそれぞれは、マップ生成装置60によって生成された間引きマップであり、HDD42に格納されている。シミュレータ30によるシミュレーション動作の開始時、CPU41はマップA及びマップBをFPGA51にロードする。
FPGA51を搭載するベースボード50は、マップA及びマップBを参照することによって上記式(1)に代入すべきパラメータを取得できるので、高速演算が可能となり、以て、モーター制御ECU10が出力する制御信号に対してリアルタイムにセンサ信号を返すことができる。本例において、シミュレータ30は10.0nsec毎に上述した演算を実行し、モーター制御ECU10からの入力(入力制御信号)に対する出力(出力結果信号)を生成する。
同様に、シミュレータ30は、電動機80のV相コイルに流れる電流iv及び電動機80のW相に流れる電流iwを算出する。ただし、V相コイルはU相コイルと比較して回転角θに対して位相が120°遅れており、W相コイルはU相コイルと比較して回転角θに対して位相が240°遅れている。
シミュレータ30は、算出された電流iu、電流iv及び電流iwを表すセンサ信号をモーター制御ECU10に対して出力する。加えて、シミュレータ30は、回転角θの進角量を算出し、その時点の回転角θ(絶対角度)を表すセンサ信号をモーター制御ECU10に対して出力する。
以上、説明したように本生成装置(マップ生成装置60)は、
複数の離散的入力値とそれぞれが前記複数の離散的入力値のそれぞれに対応している複数の離散的出力値との組合せを規定したマップ(マップA及びマップB)を予め記憶しており、試験対象である電子制御装置から逐次入力される入力制御信号(モーター制御ECU10がシミュレータ30に出力するPWM信号)を受信して同入力制御信号に対する出力結果信号を前記マップを参照する工程を含む特定方法(マップA及びマップBを参照して得られた値を上記式(1)に代入してU相電流iuが算出される工程を含む出力結果信号の算出方法)により算出し同算出した出力結果信号(シミュレータ30がモーター制御ECU10に出力するU相電流iu、V相電流iv及びW相電流iw並びに回転角θ)を同電子制御装置に出力するシミュレーション装置(シミュレータ30)、の前記マップを生成するマップ生成装置(60)であって、
データの削減がなされていないマップである元マップ(HDD62に記憶された元マップ)に対して、前記複数の離散的入力値の一つである特定入力値と前記元マップとにより得られる同特定入力値に対応する前記複数の離散的出力値の一つである特定出力値を、前記複数の離散的入力値のうちそれぞれが前記特定入力値とは異なる複数の入力値と前記元マップとにより得られる複数の出力値を用いて推定し、前記特定出力値と前記推定した値との差分の大きさが所定のマップ誤差閾値(eth)以下である場合に前記特定入力値と前記特定出力値との組合せを前記元マップから省略する間引き処理を繰り返し行うことにより、前記元マップのデータよりも少ない数のデータを有する間引きマップを生成する(図4のステップ425)ように構成されている。
更に、本生成装置は、
前記特定方法により前記元マップを参照することによって算出される前記入力制御信号に対する第1の前記出力結果信号(図5の曲線iu1)と、同特定方法により前記間引きマップを参照することによって算出される前記入力制御信号に対する第2の前記出力結果信号(図5の曲線iu2)と、の差分に相関を有する精度相関値(Ixu)を算出し、前記精度相関値が所定のシミュレーション誤差閾値範囲に含まれる(図4のステップ440)まで前記マップ誤差閾値を変更したうえ(図4のステップ445)で前記間引き処理を繰り返し行って前記間引きマップを更新し且つ前記精度相関値が前記シミュレーション誤差閾値範囲に含まれているときにはその時点で得られている前記間引きマップを前記シミュレーション装置が記憶するマップとして決定する(図4のステップ450)ように構成されている。
なお、前記第1の出力結果信号は、前記シミュレーション装置が前記元マップを記憶していると仮定した場合に前記入力制御信号に対して前記シミュレーション装置により算出される前記出力結果信号である。一方、前記第2の出力結果信号は、前記シミュレーション装置が前記間引きマップを記憶していると仮定した場合に前記入力制御信号に対して前記シミュレーション装置により算出される前記出力結果信号である。
更に、本生成装置は、
前記マップ誤差閾値が第1マップ誤差閾値である場合に生成された前記間引きマップに対する前記精度相関値が前記シミュレーション誤差閾値範囲の上限値(Ixumax)より大きく、且つ、前記マップ誤差閾値が前記第1マップ誤差閾値と異なる第2マップ誤差閾値である場合に生成された前記間引きマップに対する前記精度相関値が前記シミュレーション誤差閾値範囲の下限値(Ixumin)より小さいとき、前記第1のマップ誤差閾値と前記第2のマップ誤差閾値との平均値を前記マップ誤差閾値の変更された値として採用して(図4のステップ445)前記間引きマップを更新するように構成されている。
本生成装置によれば、シミュレーション精度が精度相関値Ixuが所望の範囲内となる)ようにしながら、シミュレーション装置が用いるマップのデータを適切に削減することができる。加えて、本生成装置によれば、本発明装置によれば、管理者がシミュレーション誤差閾値範囲を指定することにより、精度相関値Ixuがその範囲に含まれるようにデータの削減が適切になされたマップを自動的に生成することができる。
以上、本発明に係るマップ生成装置の実施形態について説明したが、本発明は上記実施形態に限定されるものではなく、本発明の目的を逸脱しない限りにおいて種々の変更が可能である。例えば、CPU61は、U相電流に基づく差分Duによって精度相関値Ixuを算出していた。しかし、CPU61は、更に、V相電流に基づく精度相関値Ixv及びW相電流に基づく精度相関値Ixwを算出し、精度相関値Ixu、精度相関値Ixv及び精度相関値Ixwに基づいた精度相関値を算出し、その精度相関値が特定範囲に含まれるか否かを判定しても良い。
加えて、マップA及びマップBのそれぞれは3次元マップであった。しかし、マップA及び/又はマップBは4次元以上の多次元マップであっても良い。例えば、マップA及び/又はマップBは入力値として電動機80のコイル温度を更に含む4次元マップでも良い。
加えて、本実施形態において、下限値Ixumin及び上限値Ixumaxは互いに異なる値であった。しかし、下限値Ixumin及び上限値Ixumaxは互いに等しい値であっても良い。この場合、コントローラ40は、精度相関値Ixuが下限値Ixumin(及び上限値Ixumax)と等しくなるマップ誤差閾値ethを探索し、そのマップ誤差閾値ethに基づいて間引き処理が実行されたマップをシミュレータ30が記憶するマップとして決定する。
加えて、本実施形態において、マップ生成装置60が、「シミュレータ30が元マップを記憶している場合にモーターアッシーMAの動作を模擬したときに出力する出力結果信号(第1の出力結果信号)」及び「シミュレータ30が間引きマップを記憶している場合にモーターアッシーMAの動作を模擬したときに出力する出力結果信号(第2の出力結果信号)」を算出していた。しかし、マップ生成装置60は、シミュレータ30に第1の出力結果信号及び第2の出力結果信号の何れか一方又は両方を算出させても良い。マップ生成装置60がシミュレータ30に第2の出力結果信号を算出させる場合、マップ生成装置60は生成された間引きマップをFPGA51に直接ロードする。
加えて、本実施形態において、シミュレータ30は、出力結果信号として電流iu、電流iv及び電流iwをモーター制御ECUへ出力していた。しかし、シミュレータ30は、電流iu及び電流ivのみをモーター制御ECUへ出力しても良い。この場合、モーター制御ECUは、電動機80のU相コイル、V相コイル及びW相コイルのそれぞれの一端が中性点Cに接続されていることを利用し、電流iwを電流iu及び電流ivに基づいてiw=−(iu+iv)として算出しても良い。或いは、シミュレータ30は、電流iu及び電流iwのみをモーター制御ECUへ出力しても良い。この場合、モーター制御ECUは、電流ivを電流iu及び電流iwに基づいてiv=−(iu+iw)として算出しても良い。或いは、シミュレータ30は、電流iv及び電流iwのみをモーター制御ECUへ出力しても良い。この場合、モーター制御ECUは、電流iuを電流iv及び電流iwに基づいてiu=−(iv+iw)として算出しても良い。
加えて、本実施形態において、マップ生成装置60は、シミュレータ30がモーターアッシーMAの作動の模擬を行う際に参照されるマップに対して間引き処理を実行していた。しかし、マップ生成装置60は、シミュレーション装置がモーターアッシーMAとは異なるアクチュエータの作動の模擬を行う際に参照されるマップに対して間引き処理を実行しても良い。換言すれば、マップ生成装置60は、モーター制御ECU以外の電子制御装置の開発・試験に用いられるシミュレーション装置が参照するマップに対して間引き処理を実行しても良い。
例えば、マップ生成装置60は、エンジンの回転速度及び要求トルク等に応じて燃料噴射量及び燃料噴射時期等を決定するエンジンECUの開発・試験に用いられるシミュレーション装置が参照するマップに対して間引き処理を実行しても良い。或いは、マップ生成装置60は、車両の走行速度及びエンジンの回転速度等に応じて変速タイミングを決定するトランスミッションECUの開発・試験に用いられるシミュレーション装置が参照するマップに対して間引き処理を実行しても良い。即ち、本実施形態のマップ生成装置は、どのような電子制御装置に対応するシミュレータに対しても、そのシミュレータが参照するマップを有している限り適用可能である。
加えて、本実施形態において、コントローラ40及びマップ生成装置60のそれぞれは、不揮発性記憶装置としてハードディスクドライブ(HDD42及びHDD62)を搭載していた。しかし、コントローラ40及び/又はマップ生成装置60は、ハードディスクドライブ以外の不揮発性記憶装置(例えば、フラッシュメモリを含んだソリッドステートドライブ(SDD))を搭載しても良い。