(57)【要約】【課題】回路の大規模化を抑制しつつ、高精度の三角関数値の出力するための処理サイクルの実行を少なくする。【解決手段】所定の演算処理を繰り返し実行することで、三角関数を生成する。まず、今回の処理サイクルの第１の値と第２の値とに基づいて、予め設定された乗算値ｎを用いた乗算処理と、除算処理とを行い、第１の出力値と第２の出力値とを求める。つぎに、第２の出力値と第１の値とを、処理サイクル毎に交互に選択して出力する。今回の処理サイクルの第２の値は、次回の処理サイクルの第１の値とされ、今回の処理サイクルで出力された第１の出力値は、次回の処理サイクルの第２の値とされる。【選択図】図１
2008123350.tif 000002
【特許請求の範囲】
【請求項１】
所定の処理を繰り返し実行することによって、三角関数を生成する三角関数演算装置において、
繰り返し処理によって随時更新される第１の値を格納する第１の格納部と、
繰り返し処理によって随時更新される第２の値を格納する第２の格納部と、
前記第２の格納部に格納された前記第２の値を、予め設定された乗算値ｎ（ｎ＜１）で乗算する第１の乗算器と、
前記第１の乗算器で算出された値を、前記第１の格納部に格納された第１の値で減算することで、正弦関数を構成する第１の出力値を求める第１の減算器と、
前記第２の格納部に格納された前記第２の値を、前記予め設定された乗算値ｎの半分の値で乗算する第２の乗算器と、
前記第２の乗算器で算出された値を、前記第１の格納部に格納された前記第１の値で減算することで、余弦関数を構成する第２の出力値を求める第２の減算器と、
前記第２の減算器で算出された前記第２の出力値と、前記第１の格納部に格納された前記第１の値とを、処理サイクル毎に交互に出力するセレクタと、
前記第２の格納部に格納された今回の処理サイクルの前記第２の値を次回の処理サイクルの前記第１の値として前記第１の格納部に格納するとともに、前記第１の減算器で算出された今回の処理サイクルの前記第１の出力値を次回の処理サイクルの前記第２の値として前記第２の格納部に格納する制御部と
を有することを特徴とする三角関数演算装置。
【請求項２】
所定の処理を繰り返し実行することによって、三角関数を生成する三角関数演算装置において、
繰り返し処理によって随時更新される第１の値を格納する第１の格納部と、
繰り返し処理によって随時更新される第２の値を格納する第２の格納部と、
前記第２の格納部に格納された前記第２の値を、予め設定された乗算値ｎ（ｎ＜１）で乗算する第１の乗算器と、
前記第１の乗算器で算出された値を、前記第１の格納部に格納された第１の値で減算することで、正弦関数を構成する第１の出力値を求める第１の減算器と、
前記第２の格納部に格納された前記第２の値を、前記予め設定された乗算値ｎの半分の値で乗算する第２の乗算器と、
前記第１の減算器で算出された前記第１の出力値を、前記第２の乗算器で算出された値で減算することで、余弦関数を構成する第２の出力値を求める第２の減算器と、
前記第２の減算器で算出された前記第２の出力値と、前記第２の格納部に格納された前記第２の値とを、処理サイクル毎に交互に出力するセレクタと、
前記第２の格納部に格納された今回の処理サイクルの前記第２の値を次回の処理サイクルの前記第１の値として前記第１の格納部に格納するとともに、前記第１の減算器で算出された今回の処理サイクルの前記第１の出力値を次回の処理サイクルの前記第２の値として前記第２の格納部に格納する制御部と
を有することを特徴とする三角関数演算装置。
【請求項３】
前記第１の値は、前記正弦関数の起点に相当する値を初期値とし、
前記第２の値は、前記正弦関数の起点に基づいた位相および振幅に相当する値を初期値とすることを特徴とする請求項１または２に記載された三角関数演算装置。
【請求項４】
前記セレクタの出力側に設けられているとともに、前記セレクタによって出力された値を、処理サイクルに応じて符号を反転させて出力する符号反転器をさらに有することを特徴とする請求項１から３のいずれかに記載された三角関数演算装置。
【請求項５】
前記符号反転器は、前記セレクタの出力側に一つ設けられており、
前記セレクタは、入力された二つの値を、処理サイクル毎に交互に前記符号反転器に入力することを特徴とする請求項４に記載された三角関数演算装置。
【請求項６】
前記符号反転器は、前記セレクタの出力側に二つ設けられており、
前記セレクタは、入力された二つの値のそれぞれを、前回の処理サイクルで入力された一の符号判定器とは異なる他の符号判定器に入力されるように、処理サイクル毎に交互に前記二つの符号反転器に入力することを特徴とする請求項４に記載された三角関数演算装置。
【請求項７】
前記第１の乗算器および前記第２の乗算器の少なくとも一つが行う乗算は、ビットシフトであることを特徴とする請求項１から６のいずれかに記載された三角関数演算装置。
【請求項８】
繰り返し処理によって随時更新される第１の値および第２の値とを用いて、三角関数を生成する三角関数演算方法において、
前記第２の値を、予め設定された乗算値ｎ（ｎ＜１）で乗算する第１のステップと、
前記乗算値ｎの乗算によって算出された値を、前記第１の値で減算することで、正弦関数を構成する第１の出力値を求める第２のステップと、
前記第２の値を、前記予め設定された乗算値ｎの半分の値で乗算する第３のステップと、
前記半分の値の乗算によって算出された値を、前記第１の値で減算することで、余弦関数を構成する第２の出力値を求める第４のステップと、
前記第２の出力値と、前記第１の値とを、処理サイクル毎に交互に出力する第５のステップと、
今回の処理サイクルの前記第２の値を次回の処理サイクルの前記第１の値として設定するとともに、今回の処理サイクルの前記第１の出力値を次回の処理サイクルの前記第２の値として設定する第６のステップと
を有することを特徴とする三角関数演算方法。
【請求項９】
繰り返し処理によって随時更新される第１の値および第２の値とを用いて、三角関数を生成する三角関数演算方法において、
前記第２の値を、予め設定された乗算値ｎ（ｎ＜１）で乗算する第１のステップと、
前記乗算によって算出された値を、前記第１の値で減算することで、正弦関数を構成する第１の出力値を求める第２のステップと、
前記第２の値を、前記予め設定された乗算値ｎの半分の値で乗算する第３のステップと、
前記半分の値の乗算によって算出された前記第１の出力値を、前記第３のステップで算出された値で減算することで、余弦関数を構成する第２の出力値を求める第４のステップと、
前記第２の出力値と、前記第２の値とを、処理サイクル毎に交互に出力する第５のステップと、
今回の処理サイクルの前記第２の値を次回の処理サイクルの前記第１の値として設定するとともに、今回の処理サイクルの前記第１の出力値を次回の処理サイクルの前記第２の値として設定する第６のステップと
を有することを特徴とする三角関数演算方法。
【請求項１０】
前記第１の値は、前記正弦関数の起点に相当する値を初期値とし、
前記第２の値は、前記正弦関数の起点に基づいた位相および振幅に相当する値を初期値とすることを特徴とする請求項８または９に記載された三角関数演算方法。
【請求項１１】
請求項８から１０のいずれかに記載された三角関数演算方法をコンピュータに実行させるためのコンピュータ・プログラム。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、所定の処理を繰り返し実行することによって、三角関数を生成する三角関数演算処理に関する。
【背景技術】
【０００２】
ＦＭ復調、ＦＭ音源合成、音声圧縮における窓関数または周波数逆変換といったデジタル回路には、正弦波あるいは複素正弦波発生機構（いわゆる三角関数演算装置）が設けられている。例えば、周波数逆変換の実装においては、周波数や振幅の異なる波形（例えば、正弦波）を足し合わせる。波形の形成には、三角関数値が格納されたＲＯＭテーブル（ＲＯＭ）を用いた方式で実装されることが多い。例えば、特許文献１には、位相角毎に三角関数の値を予め求めておき、加法定理に則った演算過程によって所望の三角関数値を出力することで、使用するＲＯＭを少なく抑える三角関数演算装置が開示されている。
【０００３】
【特許文献１】特開２００５−３０１４７２号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
ところで、ＲＯＭを用いた三角関数演算装置は、回路の大規模化を招く要因となりやすい。漸化式に基づく巡回型の三角関数生成装置によって三角関数を出力すれば、回路の大規模化を抑制することはできる。その反面、複数の処理サイクルを実行しなければならないため、所望の三角関数値の出力に長時間を要する。特に、高精度の三角関数値の出力を望む場合、更なる処理サイクルの実行を要求する。
【０００５】
本発明は、かかる事情に鑑みてなされたものであり、その目的は、回路の大規模化を抑制しつつ、高精度の三角関数値の出力するための処理サイクルの実行を少なくすることを目的とする。
【課題を解決するための手段】
【０００６】
かかる課題を解決するために、第１および第２の発明は、所定の処理を繰り返し実行することによって、三角関数を生成する三角関数演算装置を提供する。第１の発明に係る演算装置は、第１の値を格納する第１の格納部と、第２の値を格納する第２の格納部と、第１および第２の乗算器と、第１および第２の減算器と、セレクタと、制御部とを有する。第１の値および第２の値は、繰り返し処理によって随時更新される。第１の乗算器は、第２の格納部に格納された第２の値を、予め設定された乗算値ｎ（ｎ＜１）で乗算する。第１の減算器は、第１の乗算器で算出された値を、第１の格納部に格納された第１の値で減算することで、正弦関数を構成する第１の出力値を求める。第２の乗算器は、第２の格納部に格納された第２の値を、予め設定された乗算値ｎの半分の値で乗算する。第２の減算器は、第２の乗算器で算出された値を、第１の格納部に格納された第１の値で減算することで、余弦関数を構成する第２の出力値を求める。セレクタは、第２の減算器で算出された第２の出力値と、第１の格納部に格納された第１の値とを、処理サイクル毎に交互に出力する。制御部は、第２の格納部に格納された今回の処理サイクルの第２の値を次回の処理サイクルの第１の値として第１の格納部に格納する。それとともに、制御部は、第１の減算器で算出された今回の処理サイクルの第１の出力値を次回の処理サイクルの第２の値として第２の格納部に格納する。
【０００７】
第２の発明に係る演算装置は、第１の値を格納する第１の格納部と、第２の値を格納する第２の格納部と、第１および第２の乗算器と、第１および第２の減算器と、セレクタと、制御部とを有する。第１および第２の値は、繰り返し処理によって随時更新される。第１の乗算器は、第２の格納部に格納された第２の値を、予め設定された乗算値ｎ（ｎ＜１）で乗算する。第１の減算器は、第１の乗算器で算出された値を、第１の格納部に格納された第１の値で減算することで、正弦関数を構成する第１の出力値を求める。第２の乗算器は、第２の格納部に格納された第２の値を、予め設定された乗算値ｎの半分の値で乗算する。第２の減算器は、第１の減算器で算出された第１の出力値を、第２の乗算器で算出された値で減算することで、余弦関数を構成する第２の出力値を求める。セレクタは、第２の減算器で算出された第２の出力値と、第２の格納部に格納された第２の値とを、処理サイクル毎に交互に出力する。制御部は、第２の格納部に格納された今回の処理サイクルの第２の値を、次回の処理サイクルの第１の値として第１の格納部に格納する。それとともに、制御部は、第１の減算器で算出された今回の処理サイクルの第１の出力値を次回の処理サイクルの第２の値として第２の格納部に格納する。
【０００８】
ここで、第１または第２の発明において、第１の値は、正弦関数の起点に相当する値を初期値とすることが好ましく、第２の値は、正弦関数の起点に基づいた位相および振幅に相当する値を初期値とすることが好ましい。
【０００９】
また、第１または第２の発明において、セレクタの出力側に設けられているとともに、セレクタによって出力された値を、処理サイクルに応じて符号を反転させて出力する符号反転器をさらに設けてもよい。この場合、符号反転器は、セレクタの出力側に一つ設けられており、セレクタは、入力された二つの値を、処理サイクル毎に交互に符号反転器に入力してもよい。また、符号反転器は、セレクタの出力側に二つ設けられており、セレクタは、入力された二つの値のそれぞれを、前回の処理サイクルで入力された一の符号判定器とは異なる他の符号判定器に入力されるように、処理サイクル毎に交互に二つの符号反転器に入力してもよい。
【００１０】
また、第１または第２の発明において、第１の乗算器および第２の乗算器の少なくとも一つが行う乗算は、ビットシフトであってもよい。
【００１１】
一方、第３および第４の発明は、繰り返し処理によって随時更新される第１の値および第２の値とを用いて、三角関数を生成する三角関数演算方法を提供する。第１の発明に係る演算方法は、第２の値を、予め設定された乗算値ｎ（ｎ＜１）で乗算する第１のステップと、乗算値ｎの乗算によって算出された値を、第１の値で減算することで、正弦関数を構成する第１の出力値を求める第２のステップと、第２の値を、予め設定された乗算値ｎの半分の値で乗算する第３のステップと、半分の値の乗算によって算出された値を、第１の値で減算することで、余弦関数を構成する第２の出力値を求める第４のステップと、第２の出力値と、第１の値とを、処理サイクル毎に交互に出力する第５のステップと、今回の処理サイクルの第２の値を、次回の処理サイクルの第１の値として設定するとともに、今回の処理サイクルの第１の出力値を次回の処理サイクルの第２の値として設定する第６のステップとを有する。
【００１２】
また、第４の発明に係る演算方法は、第２の値を、予め設定された乗算値ｎ（ｎ＜１）で乗算する第１のステップと、乗算によって算出された値を、第１の値で減算することで、正弦関数を構成する第１の出力値を求める第２のステップと、第２の値を、予め設定された乗算値ｎの半分の値で乗算する第３のステップと、半分の値の乗算によって算出された第１の出力値を、第３のステップで算出された値で減算することで、余弦関数を構成する第２の出力値を求める第４のステップと、第２の出力値と、第２の値とを、処理サイクル毎に交互に出力する第５のステップと、今回の処理サイクルの第２の値を、次回の処理サイクルの第１の値として設定するとともに、今回の処理サイクルの第１の出力値を次回の処理サイクルの第２の値として設定する第６のステップとを有する。
【００１３】
ここで、第３または第４の発明において、第１の値は、正弦関数の起点に相当する値を初期値とすることが好ましく、第２の値は、正弦関数の起点に基づいた位相および振幅に相当する値を初期値とすることが好ましい。
【００１４】
さらに、第５の発明は、上記第３または第４の発明に係る三角関数演算方法をコンピュータに実行させるためのコンピュータ・プログラムを提供する。
【発明の効果】
【００１５】
本発明では、離散調和振動子モデルが用いられる。第１の出力値、第１の値および第２の値は、乗算値ｎに応じて１処理サイクル毎に位相角がθ（≒９０°）だけ変化した正弦関数を構成する。第２の出力値は、乗算値ｎに応じて１処理サイクル毎に位相角がθだけ変化した余弦関数を構成する。これらの三角関数値（正弦関数値、余弦関数値）は、１処理サイクル毎に出力される。ここで、余弦定理に基づく変形を行うことで、第１の出力値、第１の値および第２の値は、２処理サイクル毎に位相がφ／２（＝１８０°−２θ）だけ変化した正弦関数（または余弦関数）を構成する。また、第２の値も、２処理サイクル毎に位相がφ／２（＝１８０°−２θ）だけ変化した正弦関数（または余弦関数）を構成する。そして、１処理サイクル毎にこれらの値を交互に出力すれば、１処理サイクル毎に位相がφ／４だけ変化した正弦関数（また余弦関数）が得られる。特に、１処理サイクル毎に位相角がθ（≒９０°）だけ変化した三角関数値を出力する場合と比較して、同精度の三角関数値を出力する場合には、三角関数値の生成・出力をより短時間で行うことができる。また、同じ処理サイクル数で行う場合には、三角関数値をより高精度で生成・出力することができる。
【発明を実施するための最良の形態】
【００１６】
（離散調和振動子モデル）
まず、本実施形態に係る三角関数演算装置の具体的な構成の説明に先立ち、必要な要素技術である離散調和振動子モデル（ＤＨＯＭ：Descrete Hermonic Oscillator Model）を説明する。調和振動子モデルとして二次元差分力学系である下式を用いる。
【数１】
2008123350.tif 000003
【００１７】
数式１の示す軌道は、漸化式である下式を用いて再帰的に計算される。
【数２】
2008123350.tif 000004
【００１８】
ａおよびｂが２の階乗（２ｋ，ｋ∈Ｚ）である場合、乗算（または除算）は、ビットシフトによって等価的に実現できる。つぎに、数式２によって正弦関数および余弦関数を計算するため、次の二つの条件（領域保存条件，発振条件）によってパラメータａおよびパラメータｂを決定する。
【００１９】
まず、一つ目の条件として、数式１の領域保存条件を考える。軌道の長時間発展を安定に数値計算するためには、数式１の線形作用素は領域保存である必要があるため、下式を満たす必要がある。
【数３】
2008123350.tif 000005
【００２０】
数式１が非保存（散逸）であると仮定した場合、軌道は発散または原点に収束する。
【００２１】
二つ目の条件として、数式１の発振条件を考える。数式１が振動的であるためには、数式１の線形作用素の固有値が複素共役となる必要がある。固有値λは、下式によって求められる。
【数４】
2008123350.tif 000006
【００２２】
数式４の特性方程式により、固有値λが複素共役となる条件、ａ２＋ｂ＜０が得られるので、少なくともｂ＜０でなければならない。数式３で求められた領域保存条件と併せれば、ｂ＝−１となり、−１＜ａ＝cosθ＜１となる。
【００２３】
以上により、数式２の漸化式は、下式のようになる。
【数５】
2008123350.tif 000007
【００２４】
このとき、数式１は、下式のようになる。
【数６】
2008123350.tif 000008
【００２５】
ここで、数式６の線形作用素の標準形から求められる一般解は、下式のようになる。
【数７】
2008123350.tif 000009
【００２６】
なお、θ≠２πｐ／ｑ（ｐ，ｑ∈Ｎ）である場合、二次元位相空間上の軌道｛（ｘn+1，ｘn）|n＝0,1,2,…｝は、下式の半径を持つ円周上に等角度間隔で配置される準周期軌道となる。
【数８】
2008123350.tif 000010
【００２７】
数式５を初期条件（ｘ0，ｘ1）＝（０，α）で反復することによって、正弦関数である下式のようになる。
【数９】
2008123350.tif 000011
【００２８】
特に、cosθ≒０の場合、sinθ≒１とすみなすことができ、下式のようになる。
【数１０】
2008123350.tif 000012
【００２９】
本発明では、このうち複素正弦波の発生機構に注目する。具体的には、数式９に対して加法定理を用いることで下式を得る。
【数１１】
2008123350.tif 000013
【００３０】
数式１１に、数式５の漸化式を代入（適用）することで、下式のようになる。
【数１２】
2008123350.tif 000014
【００３１】
これにより、正弦関数値および余弦関数値は、下式のようになり、これらの値が同時に生成される。
【数１３】
2008123350.tif 000015
【００３２】
数式１３による数列ｘｎおよびｙｎを考えると、以下のようになる。
【数１４】
2008123350.tif 000016
【００３３】
ここで、cosθ＜＜１と仮定し、θをφで置換すると、数式１４は、以下のようになる。
【数１５】
2008123350.tif 000017
【００３４】
上記の数列において、ｘｎおよびｙｎの符号を適切に入れ換え、交互にサンプリングすることで、回転角φ／４の正弦関数値および余弦関数値が一反復毎に得ることができる。具体的には、ｘ0，ｙ1，ｘ2，ｙ3，ｘ5・・・と、サンプリングしていくことで（ただし、ｎ＝４ｍまたはｎ＝４ｍ＋３の場合は、符号反転）、回転角φ／４の正弦関数値を得る。なお、ｙ0，ｘ1，ｙ2，ｘ3，ｙ5・・・と、サンプリングしていくことで（ただし、ｎ＝４ｍ＋２またはｎ＝４ｍ＋３の場合は、符号反転）、回転角φ／４の余弦関数値を得る。
【００３５】
したがって、cosθ＜＜１と仮定することで、数式１３から下式が導かれる。
【数１６】
2008123350.tif 000018
【００３６】
これにより、正弦関数値および余弦関数値は、下式のようになり、これらの値が同時に生成される。
【数１７】
2008123350.tif 000019
（第１の実施形態）
図１は、第１の実施形態にかかる三角関数演算装置の構成図である。この三角関数演算装置は、上述した離散調和振動子モデル（特に、数式１２）を実装したものであり、所定の処理を繰り返し実行することによって、三角関数を生成する。この演算装置は、格納部としてのレジスタ１，２と、乗算器３，４と、減算器５，６と、セレクタ７と、符号反転器８と、制御部９とで構成される。
【００３７】
レジスタ１は、今回の処理サイクルで用いられる、数式１２におけるｘn-1に相当する値ｘn-1を格納する。この初期値として、正弦関数の起点に相当する値ｘ0が与えられる。一方、レジスタ２は、今回の処理サイクルで用いられる、数式１２におけるｘnに相当する値ｘnを格納する。この値の初期値として、正弦関数の起点に基づいた位相および振幅に相当する値ｘ1が与えられる。
【００３８】
乗算器３は、レジスタ２に格納された値ｘnを、予め設定された乗算値で乗算する。乗算器３における演算は、数式１２の”２cosθ”の乗算に相当する。なお、本実施形態では、乗算器３として、所定のシフト量でビットシフト（右ビットシフト）を行うシフタを用いる（シフト量＝ｋ）ことで、通常の乗算と比べて、演算時間を短縮できる。
【００３９】
乗算器４は、レジスタ２に格納された値ｘnを、予め設定された乗算値で乗算する。乗算器４における演算は、数式１２の”cosθ”の乗算に相当する。このとき、乗算器４で用いられる乗算値は、乗算器３で用いられるそれの半分である。乗算器３と同様、乗算器４として、所定のシフト量でビットシフト（右ビットシフト）を行うシフタを用いる。この場合、そのシフト量は、乗算器３で用いられるシフト量ｋの半分である（シフト量＝ｋ／２）。
【００４０】
乗算器４は、乗算器３と同じ値（すなわち、値ｘn）を対象に乗算を行っているので、乗算器３が出力した値をさらに半分にする（または、１右ビットシフト）処理を行ってもよい。なぜなら、乗算器４から出力される値は結果的に変わらないからである。その場合、図１に示す対応関係おいて、レジスタ２から乗算器４への入力が削除され、乗算器３から乗算器４への入力が追加される。
【００４１】
減算器５は、乗算器３で算出された値（２cosθｘn）を、レジスタ１に格納された値にて減算する。減算器５における演算は、数式１２のｘn+1を求める式の”−（マイナス）”に相当する。この減算で、算出される出力値は、数式１２のｘn+1（正弦関数系列，sin系列）に相当する。一方、減算器６は、乗算器４で算出された値（cosθｘn）を、レジスタ１に格納された値で減算する。乗算器４における演算は、数式１２のｙnを求める式の”−（マイナス）”に相当する。この減算で、算出される出力値は、数式１２のｙn（余弦関数系列，cos系列）に相当する。
【００４２】
セレクタ７は、本実施形態において２入力１出力の回路構成を有し、減算器６で算出された出力値ｙnと、レジスタ１に格納された値ｘn-1とを、処理サイクル毎に交互に切り替えながら選択的に出力する。サイクル毎に交互に出力する理由は、数式１４または数式１５から明かなように、所望の三角関数値を適切に出力するためである。
【００４３】
符号反転器８は、セレクタ７の出力側に設けられているとともに、セレクタ７が出力（選択）した値を、処理サイクルに応じて符号を反転させて三角関数値Ｓn出力する。本実施形態において、符号反転器８は、セレクタ７の出力側に１つ設けられており、セレクタ７は、入力された二つの値を、処理サイクル毎に交互に選択して符号反転器８に入力する。処理サイクルに応じて符号を反転させる理由は、数式１６および数式１７から明らかなように、入力されるｙnまたはｘn-1を適切に出力するためである。
【００４４】
制御部９は、レジスタ１に初期値ｘ0、レジスタ２に初期値ｘ1をそれぞれ与える。また、制御部９は、レジスタ２に格納されていた今回の処理サイクルの値ｘnを、次回の処理サイクルの値Ｓｘn-1としてレジスタ１に格納する。さらに、制御部９は、減算器５で減算された今回の処理サイクルの出力値ｘn+1を、次回の処理サイクルの値ｘnとしてレジスタ１に格納する。
【００４５】
なお、制御部９は、２つの乗算器３，４、２つの減算器５，６、セレクタ７および符号反転器８）が連係して実行する処理の実行回数をループ変数ｎとして管理している。
【００４６】
図２は、図１に係る三角関数演算装置のフローチャートである。以下、このフローチャートを参照しつつ、三角関数演算装置の具体的な処理手順について説明する。なお、レジスタ２に格納された値ｘnをシフトするシフト量ｋは、乗算器３に予め設定されており、これに従い、後述の数式１８および数式１９に基づいて、近似基本周期Ｎが予め設定されているものとする。同図に示すケースは、三角関数値Ｓnを１周期分の正弦関数値として得るものである。
【００４７】
まず、ステップ１において、三角関数演算装置に初期値が設定される。具体的には、制御部９は、ループ変数ｎを０に設定するとともに、レジスタ１１に値ｘ0を格納し、レジスタ１２に値ｘ1を格納する。
【００４８】
つぎに、ステップ２において、ループ変数ｎに１が加算される。そして、ステップ３において、数式１２に基づいて、今回の処理サイクルにおける演算が実行される。具体的には、まず、乗算器３は、レジスタ２に格納された値ｘnを、予め設定されたシフト量ｋで右ビットシフトする。そして、減算器５は、シフタ１３がシフトした値（ｘn＞＞ｋ）を、レジスタ１に格納された値ｘn-1にて減算することで出力値ｘn+1を算出する。一方、乗算器４は、レジスタ２に格納された値ｘnを、予め設定されたシフト量ｋ／２で右ビットシフトする（または乗算器３がビットシフトした値をさらに１ビットで右ビット）。そして、減算器６は、シフタ１３がシフトした値（ｘn＞＞（ｋ／２））を、レジスタ１に格納された値ｘn-1で減算することで、出力値ｙnを算出する。これを演算式で表現すると下式のようになる。
【数１８】
2008123350.tif 000020
【００４９】
ステップ４において、今回の処理サイクルが予め設定された処理回数であるか否かの判定が行われ（選択条件）、これに応じて、セレクタ７が符号反転器８に入力する値を選択する。具体的には、制御部９は、ループ変数ｎが偶数であるか奇数であるか（２の倍数であるか否か）を判定する（または、セレクタ７がループ変数ｎを参照して判定する）。ｎが２の倍数（奇数）である（ｎ＝２ｍ＋１，ｍは自然数）場合、セレクタ７は、レジスタ１に格納された値ｘn-1）を選択して符号反転器８へ入力し（ステップ５）、処理をステップ７へ進める。一方、ｎが２の倍数（偶数）である（ｎ＝２ｍ，ｍは自然数）場合、セレクタ７は、減算器６から算出された値ｙn）を選択して符号反転器８へ入力し（ステップ６）、処理をステップ７へ進める。
【００５０】
ステップ７において、ステップ４と同様に、今回の処理サイクルが予め設定された処理回数であるか否かの判定が行われ（反転条件）、これに応じて、符号反転器８がセレクタ７から入力された値を符号反転する。具体的には、制御部９が、ループ変数ｎが４ｉ＋３、または４ｉ（ｉは自然数）であるか否かを判定する（または、符号反転器８がループ変数ｎを参照して判定する）。ｎがループ変数ｎが４ｉ＋３、または４ｉである場合、符号反転器８は、セレクタ７から入力された値に係る値を反転して（ステップ８）、符号反転器８から三角関数値Ｓnとして出力する（ステップ９）。一方、ｎがループ変数ｎが４ｉ＋３，４ｉのいずれでもない場合（４ｉ＋１、または４ｉ＋２である場合）、符号反転器８は、セレクタ７から入力された値に係る値を反転せず、そのまま符号反転器８から三角関数値Ｓnとして出力する（ステップ９）。
【００５１】
ステップ１０において、ステップ４，７と同様に、今回の演算処理が予め設定された処理回数であるか否かの判定（終了判定）が行われ、これに応じて、三角関数値の出力を終了する（終了条件）。具体的には、制御部９は、ループ変数ｎがシフト量ｋによって決定される処理回数Ｎより上回ったか否かを判定する。すなわち、今回（ｎ回目）の処理によって符号反転器８から出力される値がＮ個生成されたか否かが判定される。ｎがＮ以上の場合（ｎ≧Ｎ）、制御部９は、今回の処理をもって三角関数の演算を終了させる（ＥＮＤ）。一方、ｎがＮより小さい場合（ｎ≦Ｎ）、ステップ２に戻り、上述した処理が繰り返される。これによって、三角関数の演算を求める一連の処理（ステップ２〜９）は、ステップ１０の条件を満たすまで繰り返し行われ、１周期分の三角関数値（正弦関数値）が順次収集される。
【００５２】
つぎに、近似基本周期Ｎについて説明する。数式１２において、２cosθ（＝２−ｋ）は、最も低い周波数成分を定めるパラメータである。このとき、位相角θは下式のようになる。
【数１９】
2008123350.tif 000021
【００５３】
したがって、シフト量ｋ＝８の場合、位相角θ≒８９．８８８０８２６°となり、正弦関数値が約８９．８８８０２６°の間隔で出力される。このとき、９０°（π／２）との差は、約０．１１１９１７４°（＝φ／４）である。したがって、１周期（３６０°）分の正弦関数を得るべく、必要な処理回数（近似基本周期）Ｎは下式で求められる。シフト量ｋ＝８の場合、近似基本周期Ｎ≒３２１６となり、初期値ｘn-1，ｘnに基づいて、この処理回数（Ｎ＝３２１６）を反復して繰り返すことで、正弦関数値が形成される。
【数２０】
2008123350.tif 000022
【００５４】
これにより、この三角関数演算装置（符号反転器８から）から出力される三角関数値Ｓnを集合させると、下式のような正弦関数となる。
【数２１】
2008123350.tif 000023
【００５５】
本実施形態の構成は、上述した離散調和振動子モデルを実現したものであり、２つの三角関数値（正弦関数値、余弦関数値）を１処理サイクル毎に同時に出力する。これにより、三角関数の算出は２系統で行われる（数式１２参照）。ここで、余弦定理に基づく変形を行うことで、２処理サイクル毎に位相がφ／２（＝１８０°−２θ）だけ変化した正弦関数（または余弦関数）を構成する値が得られる。それと同時に、２処理サイクル毎に位相がφ／２（＝１８０°−２θ）だけ変化した正弦関数（または余弦関数）を構成する値が得られる（数式１５参照）。そして、セレクタ７にて、１処理サイクル毎にこれらの値が交互に選択することによって、１処理サイクル毎に位相がφ／４だけ変化した正弦関数（また余弦関数）が得られる。ＲＯＭテーブルを必要としない巡回型の処理を行うことで、三角関数を生成できる。
【００５６】
ここで、比較例として、図１の三角関数演算装置において、乗算器４と、減算器６と、セレクタ７とを設けずに、レジスタ１に格納された第１の値ｘn-1（または、レジスタ２に格納された第２の値ｘn）を出力して三角関数値を得るケース、つまり三角関数の算出を１系統で行う場合を考える。この場合、上述したとおり、連続する演算処理によって移行する位相角は約９０°なので、演算処理を繰り返す毎に、隣り合った値ｘnをプロットした場合、（３６０°／９０°）４本の三角関数が発生する。したがって、同一の三角関数系列を構成する三角関数値（正弦関数値または余弦関数値）を生成するためには、ｘnを少なくとも４反復毎に抽出する必要がある。抽出される値ｘnは、３２１６／４＝８０４個となるため、ここで抽出される三角関数値Ｓnを集合させると、下式のような正弦関数になる。このケースの場合、複数の処理サイクルを行うことで、同一の三角関数系列を構成する三角関数値が１つ出力される。
【数２２】
2008123350.tif 000024
【００５７】
上述した比較例との対比において、本実施形態では、三角関数値の算出を２系統で行い、かつ、これらによって算出された値が適切に出力される。その結果、１処理サイクルで、同一の三角関数系列を構成する三角関数値が１つ出力される。これにより、比較例と同精度の三角関数値を出力する場合には、三角関数値の生成・出力をより短時間で行うことができる。また、比較例と同じ処理サイクル数でを行う場合には、三角関数値をより高精度で生成・出力できる。
【００５８】
また、本実施形態によれば、ＲＯＭテーブルを用いる必要がないので、回路規模の小型化を図れる。また、数式１２の乗算である２cosθｘnおよび、cosθｘnを、右ビットシフトに置換することで複雑な乗算・除算処理を必要とせず、更なる回路規模の小型化および演算処理時間の短縮を図れる。なお、両乗算器３，４によるビットシフトによって値ｘnの下位ビットは破棄され、生成される三角関数値にいくらか誤差が生じるので、本実施形態の三角関数演算装置は、聴覚上誤差が許容される音声圧縮などに応用されることが好ましい。
【００５９】
また、本実施形態では、１周期分の三角関数値を得るために近似基本周期Ｎまで処理を繰り返し行っているが、本発明はこれに限定されるものではなく、任意の処理回数まで繰り返し行ってもよい。例えば、半周期（Ｎ／２）または４半周期（Ｎ／４）で処理サイクルを中止し、それまで生成された三角関数値を反転またはコピーするといった如くである。これにより、三角関数の直交性を確保しつつ、他の実質的な振動数を抑えて、計算精度を向上できる。
【００６０】
また、本実施形態の三角関数演算装置は、正弦関数を出力したが、セレクタ７による選択を変更する（逆にする）ことで余弦関数を出力できる。なぜなら、減算器６またはレジスタ１が連続して出力（格納）する値は、それぞれ約９０°（＝８９．９９・・・°）に位相が移行されており、sin(π/2+t)=cos(t)が成立するからである。このとき、選択条件（ステップ４）において、ｎ＝２ｍ＋１である場合、ｙnが選択され（ステップ６）、ｎ＝２ｍ＋１でない場合、ｘn-1が選択される（ステップ５）ように変更する。そして、反転条件（ステップ７）において、ｎ＝４ｉ＋２またはｎ＝４ｉ＋３である場合に符号反転が行われる（ステップ８）ように変更する。これにより、余弦関数を構成する余弦関数値が符号反転器８から出力される。
【００６１】
なお、本実施形態を整数精度で実装する場合、減算器５，６から出力される値ｘn+1，値ｙn値も小さくなるため、初期値ｘn-1，ｘnの倍率が大きいほうが、より計算精度を高くすることができる。
【００６２】
（第２の実施形態）
図３は、第２の実施形態にかかる三角関数演算装置の構成図である。この三角関数演算装置は、上述した離散調和振動子モデル（特に、数式１１）を実装したものである。本実施形態では、第１の実施形態（図１）を構成するユニット１〜９と同様のものを用いるが、一部のユニット（減算器６，セレクタ７）について、その入出力関係が異なっている。
【００６３】
具体的には、減算器６は、減算器５で算出された第１の出力値ｘn+1を、乗算器４で算出された値で減算して出力値を求める。また、セレクタ７は、減算器６で算出された出力値ｙnと、レジスタ２に格納された値ｘnとを、処理サイクル毎に交互に出力する。第１の実施形態では、レジスタ１に格納された第１の値ｘn-1が出力候補としてセレクタ７に入力されるのに対し、本実施形態では、レジスタ２に格納された値ｘnが出力候補としてセレクタ７に入力される点が相違している。それ以外のユニットについては、第１の実施形態と同様なので、ここでの説明を省略する。
【００６４】
このような構成上の相違に起因して、本実施形態の処理手順は、図２に示したステップ３の処理が変更されるが、これ以外については同様である。ステップ３において、数式１１に基づいた今回の演算処理が実行される。まず、乗算器３，４のそれぞれは、レジスタ２に格納された値ｘnを、予め設定されたシフト量ｋおよびｋ／２で右ビットシフトする。つぎに、減算器５は、乗算器３でシフトされた値を値ｘn-1で減算し、出力値ｘn+1を出力する。そして、減算器６は、出力値ｘn+1を乗算器４でシフトされた値で減算し、第２の出力値ｙnを出力する。なお、ステップ４において、ｎが２の倍数でない場合（ｎ＝２ｍ＋１，ｍは自然数）、セレクタ７は、レジスタ１に格納された値ｘn-1）を選択して符号反転器８へ入力する（ステップ５）。
【００６５】
本実施形態によれば、第１の実施形態と同様に、三角関数値を算出する演算処理を２系統有し、かつ、これらの処理によって算出された値を適切に出力するので、第１の実施形態と同様の効果を奏する。
【００６６】
（第３の実施形態）
第１および第２の実施形態では、セレクタ７によって処理サイクル数に応じた正弦関数系統（乗算器３，減算器５）および余弦関数系統（乗算器４，減算器６）の処理から出力された値を選択を行い、選択された値を符号反転器８によって処理サイクル数に応じた符号反転を行うことで、所望の三角関数値（正弦関数値または余弦関数値）を出力する。そのため、セレクタ７によって選択されなかった値は、符号反転器８から三角関数値として出力されることはない。しかしながら、数式１５から明らかなように、選択されなかった値であっても、これを適切に反転を行い出力すれば、正弦関数値および余弦関数値を両方出力できる。
【００６７】
図４は、第３の実施形態にかかる三角関数演算装置の構成図である。この三角関数演算装置は、第１の実施形態と同様に、上述した数式１２を実装したものである。図示したユニットの一部は、図１に示したものと入出力関係が異なっている。
【００６８】
主な相違点は、セレクタ７が２入力２出力の回路構成を有し、これに応じて２つの符号反転器８ａ，８ｂが設けられている点であり、それ以外は、第１の実施形態と同様である。セレクタ７の一方の入力は減算器６に接続され、もう一方の入力はレジスタ１に接続されている。セレクタ７は、入力された二つの値のそれぞれを、前回の処理サイクルで入力された一の符号判定器（例えば８ａ）とは異なる他の符号判定器（例えば８ｂ）に入力されるように、処理サイクル毎に交互に選択して二つの符号反転器８ａ，８ｂに入力する。符号反転器８ａ，８ｂは、セレクタ７の出力側に二つ設けられており、それぞれ異なる所定の処理回数につき、入力された値の符号を反転した上で三角関数値Ｓan，Ｓbnを出力する。
【００６９】
このような構成上の相違に起因して、本実施形態の処理手順は、図２に示したステップ４〜８が変更されるが、これ以外の処理については同様である。以下、符号反転器８ａが出力する三角関数値Ｓanを正弦関数値とし、符号反転器８ｂが出力する三角関数値Ｓbnを余弦関数値とする場合を考える。
【００７０】
ステップ４において、ｎが２の倍数でない場合（ｎ＝２ｍ＋１，ｍは自然数）、セレクタ７は、減算器６から入力された値を符号反転器８ａに入力し、レジスタ１に格納された値ｘn-1を符号反転器８ｂに入力する（ステップ５）。一方、ｎが２の倍数である場合（ｎ＝２ｍ，ｍは自然数）、セレクタ７は、減算器６から入力された値を符号反転器８ｂに入力し、レジスタ１に格納された値ｘn-1を符号反転器８ａに入力する（ステップ６）。
【００７１】
ステップ７においてループ変数ｎが判定され、各符号反転器８ａ，８ｂは、それぞれ独立して入力された値の符号反転を行う（ステップ８）。符号反転器８ａは、ループ変数ｎが４ｉ＋３、または４ｉである場合、セレクタ７から入力された値を反転して（ステップ８）、符号反転器８から出力する（ステップ９）。一方、ループ変数ｎがこれらに該当しない場合（４ｉ＋１、または４ｉ＋２である場合）、セレクタ７から入力された値を反転せず、そのまま符号反転器８ａから出力する（ステップ９）。符号反転器８ｂは、ループ変数が４ｉ＋２または４ｉ＋３である場合、セレクタ７から入力された値を反転して（ステップ８）、符号反転器８から出力する（ステップ９）。一方、ｎがループ変数ｎがこれらに該当しない場合（４ｉ、または４ｉ＋１である場合）、セレクタ７から入力された値を反転せず、そのまま符号反転器８ｂから出力する（ステップ９）。
【００７２】
本実施形態によれば、第１および第２の実施形態と同様の効果を奏する他、２系統の演算処理によって生成された三角関数値（ｘn-1，ｙn）をそのまま出力値とすることができるので、正弦関数値および余弦関数値をより効率的に出力できる。
【００７３】
（第４の実施形態）
図５は、第４の実施形態にかかる三角関数演算装置の構成図である。この三角関数演算装置は、第３の実施形態の三角関数演算装置に、上述した数式１１を実装したものである。したがって、本実施形態の三角関数演算装置は、第３の実施形態（図４）を構成するユニット１〜９と同様のものを用いるが、一部のユニット（第２の減算器６，セレクタ７）について、その入出力関係が若干異なる。
【００７４】
このような構成上の相違に起因して、本実施形態の処理手順は、図２に示したステップ４〜８が変更されているが、これ以外の処理については同様である。以下、符号反転器８ａが出力する三角関数値Ｓanを正弦関数値とし、符号反転器８ｂが出力する三角関数値Ｓbnを余弦関数値とする場合を考える。
【００７５】
ステップ４においてループ変数ｎが判定され、ｎが２の倍数でない場合（ｎ＝２ｍ＋１，ｍは自然数）、セレクタ７は、減算器６から入力された値を符号反転器８ａに入力し、レジスタ２に格納された値ｘnを符号反転器８ｂに入力する（ステップ５）。一方、ｎが２の倍数である場合（ｎ＝２ｍ，ｍは自然数）、セレクタ７は、減算器６から入力された値を符号反転器８ｂに入力し、レジスタ２に格納された値ｘnを符号反転器８ａに入力する（ステップ６）。
【００７６】
ステップ７においてもループ変数ｎが判定され、各符号反転器８ａ，８ｂは、それぞれ独立して入力された値の符号反転を行う（ステップ８）。符号反転器８ａは、ループ変数ｎが４ｉ＋３、または４ｉである場合、セレクタ７から入力された値に係る値を反転して（ステップ８）、符号反転器８から出力する（ステップ９）。一方、ループ変数ｎがこれらに該当しない場合（４ｉ＋１、または４ｉ＋２である場合）、セレクタ７から入力された値に係る値を反転せず、そのまま符号反転器８ａから出力する（ステップ９）。符号反転器８ｂは、ループ変数が４ｉ＋２または４ｉ＋３である場合、セレクタ７から入力された値に係る値を反転して（ステップ８）、符号反転器８から出力する（ステップ９）。一方、ｎがループ変数ｎがこれらに該当しない場合（４ｉ、または４ｉ＋１である場合）、セレクタ７から入力された値に係る値を反転せず、そのまま符号反転器８ｂから出力する（ステップ９）。
【００７７】
本実施形態によれば、第３の実施形態と同様に、２系統の演算処理によって出力された三角関数値（ｘn-1，ｙn）をそのまま出力できるので、正弦関数値および余弦関数値を効率的に出力できる。
【００７８】
なお、上述した各実施形態では、三角関数演算装置の構成および動作を中心に説明したが、このような機能をコンピュータに実行させるコンピュータ・プログラムも本発明の別の形態を構成する。
【図面の簡単な説明】
【００７９】
【図１】第１の実施形態にかかる三角関数演算装置の構成図
【図２】第１の実施形態にかかる三角関数演算装置のフローチャート
【図３】第２の実施形態にかかる三角関数演算装置の構成図
【図４】第３の実施形態にかかる三角関数演算装置の構成図
【図５】第４の実施形態にかかる三角関数演算装置の構成図
【符号の説明】
【００８０】
１，２  レジスタ
３，４  乗算器
５，６  減算器
７  セレクタ
８，８ａ，８ｂ  符号反転器
９  制御部
【図１】
2008123350.tif 000025
【図２】
2008123350.tif 000026
【図３】
2008123350.tif 000027
【図４】
2008123350.tif 000028
【図５】
2008123350.tif 000029