(57)【要約】【課題】ＩＭＤＣＴ演算を行いながらも低消費電力化を図る。【解決手段】ＩＭＤＣＴモジュール２と、ＣＯＳテーブル３とを備えるフィルタバンク回路１において、ＩＭＤＣＴモジュール２は、ＣＯＳテーブル３を利用して演算を行う際に、ＣＯＳテーブル３の一部の値に対する演算結果を、その一部の値に対して周期性を有する関係にある他部の値の演算結果としてそのまま若しくは符号を反転させて使用する。【選択図】　　　　　図１
2004147214.tif 000002
【特許請求の範囲】
【請求項１】
ＩＭＤＣＴモジュールと、ＣＯＳテーブルとを備えるフィルタバンク回路において、前記ＩＭＤＣＴモジュールは、前記ＣＯＳテーブルを利用して演算を行う際に、前記ＣＯＳテーブルの一部の値に対する演算結果を、前記一部の値に対して周期性を有する関係にある他部の値の演算結果としてそのまま若しくは符号を反転させて使用することを特徴とするフィルタバンク回路。
【請求項２】
ＩＭＤＣＴモジュールを備えるフィルタバンク回路において、前記ＩＭＤＣＴモジュールは浮動小数点演算器を備え、前記浮動小数点演算器における仮数部のビット数は、要求音質を満足する最小ビット数または当該最小ビット数に余裕分のビット数を加えたビット数に、定められることを特徴とするフィルタバンク回路。
【請求項３】
浮動小数点演算形式が、符号部１ビット、指数部５ビット、仮数部１０ビットで構成されることを特徴とする請求項２記載のフィルタバンク回路。
【請求項４】
ＣＯＳテーブルを更に備え、前記ＩＭＤＣＴモジュールは、前記ＣＯＳテーブルを利用して演算を行う際に、前記ＣＯＳテーブルの一部の値に対する演算結果を、前記一部の値に対して周期性を有する関係にある他部の値の演算結果としてそのまま若しくは符号を反転させて使用することを特徴とする請求項２または３記載のフィルタバンク回路。
【請求項５】
ＩＭＤＣＴモジュールを備えるフィルタバンク回路において、前記ＩＭＤＣＴモジュールは浮動小数点演算器を備え、浮動小数点演算における仮数部の演算後に仮数部の上位桁が０となり正規化のために仮数部を２ビット以上シフトする場合に、前記シフト前における前記仮数部の最下位ビットの１つ下位のビットが１となり、更に下位のビットが０となるように、前記シフトを行なうことを特徴とするフィルタバンク回路。
【請求項６】
浮動小数点演算における仮数部の演算後に仮数部の上位桁が０となり正規化のために仮数部を２ビット以上シフトする場合に、前記シフト前における前記仮数部の最下位ビットの１つ下位のビットが１となり、更に下位のビットが０となるように、前記シフトを行なうことを特徴とする請求項２から４のいずれかに記載のフィルタバンク回路。
【請求項７】
浮動小数点演算における仮数部の演算後に仮数部の上位桁が０となり正規化のために仮数部を１ビットシフトする場合に、前記シフト前における前記仮数部の最下位ビットを反転したビットを、前記シフト後における前記仮数部の最下位ビットに挿入することを特徴とする請求項５または６記載のフィルタバンク回路。
【請求項８】
ＩＭＤＣＴモジュールを備えるフィルタバンク回路において、前記ＩＭＤＣＴモジュールは浮動小数点演算器を備え、前記浮動小数点演算器における仮数部のビット数を任意のビット数に制限すると共に、当該制限したビット数に対応する音質の評価値を求めて、要求音質を満足する最小ビット数を求めることを特徴とするフィルタバンク回路の設計支援方法。
【発明の詳細な説明】
【０００１】
【発明の属する技術分野】
本発明は、フィルタバンク回路及びその設計支援方法に関する。更に詳述すると、本発明はＭＰ３デコーダおよびエンコーダに適したフィルタバンク回路及びその設計支援方法に関する。
【０００２】
【従来の技術】
近年普及している音声圧縮技術の１つとして、ＭＰＥＧ１オーディオのレイヤ３（ＩＳＯ／ＩＥＣ　１１１７２−３）として定められているＭＰ３が挙げられる。ＭＰ３は、非常に高音質でありながら、もとのＰＣＭデータの１０分の１以下にまで圧縮ができる等の多くの利点がある。
【０００３】
パーソナルコンピュータをＭＰ３のエンコーダやデコーダとして機能させる場合、エンコードやデコード処理に際して一般に６４ビットの浮動小数点演算が行なわれる（非特許文献１参照）。この場合の浮動小数点形式は、符号部１ビット、指数部１１ビット、仮数部５２ビットで構成される。
【０００４】
また、ＭＰ３のデコーダとして機能する専用のハードウェアを構成し、デコード処理に際して３２ビットの整数演算を行なった報告がなされている（非特許文献２参照）。
【０００５】
また、ポータブルタイプＭＰ３プレーヤのデコーダあるいはエンコーダとして、ＩＭＤＣＴ（Ｉｎｖｅｒｓｅ　Ｍｏｄｉｆｉｅｄ　Ｄｉｓｃｒｅｔｅ　Ｃｏｓｉｎｅ　Ｔｒａｎｓｆｏｒｍ）の演算を行うフィルタバンク回路を搭載したものがある。このＩＭＤＣＴ演算では、離散コサイン変換を利用した手法で音楽データを圧縮したり圧縮したデータを復元したりする。そして、離散コサイン変換では複雑なコサインの計算をする必要があるので、ＣＯＳテーブルを利用して計算量の低減を図っている（非特許文献１参照）。
【０００６】
【非特許文献１】
インターネット＜ＵＲＬ：ｆｔｐ：／／ｆｔｐ．ｕｎｔ．ｕｎｉ−ｈａｎｎｏｖｅｒ．ｄｅ／ｐｕｂ／ＭＰＥＧ／ａｕｄｉｏ／ｍｐｅｇ２／ｓｏｆｔｗａｒｅ／ｔｅｃｈｎｉｃａｌ＿ｒｅｐｏｒｔ／ｄｉｓｔ１０．ｔａｒ．ｇｚ＞
【非特許文献２】
インターネット＜ＵＲＬ：ｈｔｔｐ：／／ｗｗｗ．ｍａｒｓ．ｏｒｇ／ｈｏｍｅ／ｒｏｂ／ｐｒｏｊ／ｍｐｅｇ／＞
【０００７】
【発明が解決しようとする課題】
しかしながら、ＭＰ３では高音質高圧縮を実現するために非常に多くの計算を必要とする。また、特にデコーダではリアルタイムでの動作を必ず要求される。ソフトウェアによってＭＰ３のエンコーダやデコーダを実現する場合、非常に高速なプロセッサ必要となる。高速なプロセッサは消費電力が非常に大きく、高価である。一方、ＭＰ３のエンコーダやデコーダを専用のハードウェアとして実現する場合、ソフトウェアで実現する場合と比較すれば、必要な処理速度を満足しつつ、回路サイズの縮小化および低消費電力化を図ることはできるが、ポータブルタイプのＭＰ３機器等においては更なる小型化、低消費電力化が渇望されている。ＭＰ３のエンコーダやデコーダのハードウェア化にあたっては、ＩＭＤＣＴ処理が特に演算量が多く、更なる小型化、低消費電力化を実現する際の隘路になっている。従来のＩＭＤＣＴ処理ではＣＯＳテーブルの全範囲のデータを使用して乗算および加算を行っているので、演算量が非常に多い。
【０００８】
そこで、本発明は、ＩＭＤＣＴ演算を行いながらも小型化及び低消費電力化を図ることができるフィルタバンク回路を提供することを目的とする。
【０００９】
【課題を解決するための手段】
かかる目的を達成するため、本願発明者が鋭意検討したところ、ＣＯＳテーブルには周期性があるため、その基本パターンのデータに対する演算結果をそのまま若しくは符号を反転させることにより他の周期的な部分の演算結果として利用可能なことを見出した。
【００１０】
かかる知見に基づく請求項１記載の発明は、ＩＭＤＣＴモジュールと、ＣＯＳテーブルとを備えるフィルタバンク回路において、ＩＭＤＣＴモジュールは、ＣＯＳテーブルを利用して演算を行う際に、ＣＯＳテーブルの一部の値に対する演算結果を、その一部の値に対して周期性を有する関係にある他部の値の演算結果としてそのまま若しくは符号を反転させて使用するようにしている。
【００１１】
したがって、ＣＯＳテーブルの一部の値に対する演算結果を他部の値の演算結果としてそのまま若しくは符号を反転させて利用しているので、従来のようにＣＯＳテーブルの全範囲のデータを使用して乗算および加算を行う場合に比べてＩＭＤＣＴ処理における重複演算を削減することができる。
【００１２】
また、本願発明者が、浮動小数点形式の仮数部のビット数を変化させて、当該変化させた各浮動小数点形式での演算に基づく音質を調べたところ、従来用いられている浮動小数点形式の仮数部のビット数よりも遥かに少ないビット数であっても、要求仕様を満足する音質を得られることを知見するに至った。
【００１３】
かかる知見に基づく請求項２記載の発明は、ＩＭＤＣＴモジュールを備えるフィルタバンク回路において、ＩＭＤＣＴモジュールは浮動小数点演算器を備え、浮動小数点演算器における仮数部のビット数は、要求音質を満足する最小ビット数または当該最小ビット数に余裕分のビット数を加えたビット数に、定められるものとしている。したがって、このように仮数部のビット数を決定することによって、要求音質を満足する範囲で、仮数部のビット数を従来の浮動小数点形式よりも削減することができる。
【００１４】
また、請求項３記載の発明は、請求項２記載のフィルタバンク回路において、浮動小数点演算形式が、符号部１ビット、指数部５ビット、仮数部１０ビットで構成されるものとしている。したがって、要求音質を満足させつつ、浮動小数点演算形式のビット数を従来よりも削減することができる。
【００１５】
また、請求項４記載の発明は、請求項２または３記載のフィルタバンク回路において、ＣＯＳテーブルを更に備え、ＩＭＤＣＴモジュールは、ＣＯＳテーブルを利用して演算を行う際に、ＣＯＳテーブルの一部の値に対する演算結果を、一部の値に対して周期性を有する関係にある他部の値の演算結果としてそのまま若しくは符号を反転させて使用するようにしている。したがって、従来のようにＣＯＳテーブルの全範囲のデータを使用して乗算および加算を行う場合に比べてＩＭＤＣＴ処理における重複演算を削減することができる。
【００１６】
また、請求項５記載の発明は、ＩＭＤＣＴモジュールを備えるフィルタバンク回路において、ＩＭＤＣＴモジュールは浮動小数点演算器を備え、浮動小数点演算における仮数部の演算後に仮数部の上位桁が０となり正規化のために仮数部を２ビット以上シフトする場合に、シフト前における仮数部の最下位ビットの１つ下位のビットが１となり、更に下位のビットが０となるように、シフトを行なうようにしている。この場合、仮数部の正規化に起因する最大誤差の大きさを半分にできる。
【００１７】
また、請求項６記載の発明は、請求項２から４のいずれかに記載のフィルタバンク回路において、浮動小数点演算における仮数部の演算後に仮数部の上位桁が０となり正規化のために仮数部を２ビット以上シフトする場合に、シフト前における仮数部の最下位ビットの１つ下位のビットが１となり、更に下位のビットが０となるように、シフトを行なう行なうようにしている。この場合、浮動小数点演算形式のビット数を従来よりも削減しつつ、仮数部の正規化に起因する最大誤差の大きさを半分にできる。
【００１８】
また、請求項７記載の発明は、請求項５または６記載のフィルタバンク回路において、浮動小数点演算における仮数部の演算後に仮数部の上位桁が０となり正規化のために仮数部を１ビットシフトする場合に、シフト前における仮数部の最下位ビットを反転したビットを、シフト後における仮数部の最下位ビットに挿入するようにしている。この場合、正規化補正値をある程度散らばらせることができ、全体としての演算誤差の累積を低減できる。
【００１９】
また、請求項８記載のフィルタバンク回路の設計支援方法は、ＩＭＤＣＴモジュールを備えるフィルタバンク回路において、ＩＭＤＣＴモジュールは浮動小数点演算器を備え、浮動小数点演算器における仮数部のビット数を任意のビット数に制限すると共に、当該制限したビット数に対応する音質の評価値を求めて、要求音質を満足する最小ビット数を求めるようにしている。したがって、当該最小ビット数に基づいて仮数部のビット数を決定することによって、要求音質を満足する範囲で、仮数部のビット数を従来の浮動小数点形式よりも削減することができる。
【００２０】
【発明の実施の形態】
以下、本発明の構成を図面に示す最良の形態に基づいて詳細に説明する。
【００２１】
図１〜図５に本発明に係るフィルタバンク回路１の実施形態の一例を示している。このフィルタバンク回路１は、ＩＭＤＣＴモジュール２と、ＣＯＳテーブル３とを備えるものである。そして、ＩＭＤＣＴモジュール２は、ＣＯＳテーブル３を利用して演算を行う際に、ＣＯＳテーブル３の一部の値に対する演算結果を、その一部の値に対して周期性を有する関係にある他部の値の演算結果としてそのまま若しくは符号を反転させて使用するようにしている。このため、従来のようにＣＯＳテーブル３の全範囲のデータを使用して乗算および加算を行う場合に比べて、ＩＭＤＣＴ処理における重複演算を削減して、回路サイズを縮小化でき消費電力を小さくすることができる。
【００２２】
本実施形態のフィルタバンク回路１は、上述したＩＭＤＣＴモジュール２と、ＣＯＳテーブル３を含む係数テーブル４と、入力メモリ５と、出力メモリ６とを備えている。各部の構成の一例を表１に示す。
【表１】
2004147214.tif 000003
【００２３】
例えば本実施形態では、フィルタバンク回路１をＭＰ３用デコーダのＩＭＤＣＴ処理用回路として使用している。但し、フィルタバンク回路１はＭＰ３用エンコーダに使用しても良い。エンコーダも定数が異なるのみでデコーダと同一のフィルタバンク回路１を利用することができる。
【００２４】
ＭＰ３のデコードはグラニュール単位で行なわれる。１グラニュールは、１８サンプルから成る３２個のサブバンドから構成されている。ＩＭＤＣＴ処理は、基本的に各サブバンド単位で処理が行なわれる。ＩＭＤＣＴ処理は、図１５に示すように、大きくＩＤＣＴ、窓関数処理、オーバーラップ　アディションの３つの部分に分けることができる。
【００２５】
ＩＭＤＣＴ処理で必要になる三角関数の演算については、全て係数テーブル４に格納した値を用いる。係数テーブル４はＣＯＳテーブル３とＳＩＮテーブル７とを有する。各テーブル３，７は、事前に計算を行い配列に格納している。
【００２６】
サブバンドがロングブロックのときに用いられるＣＯＳテーブル３は数式１のように定義して配列に格納されている。
【数１】
2004147214.tif 000004
【００２７】
サブバンドがショートブロックのときに用いられるＣＯＳテーブル３は数式２のように定義して配列に格納されている。
【数２】
2004147214.tif 000005
【００２８】
実際にメモリに載せるときは、各ｉ毎に別々のメモリに格納されている。
【００２９】
そして、窓関数処理（ＷＩＮＤＯＷ処理）に用いられるＳＩＮテーブル７は、ブロックタイプにより全く異なるものとなっている。よって、数式３に示すように、各ブロックタイプ毎に配列を作成し格納している。
【数３】
ＳＩＮ［ブロックタイプ］［ｉ］
【００３０】
ＳＩＮテーブル７は、ＣＯＳテーブル３と違って処理には何も変更が無いので、ｉに対する値をそのまま格納している。
【００３１】
ＩＭＤＣＴモジュール２は、ステート（ハードウェアの回路の状態）の遷移でＩＭＤＣＴ処理を行うものとしている。そのため、パイプライン化などのような高速化には向かないものの、複数のステートでリソースを共有できるので、回路規模の点で有利になる。また、ＩＭＤＣＴ処理は、処理速度に十分余裕がある場合には入出力メモリ６を読み書きする間は止めるようにしても良い。
【００３２】
ＩＭＤＣＴ処理のおおまかな状態遷移を図２に示す。このフィルタバンク回路１では、基本的に各サブバンド単位でＩＭＤＣＴ処理を行うようにしている。まず、サブバンドセレクトで一つのサブバンドを選択し（ステップ１）、ブロックタイプがロングブロックかショートブロックかを判断する（ステップ２）。ロングブロックであればＤＣＴ１８（ステップ３）、ショートブロックであればＤＣＴ１２（ステップ４）の処理をそれぞれ行う。
【００３３】
ここで、ＤＣＴ１８およびＤＣＴ１２の処理について説明する。ＩＭＤＣＴモジュール２では、最初の処理として入力に対してＣＯＳテーブル３の乗算を行う。例えばロングブロックの場合は、数式４に示す計算を行う。尚、Ｎ［ｋ］は、ハフマン復号（逆量子化後の入力データビット流）を表す。
【数４】
2004147214.tif 000006
【００３４】
ここで、このロングブロックのＣＯＳテーブル３には数式５に示す周期性がある。
【数５】
2004147214.tif 000007
【００３５】
この周期性からＭＩＤ［ｉ］には数式６のような関係がある。
【数６】
2004147214.tif 000008
【００３６】
この関係より、ｉ＝９〜２６の間でのＭＩＤ［ｉ］さえ求めれば、残りはコピーか符号の反転とコピーで同じ処理ができる。これにより、乗算および加算ともに５０％ずつ削減できる。また、ＣＯＳテーブル３のサイズは半分で済む。よって、演算量およびテーブルの削減を図ることができるので、回路サイズの縮小化および消費電力の低減を図ることができる。
【００３７】
ショートブロックの場合も同様の関係が成り立つ。このＭＩＤ［ｉ］は数式７のようになる。
【数７】
2004147214.tif 000009
【００３８】
よって、この場合も乗算および加算をやはり５０％ずつ削減でき、テーブルサイズを半分にすることができる。
【００３９】
ＤＣＴ１８の状態遷移を図３に示す。これは、ロングブロックのときに行われるＩＤＣＴおよび窓関数処理（ＷＩＮＤＯＷ処理）の部分である。最初に、出力の９から２６番目に当たる部分のＩＤＣＴ処理のみを行う。これは、図３のテーブルセレクト（ステップ６）、乗算加算（ステップ７）、メモリへの格納（ＭＥＭ　ＳＴ）（ステップ８）のループに相当する。ＣＯＳテーブル３は、通常３６×１８で構成されるが、本発明ではテーブルを半減できることから１８×１８で十分となっている。このループで、入力とＣＯＳ係数の乗算および総和が行われる。この結果は、出力メモリ６に格納される。この出力メモリ６は出力にも使われるが、この処理中では一時作業用（テンポラリ）としても用いる。これにより、メモリが節約されている。
【００４０】
この段階では、出力全体の半分しか求まっていない。しかし、上述した通りコピーで代用可能であるので、まだ値の入っていない出力メモリ６のフィールドヘコピーしていく（ステップ９）。このとき、出力の前半部分にコピーするときは符号の反転が必要になる。最後に窓関数処理（ＷＩＮＤＯＷ処理）が行なわれる（ステップ１０）。ここでは特に特殊なことは行っていない。
【００４１】
また、ＤＣＴ１２の状態遷移を図４に示す。これは、ショートブロック用のＩＤＣＴであり、多少の違いはあるものの基本的にはＤＣＴ１８と同じ構成が取られている。
【００４２】
まず、ショートブロックではサブバンドを更に３つに分けて扱う。ここでは、この範囲をサブサブバンド（ＳＳＢ）と呼ぶ。本実施形態では、入力の読み込み方でＳＳＢの切替えを行っている。具体的には、次のような処理を行なう。即ち、入力データ流は、ＳＳＢ０，ＳＳＢ１，ＳＳＢ２，ＳＳＢ０，ＳＳＢ１，ＳＳＢ２，…の順で並んでいる。そこで、この入力データ流を格納したバッファをそのまま利用して後続の処理を行う。例えば、ＳＳＢ１のデータを取得するには、ＳＳＢ０のデータアドレスにデータ幅を加えて取り出す。ＳＳＢ２のデータを取得するには、ＳＳＢ０のデータアドレスにデータ幅の二倍の値を加えて取り出す。このような処理を行なうことにより、バッファの内容を他のメモリ領域にコピーして並べ替えたりする場合よりも、メモリの必要量が少なくなる。これにより、無駄な記憶素子を使わないようにしている。
【００４３】
ＳＳＢが選択されると（ステップ１１）、出力の３から８番目に当たる部分のＩＤＣＴ処理のみを行う。これは、図４のテーブルセレクト（ステップ１２）、乗算加算（ステップ１３）、メモリへの格納（ＭＥＭ　ＳＴ）（ステップ１４）のループに相当する。この結果を出力メモリ６に格納しておくが、このときメモリに図５のようにデータを書き込む。これは後の加算処理（ステップ１７）や窓関数処理（ＷＩＮＤＯＷ処理）などでの手軽さを考慮してのことである。また、まだ値の入っていない出力メモリ６のフィールドヘもコピーしていく（ステップ１５）。この後、各ＳＳＢ毎に窓関数処理（ＷＩＮＤＯＷ処理）が行なわれる（ステップ１６）。
【００４４】
全てのＳＳＢのＩＤＣＴが終ると、図４の加算処理が行われる（ステップ１７）。このとき、ＳＳＢ０、ＳＳＢ２は動かさずに、ＳＳＢ１の値を対応するところに足し加えていく。加算が終了すると、ＳＳＢ１のあったところにゼロが書き込まれる。
【００４５】
以上のようにしてＤＣＴステートから抜けると、図２に示すように一つ前のグラニュールのデータと重ね合わせるオーバーラップアディションを行う（ステップ５）。この処理はブロックタイプには依存しないので、流れが一つにまとまる。一つのサブバンドの処理としてはこれで完結する。あとは、１グラニュール分のサブバンドだけこの処理を繰り返す。すべてのサブバンドを処理し終えると、ＩＭＤＣＴモジュール２の処理は終了する。
【００４６】
また、本実施形態のフィルタバンク回路１のＩＭＤＣＴモジュール２は、浮動小数点演算器８を備えている。そして、浮動小数点演算器８における仮数部のビット数は、要求音質を満足する最小ビット数、または当該最小ビット数に余裕分のビット数を加えたビット数に、設定するようにしている。仮数部のビット数を減少させれば、浮動小数点演算の精度は落ちるが、演算速度は高まり、必要な回路サイズは縮小化でき、消費電力も低減できる。したがって、必要とされる演算精度が定められているならば、その精度を満たす、最も省コストなデータフォーマットを採用することが望ましい。そこで、例えば本実施形態では、要求音質を満足する最小ビット数を求めるために、浮動小数点演算器８における仮数部のビット数を任意のビット数に制限して、当該制限したビット数に対応する音質の評価値を求めるようにしている。
【００４７】
浮動小数点演算器８における仮数部のビット数を任意のビット数に制限する方法としては、実際に仮数部のビット数を制限したハードウェアを作製する方法、既存のハードウェアを用いてソフトウェアでの処理により仮数部のビット数を制限するシミュレーションを行なう方法、が考えられるが、後者の方が前者に比較して一般に安価且つ簡易であり好ましい。例えば、本実施形態では、ベースとなるＭＰ３デコード環境として、京都大学の提供する協調シミュレーション環境（第１９回パルテノン研究会資料集　ＡＳＩＣデザインコンテスト規定課題　ＭＰ３デコーダのＩＭＤＣＴ処理のハードウェア化にアナウンスされ、コンテストＷＥＢサイトで配布方法が指示されるＭＰ３デコーダＨＷ／ＳＷ協調検証環境である。参考ＵＲＬは、ｈｔｔｐ：／／ｗｗｗ．ｋｅｃｌ．ｎｔｔ．ｃｏ．ｊｐ／ｐａｒｔｈｅｎｏｎ／ｈｔｍｌ／ｃｏｎｔｅｓｔ／ｍｐ３＿０１／ｉｎｄｅｘ．ｈｔｍｌ）を用いる。このシミュレーション環境は、論理シミュレータＳＥＣＯＮＤＳと、Ｃ言語で用いるライブラリｒｕｎｓｅｃｏｎｄｓとを用いて、ハードウェアとソフトウェアを協調動作させることのできるものである。例えばこのシミュレーション環境内で、全ての浮動少数点演算の直後に、以下に説明する処理を施すことによって、仮数部のビット数を任意のＮビットに制限することができる。
【００４８】
浮動小数点数を、Ｃ言語で用いられるｆｒｅｘｐ関数を用いて、仮数部と指数部とに分離する。このとき、仮数部は０．５以上１．０未満に正規化される。そして、当該分離された仮数部に対して数式８から数式１０に示す演算を行い、Ｎビットに制限した仮数部を求める。ここで、浮動小数点数をｆとし、仮数部をｆｆとし、指数部をｆｅとし、制限するビット数をＮとし、Ｎビットに制限した仮数部をｆｆ’’’とする。上記の処理は、正負毎にそれぞれ行なう。上記の処理を全ての浮動小数点演算の直後に施すことによって、ほぼ正確に仮数部のビット数をＮビットに制限することができる。尚、数式８および数式９中の「ｉｎｔ（　）」とは、（　）内の値を整数型に変換する関数である。また、数式９中の「＆」は論理積演算を表し、「０ｘ０００１」は論理値の１を表す。数式９中の「＆（０ｘ０００１）」の演算は、整数型に変換するときに四捨五入をするように有効桁の一つ下の桁に論理値の１を足すものである。
【００４９】
【数８】
ｆｆ’＝ｉｎｔ（ｆｆ×２Ｎ＋１）
【数９】
ｆｆ”＝ｉｎｔ（ｆｆ×２Ｎ＋２）＆（０ｘ０００１）
【数１０】
ｆｆ’’’＝ｆｆ’＋ｆｆ”
【００５０】
そして、仮数部のビット数Ｎを様々に変化させた場合の各演算結果に基づく出力データのそれぞれについて、音質の評価値を求める。音質評価方法としては、例えば、ＭＰ３デコーダの規格に定められているＣｏｍｐｌｉａｎｃｅ　Ｔｅｓｔを用いる。Ｃｏｍｐｌｉａｎｃｅ　Ｔｅｓｔは、リファレンスのデコードデータと、設計したデコーダの出力とを、数式１１を用いて比較するものである。
【００５１】
【数１１】
2004147214.tif 000010
ここで、
Ｎ：サンプル数
ｔｉ：リファレンスデータ
ｒｉ：デコードデータ
【００５２】
リファレンスデータｔｉ，デコードデータｒｉは−１．０から＋１．０の間で振幅を取るように調整される。数式１１により得られる評価値がＭＰ３デコーダの性能を示す。この値は表２に示す３段階に分けられる。ＭＰ３デコーダの要求仕様は、Ｌｉｍｉｔｅｄ　Ａｃｃｕｒａｃｙ以上の音質である。
【表２】
2004147214.tif 000011
【００５３】
仮数部のビット数Ｎと、ビット数Ｎに対応する音質の評価値との関係を、図１６に示す。ＭＰ３デコーダの要求仕様であるＬｉｍｉｔｅｄ　Ａｃｃｕｒａｃｙ以上の音質を満たすには、ＩＭＤＣＴ処理における浮動小数点演算の仮数部には、９ビット以上が必要であることが分かる。また、仮数部が１５ビットを越えるあたりからは、音質の評価値が飽和することが分かる。これは、ＩＭＤＣＴ処理以外のＭＰ３の演算処理（例えば、逆量子化処理、アンチエイリアス処理など）における誤差が、ＩＭＤＣＴ処理の精度に対し充分でないためと考えられる。
【００５４】
浮動小数点演算器８における仮数部のビット数は、要求音質を満足する最小ビット数である９ビットであっても良いが、最小ビット数である９ビットに、余裕分のビット数を加えたビット数に設定することがより好ましい。ビット数に余裕を持たせることにより、演算器の計算誤差による精度不足を補うことができる。ここで、メモリのビット幅は８の倍数が多いため、ＣＰＵの構造も８の倍数で数値を取り扱うことが多い。そこで、浮動小数点形式のデータフォーマット全体でのビット数が８の倍数となるように、余裕分のビット数を決定することが好ましい。また、仮数部は暗黙の１を有するようにしても良い。即ち、仮数部は、数値「１．Ｍ」の「Ｍ」を表現するようにし、仮数部の最上位桁は必ず１であることを保証する。暗黙の１を有することにより、仮数部のビット数は事実上１ビット増える。例えば本実施形態では、余裕分として１ビットを加えて仮数部を１０ビットとすると共に、仮数部は暗黙の１を有するようにしている。したがって、仮数部は、事実上１１ビットの精度を有し、要求音質を満足する最小ビット数である９ビットに対して、２ビットの余裕を有する。
【００５５】
また、本願発明者等が種々実験した結果、ＭＰ３でエンコードした１００曲程度の音楽データや音声データを統計的に処理したデータ流を集計したところ、指数部は、０から−４１の間に分布することが知見された。また、本願発明者等が種々実験した結果、指数部は０から−３１の範囲をカバーすれば、ＭＰ３デコーダの要求仕様であるＬｉｍｉｔｅｄ　Ａｃｃｕｒａｃｙ以上の音質を満たすことが知見された。指数部が０から−３１の間に分布するデータ以外のデータに関しては、飽和演算を行うことで、多少の誤差は出ても聴覚上は区別できない程度のものと考えられる。ここでいう飽和演算とは、予め定めた最大値（例えば２の０乗）を超える大きなデータは全て当該最大値（例えば２の０乗）として扱い、予め定めた最小値（例えば２の−３１乗）を下回る小さなデータは全て当該最小値（例えば２の−３１乗）とみなす演算のことを意味する。そこで、本実施形態では、指数部を５ビットとし、指数の絶対値を取ったものを指数部に格納する。
【００５６】
本実施形態における浮動小数点形式のデータフォーマットの例を表３に示す。
【表３】
2004147214.tif 000012
【００５７】
【実施例】
上述したフィルタバンク回路１全体をハードウェア記述言語の一つであるＳＦＬ（Ｓｔｒｕｃｔｕｒｅｄ　Ｆｕｎｃｔｉｏｎ　ｄｅｓｃｒｉｐｔｉｏｎ　Ｌａｎｇｕａｇｅ）を用いて記述した。尚、本実施例では、論理合成プログラムによるハードウェアの生成までは行なわず、シミュレーションによってフィルタバンク回路１の動作確認を行なった。ここで、ＩＭＤＣＴモジュール２内で使われる浮動小数点演算器８は、できるだけ回路を小さくするため、浮動小数点加算回路と浮動小数点乗算回路において演算処理に必要なモジュールを共有して用いるように設計した。演算回路の大きな部分を占める入出力レジスタや加算器等を共有するため、乗算器と加算器を統合した。この浮動小数点演算器８の構成の一例を図６に示す。この浮動小数点演算器８の主な構成要素は、Ｉ／Ｏレジスタ９として１７ビットレジスタを３つ、１１ビット加算器１０を１つ、１１ビットシフタ１１を１つ、４ビットインクリメンタ１２を１つとした。
【００５８】
これらの構成要素を共有して用いることにより、余分なゲートを消費しないようにした。もちろん浮動小数点の乗加算を行うので、これだけのリーソスでは１クロックで計算することはできない。この浮動小数点演算器８では、乗算に約１４クロック、加算に約６クロックを要する。この処理の流れを図７に示す。
【００５９】
この浮動小数点演算器８の合成結果は、回路サイズを表すゲート数が２６０１であるのに対して遅延時間が１９．７７ｎｓであった。ここでは、入力遅延は考えていない。したがって、従来の加算乗算回路と比べると、ゲート数は削減できたと考えられる。
【００６０】
表４に使用しているメモリを示す。尚、「ｒ６４＿８」とは、ＳＦＬ言語処理系が標準で用意しているメモリのライブラリであり、６４ワード、８ビット幅のメモリブロックを表している。
【表４】
2004147214.tif 000013
【００６１】
データを１６ビットで構成しているので、８ビットのメモリを組み合わせて使用している。使われていない領域が多くなっているが、それはこれ以上小さなメモリが無かったためであり、実際にはもっと少なく済むと考えられる。また、実装時に無駄な部分を切れば済む。
【００６２】
本設計では、回路でゲート数が増えるより、メモリの方がコストがかからないという考えに基づき設計を行っているので、メモリサイズの縮小はさほど行わなかった。
【００６３】
入力メモリ５および出力メモリ６の構成を図８に示す。また、入力メモリ５の利用方法を図９に示す。入力データをＩＮ［ｓｂ］［ｓｓ］と表したとき、各サブバンドＩＮ［ｓｂ］毎に別々のメモリを用いるようにした。入力メモリ５では１８エントリのみ利用する。エントリは一つのアドレスで示されるデータ記録領域を指しており、即ち、入力メモリ５では、０番地（二進数では００００００）から１７番地（二進数では０１０００１）を利用する。また、出力メモリ６の利用方法を図１０に示す。出力データをＯＵＴ［ｓｂ］［ｓｓ］と表したとき、各サブバンドＯＵＴ［ｓｂ］毎に別々のメモリを用いるようにした。さらに、メモリ領域の前半は出力とワークとして、後半の４６番地（二進数では１０１１１０）から６３番地（二進数では１１１１１１）はオーバーラップアディションの記憶領域とした。
【００６４】
さらに、ＣＯＳテーブルメモリ１３の構成を図１１に示す。ここでは、数式６で示したように最低限必要なだけのテーブル、すなわち９〜２６までのみ用意している。また、ＣＯＳテーブルメモリ１３の利用方法を図１２に示す。テーブルをＣＯＳ［ｉ］［ｋ］と表すと、ＩＤＣＴ時に使われる単位であるＣＯＳ［ｉ］毎に、別々のメモリを割り当てている。尚、ロング用ＣＯＳテーブルと、ショート用ＣＯＳテーブルとは、別々のメモリに格納しているが、格納の形式はｋの範囲が異なるだけで同一である。
【００６５】
そして、ＳＩＮテーブルメモリ１４の構成を図１３に、ＳＩＮテーブルメモリ１４の利用方法を図１４に示す。テーブルをＳＩＮ［ブロックタイプ］［ｋ］と表すと、ＳＩＮ［ブロックタイプ］毎に別々のメモリを割り当てている。
【００６６】
以上のように　ＳＦＬで記述したフィルタバンク回路１の合成結果を表５に示す。但し、入力遅延は考えない。尚、表５中の回路サイズはゲート数で表している。
【表５】
2004147214.tif 000014
【００６７】
また、ＳＦＬで記述したフィルタバンク回路１について、上述した京都大学の提供する協調シミュレーション環境を用いて、シミュレーションを行い、その結果をｃｏｍｐｌｉａｎｃｅ　ｔｅｓｔによって評価した。結果を表６に示す。
【表６】
2004147214.tif 000015
【００６８】
この結果より、フィルタバンク回路１はｌｉｍｉｔｅｄ　ａｃｃｕｒａｃｙを十分に満たしていることが分かった。
【００６９】
さらに、フィルタバンク回路１のｃｏｍｐｌｉａｎｃｅ　ｔｅｓｔを行ったときのクロック数を表７に示す。
【表７】
2004147214.tif 000016
【００７０】
４８ｋＨｚステレオの信号には、１秒間に約１６６グラニュール分のデータが含まれる。よって、約６ｍｓ以内に１グラニュールを処理しなければならない。今回設計した回路では、１グラニュールの処理に表７に示すように、１１２０３４クロックを要する。また、このクロック数には入出力メモリ５，６の分のクロックが入っていない。これを加えると、１グラニュールの処理には、約１２００００クロック程かかると考えられる。
【００７１】
よって、この回路は１秒間に約４８０グラニュール分のデータを処理できることになる。この性能は４８ｋＨｚステレオの信号を処理するのに十分な性能である。
【００７２】
この値はオーバースペックであるものの、消費電力の点から考えると非常に有効である。消費電力には動作周波数が効いて来る。この回路を４８ｋＨｚのデータで用いるには２０ＭＨｚ程度で十分であるので、無駄な電力消費が避けられると考えられる。
【００７３】
なお、上述の形態は本発明の好適な形態の一例ではあるがこれに限定されるものではなく本発明の要旨を逸脱しない範囲において種々変形実施可能である。例えば、本実施形態ではフィルタバンク回路１をＭＰ３用デコーダに使用しているが、これには限られずエンコーダに使用しても良い。
【００７４】
また、上述のフィルタバンク回路１は、ＣＯＳテーブル３の周期性を利用して演算量を削減する特徴点と、浮動小数点形式のビット数を削減する特徴点との双方を備えるものであったが、いずれか一方の特徴点のみを備えるものであっても良い。
【００７５】
また、桁落ち（絶対値が近い正数と負数の加算によって有効桁数が減少すること）による誤差を低減するために、浮動小数点演算において、次のような処理を行なうようにしても良い。即ち、仮数部の加算等の演算後に仮数部の上位桁が０となり正規化のために仮数部を左シフトする場合であって、２ビット以上の左シフトを行なう場合には、当該左シフト前における仮数部の最下位ビット（ＬＳＢ）の１つ下位のビットを’１’とし、更に下位のビットを’０’として、当該左シフトを行なうようにしても良い。換言すれば、２ビット以上の左シフトを行なうにあたり、１ビット目のシフト時には、最下位ビットに’１’を挿入し、以後のシフト時には、最下位ビットに’０’を挿入する。これにより、最大誤差の大きさを半分にでき、左シフト時にすべて’０’を挿入する従来の方法よりも、期待誤差を小さくできる。例えば、表３に示す浮動小数点形式で表現される二つの数値があって、一方が正であり、他方が負であるとする。そして、当該一方の仮数部が「１０１０１０１０１１」であり、当該他方の仮数部が「１０１０１０１０１０」であるとする。この二つの数値の指数部の値は等しいとする。この二つの数値の仮数部の加算結果は「０００００００００１」となる。左シフト時にすべて’０’を挿入する従来の方法で仮数部の正規化の処理を行うと、仮数部に暗黙の１があるため、仮数部は「００００００００００」となり、指数部から１０が減算される。しかし、本来の仮数部の値は「００００００００００」から「１１１１１１１１１１」の間にあるはずであり、このままでは最大誤差が「１１１１１１１１１１」となってしまう。そこで、仮数部の加算後に仮数部の上位桁が０となり正規化のために仮数部を２ビット以上左シフトする場合に、当該左シフト前における仮数部の最下位ビットの１つ下位のビットを’１’とし、更に下位のビットを’０’として、当該左シフトを行なう。これにより、正規化後の仮数部は「１０００００００００」となる。従って、最大誤差の大きさを半分にできる。
【００７６】
また、仮数部の加算等の演算後に仮数部の上位桁が０となり正規化のために仮数部を左シフトする場合であって、１ビットの左シフトを行なう場合には、当該左シフト前における仮数部の最下位ビット（ＬＳＢ）を反転したビットを、当該左シフト後における仮数部の最下位ビットに挿入するようにしても良い。この場合、正規化補正値をある程度散らばらせることができ、全体としての演算誤差の累積が低減することが期待できる。例えば、表３に示す浮動小数点形式で表現される二つの数値があって、一方が正であり、他方が負であるとする。そして、当該一方の仮数部が「１１１０１０１０１１」であり、当該他方の仮数部が「０１１０１０１０１０」であるとする。この二つの数値の指数部の値は等しいとする。この二つの数値の仮数部の加算結果は「１００００００００１」となり、仮数部の暗黙の１を考慮すると、正規化のために１ビットの左シフトが必要になる。正規化後の仮数部は、「００００００００１０」から「００００００００１１」の間の数が正しい数値となる。ここで、左シフト時に必ず’１’または’０’のどちらかを挿入することは、出力データの偏りをもたらし、好ましくないと思われる。そこで、当該左シフト前における仮数部の最下位ビットを反転したビットを、当該左シフト後における仮数部の最下位ビットに挿入することで、正規化補正値をある程度散らばらせることができる。これにより、全体としての演算誤差の累積が低減することが期待できる。
【００７７】
尚、上述した仮数部シフト時の処理は、上述の実施形態で説明したＣＯＳテーブル３の周期性を利用して演算量を削減する特徴点と、浮動小数点形式のビット数を削減する特徴点の一方または双方と組み合わせて行なっても良いが、浮動小数点演算器を備えるフィルタバンク回路において、上述した仮数部シフト時の処理だけを独立して行なうようにしても良い。
【００７８】
【発明の効果】
以上説明したように、請求項１記載のフィルタバンク回路によれば、ＣＯＳテーブルの一部の値に対する演算結果を他部の値の演算結果としてそのまま若しくは符号を反転させて利用しているので、従来のようにＣＯＳテーブルの全範囲のデータを使用して乗算および加算を行う場合に比べてＩＭＤＣＴ処理における重複演算を削減して、回路サイズ及び消費電力を小さくすることができる。
【００７９】
請求項２及び３記載のフィルタバンク回路および請求項５記載のフィルタバンク回路の設計支援方法によれば、要求音質を満足する範囲で、仮数部のビット数を従来の浮動小数点形式よりも削減することができ、回路サイズ及び消費電力を小さくすることができる。
【００８０】
請求項５及び６記載のフィルタバンク回路によれば、仮数部の正規化に起因する最大誤差の大きさを半分にできる。
【００８１】
請求項７記載のフィルタバンク回路によれば、正規化補正値をある程度散らばらせることができ、全体としての演算誤差の累積を低減できる。
【００８２】
請求項４記載のフィルタバンク回路によれば、ＣＯＳテーブルの全範囲のデータを使用して乗算および加算を行う場合に比べてＩＭＤＣＴ処理における重複演算を削減でき、且つ、仮数部のビット数を従来の浮動小数点形式よりも削減でき、更なる回路サイズの縮小化及び低消費電力化を実現できる。
【図面の簡単な説明】
【図１】本発明に係るフィルタバンク回路の一例を示すブロック図である。
【図２】ＩＭＤＣＴモジュールでの状態遷移の一例を示すフローチャートである。
【図３】ロングブロックの処理の状態遷移の一例を示すフローチャートである。
【図４】ショートブロックの処理の状態遷移の一例を示すフローチャートである。
【図５】ショートブロックの処理におけるメモリへのデータの書き込み方法の一例を示す図である。
【図６】浮動小数点演算器の一例を示すブロック図である。
【図７】浮動小数点演算器での乗算および加算の処理の一例を示すフローチャートである。
【図８】入力メモリおよび出力メモリの構成の一例を示す図である。
【図９】入力メモリの利用方法の一例を示す図である。
【図１０】出力メモリの利用方法の一例を示す図である。
【図１１】ＣＯＳテーブルメモリの構成の一例を示す図である。
【図１２】ＣＯＳテーブルメモリの利用方法の一例を示す図である。
【図１３】ＳＩＮテーブルメモリの構成の一例を示す図である。
【図１４】ＳＩＮテーブルメモリの利用方法の一例を示す図である。
【図１５】ＩＭＤＣＴ処理の一例を示すフローチャートである。
【図１６】仮数部のビット数Ｎと、ビット数Ｎに対応する音質の評価値との関係の一例を示すグラフである。
【符号の説明】
１　フィルタバンク回路
２　ＩＭＤＣＴモジュール
３　ＣＯＳテーブル
８　浮動小数点演算器
【図１】
2004147214.tif 000017
【図２】
2004147214.tif 000018
【図３】
2004147214.tif 000019
【図４】
2004147214.tif 000020
【図５】
2004147214.tif 000021
【図６】
2004147214.tif 000022
【図７】
2004147214.tif 000023
【図８】
2004147214.tif 000024
【図９】
2004147214.tif 000025
【図１０】
2004147214.tif 000026
【図１１】
2004147214.tif 000027
【図１２】
2004147214.tif 000028
【図１３】
2004147214.tif 000029
【図１４】
2004147214.tif 000030
【図１５】
2004147214.tif 000031
【図１６】
2004147214.tif 000032