(57)【要約】【課題】三角関数値の算出において、誤差を低減し、かつ演算に使用するメモリ領域を少なく抑える事。【解決手段】本発明の三角関数算出装置は、初期値決定ステップ１０、初項決定ステップ１１、コア演算ステップ１２、演算回数制御ステップ１３、単純増加ステップ１４、組数制御ステップ１５、演算回数初期化ステップ１６を備え、基準となる位相増分値ＮΔ毎に加法定理に則った演算を前記コア演算ステップにて初期位相角の異なるＮ組に分けて実行することにより、１組あたりの演算回数が少なくて済むので演算回数に応じて増加する蓄積誤差を低減する事ができる。さらに、基準となる位相増分値ＮΔの三角関数値と、Ｎ個の初期位相角の三角関数値のみをメモリに保持すれば良いので、メモリ使用量を少なく抑える事ができる。【選択図】図１
2005301472.tif 000002
【特許請求の範囲】
【請求項１】
位相角Δ毎に三角関数の値を算出する三角関数算出装置であって、位相角ＮΔ毎に加法定理に則った演算過程によって三角関数値を出力するコア演算手段と、前記コア演算手段をＮ回実行するように制御する制御手段とを備えた事を特徴とする三角関数算出装置。
【請求項２】
初期値設定手段をさらに備え、前記コア演算手段の第Ｎ回目の実行時の初期値を、初期位相角（ｎ−１）Δに応じた三角関数値になるように設定する事を特徴とする請求項１記載の三角関数算出装置。
【請求項３】
位相角Δ毎に三角関数の値を算出する三角関数算出装置であって、位相角ＮΔ毎に加法定理に則った演算過程によって三角関数値を出力するＮ個のコア演算手段と、前記コア演算手段の少なくとも２個以上並列で動作するように制御する制御手段とを備えた事を特徴とする三角関数算出装置。
【請求項４】
初期値設定手段をさらに備え、前記ｎ個目のコア演算手段の初期値を、初期位相角（ｎ−１）Δに応じた三角関数値になるように設定する事を特徴とする請求項３記載の三角関数算出装置。
【請求項５】
前記ｎ個のコア演算手段を同時に動作させる事を特徴とする請求項３または４記載の三角関数算出装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、デジタル信号処理分野において位相角Δ毎に三角関数の値を算出する三角関数算出装置に関するものであり、特に音声符号化、復号化などにおける三角関数を用いた信号処理において、演算誤差を低減し、使用するメモリ領域を削減するものである。
【背景技術】
【０００２】
従来、位相角Δ毎に三角関数の値を得るための技術として、予め当該三角関数値をデータテーブルに格納しておき、逐次読み出すという方法が一般的である（例えば、特許文献１参照）。図２にその一例を示した。図２では、位相角π/64毎の三角関数値cos（i*π/64）がｉをアドレスとして予め格納されており、当該三角関数値を用いる演算装置は、ｉをアドレスとして、当該テーブルを引く事によって、所望のデータが得られる。
【０００３】
一方、多量のメモリ領域を用いずに三角関数値を逐次求める方法も従来から行われている。図３はその方法を示すブロック図であり、初期値設定手段３０とコア演算手段３１を備えている。実線の矢印はデータの流れを示している。図４はその動作を示すフローチャートであり、ここではＬ個の正弦値とＬ個の余弦値とを求める動作を示す。図４において、４０は各パラメータの初期値を決定する初期値決定ステップ、４１は出力する三角関数値の初項を決定する初項決定ステップ、４２は加法定理に則った演算により逐次三角関数値を算出するコア演算ステップ、４３は前記コア演算ステップ４２の実施回数を制御する演算回数制御ステップである。本手法で用いる三角関数の加法定理の定義を以下に示す。
【０００４】
【数１】
2005301472.tif 000003
【０００５】
以下、図４を用いて、従来の技術を用いて三角関数値を逐次求めるための演算の順序を説明する。ここではCout[i]＝cos（θ＋iΔ）、Sout[i]＝sin（θ＋iΔ）  （0≦i＜L）の値を逐次求める事を説明する。
【０００６】
まず、前記初期値決定ステップ４０で、原点位相角θと基準となる位相角の増分値Δを決定し、その三角関数値である
2005301472.tif 000004
【０００７】
＝cosΔ、
2005301472.tif 000005
【０００８】
＝sinΔの値を予め計算しておく。次に前記初項決定ステップ４１で出力値Cout、Soutの初項Cout[0]、Sout[0]を決定するが、ここではcosθ、sinθは予め計算しておく。
【０００９】
次に、前記コア演算ステップ４２で出力値Cout[i]、Sout[i]（1≦i＜L）を順次算出するが、ここでは（数１）に示した加法定理を応用し、求めるCout[i]、Sout[i]を（数２）のように展開し、当該式を利用する。
【００１０】
【数２】
2005301472.tif 000006
【００１１】
すなわち、前記初期値決定ステップ４０で予め設定されている
2005301472.tif 000007
【００１２】
＝cosΔ、
2005301472.tif 000008
【００１３】
＝sinΔの値と、前回の出力結果Cout[i-1]、Sout[i-1]の値を利用して（数２）に沿ってCout[i]、Sout[i]の値を算出する。
【００１４】
最後に前記演算回数制御ステップ４３でｉの値を判断し、Cout[L-1]、Sout[L-1]までの値を求めるように制御する。
【００１５】
このようにして基準となる位相増分値Δの三角関数値のみを予め計算しておく事で逐次三角関数値を得る事が可能となる。
【特許文献１】米国特許出願公開第２００２／０１７３９６７号明細書
【発明の開示】
【発明が解決しようとする課題】
【００１６】
しかしながら特許文献１のような構成では、予め計算しておく三角関数値の個数が多い場合、その値を保持するためのメモリ領域が非常に大きくなってしまう課題が存在する。例えば、近年よく使用される音声圧縮コーデックであるＭＰＥＧ−ＡＡＣ方式では１０２４個の三角関数値を用いるが、それらを３２ビット長で格納すると、約４ｋバイトのメモリ領域が必要となる。
【００１７】
一方、多量のメモリ領域を用いずに三角関数値を逐次求める方法には、位相増分値がデジタル値であり誤差を含むために、それを演算に用いる回数が多いとその分だけ演算結果の蓄積誤差も大きくなってしまう課題が存在する。
【００１８】
本発明は、前記従来の課題を解決するもので、多量のメモリ領域を用いず、かつ演算誤差を低減する事を特徴とした三角関数算出装置を提供する事を目的とする。
【課題を解決するための手段】
【００１９】
前記従来の課題を解決するため、本願の請求項１記載の発明は、位相角Δ毎に三角関数の値を算出する三角関数算出装置であって、位相角ＮΔ毎に加法定理に則った演算過程によって三角関数値を出力するコア演算手段と、前記コア演算手段をＮ回実行するように制御する制御手段とを備えた事を特徴とするものである。
【００２０】
また、本願の請求項２記載の発明は、請求項１記載の発明に初期値設定手段をさらに備え、請求項１記載のコア演算手段の第ｎ回目の実行時の初期値を、初期位相角（ｎ−１）Δに応じた三角関数値になるように設定する事を特徴とするものである。
【００２１】
また、本願の請求項３記載の発明は、請求項１記載のコア演算手段をＮ個と、前記コア演算手段の少なくとも２個以上が並列で動作するように制御する制御手段とを備えた事を特徴とするものである。
【００２２】
また、本願の請求項４記載の発明は、請求項３記載の発明に初期値設定手段をさらに備え、前記ｎ個目のコア演算手段の初期値を、初期位相角（ｎ−１）Δに応じた三角関数値になるように設定する事を特徴とするものである。
【００２３】
また、本願の請求項５記載の発明は、請求項３または４記載のＮ個のコア演算手段を同時に動作させる事を特徴とするものである。
【発明の効果】
【００２４】
請求項１の発明によれば、基準となる位相増分値を演算に用いる回数が減少するので蓄積誤差を低減する事ができる。
【００２５】
請求項２の発明によれば、基準となる位相増分値の三角関数値と、Ｎ個の初期位相角の三角関数値のみを予め計算しておけば良いので、その値を保持するためのメモリ領域を少なく抑える事ができる。
【００２６】
請求項３の発明によれば、少なくとも２個以上並列で動作するので高速な演算処理ができる。
【００２７】
請求項４の発明によれば、基準となる位相増分値の三角関数値と、Ｎ個の初期位相角の三角関数値のみを予め計算しておけば良いので、その値を保持するためのメモリ領域を少なく抑える事ができる。
【００２８】
請求項５の発明によれば、処理の並列度が高まるので高速な演算処理ができる。
【発明を実施するための最良の形態】
【００２９】
以下、本発明の実施の形態について、図及びフローチャートを参照しながら説明する。
【００３０】
（実施の形態１）
図５は本願実施の形態１における三角関数算出装置の構成を示すブロック図である。三角関数算出装置は初期値設定手段５０とコア演算手段５１、制御手段５２を備える。従来の手法の構造に加え、新たに制御手段５２が付加されている。実線の矢印はデータの流れを表し、点線の矢印は動作を制御するための信号の流れを表す。
【００３１】
図１は三角関数算出装置の動作フローチャートであり、Ｌ個の正弦値、及びそれと同じ位相角のＬ個の余弦値を逐次求める動作を示す。ここでＬは、Ｎ、Ｍを整数とした時、Ｌ＝Ｎ＊Ｍで与えられる値である。以降の説明では、値Ｎを組数と呼ぶ事とする。組数とは今から求める２Ｌ個の三角関数値に対する位相角Ｌ個をＮ個のグループに等分割し、１グループ当たりＭ個の位相角の２Ｍ個の三角関数値を求めるようにする場合のグループ数にあたる。この組数が１の場合、すなわちＮ＝１の場合、以下に示す処理過程は従来の技術で説明したものと同様のものになる。従って、本発明においては、組数Ｎは２以上である。組数を２以上とする事によって１組当たりの三角関数値を求める回数を少なくし、その結果演算誤差の累積を少なくする事が本実施の形態１の目指すところである。
【００３２】
さて、図１において、１０は各パラメータの初期値を決定する初期値決定ステップ、１１は出力する三角関数値の初項を決定する初項決定ステップ、１２は加法定理に則った演算により逐次三角関数値を算出するコア演算ステップ、１３は前記コア演算ステップ１２の実施回数を制御する演算回数制御ステップ、１４は現在の組数ｎの値を単純増加させるための単純増加ステップ、１５は現在の組数に応じて三角関数算出装置の動作を制御する組数制御ステップ、１６は前記コア演算ステップ１２の実施回数を０に初期化する演算回数初期化ステップである。
【００３３】
以下、図１を用いて、本発明による三角関数値を逐次求めるための演算の順序を説明する。ここではCout[n][i]＝cos（θ＋（n＋iN）Δ）、Sout[n][i]＝sin（θ＋（n＋iN）Δ）（0≦i＜M、0≦n＜N）の値を逐次求める事を説明する。本実施の形態では一例として、θ＝０°、Ｎ＝４、Ｍ＝１２８とし、求める三角関数値の位相範囲を０°からπ/2とする。すなわち、求める三角関数値の総数は２Ｌ＝１０２４個であり、Δ＝π/（2*512）＝π/1024とする。
【００３４】
まず、前記初期値決定ステップ１０で、原点位相角θと基準となる位相増分値ＮΔを決定し、位相増分値ＮΔの三角関数値である
2005301472.tif 000009
【００３５】
＝cosＮΔ、
2005301472.tif 000010
【００３６】
＝sinＮΔと、Ｎ個の原点位相角と初期位相角の和で表される三角関数値cos（θ＋nΔ）、sin（θ＋nΔ）の値を予め計算しておく。次に前記初項決定ステップ１１で、第ｎ組の出力値の初項Cout[n][0]、Sout[n][0]の値を（数３）のように決定するが、これは既に前記初期値決定ステップ１０で計算されている値である。
【００３７】
【数３】
2005301472.tif 000011
【００３８】
ここで、前記の具体的な値を用いて１組目初項を決定する場合、θ＝０、ｎ＝０であるから、１組目初項の出力値Cout[0][0]、Sout[0][0]は、（数４）のように決定するが、この値は予め計算により求まっている。
【００３９】
【数４】
2005301472.tif 000012
【００４０】
次に前記コア演算ステップ１２で、出力値Cout[n][i]、Sout[n][i]（1≦i＜M）を逐次算出するが、ここでは（数１）に示した加法定理を応用し、求めるCout[n][i]、Sout[n][i]を（数５）のように展開し、当該式を利用する。
【００４１】
【数５】
2005301472.tif 000013
【００４２】
すなわち、前記初期値決定ステップ１０で予め計算されている
2005301472.tif 000014
【００４３】
＝cosＮΔ、
2005301472.tif 000015
【００４４】
＝sinＮΔの値と、前回の出力結果Cout[n][i-1]、Sout[n][i-1]の値を利用して（数５）に沿ってCout[n][i]、Sout[n][i]の値を算出する。
【００４５】
ここで、前記の具体的な値を用いて１組目２回目の出力値を求める場合、θ＝０、Ｎ＝４、ｎ＝０、ｉ＝１であるから、１組目２回目の出力値Cout[0][1]、Sout[0][1]は（数６）のようになるが、これは前記初期値決定ステップ１０で予め計算されている
2005301472.tif 000016
【００４６】
＝cos4Δ、
2005301472.tif 000017
【００４７】
＝sin4Δそのものであるので、当該式を用いて決定する事ができる。
【００４８】
【数６】
2005301472.tif 000018
【００４９】
続いて、１組目３回目の出力値を求める場合、前回の出力結果は（数６）で表される１組目２回目の出力値Cout[0][1]、Sout[0][1]であるので、１組目３回目の出力値Cout[0][2]、Sout[0][2]は（数７）のように展開され、当該式を用いて求める事ができる。
【００５０】
【数７】
2005301472.tif 000019
【００５１】
前記演算回数制御ステップ１３では、ｉの値を判断し、Cout[n][M-1]、Sout[n][M-1]までの値を求めるように制御する。すなわち、前記の具体的な値を用いると、ｉが１２８に達するまで、前記コア演算ステップを繰り返し実行するように制御する。前記単純増加ステップ１４では、前記演算回数制御ステップ１３でｉの値がＭに達した場合にｎの値を１だけ増加させる。すなわち、前記の具体的な値を用いると、ｉが１２８に達した場合に、組数ｎの値０を１に増加させる。前記組数制御ステップ１５では、ｎの値を判断し、Cout[N-1][M-1]、Sout[N-1]
[M-1]までの値を求めるように制御する。ここで、ｎ＜Ｎを満たす時は前記演算回数初期化ステップ１６において前記コア演算ステップ１２の実施回数ｉを０に初期化し、前記初項決定ステップ１１から前記単純増加ステップ１４までの一連の処理を繰り返す。すなわち、前記の具体的な値を用いると、１組目１２８回目の出力値Cout[0][127]、Sout[0][127]が求まり、ｎの値が０から１に変化した後に、前記コア演算ステップ１２の実施回数であるｉの値を１２８から０にする。そして、前記初項決定ステップ１１に戻り、２組目初項の出力値であるCout[1][0]、Sout[1][0]を（数８）のように決定するが、この値は既に計算により求まっている。
【００５２】
【数８】
2005301472.tif 000020
【００５３】
続いて、２組目２回目の出力値を求める場合、前回の出力結果は（数８）で表されるCout[1][0]、Sout[1][0]であるので、２組目２回目の出力値Cout[1][1]、Sout[1][1]は（数９）のように展開され、当該式を用いて求める事ができる。
【００５４】
【数９】
2005301472.tif 000021
【００５５】
以降、同様に３組目、４組目の三角関数値も算出し、Cout[3][127]、Sout[3][127]までの値を算出する。最後に、前記組数制御ステップ１５でｎの値とＮの値とを比較し、ｎの値がＮの値に達した場合、三角関数算出装置の演算を終了する。それによって、１組目から４組目まで４組＊１２８回の演算を行い、正弦値、余弦値を合わせた総計１０２４個の三角関数値を得る事ができる。
【００５６】
このようにして、基準となる位相増分値ＮΔの三角関数値
2005301472.tif 000022
【００５７】
＝cosＮΔ、
2005301472.tif 000023
【００５８】
＝sinＮΔと、Ｎ個の初期位相角の三角関数値cos（nΔ）、sin（nΔ）（0≦n＜Ｎ）のみを予め計算しておく事で逐次三角関数を得る事ができる。
【００５９】
以上のように本実施の形態によれば、前記コア演算ステップにおいて基準となる位相増分値ＮΔ毎に加法定理に則った演算を初期位相角の異なるＮ組に分けて実行することにより、次の２点で効果を期待できる。
【００６０】
１点目は蓄積誤差を低減できる事である。本実施の形態において基準となる位相増分値ＮΔと組数Ｎの値はいくつでも良い。ただし、基準となる位相増分値ＮΔはデジタル値であるので既に誤差を含んでおり、その値を整数倍する回数が多い場合や、その値に掛ける値が大きい場合はその分蓄積誤差が大きくなってしまう。そこで、組の数を増加させ、１組当たりの演算回数を減らす事によって総演算量は変化させずに基準となる位相角の三角関数値による蓄積誤差を低減する事ができる。
【００６１】
先の具体的な値を用いた例で考えると、従来手法では基準となる位相角Δを１０２４回整数倍して最終的には掛ける値が１０２３になり、１０２４回分の蓄積誤差が含まれる事となる。これに対し、本発明では基準となる位相角ＮΔを２５６回整数倍して最終的には掛ける値が２５５で済み、２５６回分の蓄積誤差を含むにとどまっている。
【００６２】
２点目は使用するメモリ領域が少なく済む事である。予めメモリに蓄えておく値は、基準となる位相増分値の三角関数値と、基準となる位相増分値に応じた計Ｎ組の原点位相角と初期位相角の和に対する三角関数値のみであるため、使用するメモリ領域を少なく抑える事ができる。
【００６３】
先の具体的な値を用いた例で考えた場合、値を全て３２ビットの固定小数点値とすると、従来手法では１０２４個の三角関数値を保持しなくてはならないため、約４ｋバイトのメモリ領域が必要となるが、本発明では基準となる位相角４Δの三角関数値２個と、４つの原点位相角と初期位相角の和に対する三角関数値８個の計１０個だけを保持すれば良いので、メモリ領域はわずか４０バイトで済む事となる。
【００６４】
なお、本実施の形態では、１組当たりの演算を行う手段として前記初項決定ステップ１１、前記コア演算ステップ１２、前記演算回数制御ステップ１３をＮ回順番に動作させたが、これらをまとめたものをＮ個設けて三角関数算出装置内で並列に動作させても良い。
【００６５】
図６は、前記初項決定ステップ１１から前記演算回数制御ステップ１３までの一連の処理を１つにまとめた動作をする部分を表す図である。図６において、図１と同じ構成要素については同じ符号を用い、説明を省略する。図６において、６０は前記初項決定ステップ１１、前記コア演算ステップ１２、前記演算回数制御ステップ１３をひとつにまとめた拡張コア演算手段である。添字ｎは組数を表し、式中のｎと対応している。図７は、本実施の形態１における三角関数算出装置の拡張コア演算手段を複数用いて並列に動作させ、三角関数値を算出する場合の様子を表すフローチャートである。図７において、図１と同じ構成要素については同じ符号を用い、説明を省略する。図７において、１つの拡張コア演算手段はＮ組あるうちの１組の演算を行うが、拡張コア演算手段をＮ個並列に設置する事により、Ｎ組の演算を同時に実行する事が可能となる。
【００６６】
このようにすれば、コア演算手段を並列に設置することにより前記２点の効果に加え、演算時間を大幅に短縮させる事ができる。
【産業上の利用可能性】
【００６７】
本発明にかかる三角関数算出装置は、演算誤差を低減しメモリ使用量を削減するので、ＦＦＴやＤＣＴなどの三角関数を用いた信号処理においてコストダウンと高性能化を実現する事ができる。
【図面の簡単な説明】
【００６８】
【図１】本発明の実施の形態１における三角関数算出装置の動作を示すフローチャート
【図２】従来における、３２ポイントの余弦データテーブルの内容を示す図
【図３】従来における、多量のメモリを用いずに逐次三角関数値を算出する手法の構造を示すブロック図
【図４】従来における、多量のメモリを用いずに逐次三角関数値を算出する手法の動作を示すフローチャート
【図５】本発明の実施の形態１における三角関数算出装置の構造を示すブロック図
【図６】拡張コア演算ステップの詳細なフローチャート
【図７】本発明の実施の形態１における三角関数算出装置の拡張コア演算手段を並列に設置し、動作させる時の様子を示すフローチャート
【符号の説明】
【００６９】
１０，４０    初期値決定ステップ
１１，４１    初項決定ステップ
１２，４２    コア演算ステップ
１３，４３    演算回数制御ステップ
１４    単純増加ステップ
１５    組数制御ステップ
１６    演算回数初期化ステップ
３０，５０    初期値設定手段
３１，５１    コア演算手段
５２    制御手段
６０    拡張コア演算手段（ｎ）
【図１】
2005301472.tif 000024
【図２】
2005301472.tif 000025
【図３】
2005301472.tif 000026
【図４】
2005301472.tif 000027
【図５】
2005301472.tif 000028
【図６】
2005301472.tif 000029
【図７】
2005301472.tif 000030