(57)【特許請求の範囲】
【請求項１】
各スケールファクタバンド毎に全ての符号本に対して符号化された結果のビット数を符号本番号とスケールファクタバンド番号で指定されるビット数テーブルに記憶し、ビットコスト値を累算値として累算値メモリに記憶して初期化するステップと、
前記累算値メモリからの累算値の最小値に前記ビットコスト値を加算した値を閾値として閾値メモリに記憶するステップと、
前記累算値メモリからの累算値が前記閾値メモリからの閾値よりも大きい場合には、前記閾値を新たな累算値として累算値メモリに記憶するとともに、この最小の累算値に対する符号本番号をリンクテーブルに記憶し、一方、前記累算値が前記閾値以下の場合には、前記リンクテーブルからの前回の符号本番号を今回の符号本番号として前記リンクテーブルに記憶するステップと、
前記ビット数テーブルからのビット数と前記累算値メモリからの累算値を加算した値を新たな累算値として更新するステップと、
前記リンクテーブルを参照し、前記ビット数テーブルに記憶されたビット数が最小ビット数に対応する符号本番号を上位のスケールファクタバンド番号から順に追跡して最適な符号本番号を決定するステップと
を有することを特徴とする符号本選択方法。
【請求項２】
各スケールファクタバンド毎に全ての符号本に対して符号化された結果のビット数を符号本番号とスケールファクタバンド番号で指定されるビット数テーブルに記憶し、ビットコスト値を累算値として累算値メモリに記憶して初期化する手段と、
前記累算値メモリからの累算値の最小値に前記ビットコスト値を加算した値を閾値として閾値メモリに記憶する手段と、
前記累算値メモリからの累算値が前記閾値メモリからの閾値よりも大きい場合には、前記閾値を新たな累算値として累算値メモリに記憶するとともに、この最小の累算値に対する符号本番号をリンクテーブルに記憶し、一方、前記累算値が前記閾値以下の場合には、前記リンクテーブルからの前回の符号本番号を今回の符号本番号として前記リンクテーブルに記憶する手段と、
前記ビット数テーブルからのビット数と前記累算値メモリからの累算値を加算した値を新たな累算値として更新する手段と、
前記リンクテーブルを参照し、前記ビット数テーブルに記憶されたビット数が最小ビット数に対応する符号本番号を上位のスケールファクタバンド番号から順に追跡して最適な符号本番号を決定する手段と
を有することを特徴とする符号本選択装置。
【請求項３】
各スケールファクタバンド毎に全ての符号本に対して符号化された結果を示すビット数を入力して符号本番号とスケールファクタバンド番号とで指定されるビット数テーブルに記憶する入力記憶手段と、
ビットコスト値を各符号本番号に対応する累算値として累算値メモリに記憶して初期化する初期化手段と、
前記累算値メモリから読み出した累算値の最小値に前記ビットコスト値を加算し、この加算結果値を閾値として閾値メモリに記憶する閾値算出手段と、
前記累算値メモリから読み出した累算値と前記閾値メモリから読み出した閾値との大きさを比較し、この累算値が閾値よりも大きい場合には、前記閾値を新たな累算値として前記累算値メモリに記憶するとともに、この最小の累算値に対する符号本番号をリンクテーブルに記憶し、一方、この累算値が閾値以下の場合には、前記リンクテーブルに記憶した前回のスケールファクタバンド番号で指定される符号本番号を読み出し、この符号本番号を今回の符号本番号として前記リンクテーブルに記憶する累算値修正手段と、
前記ビット数テーブルからスケールファクタバンド番号での各符号本番号に対応するビット数を読み出し、前記累算値メモリから累算値を読み出し、各符号本番号に対応するビット数と累算値を加算し、この加算値を各符号本番号に対応する新たな累算値として更新する累算値更新手段と、
前記リンクテーブルが完成するまで、前記閾値算出手段と前記累算値修正リンク決定手段とおよび前記累算値更新手段とを各スケールファクタバンド番号毎に順次に繰り返し実行させる繰り返し手段と、
前記完成されたリンクテーブルを参照し、前記ビット数テーブルに記憶されたビット数が最小ビット数に対応する符号本番号を上位のスケールファクタバンド番号から順に追跡して最適な符号本番号を選択して決定する符号本番号決定手段と
を有することを特徴とする符号本選択装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、符号本選択方法及び符号本選択装置に関し、例えば、ＡＡＣの符号本の選択などに用いられ、量子化スペクトルを表現するための最小ビット数を探索する符号本選択方法及び符号本選択装置に関する。
【背景技術】
【０００２】
オーディオ信号の符号化方法は、現在までに非常に多くの方式が開発されている。特に最近では、それらの中でもＩＳＯ／ＩＥＣで国際標準化されたＩＳＯ１３８１８−７が認知され、高音質および高効率な符号化方法として評価されている。この符号化方法はＡＡＣと呼ばれている。
【０００３】
近年、ＡＡＣはＭＰＥＧ−４の標準規格にも採用され、ＩＳＯ１３８１８−７に対していくつかの拡張機能を有するＭＰＥＧ４−ＡＡＣ方式が定められている。
【０００４】
ここで、スケールファクタバンドを結合（マージ）してセクション化する方法としては、特許文献１が報告されている。以下、特許文献１について説明する。
【０００５】
特許文献１に記載されている発明は、オーディオ信号の引き続くスケールファクタバンド（以下、ＳＦＢという）を、各々セクションと呼ばれる複数のグループにマージする方法であって、各ＳＦＢに対して符号化するための全ての可能なハフマン符号本を見つけ、最低のビットコストを持つハフマン符号本（最小符号本）を使用してフレームのスペクトル係数を表現するために必要な全ビットコストを計算しておき、同じ最小符号本を持つ、引き続くＳＦＢを探索し、それらを一つのセクションとしてマージし、基準全ビットコストを全ビットコストに等しく設定し、マージされるべきセクションが符号本０または強度ステレオ符号化符号本を使用しないかどうかをチェックする。次いで、引き続くセクションの全ての対に渡って、一対だけ一時的にマージすることにより得られる新しい全ビットコストを計算し、そのうち、最低の新しい全ビットコストをもたらす、一対のセクションを見つけ、この最低の新しい全ビットコストが全ビットコストより小さければ、全ビットコストをこの新しい全ビットコストに等しく設定し直す。一方、もし全ビットコストが基準全ビットコストより低ければ（ビット節約）、一対のセクションを永久的にマージし、一対のセクションのマージングにより得られた新しいセクションとそれに隣接するセクションが、同じ最小符号本を持つかどうかをチェックする。新しいセクションとそれに隣接するセクションが同じ最小符号本を持てば、それらをマージして更に新しいセクションを形成する。全ビットコストを新しい基準全ビットコストとして設定し、何のビット節約ももたらさなくなるまで繰り返す。
【０００６】
このように、特許文献１には、ＳＦＢを結合（マージ）してセクション化する方法が記載されており、特に、同じ符号本を使用して表現することができるようにされている。
【特許文献１】特開２００１-１８８５６３号公報
【発明の開示】
【発明が解決しようとする課題】
【０００７】
ところで、量子化スペクトルをハフマン符号化する過程においては、符号本の選択次第で総ビット数が変化する。つまり、最適な符号本を選択すれば、総ビット数は最小となるが、不適切な符号本を選択すると総ビット数が増加してしまう。
【０００８】
もし、符号本決定の方式において、単にＳＦＢ毎に最小ビットを与える符号本を選ぶだけであれば、セクション数が増加することでビットコストが発生してしまう。ビットの浪費はスペクトルの量子化幅にしわ寄せされ、この結果、量子化雑音が相対的に増加して音質を低下することになる。
【０００９】
従って、ビットコストを考慮した上で、全体としてビット数が最小となるよう符号本を選択しなければならない。
【００１０】
これに対して、特許文献１に記載されている手法では、同じ符号本を使用して符号化のため使用する全ビット数を逐次的に減らすように構成されているものの、最小数（論理上の最小数）に収束するとは限らず音質が低下するといった問題があった。
【００１１】
そこで、全ビット数を最小数にして、量子化雑音が相対的に増加することを抑制し音質の低下を防止するための、最適な符号本を選択する手法の提供が望まれている。
【００１２】
本発明は、上記に鑑みてなされたもので、その目的としては、符号化に用いる最適な符号本を選択することができる符号本選択方法及び符号本選択装置を提供することにある。
【課題を解決するための手段】
【００１３】
請求項１記載の発明は、上記課題を解決するため、各スケールファクタバンド毎に全ての符号本に対して符号化された結果のビット数を符号本番号とスケールファクタバンド番号で指定されるビット数テーブルに記憶し、ビットコスト値を累算値として累算値メモリに記憶して初期化するステップと、前記累算値メモリからの累算値の最小値に前記ビットコスト値を加算した値を閾値として閾値メモリに記憶するステップと、前記累算値メモリからの累算値が前記閾値メモリからの閾値よりも大きい場合には、前記閾値を新たな累算値として累算値メモリに記憶するとともに、この最小の累算値に対する符号本番号をリンクテーブルに記憶し、一方、前記累算値が前記閾値以下の場合には、前記リンクテーブルからの前回の符号本番号を今回の符号本番号として前記リンクテーブルに記憶するステップと、前記ビット数テーブルからのビット数と前記累算値メモリからの累算値を加算した値を新たな累算値として更新するステップと、前記リンクテーブルを参照し、前記ビット数テーブルに記憶されたビット数が最小ビット数に対応する符号本番号を上位のスケールファクタバンド番号から順に追跡して最適な符号本番号を決定するステップとを有することを要旨とする。
【００１４】
請求項２記載の発明は、上記課題を解決するため、各スケールファクタバンド毎に全ての符号本に対して符号化された結果のビット数を符号本番号とスケールファクタバンド番号で指定されるビット数テーブルに記憶し、ビットコスト値を累算値として累算値メモリに記憶して初期化する手段と、前記累算値メモリからの累算値の最小値に前記ビットコスト値を加算した値を閾値として閾値メモリに記憶する手段と、前記累算値メモリからの累算値が前記閾値メモリからの閾値よりも大きい場合には、前記閾値を新たな累算値として累算値メモリに記憶するとともに、この最小の累算値に対する符号本番号をリンクテーブルに記憶し、一方、前記累算値が前記閾値以下の場合には、前記リンクテーブルからの前回の符号本番号を今回の符号本番号として前記リンクテーブルに記憶する手段と、前記ビット数テーブルからのビット数と前記累算値メモリからの累算値を加算した値を新たな累算値として更新する手段と、前記リンクテーブルを参照し、前記ビット数テーブルに記憶されたビット数が最小ビット数に対応する符号本番号を上位のスケールファクタバンド番号から順に追跡して最適な符号本番号を決定する手段とを有することを要旨とする。
【００１５】
請求項３記載の発明は、上記課題を解決するため、各スケールファクタバンド毎に全ての符号本に対して符号化された結果を示すビット数を入力して符号本番号とスケールファクタバンド番号とで指定されるビット数テーブルに記憶する入力記憶手段と、ビットコスト値を各符号本番号に対応する累算値として累算値メモリに記憶して初期化する初期化手段と、前記累算値メモリから読み出した累算値の最小値に前記ビットコスト値を加算し、この加算結果値を閾値として閾値メモリに記憶する閾値算出手段と、前記累算値メモリから読み出した累算値と前記閾値メモリから読み出した閾値との大きさを比較し、この累算値が閾値よりも大きい場合には、前記閾値を新たな累算値として前記累算値メモリに記憶するとともに、この最小の累算値に対する符号本番号をリンクテーブルに記憶し、一方、この累算値が閾値以下の場合には、前記リンクテーブルに記憶した前回のスケールファクタバンド番号で指定される符号本番号を読み出し、この符号本番号を今回の符号本番号として前記リンクテーブルに記憶する累算値修正手段と、  前記ビット数テーブルからスケールファクタバンド番号での各符号本番号に対応するビット数を読み出し、前記累算値メモリから累算値を読み出し、各符号本番号に対応するビット数と累算値を加算し、この加算値を各符号本番号に対応する新たな累算値として更新する累算値更新手段と、前記リンクテーブルが完成するまで、前記閾値算出手段と前記累算値修正リンク決定手段とおよび前記累算値更新手段とを各スケールファクタバンド番号毎に順次に繰り返し実行させる繰り返し手段と、前記完成されたリンクテーブルを参照し、前記ビット数テーブルに記憶されたビット数が最小ビット数に対応する符号本番号を上位のスケールファクタバンド番号から順に追跡して最適な符号本番号を選択して決定する符号本番号決定手段とを有することを要旨とする。
【発明の効果】
【００１６】
本発明によれば、符号化に用いる最適な符号本を選択することができるので、符号化でのビット数が節約でき、量子化雑音を低減して音質向上を実現することができる。
【発明を実施するための最良の形態】
【００１７】
以下、本発明の実施の形態について図面を参照して説明する。
【００１８】
図１は、本発明に係る符号本選択装置に適応可能な一実施の形態となる符号化装置１１の構成を示すブロック図、図２は、符号化装置１１の量子化部１５の構成を示すブロック図である。
【００１９】
図１において、符号化装置１１を構成する時間−周波数変換部１３と量子化部１５およびビットストリーム生成部１７は、ソフトウエア処理により実施しても良いし、ＤＳＰ（Digital Signal Processor）にプログラム処理を実行させるようにしても良い。
【００２０】
図１において、ｓは符号化するオーディオ信号の時系列信号ｓである。時間−周波数変換部１３は、入力される時系列信号ｓに対して変形離散コサイン変換（ＭＤＣＴ）してスペクトルｆを出力する。量子化部１５は、時間−周波数変換部１３から出力されたスペクトルｆを量子化して量子化スペクトルｑを出力する。ビットストリーム生成部１７は、量子化部１５から出力された量子化スペクトルｑから決められたシンタックスに従ってビットストリームｂｓを生成して出力する。
【００２１】
なお、ＭＰＥＧ−２  ＡＡＣやＭＰＥＧ−４  ＡＡＣ（以下、この２つのＡＡＣをまとめて単にＡＡＣ呼ぶ）のように、時間−周波数変換部１３と量子化部１５との間に、ＰＮＳ（Perceptual Noise Shaping）符号化ツールや、ＩＳ（Intensity Stereo）符号化ツール等のスペクトル処理部を挿入しても良い。
【００２２】
量子化部１５において、ヒトの聴覚特性を利用したオーディオ符号化では、量子化されたスペクトルをいくつかの帯域に分ける手法を用いてもよい。また、帯域ごとに量子化スペクトルをエントロピー符号化する過程が存在する。
【００２３】
例えば、ＡＡＣでは、１０２４個の量子化スペクトルをサンプリング周波数によって４０〜５０の帯域に分割し、各帯域に属する量子化スペクトルに対して、ハフマン符号化を行う。（ただし上記数値例はロング窓の場合であり、ショート窓の場合は１２８個の量子化スペクトルを１０〜１５の帯域に分ける。）この帯域をスケールファクタバンド（以下ＳＦＢと呼ぶ）と呼ぶ。ハフマン符号本（コードブック）は複数あり、制約条件によって使用できる符号本と使用できない符号本があるが、ＳＦＢ毎に複数の符号本の中からどれを使うか選択できる。
【００２４】
選択された符号本の番号は別途符号化され、ＡＡＣストリームに記述される。この時、隣り合ったＳＦＢ同士で同じ符号本番号を選択した場合は、それらをまとめて記述することができ、これをセクションデータと呼び、まとめる過程をセクション化と呼ぶ。セクションデータは、符号本番号の番号とその符号本を選択したＳＦＢの範囲からなり、低域側から順に記述される。１つのセクションデータを記述するには、ロング窓の場合では９［bit ］、ショート窓の場合は７［bit ］が必要であり、以下、これをビットコストと呼ぶ。
【００２５】
次に、図２を参照して、量子化部１５のブロック図について説明する。
【００２６】
量子化器２１は、与えられたスペクトルｆを対応するスケールファクタｓｆで除算し、量子化スペクトルｑ'を出力する。量子化スペクトルｑ’は、ビットコントロールによって再量子化が要求される場合があり、最終的に量子化部１５から出力される量子化スペクトルｑとは必ずしも一致しないのでｑ'と表記する。
【００２７】
ハフマン符号本候補決定部２３は、各ＳＦＢ毎にハフマン符号化を試みる符号本の候補を抽出して決定し、各ＳＦＢ毎にどの符号本で符号化を試みるべきかが記述された出力ｃを出力する。ハフマン符号本は、ＳＦＢ内の最大絶対値によって使用制限があるため、ハフマン符号本候補決定部２３により符号本の候補を決定しておく必要がある。また、ハフマン符号本候補決定部２３では、処理負荷を低減する目的で符号本の候補を減らすという役割も果たす。
【００２８】
ハフマン符号化部２７は、ＳＦＢ毎にｃに記述された全ての符号本に対してハフマン符号化を行い、結果のビット数ｂｔを出力する。ビット数ｂｔは表であり、あるＳＦＢ内の量子化スペクトルをある符号本でハフマン符号化すると何ビットになるかが記述される。
【００２９】
符号本決定部２９は、ハフマン符号化部２７から出力されるビット数ｂｔの表に記述された値に基づいて、各ＳＦＢ毎にどの符号本番号を選択するかを決定する。決定した符号本ｈｃｂと符号化の結果の総ビット数ｂを出力する。総ビット数ｂには符号本切り替えによる前述のビットコストも含む。
【００３０】
判定部３１は、符号本決定部２９から与えられる総ビット数ｂの範囲を判定しており、総ビット数ｂが予め定められた許容範囲内に収まっている場合には、許可信号ｊｙをスイッチ３３に与え、スイッチ３３がオンされ量子化器２１から出力される量子化スペクトルｑ’が量子化スペクトルｑとしてスイッチ３３を介してビットストリーム生成部１７に出力される。同時に符号本ｈｃｂは副情報として、別途ストリームに記述される。しかし、判定部３１は、符号本決定部２９から与えられる総ビット数ｂがこの許容範囲外である場合には、不許可信号ｊｎをスケールファクタ更新器３５に与え再量子化を行わせる。
【００３１】
スケールファクタ更新器３５は、前回の量子化に用いたスケールファクタｓｆを増減して更新した後に、量子化器２１に更新されたスケールファクタｓｆを与えて再量子化を行わせる。
【００３２】
次に、図２を参照して、量子化部１５の動作を説明する。
【００３３】
まず、時間−周波数変換部１３から量子化器２１へスペクトルｆが出力されると、量子化器２１では、与えられたスペクトルｆを対応するスケールファクタｓｆで除算し、量子化スペクトルｑ'を出力する。次いで、ハフマン符号本候補決定部２３では、各ＳＦＢ毎にハフマン符号化を試みる符号本の候補を抽出して決定し、各ＳＦＢ毎にどの符号本で符号化を試みるべきかが記述された出力ｃを出力する。次いで、ハフマン符号化部２７では、ＳＦＢ毎にｃに記述された全ての符号本に対してハフマン符号化を行い、結果のビット数ｂｔを出力する。次いで、符号本決定部２９では、ハフマン符号化部２７から出力されるビット数ｂｔの表に記述された値に基づいて、各ＳＦＢ毎にどの符号本番号を選択するかを決定する。決定した符号本ｈｃｂと符号化の結果の総ビット数ｂを出力する。
【００３４】
ここで、判定部３１では、符号本決定部２９から与えられる総ビット数ｂの範囲を判定しており、総ビット数ｂが予め定められた許容範囲内に収まっている場合には、許可信号ｊｙをスイッチ３３に与え、スイッチ３３がオンされ量子化器２１から出力される量子化スペクトルｑ’が量子化スペクトルｑとしてスイッチ３３を介してビットストリーム生成部１７に出力される。同時に符号本ｈｃｂは副情報として、別途ストリームに記述される。
【００３５】
一方、判定部３１では、符号本決定部２９から与えられる総ビット数ｂがこの許容範囲外である場合には、不許可信号ｊｎをスケールファクタ更新器３５に与え再量子化を行わせる。次いで、スケールファクタ更新器３５では、前回の量子化に用いたスケールファクタｓｆを増減して更新した後に、量子化器２１に更新されたスケールファクタｓｆを与えて再量子化を行わせる。
【００３６】
次に、図４に示す説明図を参照して、符号本決定部２９での処理に用いるメモリ構成について説明する。なお、以下の説明において、符号本の数をｎ、ＳＦＢの数をｍと表す。図４に示す説明図のように、符号本決定部２９での処理を実現するにはビット数テーブル４１、累算値メモリ４３、閾値メモリ４５、リンクテーブル４７が必要となる。
【００３７】
ビット数テーブル４１は、ハフマン符号化されたビット数ｂｔを符号本番号ｔとスケールファクタバンド番号ｉに対応して記憶するメモリであり、ハフマン符号化された結果を示すビット数ｂｔを入力して符号本番号ｔとスケールファクタバンド番号ｉで指定される位置に記憶する。
【００３８】
累算値メモリ４３は、符号本の数と同じ大きさの記憶容量を有するメモリであり、これを ａ（１）〜ａ（ｎ）で表す。ａ（ｔ）［：ここで、ｔは１〜ｎのいずれかの整数］は、符号本番号ｔが選択されると仮定した場合のビット数を表わす。
【００３９】
リンクテーブル４７は、符号本番号を記憶するための２次元形式のメモリであり、最大で（符号本の数）×（ＳＦＢの数）の大きさの記憶容量が必要であり、これをｋ（１，１）〜ｋ（ｍ，ｎ）で表す。ｋ（ｉ，ｔ）［：ここで、ｉは１〜ｍのいずれかの整数、ｔは１〜ｎのいずれかの整数］は、ｉ番目のＳＦＢで符号本番号ｔを選択すると仮定した場合に、直前のｉ−１番目のＳＦＢではどの符号本を選ぶのが最適（ビットが最小となる）かを示している。
【００４０】
次に、図３に示すフローチャート、図４〜図１５に示す説明図を参照して、図２に示す符号本決定部２９の動作を説明する。
【００４１】
まず、ステップＳ５では、符号本決定部２９は、ハフマン符号化部２７により各スケールファクタバンド毎に全ての符号本に対してハフマン符号化された結果を示すビット数ｂｔを入力して符号本番号ｔとスケールファクタバンド番号ｉで指定されるビット数テーブル４１に記憶する。
【００４２】
次いで、ステップＳ１０では、符号本決定部２９は、累算値ａ（１）〜ａ（ｎ）をビットコストで初期化する。すなわち、当該フレームがロング窓なら「９」、ショート窓なら「７」を累算値ａ（１）〜ａ（ｎ）に代入する。以下、あるｉ（ｉは１〜ｍの整数）番目のＳＦＢに関して、ステップＳ２０〜Ｓ５０に示す処理を繰り返す。
【００４３】
次いで、ステップＳ２０では、符号本決定部２９は、累算値ａ（１）〜ａ（ｎ）の中で最小値を求め、求めた最小の累算値にビットコストを加算して、これを閾値ｔｈｒとする。即ち、ロング窓の場合の閾値ｔｈｒは、
ｔｈｒ＝min｛ａ（１），．．．，ａ（ｎ）｝＋９              （数１）
ショート窓の場合の閾値ｔｈｒは、
ｔｈｒ＝min｛ａ（１），．．．，ａ（ｎ）｝＋７              （数２）
である。最小の累算値に対する符号本番号ｔをｔminとする。なお、最小値ｔmin が複数ある場合、どれを選ぶかは本発明の本質ではない。
【００４４】
次いで、ステップＳ３０では、符号本決定部２９は、累算値ａ（１）〜ａ（ｎ）と閾値ｔｈｒとをそれぞれの大きさの大小を比較する。ここで、
（１）  ａ（ｔ）＞ｔｈｒの場合には、
ａ（ｔ）＝ｔｈｒと修正し、ｋ（ｉ，ｔ）＝ｔminとしてリンクテーブル４７に記憶する。すなわち、累算値ａ（ｔ）が閾値ｔｈｒよりも大きい場合には、閾値ｔｈｒを新たな累算値として累算値メモリ４３に代入して記憶する。同時に、最小の累算値ａ（ｔ）に対する符号本番号ｔminの値を、ＳＦＢ番号ｉと符号本番号ｔとがなすリンクｋ（ｉ，ｔ）＝ｔminとし、リンクテーブル４７に記憶する。
【００４５】
（２）  ａ（ｔ）≦ｔｈｒの場合には、
累積値の修正は行わず、リンクテーブル４７に記憶した前回のスケールファクタバンド番号（ｉ−１）で指定される符号本番号を読み出し、この符号本番号ｔを今回の符号本番号ｋ（ｉ，ｔ）としてリンクテーブル４７に記憶する。
【００４６】
ここで、上記（１）、（２）に場合分けをして処理する意味は、以下のとおりである。
【００４７】
ｉ番目のＳＦＢで符号本番号ｔを使用すると仮定したとき、（１）の場合：ａ（ｔ）＞ｔｈｒと判定されれば、直前の（ｉ−１）番目のＳＦＢでは符号本番号ｔminを選択し、ｉ番目のＳＦＢで符号本番号ｔを選択した方が、ビットコストを考慮しても全体のビット数が少なくなることを示す。
【００４８】
一方、（２）の場合：ａ（ｔ）≦ｔｈｒと判定されれば、直前の（ｉ−１）番目のＳＦＢから符号本を変えずに符号本番号ｔを使用した方がビットコストが発生しないだけ、全体のビット数が節約できることを示している。
【００４９】
したがって、ｉ＝０のときは、意味を持たず（：直前のＳＦＢが無いから）リンクテーブルｎ値は、便宜的なものに過ぎない。
【００５０】
次いで、ステップＳ４０では、符号本決定部２９は、累算値ａ（ｔ）に、ビット数ｂｔ（ｉ，ｔ）を加算する。ビット数ｂｔは、図２に示すハフマン符号化部２７の出力であり、ｉ番目のＳＦＢを符号本ｔでエンコードした場合のビット数がｂｔ（ｉ，ｔ）で与えられる。
【００５１】
なお、ハフマン符号本候補決定部２３により、選択され得ない符号本に関しては、便宜的に「∞」が代入されているものと仮定するが、実際には、十分大きな値を入れておくか、ｉｆ文などの条件分岐を用いる。
【００５２】
次いで、ステップＳ５０では、符号本決定部２９は、全てのＳＦＢについて処理が終了したかどうか判断する。すなわち、ｉ番目のＳＦＢがエンコードすべき最後のＳＦＢならば、つまりｉ＝ｍの場合には終了処理を行うためにステップＳ６０へ進む。
【００５３】
そうでなければ、ステップＳ５５に進み、符号本決定部２９は、「ｉ」を「ｉ＋１」に更新し、次のｉ＋１番目のＳＦＢに関して処理を実行するため、ステップＳ２０に戻る。すなわち、リンクテーブル４７が完成するまで、ステップＳ２０〜Ｓ４０を各スケールファクタバンド番号ｉ毎に順次に繰り返し実行させる。
【００５４】
最後に、ステップＳ６０では、符号本決定部２９は、累算値メモリ４３に記憶されている累算値ａ（１）〜ａ（ｎ）から最小値を求め、これが出力の最小ビットｂとなる。また、最小ビットｂとなる符号本番号をｔｍｉｎ 、つまりａ（ｔｍｉｎ）＝ｂとする。この時点で終端ｍ番目のＳＦＢに対する符号本番号をｔｍｉｎと決定し、最小ビット数となる１から（ｍ−１）までのＳＦＢ番号に対応する符号本番号をリンクテーブル４７を上位のＳＦＢ番号から逆に追跡することにより、順次に決定する。この処理を数式で書き表せば、
ｈｃｂ（ｍ）＝ｔｍｉｎ                                     （数３）
ｈｃｂ（ｉ）＝ｋ（ｉ＋１，ｈｃｂ（ｉ＋１））                （数４）
となる。ただしｈｃｂ（ｉ）はｉ番目のＳＦＢの符号本番号である。
【００５５】
すなわち、完成されたリンクテーブル４７を参照し、ビット数テーブル４１に記憶されたビット数が最小ビット数に対応する符号本番号を上位のＳＦＢ番号から順に追跡して最適な符号本番号を選択して決定する。
【００５６】
次に、図３に示すフローチャートのそれぞれのステップによる処理についてその具体例を参照しながら説明する。
【００５７】
なお、符号本は、「０」から「１１」までの１２冊とし、ＳＦＢは「０」から「１１」までの１２バンドと仮定する。
【００５８】
まず、ステップＳ５では、符号本決定部２９は、ハフマン符号化部２７により各スケールファクタバンド毎に全ての符号本に対してハフマン符号化された結果を示すビット数ｂｔを入力して符号本番号ｔとスケールファクタバンド番号ｉで指定されるビット数テーブル４１に記憶する。
【００５９】
また、それぞれのハフマン符号化の結果のビット数は、図４に示す表「ビット数」のように与えられているものとする。この表において「∞」の記号は、ハフマン符号本候補決定部２３により選択され得ない符号本番号を示しており、実際には、十分大きな値を入れておくか、ｉｆ文などの条件分岐を用いる。
【００６０】
次いで、ステップＳ１０では、累算値ａ（１）〜ａ（ｎ）を初期化する。当該フレームはショート窓と仮定し、ビットコストを「７」とし、図５に示すように、ビットコスト「７」を累算値ａ（１）〜ａ（ｎ）のそれぞれの値として累算値メモリ４３に記憶して初期化する。
【００６１】
次いで、ステップＳ２０では、累算値ａ（１）〜ａ（ｎ）の最小値にビットコスト「７」を加算し、閾値を求める。この場合、図６に示すように、累算値ａ（１）〜ａ（ｎ）は全て同じ値の「７」であるので、累算値が最小値となる符号本番号からｔmin＝０を選択し、閾値を「１４」（＝７＋７）とする。
【００６２】
次いで、ステップＳ３０では、累算値ａ（１）〜ａ（ｎ）と閾値ｔｈｒとの大きさの大小を比較する。図７に示すように、この場合、閾値ｔｈｒ＝１４を超えている累算値はないので、累算値の修正は行わない。また、ＳＦＢの番号ｉ＝０に対する符号本番号ｔ＝０〜１１のリンクをｋ（ｉ，ｔ）＝ｔとしてリンクテーブル４７に記憶する。
【００６３】
次いで、ステップＳ４０では、図７に示す累算値に、図８に示す当該ＳＦＢのビット数（図中のＡ）を加算し、この加算結果を累算値として累算値メモリ４３に記憶して更新する。
【００６４】
次いで、ステップＳ５０では、全てのＳＦＢに関する処理が終了していないので、ステップＳ５５へ進み、次の「ｉ＋１」番目のＳＦＢへと処理を移し、上述した処理を繰り返す。
【００６５】
ここで、ステップＳ２０では、図９に示すように、累算値の最小値「２３」にビットコスト「７」を加算し、閾値「３０」を求める。累算値が最小値となる符号本番号からｔmin＝１０が選択され、閾値を「３０」とし閾値メモリ４５に記憶する。
【００６６】
次いで、ステップＳ３０では、符号本番号ｔ＝０〜６に対応する累算値ａ（１）〜ａ（７）がそれぞれ「∞」となり閾値ｔｈｒ＝「３０」を超えているので、図１０に示すように、それらの累算値ａ（１）〜ａ（７）を修正し、リンク元をｔmin＝１０とする。それ以外は、累算値の修正は行わず、自分自身からのｋ（ｉ，ｔ）＝ｔとしてリンクテーブル４７に記憶する。
【００６７】
次いで、ステップＳ４０では、図１１に示すように、累算値に当該ＳＦＢのビット数（図中のＢ）を加算し、この加算値を累算値として累算値メモリ４３に記憶して更新する。
【００６８】
次いで、ステップＳ５０では、全てのＳＦＢに関する処理が終了していないので、ステップＳ５５へ進み、次の「ｉ＋１」番目のＳＦＢへと処理を移し、上述した処理を繰り返す。
【００６９】
同様に、ステップＳ２０では、図１２に示すように、累算値の最小値「３６」にビットコスト「７」を加算し、閾値「４３」を求める。累算値が最小値となる符号本番号からｔmin＝１０が選択され、閾値を「４３」とし閾値メモリ４５に記憶する。
【００７０】
次いで、ステップＳ３０では、図１３に示すように、符号本番号０〜７、および９に対応する累算値ａ（１）〜ａ（７），ａ（９）が閾値「４３」を超えているので、それらを修正し、リンクテーブル４７にｔminを記憶する。それ以外は修正は行わず、自分自身からのｋ（ｉ，ｔ）＝ｔとしてリンクテーブル４７に記憶する。
【００７１】
次いで、ステップＳ４０では、図１４に示すように、累算値に当該ＳＦＢのビット数（図中のＣ）を加算し、この加算結果を累算値として累算値メモリ４３に記憶して更新する。
【００７２】
次いで、ステップＳ５０で、全てのＳＦＢが終了したかどうか判断する。全てのＳＦＢに関する処理が終了していないので、ステップＳ５５へ進み、次の「ｉ＋１」番目のＳＦＢへと処理を移す。以下、同様に上述したステップＳ２０〜Ｓ４０の処理を繰り返す。
【００７３】
ステップＳ５０で、全てのＳＦＢが終了したと判断した場合には、ステップＳ６０に進む。ステップＳ６０では、このとき、終端（ｉ＝１１）のＳＦＢまで累算したところで、図１５に示すように、累算値の最小値を求める。この場合、ｔmin＝０であり、終端の符号本番号は０と決まる。
【００７４】
それ以外の符号本番号ｈｃｂ（ｉ）は、数５に従って、
ｈｃｂ（ｉ）＝ｋ（ｉ＋１，ｈｃｂ（ｉ＋１））              （数５）
となる。
【００７５】
最小ビット数となる１から（ｍ−１）までのＳＦＢ番号に対応する符号本番号をリンクテーブル４７を上位のＳＦＢ番号から逆に追跡することで求める。すなわち、i＝１１からｉ＝０に向かって順次、番号ｉを代入し、図１５に示す完成されたリンクテーブル４７から符号本番号を選択する。すなわち、完成されたリンクテーブル４７を参照し、ビット数テーブル４１に記憶されたビット数が最小ビット数に対応する符号本番号を上位のＳＦＢ番号から順に追跡して最適な符号本番号を選択して決定する。
【００７６】
結果として、図１５に示すように、最適な符号本番号の選択は、低域側から高域側に向かって順に、「８」、「８」、「８」、「８」、「８」、「８」、「６」、「６」、「６」、「６」、「０」、「０」となり、符号化後のビット数は２１８［ｂｉｔ］となる。ここで、例えば初めの「８  ８  ８  ８  ８  ８」がセッション１を示し、次の「６  ６  ６  ６」がセッション２を示し、最後の「０  ０」がセッション３を示す。
【００７７】
本発明の方法に従ってハフマン符号本を選択すれば、与えられたスペクトルを最小のビット数で表現することが可能である。スペクトルのハフマン符号化でビットが節約できると、量子化幅をより狭くすることが可能となり、量子化雑音の低減等の音質向上が実現できる。
【００７８】
なお、本発明の一実施の形態においては、ＡＡＣのＰＮＳ符号化ツールやＩＳ符号化ツールを使用した場合は説明していないが、ＰＮＳ符号化ツールやＩＳ符号化ツールを使用したことを示す仮想的な符号本番号（１３〜１５）を追加すれば同じく適用することができる。
【００７９】
つまり、本発明においては、選択され得る全ての符号本に対してハフマン符号化後のビット数が与えられることを前提としており、本発明は、ビット数を示す表の中から最適な符号本番号を選択することを特徴としている。
【００８０】
なお、本実施の形態においては、ハフマン符号化によりオーディオ信号を符号化していたが、本発明は、ハフマン符号化に限定するものではなく、他の符号化方法にも適応することができる。
【図面の簡単な説明】
【００８１】
【図１】本発明に係る符号本選択装置に適応可能な一実施の形態となる符号化装置１１の構成を示すブロック図である。
【図２】符号化装置１１の量子化部１５の構成を示すブロック図である。
【図３】符号本決定部２９の動作を説明するための図である。
【図４】符号本決定部２９での処理に用いるメモリの構成について説明するための図である。
【図５】ステップＳ１０での動作を説明するための図である。
【図６】ステップＳ２０での動作を説明するための図である。
【図７】ステップＳ３０での動作を説明するための図である。
【図８】ステップＳ４０での動作を説明するための図である。
【図９】ステップＳ２０での動作を説明するための図である。
【図１０】ステップＳ３０での動作を説明するための図である。
【図１１】ステップＳ４０での動作を説明するための図である。
【図１２】ステップＳ２０での動作を説明するための図である。
【図１３】ステップＳ３０での動作を説明するための図である。
【図１４】ステップＳ４０での動作を説明するための図である。
【図１５】ステップＳ６０での動作を説明するための図である。
【符号の説明】
【００８２】
１１…符号化装置、１１ａ…ＣＰＵ、１１ｂ…メモリ１１ｂ、１３…時間−周波数変換部、１５…量子化部、１７…ビットストリーム生成部、２１…量子化器、２３…ハフマン符号本候補決定部、２７…ハフマン符号化部、２９…符号本決定部、３１…判定部、３３…スイッチ、３５…スケールファクタ更新器、４１…ビット数テーブル、４３…累算値メモリ、４５…閾値メモリ、４７…リンクテーブル
【図１】
0004775026.tif 000002
【図２】
0004775026.tif 000003
【図３】
0004775026.tif 000004
【図４】
0004775026.tif 000005
【図５】
0004775026.tif 000006
【図６】
0004775026.tif 000007
【図７】
0004775026.tif 000008
【図８】
0004775026.tif 000009
【図９】
0004775026.tif 000010
【図１０】
0004775026.tif 000011
【図１１】
0004775026.tif 000012
【図１２】
0004775026.tif 000013
【図１３】
0004775026.tif 000014
【図１４】
0004775026.tif 000015
【図１５】
0004775026.tif 000016