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