(19)【発行国】日本国特許庁(JP)
(12)【公報種別】特許公報(B2)
(11)【特許番号】
(24)【登録日】2023-04-13
(45)【発行日】2023-04-21
(54)【発明の名称】三角関数演算装置
(51)【国際特許分類】
G06F 7/548 20060101AFI20230414BHJP
【FI】
G06F7/548 A
(21)【出願番号】P 2019123014
(22)【出願日】2019-07-01
【審査請求日】2022-06-02
(73)【特許権者】
【識別番号】308033711
【氏名又は名称】ラピスセミコンダクタ株式会社
(73)【特許権者】
【識別番号】000203634
【氏名又は名称】多摩川精機株式会社
(74)【代理人】
【識別番号】100084995
【氏名又は名称】加藤 和詳
(74)【代理人】
【識別番号】100099025
【氏名又は名称】福田 浩志
(72)【発明者】
【氏名】山崎 真人
(72)【発明者】
【氏名】丸山 裕史
【審査官】豊田 真弓
(56)【参考文献】
【文献】特開昭62-140168(JP,A)
【文献】特開平05-061641(JP,A)
【文献】特開2001-209525(JP,A)
【文献】特開平01-241673(JP,A)
【文献】米国特許第06640237(US,B1)
(58)【調査した分野】(Int.Cl.,DB名)
G06F 7/548
(57)【特許請求の範囲】
【請求項1】
位相に対応した複数のビット列からなるアドレス信号を発生するアドレス発生器と、
前記アドレス信号の上位ビットによって示される位相の各々に対応する第1の正弦及び第1の余弦、前記アドレス信号の下位ビットによって示される位相の各々に対応する第2の正弦及び第2の余弦を記憶した三角関数テーブルと、
前記三角関数テーブルを参照することにより抽出された、前記アドレス信号に対応した前記第1の正弦、前記第1の余弦、前記第2の正弦及び前記第2の余弦を用いた演算処理により前記アドレス信号に対応した正弦を演算値として出力する演算回路と、
前記アドレス信号に応じた補正値に基づいて、前記演算値を補正する補正部と、
を備える三角関数演算装置。
【請求項2】
前記補正部は、前記アドレス信号によって示される位相の各々に対応する補正値を記憶した補正値テーブルを含み、前記補正値テーブルを参照することによって抽出された、前記アドレス信号に対応した補正値に基づいて、前記演算値を補正する
請求項1に記載の三角関数演算装置。
【請求項3】
前記三角関数テーブルは、
前記アドレス信号の上位ビットによって示される位相の各々に対応する前記第1の正弦及び前記第1の余弦を記憶した第1の三角関数テーブルと、
前記アドレス信号の下位ビットによって示される位相の各々に対応する前記第2の正弦及び前記第2の余弦を記憶した第2の三角関数テーブルと、
を含む請求項1または請求項2に記載の三角関数演算装置。
【請求項4】
前記演算回路は、
前記第1の正弦と前記第2の余弦との積を出力する第1の乗算回路と、
前記第2の正弦と前記第1の余弦との積を出力する第2の乗算回路と、
前記第1の乗算回路の出力値と前記第2の乗算回路の出力値とを加算する加算回路と、
を含む請求項1から請求項3のいずれか1項に記載の三角関数演算装置。
【請求項5】
位相に対応した複数のビット列からなるアドレス信号を発生するアドレス発生器と、
前記アドレス信号の上位ビットによって示される位相の各々に対応する第1の正弦及び第1の余弦、前記アドレス信号の下位ビットによって示される位相の各々に対応する第2の正弦及び第2の余弦を記憶した三角関数テーブルと、
前記三角関数テーブルを参照することにより抽出された、前記アドレス信号に対応した前記第1の正弦、前記第1の余弦、前記第2の正弦及び前記第2の余弦を用いた演算処理により前記アドレス信号に対応した余弦を演算値として出力する演算回路と、
前記アドレス信号に応じた補正値に基づいて、前記演算値を補正する補正部と、
を備える三角関数演算装置。
【発明の詳細な説明】
【技術分野】
【0001】
本発明は、三角関数演算装置に関する。
【背景技術】
【0002】
正弦波を生成する技術として、以下の技術が知られている。例えば、非特許文献1には、テーブル参照による三角関数の計算により正弦波を生成する場合において、下記の式(1)によって示される三角関数の加法定理を用いることで、テーブルのデータ量を抑制できることが記載されている。具体的には、円周を16ビットで表現する場合に、円周を256分割するテーブルと、円周を65536分割するテーブルとを用意し、円周を表す16ビットのインデックスを上位、下位のそれぞれ8ビットに分割し、分割したインデックスで各々のテーブルを引き、式(1)を用いて値を合成することで、16ビット精度で円周を分割した三角関数を作り出すことができる旨が記載されている。
【0003】
【先行技術文献】
【非特許文献】
【0004】
【文献】堀江誠一著「オーディオ信号処理で学ぶDSP(第7回)Sin波を作る――テーブル参照のテクニック」Interface、CQ出版、2007年10月、p.166-174
【発明の概要】
【発明が解決しようとする課題】
【0005】
しかしながら、上記のように加法定理を用いて正弦波を生成する場合でも、正弦波の精度を高めるためには、テーブルに記録するデータのデータ長を長くする必要がある。例えば、小数第8位の精度で正弦波を誤差なく生成する場合、小数第10位の精度で表わされたsinα、cosα、sinβ、cosβの値をテーブルに記録しておく必要がある。このように、テーブルに記録するデータのデータ長が長くなると、テーブルに記録された値を用いて演算処理を行う乗算回路及び加算回路等の演算回路の回路規模が大きくなる。
【0006】
本発明は、以上の事情を鑑みてなされたものであり、演算回路の回路規模の増大を伴うことなく、三角関数演算の精度を確保することができる三角関数演算装置を提供することを目的とする。
【課題を解決するための手段】
【0007】
上記目的を達成するために、本発明の三角関数演算装置は、位相に対応した複数のビット列からなるアドレス信号を発生するアドレス発生器と、前記アドレス信号の上位ビットによって示される位相の各々に対応する第1の正弦及び第1の余弦、前記アドレス信号の下位ビットによって示される位相の各々に対応する第2の正弦及び第2の余弦を記憶した三角関数テーブルと、前記三角関数テーブルを参照することにより抽出された、前記アドレス信号に対応した前記第1の正弦、前記第1の余弦、前記第2の正弦及び前記第2の余弦を用いた演算処理により前記アドレス信号に対応した正弦を演算値として出力する演算回路と、前記アドレス信号に応じた補正値に基づいて、前記演算値を補正する補正部と、を備える。
【発明の効果】
【0008】
本発明によれば、演算回路の回路規模の増大を伴うことなく、三角関数演算の精度を確保することができる。
【図面の簡単な説明】
【0009】
【
図1】本発明の実施形態に係る記憶部の一例を示す図である。
【
図2】本発明の実施形態に係る第1の三角関数テーブルの一例を示す図である。
【
図3】本発明の実施形態に係る第2の三角関数テーブルの一例を示す図である。
【
図4】本発明の実施形態に係る補正値テーブルの一例を示すブロック図である。
【
図5】本発明の実施形態に係る三角関数演算装置の機能的な構成の一例を示すブロック図である。
【
図6】比較例に係る三角関数演算装置の機能的な構成の一例を示すブロック図である。
【発明を実施するための形態】
【0010】
以下、図面を参照して、本発明を実施するための形態例を詳細に説明する。
【0011】
まず、
図1を参照して、本実施形態に係る記憶部12を説明する。記憶部12は、ROM(Read Only Memory)、RAM(Random Access Memory)、レジスタ、HDD(Hard Disk Drive)、SSD(Solid State Drive)及びフラッシュメモリ等の揮発性又は不揮発性の記憶媒体によって実現される。記憶媒体としての記憶部12には、第1の三角関数テーブル21、第2の三角関数テーブル22及び補正値テーブル41が記憶される。
【0012】
図2に、第1の三角関数テーブル21の一例を示す。第1の三角関数テーブル21は、後述するアドレス信号の上位ビットによって示される位相の各々に対応する第1の正弦及び第1の余弦を記憶したテーブルである。
図2に示すように、一例として、第1の三角関数テーブル21には、アドレス信号の上位ビットによって示される位相α(0°≦α≦90°)に対応する第1の正弦sinα及び第1の余弦cosαが、10°刻みに記憶される。本実施形態において、第1の三角関数テーブル21には、第1の正弦sinα及び第1の余弦cosαが小数第8位の精度で記憶されている。
【0013】
図3に、第2の三角関数テーブル22の一例を示す。第2の三角関数テーブル22は、後述するアドレス信号の下位ビットによって示される位相の各々に対応する第2の正弦及び第2の余弦を記憶したテーブルである。
図3に示すように、一例として、第2の三角関数テーブル22には、アドレス信号の下位ビットによって示される位相β(0°≦β≦9°)に対応する第2の正弦sinβ及び第2の余弦cosβが、1°刻みに記憶される。本実施形態において、第2の三角関数テーブル22には、第2の正弦sinβ及び第2の余弦cosβが小数第8位の精度で記憶されている。
【0014】
図4に、補正値テーブル41の一例を示す。補正値テーブル41は、アドレス信号によって示される位相の各々に対応する補正値を記憶したテーブルである。
図4に示すように、一例として、補正値テーブル41には、アドレス信号によって示される位相(α+β)(0°≦(α+β)≦90°)に対応する補正値εが、角度1°刻みに記憶される。
【0015】
補正値εは、それぞれ小数第8位の精度を有するsinα、sinβ、cosα及びcosβを用いた式(1)に示す三角関数の加法定理を用いた後述する本実施形態に係る三角関数演算装置10が備える演算回路30による演算値と、sin(α+β)の実数値との差(すなわち、誤差)に相当する。すなわち、アドレス信号によって示される位相(α+β)に対応する演算回路30による演算値Pと、実数値Qとの差(Q-P)がε1である場合、補正値テーブル41には、当該アドレス信号によって示される位相(α+β)に対応する補正値εとしてε1が記憶される。sinα、sinβ、cosα及びcosβがそれぞれ小数第8位の精度を有する場合、
図4に示すように、誤差は-0.00000001~0.00000001に収まる。
【0016】
次に、
図5を参照して、本実施形態に係る三角関数演算装置10の構成について説明する。
図5に示すように、三角関数演算装置10は、アドレス発生器11、三角関数テーブル20、演算回路30及び補正部40を含む。
【0017】
アドレス発生器11は、位相(α+β)に対応した複数のビット列からなるアドレス信号を発生する。三角関数テーブル20は、アドレス信号の上位ビットによって示される位相αの各々に対応する第1の正弦sinα及び第1の余弦cosα、アドレス信号の下位ビットによって示される位相βの各々に対応する第2の正弦sinβ及び第2の余弦cosβを記憶したテーブルである。すなわち、三角関数テーブル20は、第1の三角関数テーブル21と第2の三角関数テーブル22とを含む。
【0018】
演算回路30は、三角関数テーブル20を参照することにより抽出された、アドレス信号に対応した第1の正弦sinα、第1の余弦cosβ、第2の正弦sinβ及び第2の余弦cosβを用いた演算処理によりアドレス信号に対応した正弦を演算値として出力する。具体的には、演算回路30は、第1の正弦sinαと第2の余弦cosβとの積sinα*cosβを出力する第1の乗算回路31と、第2の正弦sinβと第1の余弦cosαとの積sinβ*cosαを出力する第2の乗算回路32と、第1の乗算回路31の出力値と第2の乗算回路32の出力値とを加算してsinα*cosβ+sinβ*cosαを演算回路30の演算値として出力する加算回路33と、を含む。
【0019】
補正部40は、アドレス信号に応じた補正値εに基づいて、演算回路30から出力される演算値sinα*cosβ+sinβ*cosαを補正する。具体的には、補正部40は、補正値テーブル41と、加算回路42を含む。加算回路42は、補正値テーブル41を参照することによって抽出された、アドレス信号に対応した補正値εと、演算回路30から出力された演算値sinα*cosβ+sinβ*cosαとを加算する。
【0020】
次に、本実施形態に係る三角関数演算装置10の作用を説明する。
【0021】
まず、アドレス発生器11は、位相(α+β)に対応した複数のビット列からなるアドレス信号を発生し、三角関数テーブル20及び補正部40に出力する。そして、第1の三角関数テーブル21は、アドレス信号のうち上位ビットによって示される位相αに対応する第1の正弦sinα、第1の余弦cosαを抽出し、第1の正弦sinαを第1の乗算回路31に、第1の余弦cosαを第2の乗算回路32にそれぞれ出力する。また、第2の三角関数テーブル22は、アドレス信号のうち下位ビットによって示される位相βに対応する第2の正弦sinβ、第2の余弦cosβを抽出し、第2の正弦sinβを第2の乗算回路32に、第2の余弦cosβを第1の乗算回路31にそれぞれ出力する。
【0022】
次に、第1の乗算回路31は、第1の正弦sinαと第2の余弦cosβとの積を演算し、演算結果sinα*cosβを加算回路33に出力する。また、第2の乗算回路32は、第2の正弦と第1の余弦cosαとの積を演算し、演算結果sinβ*cosαを加算回路33に出力する。そして、加算回路33は、第1の乗算回路31の出力値sinα*cosβと第2の乗算回路32の出力値cosα*sinβとを加算し、演算結果sinα*cosβ+sinβ*cosαを演算回路30の演算値として補正部40に出力する。
【0023】
補正部40は、アドレス信号を取得した後、補正値テーブル41を参照して、アドレス信号によって示される位相(α+β)に対応する補正値εを抽出する。そして、補正部40は、加算回路42により、演算回路30の演算値sinα*cosβ+cosα*sinβと補正値εとを加算し、アドレス信号に対応する正弦sin(α+β)に相当する値として、sinα*cosβ+cosα*sinβ+εを出力する。
【0024】
具体的な一例として、アドレス発生器11が位相12°に相当するアドレス信号を発生する場合を説明する。第1の三角関数テーブル21は、アドレス信号の上位ビットによって示される位相10°に対応する第1の正弦0.17364818、第1の余弦0.98480775を抽出し、第1の正弦0.17364818を第1の乗算回路31に、第1の余弦0.98480775を第2の乗算回路32にそれぞれ出力する。また、第2の三角関数テーブル22は、アドレス信号の下位ビットによって示される位相2°に対応する第2の正弦0.03489950、第2の余弦0.99939083を抽出し、第2の正弦0.03489950を第2の乗算回路32に、第2の余弦0.99939083を第1の乗算回路31にそれぞれ出力する。
【0025】
次に、第1の乗算回路31は、第1の正弦0.17364818と第2の余弦0.99939083との積を演算し、演算結果0.173542398738189を加算回路33に出力する。第2の乗算回路32は、第1の余弦0.98480775と第2の正弦0.03489950との積を演算し、演算結果0.034369298071125を加算回路33に出力する。加算回路33は、第1の乗算回路31の出力値0.173542398738189と第2の乗算回路32の出力値0.034369298071125とを加算した0.207911696809314のうち、小数第9位で四捨五入して、小数点以下の桁数が8桁の0.20791170を演算回路30の演算値として補正部40に出力する。
【0026】
補正部40は、位相12°に相当するアドレス信号を取得した後、補正値テーブル41を参照して、アドレス信号によって示される位相12°に対応する補正値として、-0.00000001を抽出する。そして、補正部40は、加算回路42により、演算回路30の演算値0.20791170と補正値テーブル41から抽出した補正値-0.00000001とを加算し、位相12°に対応する正弦sin(12°)に相当する値として、0.20791169を出力する。
【0027】
以上のようにして、三角関数演算装置10はアドレス信号によって示される位相に対応する正弦を出力する。また、アドレス発生器11が、位相が連続的に増減するようにアドレス信号を順次出力する場合、三角関数演算装置10からは正弦波が出力される。すなわち、三角関数演算装置10を正弦波発生装置として機能させることも可能である。
【0028】
[比較例]
以下、図面及び表を参照して、比較例に係る三角関数演算装置50について説明し、本実施形態に係る三角関数演算装置10との比較について説明する。
図6に、比較例に係る三角関数演算装置50を示す。比較例に係る三角関数演算装置50は、本実施形態に係る三角関数演算装置10における補正部40を有さない点で異なり、演算回路30による演算値をアドレス信号に対応する正弦sin(α+β)に相当する値とする。なお、比較例に係る三角関数演算装置50におけるアドレス発生器11、三角関数テーブル20及び演算回路30は、本実施形態に係る三角関数演算装置10と同様の機能であるため、説明を省略し、それぞれ同一の構成要素について同一の参照符号を付与している。
【0029】
まず、一例として、アドレス発生器11が位相33°に相当するアドレス信号を発生する場合に、三角関数演算装置50が出力する値について説明する。表1には、小数点以下の桁数が8桁である正弦sin(33°)を求める場合の演算値と実数値との誤差について、第1の正弦、第1の余弦、第2の正弦及び第2の余弦の小数点以下の桁数を変えて示す。
【0030】
表1に示すように、小数第8位の精度で正弦sin(33°)を求めるために必要な第1の正弦、第1の余弦、第2の正弦及び第2の余弦の小数点以下の桁数は、10桁である。第1の正弦、第1の余弦、第2の正弦及び第2の余弦の小数点以下の桁数が9桁以下の場合には、演算値と実数値との間で誤差が生じる。
【0031】
【0032】
表2及び表3を参照して、アドレス発生器11が発生するアドレス信号が位相0~90°に相当する範囲で位相1°に相当する刻み幅で変化する場合の、三角関数演算装置50が出力する正弦sin(α+β)に相当する演算値の精度について説明する。表2及び表3には、小数第8位の精度で正弦sin(α+β)を求める場合の演算値と実数値との誤差について、第1の正弦sinα、第1の余弦cosα、第2の正弦sinβ及び第2の余弦cosβの小数点以下の桁数を変えて示す。第1の正弦sinα、第1の余弦cosα、第2の正弦sinβ及び第2の余弦cosβの小数点以下の桁数は、表2では10桁であり、表3では8桁である。
【0033】
表2及び表3に示すように、小数第8位の精度で正弦sin(α+β)に相当する演算値を誤差なく求めるためには、第1の正弦sinα、第1の余弦cosα、第2の正弦sinβ及び第2の余弦cosβの小数点以下の桁数は、それぞれ10桁必要である。
【0034】
【0035】
【0036】
このように、比較例に係る三角関数演算装置50によれば、所定の精度を有する正弦sin(α+β)の演算値を求めるためには、三角関数の加法定理による演算の誤差を考慮して、三角関数テーブル20に記憶する第1の正弦sinα、第1の余弦cosα、第2の正弦sinβ及び第2の余弦cosβのデータ長を長くする必要がある。第1の正弦sinα、第1の余弦cosα、第2の正弦sinβ及び第2の余弦cosβのデータ長が長くなると、これらのデータを用いて演算処理を行う第1の乗算回路31、第2の乗算回路32及び加算回路33等の演算回路の回路規模が大きくなる。
【0037】
具体的には、比較例に係る三角関数演算装置50によれば、例えば、小数第8位の精度で正弦sin(α+β)を誤差なく求める場合には、第1の三角関数テーブル21及び第2の三角関数テーブル22にそれぞれ小数第10位の精度でデータを記憶する必要がある。すなわち、各データの表現には34ビットが必要である。
【0038】
一方、上述したように、本実施形態に係る三角関数演算装置10によれば、例えば、小数第8位の精度で正弦sin(α+β)を誤差なく求める場合には、第1の三角関数テーブル21及び第2の三角関数テーブル22に記憶するデータは、それぞれ小数第8位の精度で足りる。すなわち、各データの表現は27ビットあれば可能である。したがって、本実施形態に係る三角関数演算装置10によれば、比較例に係る三角関数演算装置50と比較して、第1の三角関数テーブル21及び第2の三角関数テーブル22に記憶されるデータのビット数を減らすことができるので、演算回路の回路規模の増大を伴うことなく、三角関数演算の精度を確保することができる。
【0039】
以上説明したように、本実施形態に係る三角関数演算装置10によれば、第1の三角関数テーブル21及び第2の三角関数テーブル22に記憶される第1の正弦、第1の余弦、第2の正弦及び第2の余弦のデータ長がそれぞれ小数第8位までの値を示すものであっても、演算回路30の演算値を補正部40により補正を行うことで、導出される正弦の値は小数第8位の精度を有することができる。すなわち、演算回路の回路規模の増大を伴うことなく、三角関数演算の精度を確保することができる。
【0040】
また、本実施形態に係る三角関数演算装置10によれば、第1の三角関数テーブル21及び第2の三角関数テーブル22に記憶されるデータのデータ長を短くすることができるので、演算回路の処理速度を向上させることができる。
【0041】
また、本実施形態に係る三角関数演算装置10によれば、第1の三角関数テーブル21及び第2の三角関数テーブル22に記憶されるデータのデータ長を短くすることができるので、各テーブルを記憶する記憶部12の容量を削減することができる。
【0042】
なお、上記実施形態では、演算値の算出に用いる第1の正弦、第1の余弦、第2の正弦及び第2の余弦を、第1の三角関数テーブル21と第2の三角関数テーブル22とに分けて記憶する態様としたが、これに限らない。1つのテーブルに第1の正弦、第1の余弦、第2の正弦及び第2の余弦をまとめて記憶する態様としてもよい。
【0043】
なお、上記実施形態では、三角関数の加法定理として数式(1)を用いて、アドレス信号に対応した正弦を演算値として出力する態様としたが、本発明は、この態様に限らない。三角関数の加法定理として数式(2)を用いて、アドレス信号に対応した余弦を演算値として出力する態様としてもよい。この場合、第1の乗算回路31は、三角関数テーブル20から抽出された第1の余弦cosαと第2の余弦cosβとの積cosα*cosβを出力する。第2の乗算回路32は、三角関数テーブル20から抽出された第1の正弦sinαと第2の正弦sinβとの積sinα*sinβを出力する。加算回路33に代えて設けられる減算回路(図示せず)は、第1の乗算回路31の出力値cosα*cosβから第2の乗算回路32の出力値sinα*sinβを減算し、演算結果cosα*cosβ-sinα*sinβを演算回路30の演算値として出力する。
【0044】
【0045】
また、上記実施形態において、例えば、アドレス発生器11、三角関数テーブル20、演算回路30及び補正部40といった各種の処理を実行する処理部(processing unit)のハードウェア的な構造としては、次に示す各種のプロセッサ(processor)を用いることができる。上記各種のプロセッサには、ソフトウェア(プログラム)を実行して各種の処理部として機能する汎用的なプロセッサであるCPUに加えて、FPGA等の製造後に回路構成を変更可能なプロセッサであるプログラマブルロジックデバイス(Programmable Logic Device:PLD)、ASIC(Application Specific Integrated Circuit)等の特定の処理を実行させるために専用に設計された回路構成を有するプロセッサである専用電気回路等が含まれる。
【0046】
1つの処理部は、これらの各種のプロセッサのうちの1つで構成されてもよいし、同種又は異種の2つ以上のプロセッサの組み合わせ(例えば、複数のFPGAの組み合わせや、CPUとFPGAとの組み合わせ)で構成されてもよい。また、複数の処理部を1つのプロセッサで構成してもよい。複数の処理部を1つのプロセッサで構成する例としては、第1に、クライアント及びサーバ等のコンピュータに代表されるように、1つ以上のCPUとソフトウェアの組み合わせで1つのプロセッサを構成し、このプロセッサが複数の処理部として機能する形態がある。第2に、システムオンチップ(System On Chip:SoC)等に代表されるように、複数の処理部を含むシステム全体の機能を1つのIC(Integrated Circuit)チップで実現するプロセッサを使用する形態がある。このように、各種の処理部は、ハードウェア的な構造として、上記各種のプロセッサの1つ以上を用いて構成される。
【0047】
更に、これらの各種のプロセッサのハードウェア的な構造としては、より具体的には、半導体素子などの回路素子を組み合わせた電気回路(circuitry)を用いることができる。
【符号の説明】
【0048】
10、50 三角関数演算装置
11 アドレス発生器
12 記憶部
20 三角関数テーブル
21 第1の三角関数テーブル
22 第2の三角関数テーブル
30 演算回路
31 第1の乗算回路
32 第2の乗算回路
33、42 加算回路
40 補正部
41 補正値テーブル