(57)【要約】【課題】小さい回路規模で精度よく対数演算が可能な対数演算器を提供する。【解決手段】最上位桁検索部１１は、入力された真数データＸを２進数にした際の最上位桁Ｍを検出し、乗算部１２は検出された最上位桁Ｍと１０Ｌｏｇ２の近似値を乗算する。べき乗数生成部１３は、検出された最上位桁Ｍを入力して２Mを生成する。除算部１４は、真数データＸをべき乗数生成部１３から出力された２Mでビットシフトして、Ｘ／２Mを得る。演算部１５は、ｘ＝Ｘ／２Mとした際、（ｘ−１）（−ｘ＋５）の演算を行い、加算部１６は、乗算部１２の演算結果と、演算部１５との演算結果とを加算して１０Ｌｏｇ（Ｘ）として出力する。【選択図】図１
2008257407.tif 000002
【特許請求の範囲】
【請求項１】
真数データを対数に変換する対数演算器において、
真数データＸを入力して、前記真数データＸを２進数にした際の最上位桁Ｍを検出する最上位桁検索部と、
検出された前記最上位桁Ｍと、１０Ｌｏｇ２の近似値を乗算する乗算部と、
前記最上位桁Ｍを入力し２Mを生成する、べき乗数生成部と、
前記真数データＸを前記べき乗数生成部から出力された２Mでビットシフトする除算部と、
前記ビットシフトの結果をｘとして、（ｘ−１）（−ｘ＋５）の演算を行う演算部と、
前記乗算部の演算結果と、前記演算部との演算結果とを加算して対数データ１０Ｌｏｇ（Ｘ）として出力する加算部と、
を有することを特徴とする対数演算器。
【請求項２】
前記演算部は、２つの加算器と１つの乗算器を用いて構成されることを特徴とする請求項１記載の対数演算器。
【請求項３】
前記加算部での演算結果に、補正項を加える他の加算部を更に有することを特徴とする請求項１または２記載の対数演算器。
【請求項４】
１０Ｌｏｇ２の近似値を３．０１０３とした場合、前記補正項を０．０１２３とすることを特徴とする請求項３記載の対数演算器。
【請求項５】
真数データを対数に変換する対数演算方法において、
最上位桁検索部は、真数データＸを入力して前記真数データＸを２進数にした際の最上位桁Ｍを検出し、
乗算部は、前記最上位桁Ｍと１０Ｌｏｇ２の近似値を乗算し、
べき乗数生成部は、前記最上位桁Ｍを入力して２Mを生成し、
除算部は、前記真数データＸを前記べき乗数生成部から出力された２Mでビットシフトし、
前記ビットシフトの結果をｘとして、演算部は、（ｘ−１）（−ｘ＋５）の演算を行い、
加算部は、前記乗算部の演算結果と、前記演算部との演算結果とを加算して対数データ１０Ｌｏｇ（Ｘ）として出力することを特徴とする対数演算方法。
【請求項６】
前記加算部での演算結果に、補正項を加算することを特徴とする請求項５記載の対数演算方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はデジタル信号処理の対数演算処理に用いる対数演算器及び対数演算方法に関する。
【背景技術】
【０００２】
移動無線装置の変復調器を構成するＡＧＣ（Automatic Gain Controller）などにおいて、対数演算器が用いられている。
このような対数演算器において、計算量を抑えるために、折れ線近似を用いる手法（特許文献１参照）、線形補完を行う手法（特許文献２参照）、対数変換用のデータテーブルを用いる手法が知られている。
【０００３】
また、本願の発明者は、真数を２の指数の級数に展開し、最上位となる指数による近似演算を行い、最上位以外の指数ではデータ変換テーブルによる近似演算を行う対数演算器を提案している（特許文献３参照）。
【特許文献１】特開２００２−２０７５９２号公報
【特許文献２】実公平７−４６５８号公報
【特許文献３】特開２００５−２５６３６号公報
【発明の開示】
【発明が解決しようとする課題】
【０００４】
しかし、従来の対数演算器は、近似による誤差を小さく抑えようとすると、回路規模が大きくなるという問題があった。
たとえば、折れ線近似を用いる場合には、入力レベルをいくつかのエリアに分割して、エリアごとに直線近似しているが、近似誤差を小さく抑えようとする場合、エリアを細かく分割する必要があり、多くの近似式を計算する必要があり、回路規模が増大する。
【０００５】
また、特許文献３の技術では、最上位以外の指数でデータ変換テーブルを用いて精度のよい近似を行っているが、メモリが必要であり、回路規模の縮小という点では十分ではなかった。
【０００６】
本発明はこのような点に鑑みてなされたものであり、小さい回路規模で精度よく対数演算が可能な対数演算器及び対数演算方法を提供することを目的とする。
【課題を解決するための手段】
【０００７】
本発明者らは、図１に示すように、真数データＸを入力して、真数データＸを２進数にした際の最上位桁Ｍを検出する最上位桁検索部１１と、検出された最上位桁Ｍと、１０Ｌｏｇ２の近似値を乗算する乗算部１２と、最上位桁Ｍを入力し２Mを生成する、べき乗数生成部１３と、真数データＸをべき乗数生成部１３から出力された２Mでビットシフトする除算部１４と、ビットシフトの結果をｘとして、（ｘ−１）（−ｘ＋５）の演算を行う演算部１５と、乗算部１２の演算結果と、演算部１５との演算結果とを加算して対数データ１０Ｌｏｇ（Ｘ）として出力する加算部１６と、を有することを特徴とする対数演算器１０を提案する。
【０００８】
上記の構成によれば、最上位桁検索部１１は、入力された真数データＸを２進数にした際の最上位桁Ｍを検出し、乗算部１２は検出された最上位桁Ｍと１０Ｌｏｇ２の近似値を乗算する。べき乗数生成部１３は、検出された最上位桁Ｍを入力して２Mを生成する。除算部１４は、真数データＸをべき乗数生成部１３から出力された２Mでビットシフトする。これにより、Ｘ／２Mが求まる。演算部１５は、ｘ＝Ｘ／２Mとした際、（ｘ−１）（−ｘ＋５）の演算を行い、加算部１６は、乗算部１２の演算結果と、演算部１５との演算結果とを加算して対数データ１０Ｌｏｇ（Ｘ）として出力する。
【発明の効果】
【０００９】
本発明は、真数データをＸ、真数データを２進数にした際の最上位ビットの桁をＭ、ｘ＝Ｘ／２M、１０Ｌｏｇ２の近似値を、たとえば、３．０１０３としたとき、１０Ｌｏｇ（Ｘ）＝（３．０１０３×Ｍ）＋（ｘ−１）（−ｘ＋５）と近似して対数演算を行うので、小さな回路規模で対数演算を行うことができるとともに、従来の折れ線近似や補完近似を行う方法に比べ、誤差を小さくできる。
【発明を実施するための最良の形態】
【００１０】
まず、本実施の形態の対数演算方法の概要を説明する。
真数をＸとしたとき、１０Ｌｏｇ（Ｘ）は以下のように表される。
１０Ｌｏｇ（Ｘ）＝１０Ｌｏｇ（２M）＋１０Ｌｏｇ（Ｘ／２M）          （１）
ここで、Ｍは、真数データＸを２進数にした際の最上位桁を示す。たとえば、Ｘ＝１２０ならばＭ＝６）である。１０Ｌｏｇ２を、たとえば、３．０１０２９と近似すると、（１）式は以下のように表される。
【００１１】
１０Ｌｏｇ（Ｘ）＝（３．０１０２９×Ｍ）＋１０Ｌｏｇ（Ｘ／２M）            （２）
ここで、１０Ｌｏｇ（Ｘ／２M）＝１０Ｌｏｇ（ｘ）とする。（２）式から１０Ｌｏｇ（ｘ）は１〜２の間で表されるので、この区間を以下のように２次近似する。
【００１２】
Ｙ＝ａｘ2＋ｂｘ＋ｃ
ｘ＝１のとき、０＝１０Ｌｏｇ（１）であるので、０＝ａ（１）2＋ｂ（１）＋ｃとなる。
【００１３】
ｘ＝１．５のとき、１．７６０９＝１０Ｌｏｇ（１．５）であるので、１．７６０９＝ａ（１．５）2＋ｂ（１．５）＋ｃとなる。
ｘ＝２のとき、３．０１０２９＝１０Ｌｏｇ（２）であるので、３．０１０２９＝ａ（２）2＋ｂ（２）＋ｃとなる。
【００１４】
これらより２次方程式を解くと、Ｙ＝−１．０２３ｘ2＋６．０７９ｘ−５．０５６となる。
よって、１０Ｌｏｇ（ｘ）≒−ｘ2＋６ｘ−５＝（ｘ−１）（−ｘ＋５）と、因数分解できる。
【００１５】
したがって（２）式は、以下のように簡単な近似式で表すことができる。
１０Ｌｏｇ（Ｘ）＝（３．０１０２９×Ｍ）＋（ｘ−１）（−ｘ＋５）    （３）
たとえば、真数“２９３”を対数に変換する場合は以下のようになる。
【００１６】
まず、Ｌｏｇ２９３は以下のように表せる。
１０Ｌｏｇ２９３＝１０Ｌｏｇ（２8＋２5＋２2＋２0）
したがって、真数“２９３”の２進数での最上位桁は、Ｍ＝８となる。よって、上式は、（１）式の形で表せ、
＝１０Ｌｏｇ｛２8（１＋２-3＋２-6＋２-8）｝
＝１０Ｌｏｇ（２8）＋１０Ｌｏｇ｛（２8＋２5＋２2＋２0）／２8｝
＝１０Ｌｏｇ（２8）＋１０Ｌｏｇ（２９３／２５６）
となる。
【００１７】
ここで、１０Ｌｏｇ２＝３．０１と近似すると、上式は、
＝（３．０１×８）＋１０Ｌｏｇ（２９３／２５６）
となり、最初の大まかな近似ができる。さらに、（３）式より、
＝（３．０１×８）＋｛（２９３／２５６）−１｝｛−（２９３／２５６）＋５｝
＝２４．６
となり、真数“２９３”の対数値が得られる。
【００１８】
また、真数“５１”を対数に変換する場合は以下のようになる。
まず、Ｌｏｇ５１は以下のように表せる。
１０Ｌｏｇ５１＝１０Ｌｏｇ（２5＋２4＋２1＋２0）
したがって、真数“５１”の２進数での最上位桁は、Ｍ＝５となる。よって、上式は、（１）式の形で表せ、
＝１０Ｌｏｇ｛２5（１＋２-1＋２-4＋２-5）｝
＝１０Ｌｏｇ（２5）＋１０Ｌｏｇ｛（２5＋２4＋２1＋２0）／２5｝
＝１０Ｌｏｇ（２5）＋１０Ｌｏｇ（５１／３２）
となる。
【００１９】
ここで、１０Ｌｏｇ２＝３．０１と近似すると、上式は、
＝（３．０１×５）＋１０Ｌｏｇ（５１／３２）
となり、最初の大まかな近似ができる。さらに、（３）式より、
＝（３．０１×５）＋｛（５１／３２）−１｝｛−（５１／３２）＋５｝
＝１７．０
となり、真数“５１”の対数値が得られる。
【００２０】
次に、（３）式を演算するための、対数演算器を説明する。
図１は、第１の実施の形態の対数演算器の回路構成を示す図である。
対数演算器１０は、最上位桁検索部１１、乗算部１２、べき乗数生成部１３、除算部１４、演算部１５、加算部１６を有している。
【００２１】
最上位桁検索部１１は、真数データＸを入力して、２進数にしたときの最上位桁Ｍを検出する。具体的な回路構成については後述する。
乗算部１２は、１０Ｌｏｇ２の近似値を入力し、その近似値と、検出された最上位桁Ｍを乗算する。すなわち、（３）式の第１項を計算する。入力される１０Ｌｏｇ２の近似値は、対数演算器１０の使用用途に応じた数値（たとえば、“３”，“３．０１”，“３．０１０３”，“３．０１０２９…”など）である。
【００２２】
べき乗数生成部１３は、最上位桁Ｍを入力して、これをデコードして２Mを生成して出力する。
除算部１４は、真数データＸを２Mでビットシフトして、Ｘ／２Mを出力する。
【００２３】
演算部１５は、（３）式の第２項を計算する。たとえば、加算器１５ａ，１５ｂと乗算器１５ｃを有している。加算器１５ａには、定数“１”が反転されたものと、除算部１４からＸ／２Mとが入力され、｛（Ｘ／２M）−１｝が演算される。一方、加算器１５ｂには、定数“５”と、反転されたＸ／２Mとが入力され、｛−（Ｘ／２M）＋５｝が演算される。乗算器１５ｃは、加算器１５ａ，１５ｂの演算結果を入力して、｛（Ｘ／２M）−１｝×｛−（Ｘ／２M）＋５｝を演算する。ここで、ｘ＝Ｘ／２Mとしたとき、（３）式の第２項、（ｘ−１）（−ｘ＋５）が得られる。
【００２４】
加算部１６は、（３）式にしたがって、乗算部１２の演算結果と、演算部１５の演算結果とを加算し、１０Ｌｏｇ（ｘ）の演算結果として出力する。
なお、１０Ｌｏｇ２の近似値や、定数“１”、定数“５”などは、たとえば、図示しないレジスタなどに格納されている。
【００２５】
図２は、最上位桁検索部の一例の回路構成を示す図である。
ここでは、８ビットの入力データに対応した回路構成の例を示している。
最上位桁検索部１１は、ＡＮＤ回路２１，２２，２３，２４，２５，２６，２７，２８、ＯＲ回路２９、デコーダ３０、ＡＮＤ回路３１、ダウンカウンタ３２、立ち上がり微分回路３３、フリップフロップ（ＦＦ）３４，３５を有している。
【００２６】
８ビット信号のＭＳＢ（Most Significant Bit）を信号７、ＬＳＢ（Least Significant Bit）を信号０とすると、信号０〜７は、ＡＮＤ回路２１〜２８の一方の入力端子に入力される。ＡＮＤ回路２１〜２８の他方の入力端子には、デコーダ３０からの選択信号ｓ０〜ｓ７が入力される。ＡＮＤ回路２１〜２８の出力はＯＲ回路２９に入力される。ＯＲ回路２９は、ＡＮＤ回路２１〜２８の出力のうち１つでも“１”があれば、“１”を出力する。
【００２７】
デコーダ３０は、ダウンカウンタ３２からの３ビットの出力に応じて選択信号ｓ０〜ｓ７を出力する。たとえば、ダウンカウンタ３２から“６”が出力された場合、デコーダ３０は、選択信号ｓ６を“１”として、他の選択信号は“０”とする。
【００２８】
ＡＮＤ回路３１は、一方の入力端子にはタイミングパルス信号を入力し、他方の入力端子にはＯＲ回路２９の出力を反転させた信号を入力している。ＯＲ回路２９の出力端子は、ダウンカウンタ３２のＥＮ端子と接続されている。
【００２９】
ダウンカウンタ３２は、ＥＮ端子が“１”の間、ＣＬＫ端子に入力されるクロック信号に同期して“７”から“０”までカウントダウンする。ＥＮ端子が“０”のときは、カウントダウンを停止する。また、ＣＬＲ端子にタイミングパルス信号（“０”）が入力されると、カウンタ値をクリアする。
【００３０】
立ち上がり微分回路３３は、ＯＲ回路２９の信号の立ち上がりを検出し、ＦＦ３４へ、入力データをラッチさせるための微分出力信号を出力する。
ＦＦ３４は、微分出力信号を検出すると、ダウンカウンタ３２のカウンタ値をラッチする。
【００３１】
ＦＦ３５は、“０”のタイミングパルス信号を検出すると、ＦＦ３４の出力をラッチして、最上位桁Ｍとして出力する。
上記のような、最上位桁検索部１１に、真数データＸ＝７０が入力された場合について説明する。“７０”は、２進数表記した場合、“０１０００１１０”となる。ダウンカウンタ３２により、“７”が出力された場合には、デコーダ３０は選択信号ｓ７のみを“１”にして、その他は“０”とする。このとき、“０１０００１１０”のＭＳＢは“０”であるため、ＯＲ回路２９の出力は“０”となる。
【００３２】
タイミングパルス信号が“１”のとき、ＡＮＤ回路３１の出力は“１”となるので、ダウンカウンタ３２は、カウントを１つダウンさせ、“６”を出力する。
このとき、デコーダ３０は選択信号ｓ６のみを“１”にして、その他は“０”とする。信号６は“１”であるので、ＡＮＤ回路２２は、“１”を出力する。よって、ＯＲ回路２９の出力も“１”となる。これにより、ＡＮＤ回路３１は“０”を出力し、ダウンカウンタ３２は、カウント動作を停止する。これと同時に、立ち上がり微分回路３３は、ＦＦ３４に微分出力信号を出力し、ダウンカウンタ３２のカウンタ値“６”をＦＦ３４にラッチさせる。ＦＦ３４にラッチされた値は、次の真数データＸの入力のタイミング（タイミングパルス信号が“０”）において、ＦＦ３５にラッチされ、最上位桁Ｍとして出力される。上記のような処理が、真数データＸの入力があるたびに繰り返されて、最上位桁の検索が行われる。
【００３３】
なお、この最上位桁検索部１１の回路構成はこれに限定されない。
次に、第１の実施の形態の対数演算器１０の動作を説明する。
図３は、対数演算器の動作を説明する図である。
【００３４】
真数データＸの量子化ビット数を“８”とした場合の、対数演算器１０の各部のビット数を図示している。
真数データＸが８ビットの場合、最上位桁検索部１１の出力は３ビットで表せる。１０Ｌｏｇ２＝３．０１（８ビットで表される）と近似した場合、乗算部１２の出力は１１ビットとなる。また、除算部１４によるＸ／２Mの割り算は、２のべき乗で割るためビットシフト演算で実現できる。除算部１４の出力は、上記の例では、ビットシフト結果の上位８ビットを演算部１５の入力としている。このビット数は、小数点以下の表示を決定するものであり、このビット数を増やせば、演算部１５での対数近似の誤差を小さくできる。この８ビットは小数点以下を含めたものである。
【００３５】
演算部１５において、加算器１５ａは、１ビットの定数“１”と前述の８ビットの“Ｘ／２M”とを入力して８ビットの演算結果を出力し、加算器１５ｂは、３ビットの定数“５”と８ビットの“Ｘ／２M”とを入力し、１０ビットの演算結果を出力する。乗算器１５ｃは、加算器１５ａ，１５ｂの演算結果を入力し、１８ビットの乗算結果を出力する。
【００３６】
加算部１６は、最上位桁Ｍに定数“３．０１”を乗算した結果の１１ビットと、演算部１５による演算結果の１８ビットとを小数点位置を合わせて加算演算を行う。そして、上位８ビットを出力する。
【００３７】
以下、真数データＸ＝３７１の場合を例にして、対数演算器１０の動作を具体的に説明する。
Ｘ＝３７１の場合、最上位桁検索部１１は、最上位桁Ｍ＝８を出力する。乗算部１２は、定数“３．０１”と“８”を乗算し、“２４．０８”を出力する。
【００３８】
べき乗数生成部１３は“８”を入力し、“２8”を生成して出力する。除算部１４はビットシフト演算を行う。ビットシフト演算の結果は、３７１÷２５６＝１．４４と同等となる。
【００３９】
ビットシフト演算した結果は、演算部１５に入力され、（３）式の第２項の演算が行われる。この出力値と先ほどの定数“３．０１”を乗算した結果の“２４．０８”とを、加算部１６にて加算し、“２５．６”を得る。この結果は１０Ｌｏｇ３７１の計算値と等しい。
【００４０】
図４は、対数変換の結果を示す図である。
ここでは、上記の第１の実施の形態の対数演算器１０で近似演算した対数変換の結果の他、折れ線近似の結果及び計算値（点線）を図示している。横軸は真数データＸ、縦軸は１０Ｌｏｇ（Ｘ）を示している。
【００４１】
図のように、折れ線近似の場合には、真数データＸが大きくなるにつれて、計算値との誤差が広がるが、第１の実施の形態の対数演算器１０によれば、計算値とほぼ一致する。
このように、第１の実施の形態の対数演算器１０によれば、メモリなども使用せずに、論理回路による小規模な回路構成で、精度のよい対数演算を行うことができる。
【００４２】
ところで、上記の具体例では、１０Ｌｏｇ２の近似値として“３．０１”を用いたが、“３．０１０３”を用いることによって、誤差を更に小さくすることができる。
図５は、１０Ｌｏｇ２の近似値として“３．０１”を用いた場合の計算値との誤差を示す図である。
【００４３】
また、図６は、１０Ｌｏｇ２の近似値として“３．０１０３”を用いた場合の計算値との誤差を示す図である。
横軸は真数、縦軸は計算値との誤差を示している。
【００４４】
図６のように、近似値“３．０１０３”を用いたほうが、誤差が小さくなっているとともに、真数の大きさによらず一定の範囲内（＋０．００７４〜−０．０３２０）での誤差となっている。
【００４５】
但し、１０Ｌｏｇ２の近似値として“３．０１０３”を用いた場合、マイナス側へオフセットがある。そのため、補正項を加えることで、オフセットを減らすことができる。
図７は、補正項を加えた場合の対数演算結果と計算値との誤差を示す図である。
【００４６】
ここでは、１０Ｌｏｇ（Ｘ）＝（３．０１０３×Ｍ）＋（ｘ−１）（−ｘ＋５）＋０．０１２３の演算結果と、計算値との誤差を示している。横軸が真数、縦軸が計算値との誤差を示している。
【００４７】
１０Ｌｏｇ２の近似値として“３．０１０３”を用いた場合、補正項として、０．０１２３を加えることで、図のように、誤差を＋０．０１９７０〜−０．０１９６９の範囲内に収めることができ、ほぼオフセットをなくすことができる。
【００４８】
上記のような補正項を加える対数演算器は、以下のように表すことができる。
図８は、第２の実施の形態の対数演算器の回路構成を示す図である。
第１の実施の形態の対数演算器１０と同一の構成要素については、同一符号としている。また、８ビットの真数データＸを入力したときの、各部のビット数を図示している。
【００４９】
第２の実施の形態の対数演算器１０ａは、第１の実施の形態の対数演算器１０と異なり、加算部１６の出力に補正項“０．０１２３”を加算する加算部１７を更に有している。また、乗算部１２には、１０Ｌｏｇ２の近似値として、定数“３．０１０３”（１５ビットで表される）を入力している。
【００５０】
上記の構成によれば、加算部１６において、それぞれ１８ビットで表される“３．０１０３×Ｍ”と、“（ｘ−１）（−ｘ＋５）”とが加算される。そして、その加算結果（１９ビット）に、補正項である定数“０．０１２３”（１３ビット）が、加算部１７にて更に加算される。加算部１７は、上位８ビットを１０Ｌｏｇ（Ｘ）の演算結果として出力する。
【００５１】
このように、第２の実施の形態の対数演算器１０ａによれば、補正項を加えることで、近似演算の誤差を、図７のように、更に小さくすることが可能になる。
なお、上記では、１０Ｌｏｇ２の近似値として定数“３．０１０３”を用いたときに加える補正項が、定数“０．０１２３”であることを示したが、これに限定されない。所望の誤差範囲に入るように変更してもよい。
【００５２】
また、１０Ｌｏｇ２の近似値も上記の例に限定されない。そして、補正項は、１０Ｌｏｇ２の近似値に応じて、所望の誤差範囲に収まるように適宜変更するようにしてもよい。
【図面の簡単な説明】
【００５３】
【図１】第１の実施の形態の対数演算器の回路構成を示す図である。
【図２】最上位桁検索部の一例の回路構成を示す図である。
【図３】対数演算器の動作を説明する図である。
【図４】対数変換の結果を示す図である。
【図５】１０Ｌｏｇ２の近似値として“３．０１”を用いた場合の計算値との誤差を示す図である。
【図６】１０Ｌｏｇ２の近似値として“３．０１０３”を用いた場合の計算値との誤差を示す図である。
【図７】補正項を加えた場合の対数演算結果と計算値との誤差を示す図である。
【図８】第２の実施の形態の対数演算器の回路構成を示す図である。
【符号の説明】
【００５４】
１０  対数演算器
１１  最上位桁検索部
１２  乗算部
１３  べき乗数生成部
１４  除算部
１５  演算部
１５ａ，１５ｂ  加算器
１５ｃ  乗算器
１６  加算部
【図１】
2008257407.tif 000003
【図２】
2008257407.tif 000004
【図３】
2008257407.tif 000005
【図４】
2008257407.tif 000006
【図５】
2008257407.tif 000007
【図６】
2008257407.tif 000008
【図７】
2008257407.tif 000009
【図８】
2008257407.tif 000010