(57)【要約】【課題】精度の高い座標変換を行うことができる座標演算装置及び座標演算方法を提供することを課題とする。【解決手段】座標演算装置は、直交座標データを入力し、前記直交座標データに対してシフト及び加減算を複数回繰り返すことにより、前記直交座標データで表現されるベクトルの大きさを示すデータに収束させるＣＯＲＤＩＣ演算部（３０２）と、前記シフト及び加減算後のデータと保持データとのいずれか一方をスケーリング調整して他方と比較し、大きい方のデータを次回の前記保持データとして保持し、前記比較を繰り返す最大値保持部（３０１）とを有する。【選択図】図１
2017134463.tif 000002
【特許請求の範囲】
【請求項１】
直交座標データを入力し、前記直交座標データに対してシフト及び加減算を複数回繰り返すことにより、前記直交座標データで表現されるベクトルの大きさを示すデータに収束させるＣＯＲＤＩＣ演算部と、
前記シフト及び加減算後のデータと保持データとのいずれか一方をスケーリング調整して他方と比較し、大きい方のデータを次回の前記保持データとして保持し、前記比較を繰り返す最大値保持部と
を有することを特徴とする座標演算装置。
【請求項２】
前記最大値保持部は、
前記保持データにスケーリング係数を加算する加算器と、
前記シフト及び加減算後のデータと前記スケーリング係数が加算された保持データとを比較する比較器と、
前記比較の結果、前記シフト及び加減算後のデータの方が大きい場合には、前記シフト及び加減算後のデータを前記次回の保持データとして選択し、前記スケーリング係数が加算された保持データの方が大きい場合には、前記スケーリング係数が加算された保持データを前記次回の保持データとして選択するセレクタと、
選択された前記次回の保持データを保持するレジスタとを備え、
前記比較を繰り返すことを特徴とする請求項１記載の座標演算装置。
【請求項３】
前記最大値保持部は、
前記保持データにスケーリング係数を乗算する乗算器と、
前記シフト及び加減算後のデータと前記スケーリング係数が乗算された保持データとを比較する比較器と、
前記比較の結果、前記シフト及び加減算後のデータの方が大きい場合には、前記シフト及び加減算後のデータを前記次回の保持データとして選択し、前記スケーリング係数が乗算された保持データの方が大きい場合には、前記スケーリング係数が乗算された保持データを前記次回の保持データとして選択するセレクタと、
選択された前記次回の保持データを保持するレジスタとを備え、
前記比較を繰り返すことを特徴とする請求項１記載の座標演算装置。
【請求項４】
前記最大値保持部は、
前記シフト及び加減算後のデータにスケーリング係数を乗算する乗算器と、
前記スケーリング係数が乗算されたシフト及び加減算後のデータと前記保持データとを比較する比較器と、
前記比較の結果、前記スケーリング係数が乗算されたシフト及び加減算後のデータの方が大きい場合には、前記スケーリング係数が乗算されたシフト及び加減算後のデータを前記次回の保持データとして選択し、前記保持データの方が大きい場合には、前記保持データを前記次回の保持データとして選択するセレクタと、
選択された前記次回の保持データを保持するレジスタとを備え、
前記比較を繰り返すことを特徴とする請求項１記載の座標演算装置。
【請求項５】
前記ＣＯＲＤＩＣ演算部及び前記最大値保持部は、フィードバック処理により処理を複数回繰り返すことを特徴とする請求項１〜４のいずれか１項に記載の座標演算装置。
【請求項６】
前記ＣＯＲＤＩＣ演算部及び前記最大値保持部は、パイプライン処理により処理を複数回繰り返すことを特徴とする請求項１〜４のいずれか１項に記載の座標演算装置。
【請求項７】
直交座標データを入力し、前記直交座標データに対して回転演算又は無回転のスケーリング調整を複数回繰り返すことにより、前記直交座標データで表現されるベクトルの大きさを示すデータに収束させる座標演算装置であって、
前記直交座標データのうちの一方の軸のデータに対して、０より大きくかつ１より小さい定数を乗算する乗算器と、
前記乗算器により乗算されたデータに基づくデータと前回のデータの正負符号が一致するか否かを検出する一致検出器と、
前記正負符号が一致している場合には回転演算の結果を次回のデータとして出力する回転演算部と、
前記正負符号が一致していない場合にはスケーリング調整の結果を次回のデータとして出力するスケーリング調整部と
を有することを特徴とする座標演算装置。
【請求項８】
前記定数は、１／２、２／３、又は３／４であることを特徴とする請求項７記載の座標演算装置。
【請求項９】
さらに、前記正負符号が一致する場合には前記回転演算部の回転演算の結果を選択して出力し、前記正負符号が一致しない場合には前記スケーリング調整部のスケーリング調整の結果を選択して出力するセレクタを有することを特徴とする請求項７又は８記載の座標演算装置。
【請求項１０】
前記正負符号が一致する場合には、前記回転演算部は前記回転演算を行い、前記スケーリング調整部は前記スケーリング調整を行わず、
前記正負符号が一致しない場合には、前記回転演算部は前記回転演算を行わず、前記スケーリング調整部は前記スケーリング調整を行うことを特徴とする請求項７又は８記載の座標演算装置。
【請求項１１】
前記正負符号が一致しない場合には、その時点で前記スケーリング調整部の前記スケーリング調整を行わずに、前記正負符号が一致しない連続回数をカウントし、
前記正負符号が一致した後に、前記スケーリング調整部は、前記スケーリング調整を連続して前記カウントされた連続回数行い、
前記回転演算部は、前記正負符号が一致した後に、前記回転演算を行うことを特徴とする請求項７又は８記載の座標演算装置。
【請求項１２】
方式が異なる複数のＣＯＲＤＩＣ演算部と、
セレクタとを有し、
前記複数のＣＯＲＤＩＣ演算部の各々は、第１の軸と第２の軸の直交座標データを入力し、前記直交座標データに対してシフト及び加減算を複数回繰り返すことにより、前記直交座標データで表現されるベクトルの大きさを示すデータに出力データを収束させ、
前記セレクタは、前記複数のＣＯＲＤＩＣ演算部の出力データのうちの絶対値が最大値である出力データを選択して出力することを特徴とする座標演算装置。
【請求項１３】
方式が異なる複数のＣＯＲＤＩＣ演算部と、
セレクタとを有し、
前記複数のＣＯＲＤＩＣ演算部の各々は、第１の軸と第２の軸の直交座標データを入力し、前記直交座標データに対してシフト及び加減算を複数回繰り返すことにより、前記直交座標データで表現されるベクトルの大きさを示すデータに前記第１の軸の出力データを収束させ、前記第２の軸の出力データを０に収束させ、
前記セレクタは、前記複数のＣＯＲＤＩＣ演算部の前記第２の軸の出力データのうちの絶対値が最小値である前記第２の軸の出力データを出力した前記ＣＯＲＤＩＣ演算部が出力した前記第１の軸の出力データを選択して出力することを特徴とする座標演算装置。
【請求項１４】
さらに、前記複数のＣＯＲＤＩＣ演算部の前記第２の軸の出力データの絶対値のうちの最小値が閾値以下であるか否かの判定を行う最小値判定器を有することを特徴とする請求項１２又は１３記載の座標演算装置。
【請求項１５】
ＣＯＲＤＩＣ演算部により、直交座標データを入力し、前記直交座標データに対してシフト及び加減算を複数回繰り返すことにより、前記直交座標データで表現されるベクトルの大きさを示すデータに収束させるＣＯＲＤＩＣ演算ステップと、
最大値保持部により、前記シフト及び加減算後のデータと保持データとのいずれか一方をスケーリング調整して他方と比較し、大きい方のデータを次回の前記保持データとして前記比較を繰り返す最大値保持ステップと
を有することを特徴とする座標演算方法。
【請求項１６】
直交座標データを入力し、前記直交座標データに対して回転演算又は無回転のスケーリング調整を複数回繰り返すことにより、前記直交座標データで表現されるベクトルの大きさを示すデータに収束させる座標演算方法であって、
乗算器により、前記直交座標データのうちの一方の軸のデータに対して、０より大きくかつ１より小さい定数を乗算する乗算ステップと、
一致検出器により、前記乗算されたデータに基づくデータと前回のデータの正負符号が一致するか否かを検出する一致検出ステップと、
回転演算部により、前記正負符号が一致している場合には回転演算の結果を次回のデータとして出力する回転演算ステップと、
スケーリング調整部により、前記正負符号が一致していない場合にはスケーリング調整の結果を次回のデータとして出力するスケーリング調整ステップと
を有することを特徴とする座標演算方法。
【請求項１７】
方式が異なる複数のＣＯＲＤＩＣ演算部を用いた座標演算方法であって、
前記複数のＣＯＲＤＩＣ演算部の各々は、第１の軸と第２の軸の直交座標データを入力し、前記直交座標データに対してシフト及び加減算を複数回繰り返すことにより、前記直交座標データで表現されるベクトルの大きさを示すデータに出力データを収束させ、
セレクタにより、前記複数のＣＯＲＤＩＣ演算部の出力データのうちの絶対値が最大値である出力データを選択して出力することを特徴とする座標演算方法。
【請求項１８】
方式が異なる複数のＣＯＲＤＩＣ演算部を用いた座標演算方法であって、
前記複数のＣＯＲＤＩＣ演算部の各々は、第１の軸と第２の軸の直交座標データを入力し、前記直交座標データに対してシフト及び加減算を複数回繰り返すことにより、前記直交座標データで表現されるベクトルの大きさを示すデータに前記第１の軸の出力データを収束させ、前記第２の軸の出力データを０に収束させ、
セレクタにより、前記複数のＣＯＲＤＩＣ演算部の前記第２の軸の出力データのうちの絶対値が最小値である前記第２の軸の出力データを出力した前記ＣＯＲＤＩＣ演算部が出力した前記第１の軸の出力データを選択して出力することを特徴とする座標演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、座標演算装置及び座標演算方法に関する。
【背景技術】
【０００２】
複素平面上で複素データを回転させたり、２次元平面上で２次元座標データを回転させるために、ビットシフトと加減算の繰り返しのみで座標回転を実現することが可能な「ＣＯＲＤＩＣ」と呼ばれる座標データ回転演算器が非特許文献１に開示されている。
【０００３】
また、ダブルローテーション型ＣＯＲＤＩＣが非特許文献２に開示されている。ダブルローテーション型ＣＯＲＤＩＣは、非特許文献１のＣＯＲＤＩＣに対して、角度系列が２倍であり、回転演算毎に生ずる演算誤差を補正するスケーリング調整が簡易である。
【０００４】
また、コントロール型ＣＯＲＤＩＣが非特許文献３に開示されている。コントロール型ＣＯＲＤＩＣでは、目標方向であるｘ軸を超えて回転することが無いよう、超えると予測される場合に、回転演算前の座標を保ち、回転を行わないようにしている。その制御によって、コントロール型ＣＯＲＤＩＣは、回転演算を行う毎にｘ軸に一方向から確実に近付いて行く。ただし、回転方向が一方向に限られるため目標であるｘ軸に近づくのが遅い。
【０００５】
また、特許文献１には、ＣＯＲＤＩＣの演算精度を向上させるため、複数回の回転演算過程において、１演算毎にｙ座標を上位側へ１ビットシフトして、下位側の演算ビット数を実質的に増やすことにより精度向上を図る手段が開示されている。
【先行技術文献】
【特許文献】
【０００６】
【特許文献１】特公平７−７５０１９号公報
【非特許文献】
【０００７】
【非特許文献１】Ｊ. Ｅ. Ｖｏｌｄｅｒ. “Ｔｈｅ  ＣＯＲＤＩＣ  ｔｒｉｇｏｎｏｍｅｔｒｉｃ ｃｏｍｐｕｔｉｎｇ  ｔｅｃｈｎｉｑｕｅ”，ＩＲＥ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  Ｅｌｅｃｔｒｏｎｉｃ  Ｃｏｍｐｕｔｅｒｓ，ＥＣ−８：３３０−３３４，１９５９．
【非特許文献２】Ｎ. Ｔａｋａｇｉ, Ｔ. Ａｓａｄａ, ａｎｄ Ｓ. Ｙａｊｉｍａ, “Ｒｅｄｕｎｄａｎｔ ＣＯＲＤＩＣ ｍｅｔｈｏｄｓ ｗｉｔｈ ａ ｃｏｎｓｔａｎｔ ｓｃａｌｅ ｆａｃｔｏｒ ｆｏｒ ｓｉｎｅ ａｎｄ ｃｏｓｉｎｅ ｃｏｍｐｕｔａｔｉｏｎ”， ＩＥＥＥ  Ｔｒａｎｓ．  Ｃｏｍｐｕｔｅｒｓ，  ｖｏｌ．４０，ｎｏ．９，ｐｐ．９８９−９９５，Ｓｅｐｔ．１９９１．
【非特許文献３】ＴＥＲＥＮＣＥ Ｋ．Ｒｏｄｒｉｇｕｅｓ  ａｎｄ  Ｅａｒｉ  Ｅ．Ｓｗａｒｔｚｌａｎｄｅｒ，Ｊｒ． “Ａｄａｐｔｉｖｅ  ＣＯＲＤＩＣ：  Ｕｓｉｎｇ  Ｐａｒａｌｌｅｌ  Ａｎｇｌｅ  Ｒｅｃｏｒｄｉｎｇ  ｔｏ  Ａｃｃｅｌｅｒａｔｅ  Ｒｏｔａｔｉｏｎｓ”，  ＩＥＥＥ  Ｔｒａｎｓａｃｔｉｏｎｓ  ｏｎ  Ｃｏｍｐｕｔｅｒｓ，Ｖｏｌ．５９，Ｎｏ．４，Ａｐｒｉｌ  ２０１０．
【発明の概要】
【発明が解決しようとする課題】
【０００８】
特許文献１、非特許文献１及び非特許文献２のＣＯＲＤＩＣは、繰り返し演算を途中回数で止めることができない。そのため、この繰り返し演算の途中で極座標の大きさの絶対値が極めて精度の高い値になると、次の繰り返し演算では逆に精度が低下してしまうことがある。これにより、繰り返し演算終了後の演算結果の精度が、それ以前の演算結果の精度よりも悪くなるということが起こり得る。その結果、必ずしも高精度の演算結果が得られないという課題がある。
【０００９】
本発明の目的は、精度の高い座標変換を行うことができる座標演算装置及び座標演算方法を提供することである。
【課題を解決するための手段】
【００１０】
本発明の座標演算装置は、直交座標データを入力し、前記直交座標データに対してシフト及び加減算を複数回繰り返すことにより、前記直交座標データで表現されるベクトルの大きさを示すデータに収束させるＣＯＲＤＩＣ演算部と、前記シフト及び加減算後のデータと保持データとのいずれか一方をスケーリング調整して他方と比較し、大きい方のデータを次回の前記保持データとして保持し、前記比較を繰り返す最大値保持部とを有することを特徴とする。
【発明の効果】
【００１１】
本発明によれば、精度の高い座標変換を行うことができる。
【図面の簡単な説明】
【００１２】
【図１】第１の実施形態による座標演算装置の構成例を示す図である。
【図２】第２の実施形態による座標演算装置の構成例を示す図である。
【図３】第３の実施形態による座標演算装置の構成例を示す図である。
【図４】回転境界パラメータと無回転区間及び回転区間の関係を示す図である。
【図５】コントルール型ＣＯＲＤＩＣの構成例を示す図である。
【図６】第４の実施形態による再帰型ＣＯＲＤＩＣの構成例を示す図である。
【図７】第４の実施形態による再帰型ＣＯＲＤＩＣの構成例を示す図である。
【図８】第５の実施形態による座標演算装置の構成例を示す図である。
【図９】第６の実施形態による座標演算装置の構成例を示す図である。
【図１０】第７の実施形態による座標演算装置の構成例を示す図である。
【図１１】回転境界パラメータと無回転区間及び回転区間の関係を示す図である。
【図１２】第８の実施形態による座標演算装置の処理を示すフローチャートである。
【図１３】第９の実施形態による座標演算装置の処理を示すフローチャートである。
【発明を実施するための形態】
【００１３】
（第１の実施形態）
図１（Ａ）は、本発明の第１の実施形態による座標演算装置の構成例を示す図である。座標演算装置は、最大値保持部３０１及びＣＯＲＤＩＣ演算部３０２を有する。ＣＯＲＤＩＣ演算部３０２は、図１（Ｂ）に示すように、ベクトルＶ０の直交座標（ｘ0、ｙ0）を入力し、ベクトルＶ０を回転角ｚ0だけ回転させたベクトルＶ１の極座標（ｒ，θ＋ｚ0）を演算する。なお、ベクトルＶ０の極座標は、（ｒ，θ）である。ｘ0は、ベクトルＶ０のｘ座標値である。ｙ0は、ベクトルＶ０のｙ座標値である。ｒは、ベクトルＶ０及びＶ１のそれぞれの大きさである。θは、ベクトルＶ０の偏角である。θ＋ｚ0は、ベクトルＶ１の偏角である。具体的には、ＣＯＲＤＩＣ演算部３０２は、ｘ座標ｘ0とｙ座標ｙ0と回転角ｚ0を入力し、フィードバック処理を行い、ｘi+1とｙi+1とｚi+1を出力する。ｘi+1の収束値は、Ａｎ×ｒである。ここで、Ａｎは、係数である。ｙi+1の収束値は、０である。ｚi+1の収束値は、θ＋ｚ0である。また、回転角ｚ0を０にすることにより、座標演算装置は、ベクトルＶ０の直交座標（ｘ0、ｙ0）を入力し、ベクトルＶ０の極座標（ｒ，θ）を出力することができる。信号処理回路は、信号処理の高度化により、信号の多次元化が進み、多次元連立方程式を解いて最適解等を求める処理を、リアルタイムで行う。信号処理回路は、行列演算を多用する。本実施形態の座標演算装置は、そのような信号処理回路等に用いられる。以下、ｘｙ座標データを例に説明するが、複素データでもよい。
【００１４】
ＣＯＲＤＩＣ演算部３０２は、再帰型ダブルローテーション型ＣＯＲＤＩＣ演算部であり、複素平面上で複素データを回転させたり、２次元平面上で２次元座標データを回転させるために、ビットシフトと加減算の繰り返しのみで座標回転を実現することができる。ＣＯＲＤＩＣ演算部３０２の角度系列は、２×ｔａｎ-1（２-i）（ｉ＝０，１，２，３・・・）である。セレクタ２０１は、最初のサイクルでは、入力データｘ0を選択して出力し、次回以降のサイクルでは、加減算器２０６が出力するデータｘi+1を選択して出力する。レジスタ２０２は、セレクタ２０１の出力データを保持する。セレクタ２０７は、最初のサイクルでは、入力データｙ0を選択して出力し、次回以降のサイクルでは、加減算器２１２が出力するデータｙi+1を選択して出力する。レジスタ２０８は、セレクタ２０７の出力データを保持する。セレクタ２１３は、最初のサイクルでは、入力データｚ0を選択して出力し、次回以降のサイクルでは、加減算器２１６が出力するデータｚi+1を選択して出力する。レジスタ２１４は、セレクタ２１３の出力データを保持する。第ｉサイクルでは、レジスタ２０２はデータｘiを出力し、レジスタ２０８はデータｙiを出力し、レジスタ２１４はデータｚiを出力する。
【００１５】
シフタ２０３は、第ｉサイクルでは、レジスタ２０２の出力データｘiに対して２ｉビット右シフトすることにより、データｘiに対して２-2iを乗算し、データｘi×２-2iを出力する。シフタ２０４は、第ｉサイクルでは、レジスタ２０８の出力データｙiに対してｉ−１ビット右シフトすることにより、データｙiに対して２-(i-1)を乗算し、データｙi×２-(i-1)を出力する。シフタ２０９は、第ｉサイクルでは、レジスタ２０２の出力データｘiに対してｉ−１ビット右シフトすることにより、データｘiに対して２-(i-1)を乗算し、データｘi×２-(i-1)を出力する。シフタ２１０は、第ｉサイクルでは、レジスタ２０８の出力データｙiに対して２ｉビット右シフトすることにより、データｙiに対して２-2iを乗算し、データｙi×２-2iを出力する。
【００１６】
減算器２０５は、データｘiからシフタ２０３の出力データｘi×２-2iを減算することにより、データ（ｘi−ｘi×２-2i）を出力する。減算器２１１は、データｙiからシフタ２１０の出力データｙi×２-2iを減算することにより、データ（ｙi−ｙi×２-2i）を出力する。
【００１７】
加減算器２０６は、データｙiの正負符号ＳＮを参照し、データｙiが０未満である場合には、減算器２０５の出力データ（ｘi−ｘi×２-2i）とシフタ２０４の出力データｙi×２-(i-1)を加算し、次式（１）のデータｘi+1を出力する。これは、左回転の処理である。
ｘi+1＝（１−２-2i）×ｘi＋２(-i+1)×ｙi  ・・・（１）
【００１８】
また、加減算器２０６は、データｙiの正負符号ＳＮを参照し、データｙiが０以上である場合には、減算器２０５の出力データ（ｘi−ｘi×２-2i）からシフタ２０４の出力データｙi×２-(i-1)を減算し、次式（２）のデータｘi+1を出力する。これは、右回転の処理である。
ｘi+1＝（１−２-2i）×ｘi−２(-i+1)×ｙi  ・・・（２）
【００１９】
加減算器２１２は、データｙiの正負符号ＳＮを参照し、データｙiが０未満である場合には、減算器２１１の出力データ（ｙi−ｙi×２-2i）からシフタ２０９の出力データｘi×２-(i-1)を減算し、次式（３）のデータｙi+1を出力する。これは、左回転の処理である。
ｙi+1＝（１−２-2i）×ｙi−２(-i+1)×ｘi  ・・・（３）
【００２０】
また、加減算器２１２は、データｙiの正負符号ＳＮを参照し、データｙiが０以上である場合には、減算器２１１の出力データ（ｙi−ｙi×２-2i）とシフタ２０９の出力データｘi×２-(i-1)を加算し、次式（４）のデータｙi+1を出力する。これは、右回転の処理である。
ｙi+1＝（１−２-2i）×ｙi＋２(-i+1)×ｘi  ・・・（４）
【００２１】
ルックアップテーブル２１５は、回転角２×ｔａｎ-1（２-i）を記憶し、回転角２×ｔａｎ-1（２-i）を加減算器２１６に出力する。加減算器２１６は、データｙiの正負符号ＳＮを参照し、データｙiが０未満である場合には、左回転として、データｚiから回転角２×ｔａｎ-1（２-i）を減算し、次式（５）のデータｚi+1を出力する。
ｚi+1＝ｚi−２×ｔａｎ-1（２-i）  ・・・（５）
【００２２】
また、加減算器２１６は、データｙiの正負符号ＳＮを参照し、データｙiが０以上である場合には、右回転として、データｚiと回転角２×ｔａｎ-1（２-i）を加算し、次式（６）のデータｚi+1を出力する。
ｚi+1＝ｚi＋２×ｔａｎ-1（２-i）  ・・・（６）
【００２３】
加減算器２０６は、出力データｘi+1をセレクタ２０１にフィードバックする。加減算器２１２は、出力データｙi+1をセレクタ２０７にフィードバックする。加減算器２１６は、出力データｚi+1をセレクタ２１３にフィードバックする。上記のフィードバック処理を繰り返すことにより、第ｎ−１サイクルで、データｘi+1とｙi+1とｚi+1は、それぞれ、次式（７）〜（９）のデータｘnとｙnとｚnに収束する。ここで、係数Ａｎは、次式（１０）で表される。Πは、直積を表す。
ｘn＝Ａｎ×√（ｘ02＋ｙ02）＝Ａｎ×ｒ  ・・・（７）
ｙn＝０  ・・・（８）
ｚn＝ｚ0＋ｔａｎ-1（ｙ0／ｘ0）＝ｚ0＋θ  ・・・（９）
【００２４】
【数１】
2017134463.tif 000003
【００２５】
座標演算装置は、データｘnに１／Ａｎを乗算することにより、ベクトルＶ１の大きさｒを求めることができる。また、データｚn＝ｚ0＋θは、ベクトルＶ１の偏角である。以上より、座標演算装置は、ベクトルＶ０の直交座標（ｘ0，ｙ0）を入力し、ベクトルｖ０を回転角ｚ0だけ回転させたベクトルＶ１の極座標（ｒ，ｚ0＋θ）を出力することができる。なお、座標演算装置は、ベクトルＶ０の大きさｒのみを出力させたい場合には、セレクタ２１３、レジスタ２１４、ルックアップテーブル２１５及び加減算器２１６を削除することができる。
【００２６】
以上のように、ＣＯＲＤＩＣ演算部３０２は、直交座標データ（ｘ0，ｙ0）を入力し、直交座標データに対してシフト及び加減算を複数回繰り返すことにより、直交座標データ（ｘ0，ｙ0）で表現されるベクトルＶ０の大きさｒを示すデータｘnに収束させる。
【００２７】
ＣＯＲＤＩＣ演算部３０２は、上記の複数サイクルの繰り返し演算を途中回数で止めることができない。そのため、この繰り返し演算の途中で極座標の大きさｒの絶対値が極めて精度の高い値になると、次のサイクルの演算では逆に精度が低下してしまうことがある。これにより、繰り返し演算終了後の演算結果の精度が、それ以前のサイクルの演算結果の精度よりも悪くなるということが起こり得る。そこで、本実施形態では、最大値保持部３０１を設けることにより、精度の高い極座標を得る。
【００２８】
最大値保持部３０１は、レジスタ（Ｄ型フリップフロップ）３０３と、シフタ３０４と、加算器３０５と、比較器３０６と、セレクタ（マルチプレクサ）３０７とを有する。最大値保持部３０１は、ＣＯＲＤＩＣ演算部３０２から出力される各サイクル毎のデータｘi+1の絶対値と、それ以前のサイクルによるデータｘi+1の絶対値の最大値に対して演算回数に合わせてスケーリング調整した値とを比較し、大きい方を選択して保持する。
【００２９】
最初、セレクタ３０７は、データｘi+1を選択し、データｘi+1を最大データＸＭとして出力する。レジスタ３０３は、セレクタ３０７の出力データＸＭを保持する。レジスタ３０３の初期値は０である。シフタ３０４は、第ｉサイクルでは、レジスタ３０３の出力データを２ｉ＋２ビット右シフトする。加算器３０５は、スケーリング調整のための加算器であり、レジスタ３０３の出力データ（保持データ）とシフタ３０４の出力データ（スケーリング係数）を加算することにより、回転演算回数（サイクル数）ｉに応じたスケーリング調整を施す。比較器３０６は、サイクル毎に、ＣＯＲＤＩＣ演算部３０２から出力されるデータｘi+1の絶対値と、加算器３０５の出力データの絶対値とを比較し、その比較結果をセレクタ３０７に出力する。セレクタ３０７は、ＣＯＲＤＩＣ演算部３０２から出力されるデータｘi+1の絶対値が加算器３０５の出力データの絶対値より大きい場合には、ＣＯＲＤＩＣ演算部３０２から出力されるデータｘi+1を最大データＸＭとして出力する。また、セレクタ３０７は、加算器３０５の出力データの絶対値がＣＯＲＤＩＣ演算部３０２から出力されるデータｘi+1の絶対値より大きい場合には、加算器３０５の出力データを最大データＸＭとして出力する。最大データＸＭは、次回の保持データとして、レジスタ３０３に保持される。上記の処理は、サイクル数繰り返される。
【００３０】
以上のように、最大値保持部３０１は、サイクル毎に、最大データＸＭをレジスタ３０３に保持し、保持された最大データＸＭがスケーリング調整された値の絶対値と、次回のサイクルによるデータｘi+1の絶対値とを比較する。そして、最大値保持部３０１は、絶対値が最大であるデータｘi+1を更新しながら保持する。これにより、今回のデータｘ1+1の絶対値が前回のデータｘi+1より小さくなったとしても、最大値保持部３０１は、最大データＸＭを出力することができる。したがって、座標演算装置は、高精度のＸＭ（＝Ａｎ×ｒ）を出力することができる。
【００３１】
なお、上記の処理と並列に以下の判定をしてもよい。ＣＯＲＤＩＣ演算部３０２において、データｙiのシフタ１０３又は２０４の出力データの値が演算レンジ以下になれば、その時点でデータｘi+1の最大値は確定したと言える。したがって、この時点で確定フラグをセットし、演算を停止するようにしてもよい。これにより、回転演算の回数を減らすことができる。
【００３２】
（第２の実施形態）
図２（Ａ）は、本発明の第２の実施形態による座標演算装置の構成例を示す図である。座標演算装置は、最大値保持部４０１及びＣＯＲＤＩＣ演算部４０２を有する。以下、本実施形態が第１の実施形態と異なる点を説明する。ＣＯＲＤＩＣ演算部４０２は、再帰型ＣＯＲＤＩＣ演算部であり、複素平面上で複素データを回転させたり、２次元平面上で２次元座標データを回転させるために、ビットシフトと加減算の繰り返しのみで座標回転を実現することができる。
【００３３】
入力データｘ0及びｙ0は、ベクトルＶ０の座標データである。入力データｚ0は、ベクトルＶ０に対するベクトルＶ１の回転角である。ＣＯＲＤＩＣ演算部４０２は、データｘ0とｙ0とｚ0を入力し、複数サイクルのフィードバック処理を行い、データｘi+1とｙi+1とｚi+1を出力する。セレクタ１０１は、最初のサイクルでは、入力データｘ0を選択して出力し、次回以降のサイクルでは、加減算器１０４が出力するデータｘi+1を選択して出力する。レジスタ１０２は、セレクタ１０１の出力データを保持する。セレクタ１０５は、最初のサイクルでは、入力データｙ0を選択して出力し、次回以降のサイクルでは、加減算器１０８が出力するデータｙi+1を選択して出力する。レジスタ１０６は、セレクタ１０５の出力データを保持する。セレクタ１０９は、最初のサイクルでは、入力データｚ0を選択して出力し、次回以降のサイクルでは、加減算器１１２が出力するデータｚi+1を選択して出力する。レジスタ１１０は、セレクタ１０９の出力データを保持する。第ｉサイクルでは、レジスタ１０２はデータｘiを出力し、レジスタ１０６はデータｙiを出力し、レジスタ１１０はデータｚiを出力する。ｉは、０以上の整数である。
【００３４】
シフタ１０３は、第ｉサイクルでは、レジスタ１０６の出力データｙiに対してｉビット右シフトすることにより、レジスタ１０６の出力データｙiに対して２-iを乗算し、データｙi×２-iを出力する。シフタ１０７は、第ｉサイクルでは、レジスタ１０２の出力データｘiに対してｉビット右シフトすることにより、レジスタ１０２の出力データｘiに対して２-iを乗算し、データｘi×２-iを出力する。
【００３５】
加減算器１０４は、データｙiの正負符号ＳＮを参照し、データｙiが０未満である場合には、左回転として、データｘiからデータｙi×２-iを減算し、次式（１１）のデータｘi+1を出力する。
ｘi+1＝ｘi−ｙi×２-i  ・・・（１１）
【００３６】
これに対し、加減算器１０４は、データｙiの正負符号ＳＮを参照し、データｙiが０以上である場合には、右回転として、データｘiとデータｙi×２-iを加算し、次式（１２）のデータｘi+1を出力する。
ｘi+1＝ｘi＋ｙi×２-i  ・・・（１２）
【００３７】
また、加減算器１０８は、データｙiの正負符号ＳＮを参照し、データｙiが０未満である場合には、左回転として、データｙiとデータｘi×２-iを加算し、次式（１３）のデータｙi+1を出力する。
ｙi+1＝ｙi＋ｘi×２-i  ・・・（１３）
【００３８】
これに対し、加減算器１０４は、データｙiの正負符号ＳＮを参照し、データｙiが０以上である場合には、右回転として、データｙiからデータｘi×２-iを減算し、次式（１４）のデータｙi+1を出力する。
ｙi+1＝ｙi−ｘi×２-i  ・・・（１４）
【００３９】
ルックアップテーブル１１１は、回転角ｔａｎ-1（２-i）を記憶し、回転角ｔａｎ-1（２-i）を加減算器１１２に出力する。加減算器１１２は、データｙiの正負符号ＳＮを参照し、データｙiが０未満である場合には、左回転として、データｚiから回転角ｔａｎ-1（２-i）を減算し、次式（１５）のデータｚi+1を出力する。
ｚi+1＝ｚi−ｔａｎ-1（２-i）  ・・・（１５）
【００４０】
これに対し、加減算器１１２は、データｙiの正負符号ＳＮを参照し、データｙiが０以上である場合には、右回転として、データｚiと回転角ｔａｎ-1（２-i）を加算し、次式（１６）のデータｚi+1を出力する。
ｚi+1＝ｚi＋ｔａｎ-1（２-i）  ・・・（１６）
【００４１】
加減算器１０４は、出力データｘi+1をセレクタ１０１にフィードバックする。加減算器１０８は、出力データｙi+1をセレクタ１０５にフィードバックする。加減算器１１２は、出力データｚi+1をセレクタ１０９にフィードバックする。上記のフィードバック処理を繰り返すことにより、第ｎ−１サイクルで、データｘi+1とｙi+1とｚi+1は、それぞれ、次式（１７）〜（１９）のデータｘnとｙnとｚnに収束する。ここで、係数Ａｎは、次式（２０）で表される。Πは、直積を表す。
ｘn＝Ａｎ×√（ｘ02＋ｙ02）＝Ａｎ×ｒ  ・・・（１７）
ｙn＝０  ・・・（１８）
ｚn＝ｚ0＋ｔａｎ-1（ｙ0／ｘ0）＝ｚ0＋θ  ・・・（１９）
【００４２】
【数２】
2017134463.tif 000004
【００４３】
座標演算装置は、データｘnに１／Ａｎを乗算することにより、ベクトルＶ１の大きさｒを求めることができる。また、データｚn＝ｚ0＋θは、ベクトルＶ１の偏角である。以上より、座標演算装置は、ベクトルＶ０の直交座標（ｘ0，ｙ0）を入力し、ベクトルｖ０を回転角ｚ0だけ回転させたベクトルＶ１の極座標（ｒ，ｚ0＋θ）を出力することができる。なお、座標演算装置は、ベクトルＶ０の大きさｒのみを出力させたい場合には、セレクタ１０９、レジスタ１１０、ルックアップテーブル１１１及び加減算器１１２を削除することができる。
【００４４】
なお、図１（Ａ）のＣＯＲＤＩＣ演算部３０２は、再帰型ダブルローテーション型ＣＯＲＤＩＣ演算部である。図１（Ａ）のＣＯＲＤＩＣ演算部３０２の角度系列は、２×ｔａｎ-1（２-i）（ｉ＝０，１，２，３・・・）であり、図２（Ａ）のＣＯＲＤＩＣ演算部４０２の角度系列の２倍の関係にある。また、図１（Ａ）のＣＯＲＤＩＣ演算部３０２は、図２（Ａ）のＣＯＲＤＩＣ演算部４０２に対して、回転演算毎に生ずる演算誤差を補正するスケーリング調整が簡易である。
【００４５】
ＣＯＲＤＩＣ演算部４０２は、上記の複数サイクルの繰り返し演算を途中回数で止めることができない。そのため、この繰り返し演算の途中で極座標の大きさｒの絶対値が極めて精度の高い値になると、次のサイクルの演算では逆に精度が低下してしまうことがある。これにより、繰り返し演算終了後の演算結果の精度が、それ以前のサイクルの演算結果の精度よりも悪くなるということが起こり得る。そこで、本実施形態では、最大値保持部４０１を設けることにより、精度の高い極座標を得る。
【００４６】
最大値保持部４０１は、図１（Ａ）の最大値保持部３０１に対して、シフタ３０４及び加算器３０５の代わりに、カウンタ４０１、ルックアップテーブル４０２及び乗算器４０３を設けたものである。レジスタ３０３は、最大データＸＭを保持する。カウンタ４０１は、サイクル数（演算回数）ｉをカウントし、サイクル数ｉをルックアップテーブル４０２に出力する。ルックアップテーブル４０２は、サイクル数ｉに応じて、スケーリング調整のためのスケーリング係数Ａi+1を出力する。乗算器４０３は、スケーリング調整のための乗算器であり、レジスタ３０３の出力データ（保持データ）に対して、ルックアップテーブル４０２が出力するスケーリング係数Ａi+1を乗算することにより、サイクル数ｉに応じたスケーリング調整を施す。比較器３０６は、ＣＯＲＤＩＣ演算部４０２から出力されるデータｘi+1の絶対値と、乗算器４０３の出力データの絶対値とを比較し、その比較結果をセレクタ３０７に出力する。セレクタ３０７は、ＣＯＲＤＩＣ演算部４０２から出力されるデータｘi+1の絶対値が乗算器４０３の出力データの絶対値より大きい場合には、ＣＯＲＤＩＣ演算部４０２から出力されるデータｘi+1を最大データＸＭとして出力する。また、セレクタ３０７は、乗算器４０３の出力データの絶対値がＣＯＲＤＩＣ演算部４０２から出力されるデータｘi+1の絶対値より大きい場合には、乗算器４０３の出力データを最大データＸＭとして出力する。出力データＸＭは、次回の保持データとして、レジスタ３０３に保持される。上記の処理は、サイクル数繰り返される。
【００４７】
以上のように、最大値保持部４０１は、サイクル毎に、最大データＤＭをレジスタ３０３に保持し、保持された最大データＤＭがスケーリング調整された値の絶対値と、次回のサイクルによるデータｘi+1の絶対値とを比較する。そして、最大値保持部４０１は、絶対値が最大であるデータｘi+1を更新しながら保持する。これにより、今回のデータｘ1+1の絶対値が前回のデータｘi+1より小さくなったとしても、最大値保持部４０１は、最大データＸＭを出力することができる。したがって、座標演算装置は、高精度のＸＭ（＝Ａｎ×ｒ）を出力することができる。
【００４８】
図２（Ｂ）は、本実施形態による他の座標演算装置の構成例を示す図である。図２（Ｂ）の座標演算装置は、図２（Ａ）の座標演算装置に対して、ルックアップテーブル４０２の代わりに、ルックアップテーブル４２１を設けたものである。図２（Ａ）の最大値保持部４０１は、レジスタ３０３の出力データに対してスケーリング調整する。これに対し、図２（Ｂ）の最大値保持部４０１は、ＣＯＲＤＩＣ演算部４０２の出力データｘi+1に対してスケーリング調整する。以下、図２（Ｂ）が図２（Ａ）と異なる点を説明する。
【００４９】
最大値保持部４０１は、ＣＯＲＤＩＣ演算部４０２の出力データｘi+1をスケーリング調整した値の絶対値と、レジスタ３０３の出力データの絶対値とを比較し、大きい方を選択して保持する。レジスタ３０３は、最大データＸＭを保持する。カウンタ４０１は、サイクル数（演算回数）ｉをカウントし、サイクル数ｉをルックアップテーブル４２１に出力する。ルックアップテーブル４２１は、サイクル数ｉに応じて、スケーリング調整のためのスケーリング係数１／Ａi+1を出力する。乗算器４０３は、スケーリング調整のための乗算器であり、ＣＯＲＤＩＣ演算部４０２の出力データｘi+1に対して、ルックアップテーブル４２１が出力するスケーリング係数１／Ａi+1を乗算することにより、サイクル数ｉに応じたスケーリング調整を施す。比較器３０６は、レジスタ３０３の出力データの絶対値と、乗算器４０３の出力データの絶対値とを比較し、その比較結果をセレクタ３０７に出力する。セレクタ３０７は、レジスタ３０３の出力データの絶対値が乗算器４０３の出力データの絶対値より大きい場合には、レジスタ３０３の出力データを最大データＸＭとして出力する。また、セレクタ３０７は、乗算器４０３の出力データの絶対値がレジスタ３０３の出力データの絶対値より大きい場合には、乗算器４０３の出力データを最大データＸＭとして出力する。出力データＸＭは、次回の保持データとして、レジスタ３０３に保持される。上記の処理は、サイクル数繰り返される。
【００５０】
以上のように、最大値保持部３０１及び４０１は、それぞれ、ＣＯＲＤＩＣ演算部３０２及び４０２のシフト及び加減算後のデータと保持データとをスケーリング調整して比較し、大きい方のデータを次回の保持データとして上記の比較を繰り返す。ＣＯＲＤＩＣ演算部３０２，４０２及び最大値保持部３０１，４０１は、フィードバック処理により処理を複数回繰り返す。
【００５１】
（第３の実施形態）
図３は、本発明の第３の実施形態による座標演算装置の構成例を示す図である。以下、本実施形態が第１の実施形態と異なる点を説明する。座標演算装置は、最大値保持部５０１とＣＯＲＤＩＣ演算部５０２のｎ個の組みをｎ段直列に接続したパイプライン構成である。複数のＣＯＲＤＩＣ演算部５０２の各々は、図１（Ａ）のＣＯＲＤＩＣ演算部３０２に対して、セレクタ２０１，２０７，２１３及びレジスタ２０２，２０８，２１４の代わりに、レジスタ５１１〜５１３を設けたものである。
【００５２】
ｉ段目のＣＯＲＤＩＣ演算部５０２は、前段のＣＯＲＤＩＣ演算部５０２が出力するデータｘi、ｙi及びｚiを直接入力する。レジスタ５１１〜５１３は、それぞれ、加減算器２０６、２１２及び２１６の出力データを保持してデータｘi+1、ｙi+1及びｚi+1として次段のＣＯＲＤＩＣ演算部５０２に出力する。なお、初段のＣＯＲＤＩＣ演算部５０２は、データｘ0、ｙ0及びｚ0を入力する。
【００５３】
複数の最大値保持部５０１の各々は、図１（Ａ）の最大値保持部３０１に対して、レジスタ３０３の代わりにレジスタ５０２を設けたものである。ｉ段目の最大値保持部５０１では、比較器３０６及びセレクタ３０７は、加減算器２０６の出力データを入力する。シフタ３０４及び加算器３０５は、前段の最大値保持部５０１が出力する最大データＸＭiを入力する。レジスタ５０２は、セレクタ３０７の出力データを保持して最大データＸＭi+1として次段の最大値保持部５０１に出力する。
【００５４】
第１の実施形態では、ｎサイクルの演算をフィードバック処理する。これに対し、第３の実施形態では、ｎサイクルの演算をシーケンシャル処理する。例えば、１段目のＣＯＲＤＩＣ演算部５０１は第０サイクルの演算であり、２段目のＣＯＲＤＩＣ演算部５０１は第１サイクルの演算である。ｎ段目のＣＯＲＤＩＣ演算部５０１は、データｘn、ｙn及びｚnを出力する。また、ｎ段目の最大値保持部５０１は、ｎサイクルのうちの最大データＸＭnを出力する。最大データＸＭnは、絶対値が最大である高精度のデータＡｎ×ｒである。
【００５５】
以上のように、ｎ段のパイプラインを通過した最終段の最大値保持部５０１の出力データＸＭnは、最終段のＣＯＲＤＩＣ演算部５０２の出力データｘnに対して等しい又は大きい値である。すなわち、最大データＸＭnは、パイプライン演算の過程で最も精度の高いデータＡｎ×ｒである。座標演算装置は、最大データＸＭnに対して１／Ａｎを乗算することにより、ベクトルの大きさｒを得ることができる。ＣＯＲＤＩＣ演算部５０２及び最大値保持部５０１は、パイプライン処理により処理を複数回繰り返す。なお、本実施形態では、第１の実施形態の座標演算装置をパイプライン構成にした例を説明したが、第２の実施形態の座標演算装置をパイプライン構成にしてもよい。
【００５６】
（第４の実施形態）
図４（Ａ）〜（Ｃ）は、本発明の第４の実施形態による回転境界パラメータｋを説明するための図である。回転境界パラメータｋは、図４（Ａ）に示すように、数直線上の点で表わされ、ＣＯＲＤＩＣの各段の回転演算における回転区間と無回転区間の境界を表すものである。図４（Ａ）〜（Ｃ）における数直線は、ＣＯＲＤＩＣの回転演算において乗数となるｔａｎθ（＝２-n）で正規化してあり、座標データの傾き（ｙ座標値／ｘ座標値）をｔａｎθで正規化した値が数直線上の点として表される。
【００５７】
例えば、コントロール型ＣＯＲＤＩＣは、あるｔａｎθに対し、下記の（１）〜（３）の回転又は無回転を行う。
（１）            ｙ座標値／ｘ座標値≧ｔａｎθ  なら右回転
（２）  ｔａｎθ＞ｙ座標値／ｘ座標値＞−ｔａｎθ  なら無回転
（３）−ｔａｎθ≧ｙ座標値／ｘ座標値  なら左回転
この関係は、図４（Ａ）に示すｋ＝１の数直線にて表現することができるため、コントロール型ＣＯＲＤＩＣは、回転境界パラメータｋ＝１に対応することが分かる。
【００５８】
また、図２（Ａ）の基本型ＣＯＲＤＩＣ４０２は、下記の（１）及び（２）の回転を行い、無回転という分類はない。
（１）ｙ座標値／ｘ座標値≧０  なら右回転
（２）ｙ座標値／ｘ座標値＜０  なら左回転
この関係は、数直線で表現すると、０を境に、右半直線は右回転区間、左半直線は左回転区間となり、図４（Ａ）に示す回転境界パラメータｋ＝０に対応する。
【００５９】
以上説明したように、上記の２つのＣＯＲＤＩＣは、回転境界パラメータｋが１と０に対応しており、回転境界パラメータｋと言う概念は必要ない。また、回転境界パラメータｋを０＜ｋ＜１の範囲に設定するようなＣＯＲＤＩＣも存在していない。回転境界パラメータｋを０＜ｋ＜１の範囲に設定したＣＯＲＤＩＣを、以下では回転境界設定型ＣＯＲＤＩＣと呼ぶ。
【００６０】
ｋ＝０の基本型ＣＯＲＤＩＣ４０２は、無回転区間がないため、目標方向であるｘ軸に対し、偏角の絶対値が回転前より大きくなる場合でも回転しなければならならず、回転し過ぎることがしばしば発生する。一方、ｋ＝１のコントロール型ＣＯＲＤＩＣは、ｙ座標の符号が変わるような回転は許されず無回転と判定されるため、回転後にｘ軸をほんの僅かに超えるような場合でも、回転できず目標に近づくことができない。
【００６１】
本実施形態では、目標へ収束する特性が異なる複数のＣＯＲＤＩＣを利用するため、回転境界パラメータｋを０＜ｋ＜１の範囲で異なる値に設定した複数のＣＯＲＤＩＣを用いる。コントロール型ＣＯＲＤＩＣの構成例を図５に示す。そして、図５のコントロール型ＣＯＲＤＩＣを変形した回転境界設定型ＣＯＲＤＩＣの例を図６と図７に示す。これらのＣＯＲＤＩＣは、再帰型演算のＣＯＲＤＩＣである。
【００６２】
ＣＯＲＤＩＣ演算により座標回転を行う場合、各々の回転演算で生じるスケーリングを補正するために、入力段から出力段までの何処かで、スケーリング補正を行う必要がある。無回転／回転の多少にかかわらず、スケーリング補正で用いる補正係数を一定の値とするには、無回転の時にもスケーリング調整だけは行う必要があり、そのスケーリング調整は、回転演算によって生じるスケーリングと同一の値でなければならない。そのため、無回転時のスケーリング調整がビットシフトと加算のみで行える図１（Ａ）のダブルローテーション型ＣＯＲＤＩＣ３０２が好適である。
【００６３】
図５は、図１（Ａ）のダブルローテーション型ＣＯＲＤＩＣ３０２とコントロール型ＣＯＲＤＩＣを組合せたＣＯＲＤＩＣの構成例を示す図である。図５のＣＯＲＤＩＣは、ｘ座標とｙ座標を回転処理する座標回転ブロック２００と、回転した角度の累算値を算出する回転角算出ブロック２２０を有する。以下、図５のＣＯＲＤＩＣが図１（Ａ）のダブルローテーション型ＣＯＲＤＩＣ３０２と異なる点を説明する。
【００６４】
セレクタ２０１，２０７，２１３、レジスタ２０２，２０８，２１４、及びシフタ２０３，２０４，２０９，２１０は、図１（Ａ）のものと同じである。加算器２３６は、データｘiとシフタ２０３の出力データを加算する。減算器２３５は、データｘiからシフタ２０３の出力データを減算する。加減算器２３７は、データｙiの正負符号ＳＮを参照し、データｙiが０未満である場合には、減算器２３５の出力データとシフタ２０４の出力データを加算する。また、加減算器２３７は、データｙiの正負符号ＳＮを参照し、データｙiが０以上である場合には、減算器２３５の出力データからシフタ２０４の出力データを減算する。
【００６５】
加算器２４６は、データｙiとシフタ２１０の出力データを加算する。減算器２４５は、データｙiからシフタ２１０の出力データを減算する。加減算器２４７は、データｙiの正負符号ＳＮを参照し、データｙiが０未満である場合には、減算器２４５の出力データからシフタ２０９の出力データを減算する。また、加減算器２４７は、データｙiの正負符号ＳＮを参照し、データｙiが０以上である場合には、減算器２４５の出力データとシフタ２０９の出力データを加算する。
【００６６】
カウンタ２２５は、サイクル数ｉをカウントする。ルックアップテーブル２２６は、サイクル数ｉに応じた回転角を加減算器２２３に出力する。加減算器２２３は、データｙiの正負符号ＳＮを参照し、データｙiが０未満である場合には、データｚiからルックアップテーブル２２６が出力する回転角を減算する。また、加減算器２２３は、データｙiの正負符号ＳＮを参照し、データｙiが０以上である場合には、データｚiとルックアップテーブル２２６が出力する回転角を加算する。
【００６７】
一致検出器２３９は、データｙiの正負符号ＳＮと加減算器２４７の出力データの正負符号ＳＮ１とが一致する場合には一致信号を出力し、その両者が一致しない場合には不一致信号を出力する。一致信号出力の場合、セレクタ２３８は加減算器２３７の出力データをデータｘi+1として出力し、セレクタ２４８は加減算器２４７の出力データをデータｙi+1として出力し、セレクタ２２４は加減算器２２３の出力データをデータｚi+1として出力する。不一致信号が出力された場合、セレクタ２３８は加算器２３６の出力データをデータｘi+1として出力し、セレクタ２４８は加算器２４６の出力データをデータｙi+1として出力し、セレクタ２２４はデータｚiをデータｚi+1として出力する。データｘi+1は、セレクタ２０１にフィードバックされる。データｙi+1は、セレクタ２０７にフィードバックされる。データｚi+1は、セレクタ２１３にフィードバックされる。
【００６８】
以上のように、図５のＣＯＲＤＩＣは、座標回転演算と無回転時のスケーリング調整とを並列に演算し、回転前後のｙ座標値の正負符号の一致／不一致により、並列に演算した一方を選択する。一致検出器２３９は、回転前後のｙ座標値の正負符号の一致／不一致を検出する。一致検出器２３９の検出結果は、セレクタ２３８、２４８、２２４に出力される。一致検出器２３９が一致を検出した時は、通常の演算結果、すなわち、３つのセレクタ２３８、２４８、２２４は、回転演算した結果を選択する。回転演算したｘ座標値は加減算器２３７の出力データであり、回転演算したｙ座標値は加減算器２４７の出力データであり、累算した回転角は加減算器２２３の出力データである。
【００６９】
一方、正負符号が不一致の場合、３つのセレクタ２３８、２４８、２２４は、無回転のスケーリング調整を施したｘ座標値とｙ座標値と更新前の回転角を選択する。無回転のスケーリング調整を施したｘ座標値は加算器２３６の出力データであり、無回転のスケーリング調整を施したｙ座標値は加算器２４６の出力データであり、更新前の回転角はレジスタ２１４の出力データである。
【００７０】
次に、回転境界設定型ＣＯＲＤＩＣについて説明する。ある時点における回転角度が偏角の絶対値の２倍以上であると、回転しすぎてしまい、偏角の絶対値が回転前より大きくなるため、無回転とする。そうでない場合には、偏角の絶対値が前より小さくなるため、ｘ軸を超えて回転することを許す。そのような回転は、回転境界パラメータｋ＝１／２に設定すれば容易に実現できる。その無回転区間と回転区間を数直線で表現すると図４（Ｂ）のようになる。
【００７１】
回転前の偏角の絶対値に比べ回転角の方が大きいと、回転後にｘ軸を超えて、偏角の正負符号が反転する。回転角が回転前の偏角のちょうど２倍の大きさだと、偏角の絶対値は回転前と回転後で同じ大きさとなり、偏角の正負符号のみが反転することになる。そして、回転角が回転前の偏角の２倍を超える場合、すなわち、回転パラメータ（ｔａｎθ）が（ｙ座標値／ｘ座標値）×２より大きい場合、回転後の偏角の絶対値が前より大きくなる。そこで、回転パラメータの１／２の値が今の（ｙ座標値／ｘ座標値）より大きいかどうかを判定するために、回転パラメータの１／２で座標回転した時のｙ座標値の正負符号が変化するかどうかを判定する。
【００７２】
ｙ座標値の正負符号とｘ座標値の正負符号が異なる時、回転演算後のｙ座標値ｙ’は、次式（２１）の演算によって計算される。
ｙ’＝ｙ×（１−２-2i）＋ｘ×１／２i-1  ・・・（２１）
【００７３】
これと並行して、次式（２２）のｙ”を計算し、ｙ”の正負符号がｙの正負符号と同じままか、変化したかを調べる。ここで、ｋ＝１／２である。
ｙ”＝ｙ×（１−２-2i）＋ｋ×ｘ×１／２i-1  ・・・（２２）
ｙ”の正負符号が回転前のｙの正負符号と一致していれば、回転演算したｙ座標値ｙ’を選択し、一致していなければ、前述の無回転スケーリング調整を施した値を選択する。
【００７４】
図６は、本実施形態による回転境界パラメータｋ＝１／２の場合の回転境界設定型ＣＯＲＤＩＣの構成例を示す図である。この回転境界設定型ＣＯＲＤＩＣは、上記の判定を行い、回転演算を制御する。図６の回転境界設定型ＣＯＲＤＩＣは、図５のＣＯＲＤＩＣに対し、シフタ６０１及び加減算器６０２を追加したものである。以下、図６の回転境界設定型ＣＯＲＤＩＣが図５のＣＯＲＤＩＣと異なる点を説明する。
【００７５】
シフタ６０１は、回転境界パラメータｋ＝１／２を乗算するため、シフタ２０９の出力データを１ビット右シフトする。加減算器６０２は、回転パラメータの１／２で座標回転した時のｙ座標値の正負符号ＳＮ１を生成するための加減算器である。加減算器６０２は、データｙiの正負符号ＳＮを参照し、データｙiが０未満である場合には、減算器２４５の出力データからシフタ６０１の出力データを減算する。また、加減算器６０２は、データｙiの正負符号ＳＮを参照し、データｙiが０以上である場合には、減算器２４５の出力データとシフタ６０１の出力データを加算する。一致検出器２３９は、加減算器６０２の出力データの正負符号ＳＮ１と回転前のデータｙiの正負符号ＳＮとが一致する場合には一致信号を出力し、その両者が一致しない場合には不一致信号を出力する。これにより、ｘ軸に対する偏角の絶対値が単調減少するように、座標回転を行うことが可能になる。
【００７６】
コントロール型ＣＯＲＤＩＣでも、偏角の絶対値が単調減少するようになっているが、ｙ座標の正負符号が変化しない場合に限定されている。図６の回転境界設定型ＣＯＲＤＩＣでは、その限定がないため、その分だけ偏角の絶対値が減少し易くなる。また、回転演算後の（ｙ座標値／ｘ座標値）／ｔａｎθの値は、−１／２〜＋１／２の範囲に確実に収まり、コントロール型ＣＯＲＤＩＣの範囲−１〜＋１に対して半分に収まる。
【００７７】
図７は、本実施形態による回転境界パラメータｋ＝２／３の場合の回転境界設定型ＣＯＲＤＩＣの構成例を示す図である。この回転境界設定型ＣＯＲＤＩＣは、回転境界パラメータｋ＝２／３に設定した時の再帰型ＣＯＲＤＩＣである。図４（Ｃ）は、回転境界パラメータｋ＝２／３に設定した時の回転区間と無回転区間を示す図である。
【００７８】
図７の回転境界設定型ＣＯＲＤＩＣは、図６の回転境界設定型ＣＯＲＤＩＣに対して、シフタ６０１を削除し、乗算器７０１及び７０２を追加したものである。以下、図７の回転境界設定型ＣＯＲＤＩＣが図６の回転境界設定型ＣＯＲＤＩＣと異なる点を説明する。乗算器７０１は、シフタ２０９の出力データに２を乗算する。乗算器７０２は、減算器２４５の出力データに３を乗算する。加減算器６０２は、データｙiの正負符号ＳＮを参照し、データｙiが０未満である場合には、乗算器７０２の出力データから乗算器７０１の出力データを減算する。また、加減算器６０２は、データｙiの正負符号ＳＮを参照し、データｙiが０以上である場合には、乗算器７０２の出力データと乗算器７０１の出力データを加算する。一致検出器２３９は、加減算器６０２の出力データの正負符号ＳＮ１と回転前のデータｙiの正負符号ＳＮとが一致する場合には一致信号を出力し、その両者が一致しない場合には不一致信号を出力する。
【００７９】
ｘ座標値及びｙ座標値に回転演算パラメータｋ＝２／３を乗算する際、２を乗算する演算に比べ、１／３を乗算する演算はかなり大変である。そのため、正負符号ＳＮ及びＳＮ１の一致判定のために加減算する２つのデータを両方とも３倍する。すなわち、乗算器７０１はｘ座標値に２を乗算し、乗算器７０２はｙ座標値に３を乗算し、加減算器６０２はその両者の乗算結果を加減算し、一致検出器２３９が一致検出を行う。乗算器７０１及び７０２の実際の演算は、ビットシフトと加算のみで行うことができる。
【００８０】
図６及び図７の回転境界設定型ＣＯＲＤＩＣは、座標演算装置であり、直交座標データ（ｘ0，ｙ0）を入力し、直交座標データ（ｘ0，ｙ0）に対して回転演算又は無回転のスケーリング調整を複数回繰り返す。これにより、直交座標データ（ｘ0，ｙ0）で表現されるベクトルＶ０の大きさｒを示すデータｘnに収束させる。図６のシフタ６０１及び図７の乗算器７０１，７０２は、それぞれ、直交座標データのうちの他方のｙ軸のデータに対して、直交座標データのうちの一方のｘ軸のデータに０より大きくかつ１より小さい定数ｋを乗算する乗算器である。一致検出器２３９は、上記の乗算器により乗算されたデータに基づくデータの正負符号ＳＮ１と前回のデータの正負符号ＳＮが一致するか否かを検出する。シフタ２０３，２０４，２０９，２１０及び加減算器２３５，２３７，２４５，２４７は、回転演算部であり、上記の正負符号が一致している場合には回転演算の結果を次回のデータｘi+1，ｙi+1として出力する。シフタ２０３，２１３及び加算器２０６，２１６は、スケーリング調整部であり、上記の正負符号が一致していない場合にはスケーリング調整の結果を次回のデータｘi+1，ｙi+1として出力する。セレクタ２３８及び２４８は、上記の正負符号が一致する場合には回転演算部の回転演算の結果を選択して出力し、上記の正負符号が一致しない場合にはスケーリング調整部のスケーリング調整の結果を選択して出力する。
【００８１】
図４（Ａ）は回転境界パラメータｋが０及び１の場合を示し、図４（Ｂ）は回転境界パラメータｋが１／２の場合を示し、図４（Ｃ）は回転境界パラメータｋが２／３の場合を示す。図６は、回転境界パラメータｋが１／２の場合の回転境界設定型ＣＯＲＤＩＣを示す。図７は、回転境界パラメータｋが２／３の場合の回転境界設定型ＣＯＲＤＩＣを示す。
【００８２】
セレクタ２３８、２４８、２２４が回転演算結果を選択する比率、又は、無回転スケーリング調整結果を選択する比率は、回転境界パラメータｋによって大きく変わる。例えば、ｋ＝１／２の場合、セレクタ２３８、２４８、２２４が回転演算結果を選択する比率は１／２であり、ｋ＝２／３の場合、セレクタ２３８、２４８、２２４が回転演算結果を選択する比率は、おおよそ１／３であることをシミュレーションで確認している。回転演算結果を選択する比率が異なれば、当然、収束の特性も異なり、図６及び図７の回転境界設定型ＣＯＲＤＩＣは、同タイミングで目標に大きく近づく確率より、別のタイミングで目標に大きく近づく確率の方が各段に高いと言える。ベクタ演算モードでは、目標に近づくほど、ｘ座標データｘi+1がＡｎ×ｒに近づき、その絶対値が大きくなる性質がある。そのため、図６及び図７の回転境界設定型ＣＯＲＤＩＣの両者のｘ座標データｘi+1のうちの絶対値の大きい方が演算精度の高いｘ座標データｘi+1であると言える。そこで、次の第５の実施形態では、回転演算パラメータｋが異なる２つの回転境界設定型ＣＯＲＤＩＣを並列に動作させ、２つのｘ座標データｘi+1のうちの絶対値の大きい方を選択して出力する。
【００８３】
（第５の実施形態）
図８は、本発明の第５の実施形態による座標演算装置の構成例を示す図である。座標演算装置は、回転境界設定型ＣＯＲＤＩＣ８０１，８０２、比較器８０３及びセレクタ８０４を有する。回転境界設定型ＣＯＲＤＩＣ８０１は、回転境界パラメータｋが１／２の回転境界設定型ＣＯＲＤＩＣであり、図６の回転境界設定型ＣＯＲＤＩＣと同じ構成を有し、第ｉ−１サイクルでデータｘn、ｙn、ｚnを出力する。回転境界設定型ＣＯＲＤＩＣ８０２は、回転境界パラメータｋが２／３の回転境界設定型ＣＯＲＤＩＣであり、図７の回転境界設定型ＣＯＲＤＩＣと同じ構成を有し、第ｉ−１サイクルでデータｘn、ｙn、ｚnを出力する。比較器８０３は、複数の回転境界設定型ＣＯＲＤＩＣ８０１及び８０２の出力データｘnの絶対値のうちの最大値を検出し、その検出結果をセレクタ８０４に出力する。セレクタ８０４は、回転境界設定型ＣＯＲＤＩＣ８０１の出力データｘnの絶対値が最大値である場合には、回転境界設定型ＣＯＲＤＩＣ８０１の出力データｘnを選択して出力する。また、セレクタ８０４は、回転境界設定型ＣＯＲＤＩＣ８０２の出力データｘnの絶対値が最大値である場合には、回転境界設定型ＣＯＲＤＩＣ８０２の出力データｘnを選択して出力する。
【００８４】
座標演算装置は、セレクタ８０４の出力データｘnに１／Ａｎを乗算することにより、ベクトルの大きさｒを得ることができる。なお、実際の信号処理において、セレクタ８０４の出力データｘnは、信号電力として扱われることが多く、その信号電力に対して種々の演算を施すことがあるため、その演算と同時に、１／Ａｎを乗算するのがリソース上効率的である。
【００８５】
図８では、２つの回転境界設定型ＣＯＲＤＩＣ８０１及び８０２を並列に動作させているが、これに限定されない。３つ以上のＣＯＲＤＩＣを並列に動作させて、同じように、３つ以上のＣＯＲＤＩＣの出力データｘnの絶対値のうちの最大値を検出し、その最大値の出力データｘnを出力するようにしてもよい。３つ目のＣＯＲＤＩＣとしては、例えば、ｋ＝３／４の回転境界設定型ＣＯＲＤＩＣでもよいし、図２（Ａ）の基本型ＣＯＲＤＩＣ４０２であってもよい。
【００８６】
以上のように、複数のＣＯＲＤＩＣ８０１及び８０２は、方式が異なる複数のＣＯＲＤＩＣである。複数のＣＯＲＤＩＣ８０１及び８０２の各々は、第１の軸と第２の軸の直交座標データ（ｘ0，ｙ0）を入力し、直交座標データ（ｘ0，ｙ0）に対してシフト及び加減算を複数回繰り返す。これにより、直交座標データ（ｘ0，ｙ0）で表現されるベクトルＶ０の大きさｒを示すデータｘnに出力データｘi+1を収束させる。セレクタ８０４は、複数のＣＯＲＤＩＣ８０１及び８０２の出力データｘnのうちの絶対値が最大値である出力データを選択して出力する。
【００８７】
（第６の実施形態）
図９は、本発明の第６の実施形態による座標演算装置の構成例を示す図である。本実施形態（図９）の座標演算装置は、第５の実施形態（図８）の座標演算装置に対して、比較器８０３の代わりに、比較器９０１を設けたものである。以下、本実施形態が第５の実施形態と異なる点を説明する。回転境界設定型ＣＯＲＤＩＣ８０１及び８０２は、ベクタ演算モードでは、収束に近づくほど、ｙ座標データｙnは、絶対値が０に近づき、絶対値が小さくなる性質がある。よって、本実施形態では、回転境界設定型ＣＯＲＤＩＣ８０１及び８０２のうちのｙ座標データｙnの絶対値が小さい方のｘ座標データｘnを選択する。
【００８８】
比較器９０１は、複数の回転境界設定型ＣＯＲＤＩＣ８０１及び８０２が出力するｙ座標データｙnの絶対値のうちの最小値を検出し、その検出結果をセレクタ８０４に出力する。セレクタ８０４は、回転境界設定型ＣＯＲＤＩＣ８０１が出力するｙ座標データｙnの絶対値が最小値である場合には、回転境界設定型ＣＯＲＤＩＣ８０１が出力するｘ座標データｘnを選択して出力する。また、セレクタ８０４は、回転境界設定型ＣＯＲＤＩＣ８０２が出力するｙ座標データｙnの絶対値が最小値である場合には、回転境界設定型ＣＯＲＤＩＣ８０２が出力するｘ座標データｘnを選択して出力する。セレクタ８０４が選択したｘ座標データｘnは、回転境界設定型ＣＯＲＤＩＣ８０１及び８０２が出力するｘ座標データｘnのうちで絶対値が最大であるｘ座標データｘnである。
【００８９】
座標演算装置は、セレクタ８０４の出力データｘnに１／Ａｎを乗算することにより、ベクトルの大きさｒを得ることができる。また、図９では、２つの回転境界設定型ＣＯＲＤＩＣ８０１及び８０２を並列に動作させているが、これに限定されない。３つ以上のＣＯＲＤＩＣを並列に動作させて、同じように、３つ以上のＣＯＲＤＩＣの出力データｙnの絶対値のうちの最小値を検出し、その最小値に対応するＣＯＲＤＩＣの出力データｘnを出力するようにしてもよい。
【００９０】
複数のＣＯＲＤＩＣ８０１及び８０２の各々は、第１の軸と第２の軸の直交座標データ（ｘ0，ｙ0）を入力し、直交座標データ（ｘ0，ｙ0）に対してシフト及び加減算を複数回繰り返す。これにより、直交座標データ（ｘ0，ｙ0）で表現されるベクトルＶ０の大きさｒを示すデータｘnに第１の軸の出力データｘi+1を収束させ、第２の軸の出力データｙi+1を０に収束させる。セレクタ８０４は、複数のＣＯＲＤＩＣ８０１及び８０２の第２の軸の出力データｙnのうちの絶対値が最小値である第２の軸の出力データを出力したＣＯＲＤＩＣが出力した第１の軸の出力データｘnを選択して出力する。
【００９１】
（第７の実施形態）
図１０は、本発明の第７の実施形態による座標演算装置の構成例を示す図である。本実施形態（図１０）の座標演算装置は、第６の実施形態（図９）の座標演算装置に対して、最小値判定器１００１を追加したものである。以下、本実施形態が第６の実施形態と異なる点を説明する。本実施形態の座標演算装置は、ベクタ演算モードでは、収束に近づくほど、ｙ座標データｙnの絶対値が０に近づくが、このｙ座標データｙnの絶対値が、閾値以下になった時を検出する。その時、座標演算装置は、ｙ座標データｙnの絶対値が小さい方のＣＯＲＤＩＣ８０１又は８０２のｘ座標データｘnを最終的な出力として選択し、その後の回転演算を打ち切り、演算を高速化する。
【００９２】
最小値判定器１００１は、複数の回転境界設定型ＣＯＲＤＩＣ８０１及び８０２が出力するｙ座標データｙnの絶対値のうちの最小値が閾値以下であるか否かを判定し、その判定結果を出力する。最小値判定器７０１により、複数のｙ座標データｙnの絶対値のうちの最小値が閾値以下と判定された場合を説明する。この場合、座標演算装置は、この判定結果を利用して、回転境界設定型ＣＯＲＤＩＣ８０１及び８０２の回転演算を打ち切ることにより、演算の高速化を図ることができる。
【００９３】
なお、本実施形態と同様に、第５の実施形態（図８）の座標演算装置に対して、最小値判定器１００１を追加してもよい。また、座標演算装置は、セレクタ８０４の出力データｘnに１／Ａｎを乗算することにより、ベクトルの大きさｒを得ることができる。また、図１０では、２つの回転境界設定型ＣＯＲＤＩＣ８０１及び８０２を並列に動作させているが、３つ以上のＣＯＲＤＩＣを並列に動作させて、同じように、３つ以上のＣＯＲＤＩＣを並列に動作させてもよい。
【００９４】
以上のように、最小値判定器１００１は、複数のＣＯＲＤＩＣ８０１及び８０２の第２の軸の出力データｙnの絶対値のうちの最小値が閾値以下であるか否かの判定を行う。
【００９５】
（第８の実施形態）
図１１（Ａ）〜（Ｃ）は、本発明の第８の実施形態による回転境界パラメータｋを説明するための図であり、図４（Ａ）〜（Ｃ）と同様に、ＣＯＲＤＩＣの各段の回転演算における回転区間と無回転区間の境界を表す。図１１（Ａ）は回転境界パラメータｋが０及び１の場合を示し、図１１（Ｂ）は回転境界パラメータｋが１／２の場合を示し、図１１（Ｃ）は回転境界パラメータｋが３／４の場合を示す。以下、本実施形態が第４の実施形態と異なる点を説明する。
【００９６】
ダブルローテーション型ＣＯＲＤＩＣ３０２は、回転演算に比べて、スケーリング調整（無回転処理）の方が演算量が断然少ない。回転演算は、図６のＣＯＲＤＩＣにおいて、一致検出器２３９が一致信号を出力した場合に選択された信号を生成するための演算である。スケーリング調整（無回転処理）は、図６のＣＯＲＤＩＣにおいて、一致検出器２３９が不一致信号を出力した場合に選択された信号を生成するための演算である。図６のＣＯＲＤＩＣのように、回転境界パラメータｋ＝１／２の場合、スケーリング調整に対して回転演算が選択される比が比較的大きく、理論上、演算精度を最も向上させることができる。ただし、回転演算が選択される回数が多いので、図６のように、ハードウェア処理が適している。
【００９７】
これに対し、図１１（Ｃ）のように、回転境界パラメータｋ＝３／４の場合、回転演算に対してスケーリング調整が選択される比が比較的大きいので、処理時間を短くすることができ、ソフトウェア処理に適している。具体的には、ソフトウェア処理では、図１２に示すように、ステップＳ１２１１の回転演算とステップＳ１２１３のスケーリング調整のいずれか一方のみが選択的に行われる。ソフトウェア処理においては、演算量が少ない方が処理時間を短くできるため、回転演算を減らし、その分だけスケーリング調整を増やした方が、処理が高速になる。そして、高速化が重要な場合、精度が僅かに低下する程度なら回転演算を避けて、スケーリング調整で済ませた方が良い場合がある。そこで、本実施形態では、図１１（Ｃ）のように、回転境界パラメータｋを３／４に設定する。ｋ＝３／４の場合、サイクル数ｉに対する回転演算の回数の比は平均的に１／３になり、ｋ＝１／２の場合より減少することを、シミュレーションで確認している。回転境界パラメータｋが、２／３〜３／４近辺においては、上記の比はほぼ１／３に安定しているが、ｋ＝１まで大きくすると、上記の比は１／２に近い値に増加する。回転境界パラメータｋは、２／３〜３／４が好ましい。回転パラメータｋは、図６の乗算器６０１の係数に対応する。また、ｋ＝３／４の場合の収束残差である偏角の絶対値の大きさは、ｋ＝１／２の場合のものの３／４となり、精度的にも改善される。よって、図１２のステップＳ１２０９の無回転／回転を判定する処理はオーバーヘッドとなるが、それ以外の点では、ソフトウェアに適した処理と言える。
【００９８】
図１２は、本実施形態による座標演算装置（コンピュータ）がプログラムを実行する処理を示すフローチャートである。座標演算装置は、図６のｋ＝１／２のＣＯＲＤＩＣの処理を、ｋ＝３／４にし、ソフトウェア処理により実行する。この場合、図６の乗算器６０１は、ｋ＝３／４を乗算すればよい。ステップＳ１２０１では、座標演算装置は、サイクル数ｉに０を設定する。次に、ステップＳ１２０３では、座標演算装置は、サイクル数ｉがｎ未満であるか否かを判定し、ｉがｎ未満である場合にはステップＳ１２０５に処理を進め、ｉがｎ以上である場合にはステップＳ１２１５に処理を進める。ステップＳ１２０５では、座標演算装置は、上式（２２）と同様に、次式により、データｘ’を演算する。
ｘ’＝ｋ×ｘ×１／２i-1
＝（３／４）×ｘ×１／２i-1
【００９９】
この演算は、図６の乗算器６０１がシフタ２０９の出力データｘ×１／２i-1にｋ＝３／４を乗算し、その乗算結果を加減算器６０２に出力する処理に対応する。この処理をソフトウェア処理する場合、座標演算装置は、ｘをｉビット右シフトした値と、それをさらに１ビット右シフトした値を加算することにより、ｘ’＝（３／４）×ｘ×１／２i-1を得ることができる。
【０１００】
なお、減算器２４５は、データｙ×（１−２-2i）を出力する。加減算器６０２は、データｙiが０以上である場合には、減算器２４５の出力データと乗算器６０１の出力データを加算し、上式（２２）と同様に、次式のデータｙ”を出力する。
ｙ”＝ｙ×（１−２-2i）＋ｘ’
＝ｙ×（１−２-2i）＋ｋ×ｘ×１／２i-1
＝ｙ×（１−２-2i）＋（３／４）×ｘ×１／２i-1
【０１０１】
また、加減算器６０２は、データｙiが０未満である場合には、減算器２４５の出力データからシフタ６０１の出力データを減算し、次式のデータｙ”を出力する。
ｙ”＝ｙ×（１−２-2i）−（３／４）×ｘ×１／２i-1
【０１０２】
次に、ステップＳ１２０７では、座標演算装置は、サイクル数ｉをインクリメントする。次に、ステップＳ１２０９では、座標演算装置は、回転及び無回転のいずれかを判定する。座標演算装置は、一致検出器２３９の処理に対応し、データｙ”の正負符号ＳＮ１とデータｙiの正負符号ＳＮが一致する場合には、回転であると判定し、データｙ”の正負符号ＳＮ１とデータｙiの正負符号ＳＮが一致しない場合には、無回転であると判定する。座標演算装置は、回転である場合にはステップＳ１２１１に処理を進め、無回転である場合にはステップＳ１２１３に処理を進める。
【０１０３】
ステップＳ１２１１では、座標演算装置は、回転演算を行い、ステップＳ１２０３に処理を戻す。回転演算は、減算器２０５及び加減算器２０７等の処理に対応する。ステップＳ１２１３では、座標演算装置は、スケーリング調整を行い、ステップＳ１２０３に処理を戻す。スケーリング調整は、加算器２０６等の処理に対応する。ステップＳ１２１５では、座標演算装置は、スケーリング補正のため、データｘnに１／Ａｎを乗算することにより、ベクトルの大きさｒを得て、処理を終了する。
【０１０４】
以上のように、ステップＳ１２０９で正負符号が一致する場合には、回転演算部は、ステップＳ１２１１の回転演算を行い、スケーリング調整部は、ステップＳ１２１３のスケーリング調整を行わない。また、ステップＳ１２０９で正負符号が一致しない場合には、回転演算部は、ステップＳ１２１１の回転演算を行わず、スケーリング調整部は、ステップＳ１２１３のスケーリング調整を行う。
【０１０５】
（第９の実施形態）
第８の実施形態の課題は、図１２のステップＳ１２０９の判定のための処理がオーバーヘッドになることであるが、この課題を解決するための第９の実施形態を、以下に説明する。第８の実施形態では、無回転と判定した場合には、判定後にスケーリング調整を行うが、スケーリング調整の前後で、ｙ座標値／ｘ座標値の比が変わることはない。そこで、第９の実施形態では、無回転が続く間は判定のみを連続して行い、無回転が途絶え、回転演算が必要になったところで、無回転のスケーリング調整をまとめて行い、それにより判定処理時間を短縮する。
【０１０６】
既に述べたように、ｘ’＝（３／４）×ｘ×１／２i-1の演算は、ｘをｉビット右シフトした値と、それをさらに１ビット右シフトした値を加算して計算することができる。この計算には、１ビットシフト演算以外に加算演算と複数ビットシフト演算が必要になる。無回転の判定を連続して行うようにすれば、次回のデータｘ’は、図１３のステップＳ１３０３のように、前回のデータｘ’を１ビット右シフトするだけで生成でき、判定のための処理を大幅に簡略化できる。そして、図１３のステップＳ１３１１のように回転演算を１回だけ行った後に、ステップＳ１３１３のように、（連続判定回数−１）回のスケーリング調整を連続して行う。以上のように、第９の実施形態では、連続判定、連続スケーリング調整、回転演算１回のシーケンスを繰り返すことにより、所定段数のＣＯＲＤＩＣ演算を行う。
【０１０７】
図１３は、本発明の第９の実施形態による座標演算装置（コンピュータ）がプログラムを実行する処理を示すフローチャートである。以下、本実施形態が第８の実施形態と異なる点を説明する。ステップＳ１３０１では、座標演算装置は、サイクル数ｉに０を設定し、変数ｊに０を設定する。次に、ステップＳ１２０３では、座標演算装置は、サイクル数ｉがｎ未満であるか否かを判定し、ｉがｎ未満である場合にはステップＳ１２０５に処理を進め、ｉがｎ以上である場合にはステップＳ１２１５に処理を進める。ステップＳ１２０５では、図１２のステップＳ１２０５と同様に、ｘ’＝ｋ×ｘ×１／２i-1を演算する。次に、ステップＳ１２０７では、座標演算装置は、サイクル数ｉをインクリメントする。次に、ステップＳ１２０９では、図１２のステップＳ１２０９と同様に、座標演算装置は、回転及び無回転のいずれかを判定する。座標演算装置は、回転である場合にはステップＳ１２１１に処理を進め、無回転である場合にはステップＳ１３０３に処理を進める。ステップＳ１３０３では、座標演算装置は、前回のデータｘ’を１ビット右シフトし、次回のデータｘ’を得る。その後、座標演算装置は、ステップＳ１２０７に処理を戻す。
【０１０８】
ステップＳ１２１１では、座標演算装置は、回転演算を行う。次に、ステップＳ１３０５では、座標演算装置は、変数ｊをインクリメントする。次に、ステップＳ１３０７では、座標演算装置は、変数ｊがサイクル数ｉと同じであるか否かを判定し、両者が同じ場合にはステップＳ１２０３に処理を戻し、両者が異なる場合にはステップＳ１２１３に処理を進める。ステップＳ１２１３では、座標演算装置は、スケーリング調整を行い、ステップＳ１３０５に処理を戻す。ステップＳ１２１５では、座標演算装置は、スケーリング補正のため、データｘnに１／Ａｎを乗算することにより、ベクトルの大きさｒを得て、処理を終了する。
【０１０９】
以上のようにｋ＝４／３の場合、サイクル数ｉに対する回転演算の回数の比は、平均的に１／３である。確率的には、ステップ１２０９の判定を３回行う内の２回は、ステップＳ１３０３で１ビット右シフトし、その他の１回は、ステップＳ１２１１で回転演算を行い、その後に、回転演算無しの際に行うべきステップＳ１２１３のスケーリング調整をまとめて行う。もし、ステップＳ１２０９の判定を行う毎に常にステップＳ１２１１の回転演算を行う場合は、サイクル数ｉのインクリメントと変数ｊのインクリメントは同じように実行されるため、ステップＳ１２１３のスケーリング調整が実行されることはない。ステップＳ１３０３におけるｘ’の１ビット右シフトが実行される度に、変数ｊに対しサイクル数ｉが先行して増加するため、その回数だけ、ステップＳ１２１３のスケーリング調整を続けて行い、変数ｊをサイクル数ｉに追いつかせる。
【０１１０】
以上のように、ステップＳ１２０９で正負符号が一致しない場合には、その時点でスケーリング調整部のステップＳ１２１３のスケーリング調整を行わずに、正負符号が一致しない連続回数をカウントする。そして、ステップＳ１２０９で正負符号が一致した後に、スケーリング調整部は、ステップＳ１２１３のスケーリング調整を連続して上記のカウントされた連続回数行う。回転演算部は、ステップＳ１２０９で正負符号が一致した後に、ステップＳ１２１１の回転演算を行う。
【０１１１】
なお、ステップＳ１２１１の回転演算は、図１３に示すフローチャートの順序に限定されるものではなく、ステップＳ１３０７からステップＳ１２０３へ戻る時に、その途中で行ってもよい。すなわち、ステップＳ１２１１の回転演算は、ステップＳ１２１３のスケーリングの前に行ってもよいし、一連のスケーリング調整の後に行ってもよい。
【０１１２】
ところで、図１２及び図１３のフローチャートでは、回転境界パラメータｋ＝３／４であり、ｋ＝３／４の乗算は容易に処理できる。ただし、ｋ＝２／３の場合には、１／３の乗算は容易に処理できない。その場合、図７のＣＯＲＤＩＣと同様に、次のように処理を行う。ｘ座標データにはビットシフト後に、ｋの分子の２のみを乗算してｘ’を計算し、ｋの分母の３はｙ座標データに乗算してｙ’を計算する。そして、ｘ’をｙ’に加算した値の正負符号の変化を調べて、回転するか否かを判定する。このように演算しても、本実施形態で説明した高速化手法を適用できる。本実施形態によれば、ＣＯＲＤＩＣにより、直交座標を極座標に高速に変換することができる。
【０１１３】
（その他の実施形態）
本発明は、上述の実施形態の１以上の機能を実現するプログラムを、ネットワーク又は記憶媒体を介してシステム又は装置に供給し、そのシステム又は装置のコンピュータにおける１つ以上のプロセッサがプログラムを読み出し実行する処理でも実現可能である。また、１以上の機能を実現する回路（例えば、ＡＳＩＣ）によっても実現可能である。
【０１１４】
なお、上記実施形態は、何れも本発明を実施するにあたっての具体化の例を示したものに過ぎず、これらによって本発明の技術的範囲が限定的に解釈されてはならないものである。すなわち、本発明はその技術思想、又はその主要な特徴から逸脱することなく、様々な形で実施することができる。
【符号の説明】
【０１１５】
３０１  最大値保持部、３０２  ＣＯＲＤＩＣ演算部
【図１】
2017134463.tif 000005
【図２】
2017134463.tif 000006
【図３】
2017134463.tif 000007
【図４】
2017134463.tif 000008
【図５】
2017134463.tif 000009
【図６】
2017134463.tif 000010
【図７】
2017134463.tif 000011
【図８】
2017134463.tif 000012
【図９】
2017134463.tif 000013
【図１０】
2017134463.tif 000014
【図１１】
2017134463.tif 000015
【図１２】
2017134463.tif 000016
【図１３】
2017134463.tif 000017