(57)【要約】【課題】  本発明は、遅延を防止しつつ高品質を維持可能な符号化方法を提供することを目的とする。【解決手段】  MDCT計数分析器１１５は、MDCT変換器１１０の出力であるMDCT係数から倍率番号及び仮数番号を取得する。倍率分析器１２５は、MDCT計数分析器１１５が取得した倍率番号に基づいて、現在ブロック（ｎ）と直前ブロック（ｎ）とのセグメント毎の差分データを演算し、倍率番号差分データを取得する。そして、高速算術符号化器１４０は、１ブロック内の倍率番号差分データが取り得る値を２つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて倍率番号差分データを高速算術符号化する処理を繰り返し、１ブロック内の仮数番号が取り得る値を２つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて、倍率番号をパラメータとして仮数番号を高速算術符号化する処理を繰り返す。【選択図】      図１
2006080927.tif 000002
【特許請求の範囲】
【請求項１】
所定時間領域を１ブロックとして、１ブロックごとに入力される入力データを変形離散コサイン変換処理し、１ブロックのMDCT係数を生成するMDCT係数生成ステップと、
前記ブロック単位のMDCT係数を、所定周波数領域毎のセグメントに分割し、セグメント毎に前記MDCT係数の振幅の最大値に基づく倍率番号を取得する倍率番号取得ステップと、
１ブロック内の複数のセグメントそれぞれについて抽出された倍率番号について、現在ブロックと直前ブロックとのセグメント毎の差分データを演算する倍率番号差分データ演算ステップと、
前記MDCT係数の符号化精度を決定する精度番号に応じてMDCT係数を符号化するために、前記精度番号に応じてMDCT係数を伸縮させた仮数番号を１ブロック内で複数取得する仮数番号取得ステップと、
前記セグメント単位の倍率番号差分データと、前記複数の倍率番号及び複数の仮数番号を含む仮数情報とをブロックごとに高速算術符号化する高速算術符号化ステップとを含み、
前記高速算術符号化ステップでは、前記１ブロック内の倍率番号差分データが取り得る値を２つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記倍率番号差分データを高速算術符号化する処理を繰り返し、前記１ブロック内の仮数番号が取り得る値を２つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記仮数番号を高速算術符号化する処理を繰り返し、前記高速算術符号化の際には、前記倍率番号をパラメータとして前記仮数番号を高速算術符号化する、符号化方法。
【請求項２】
前記１ブロック内に含まれる入力データのサンプル数は、６４サンプル以下である、請求項１に記載の符号化方法。
【請求項３】
前記入力データを心理聴覚分析し、その分析結果に基づいて１ブロック内で複数の精度番号を取得する精度番号取得ステップと、
現在ブロックと直前ブロックとの精度番号の差分データである精度番号差分データを演算する精度番号差分データ演算ステップとをさらに含み、
前記高速算術符号化ステップでは、さらに、前記１ブロック内の精度番号差分データが取り得る値を２つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記精度番号差分データを高速算術符号化する処理を繰り返す、請求項１に記載の符号化方法。
【請求項４】
前記高速算術符号化ステップにおいて、前記１ブロック内の倍率番号差分データが取り得る値は、前記倍率番号差分データの取り得る値のうち最も頻度が高い値を含む区間とそれ以外の値を含む区間との２つの区間に分けられる、請求項１に記載の符号化方法。
【請求項５】
所定時間領域を１ブロックとして、１ブロックごとに入力される入力データを変形離散コサイン変換処理し、１ブロックのMDCT係数を生成するMDCT係数生成手段と、
前記ブロック単位のMDCT係数を、所定周波数領域毎のセグメントに分割し、セグメント毎に前記MDCT係数の振幅の最大値に基づく倍率番号を取得する倍率番号取得手段と、
１ブロック内の複数のセグメントそれぞれについて抽出された倍率番号について、現在ブロックと直前ブロックとのセグメント毎の差分データを演算する倍率番号差分データ演算手段と、
前記MDCT係数の符号化精度を決定する精度番号に応じてMDCT係数を符号化するために、前記精度番号に応じてMDCT係数を伸縮させた仮数番号を１ブロック内で複数取得する仮数番号取得手段と、
前記セグメント単位の倍率番号差分データと、前記複数の倍率番号及び複数の仮数番号を含む仮数情報とをブロックごとに高速算術符号化する高速算術符号化手段とを含み、
前記高速算術符号化手段は、前記１ブロック内の倍率番号差分データが取り得る値を２つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記倍率番号差分データを高速算術符号化する処理を繰り返し、前記１ブロック内の仮数番号が取り得る値を２つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記仮数番号を高速算術符号化する処理を繰り返し、前記高速算術符号化の際には、前記倍率番号をパラメータとして前記仮数番号を高速算術符号化する、符号化装置。
【請求項６】
請求項１に記載の符号化方法により符号化された倍率番号差分データの符号化データと、仮数番号の符号化データとを高速算術復号化する高速算術復号化ステップと、
前記高速算術復号化された高速算術復号化データに基づいてMDCT係数を再生するMDCT係数再生ステップと、
再生された前記MDCT係数を逆変形離散コサイン変換処理する逆MDCT変換ステップとを含み、
前記高速算術復号化ステップでは、前記倍率番号差分データの符号化データが取り得る値を２つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記倍率番号差分データの符号化データを高速算術復号化することを繰り返し、前記仮数番号の符号化データが取り得る値を２つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記仮数番号の符号化データを高速算術復号化することを繰り返す復号化方法。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、入力データのデジタル符号への符号化・復号化に関し、特にMDCT変換された後の情報の符号化・復号化に関する。
【背景技術】
【０００２】
オーディオ符号化装置の1つにMPEG-2 AAC(Advanced Audio Coding)符号化方式（以下、AAC方式という）がある。例えば、非特許文献１にAAC方式の一例が開示されている。図６は、AAC方式の符号化装置の概念図を示す。符号化装置５０は、心理聴覚分析器１０、ゲイン制御部１３、適応ブロック長切換MDCT１５、ＴＮＳ１７、インテンシティステレオ１９、予測部２１、M/Sステレオ２３、スケーリング２５、量子化器２７、ハフマン符号化器２９、ビットストリーム生成部３１及びビット制御部３３を含む。
【０００３】
オーディオ信号などの入力データは、心理聴覚分析器１０及びゲイン制御部１３に入力される。心理聴覚分析器１０は、人間の聴覚特性に従って入力データを評価し、聴覚特性評価値を出力する。適応ブロック長切換MDCT変換器１５は、聴覚特性評価値から入力データを符号化するのに最適な変換ブロック長を選択し、ゲイン制御部１３から出力された入力データをMDCT（Modified Discrete Cosine Transform）係数に変換する。ＡＡＣ方式では、通常、変換ブロック長は、１２８サンプルもしくは１０２４サンプルであり、入力データに応じて切り替えられる。ここでブロックとは、符号化・復号化の1単位処理において処理されるデータであり、1単位の処理ではこれまでのデータに加えて新たに1ブロック分のデータを読み込み、1ブロック分の新たなデータを算出する。
【０００４】
続いて、ＴＮＳ１７、インテンシティステレオ１９、予測部２１、M/Sステレオ２３、スケーリング２５で処理した結果を量子化器２７において量子化し、量子化された結果をハフマン符号化器２９においてハフマン符号化する。そして、各部の出力に基づいてビットストリーム生成部３１において、ビットストリームを生成する。また、各処理で発生する副情報をすべて符号化する。
【非特許文献１】HYPERLINK "http://www.pioneer.co.jp/crdl/tech/mpeg/3-3.html" ISO/IEC 13818-7:1997(E)
【発明の開示】
【発明が解決しようとする課題】
【０００５】
しかし、AAC方式では適応ブロック長切換MDCT変換器１５において大きな遅延が生じる。一般に、MDCTはある程度の長さの入力データをひとまとめに処理する必要があり、適応ブロック長切換MDCT変換器１５では最大ブロック長により最大遅延量が決まる。AAC方式の適応ブロック長切換MDCT変換器１５の最大ブロック長は1024サンプルであり、1024サンプルの遅延が生じる。
【０００６】
また、上述の通り、AAC方式では、符号化処理の最終段階でハフマン符号化を行う。また、適応ブロック長切換MDCT変換器１５を始め、処理の各段階で信号に最適なパラメータ値を選び、選択されたパラメータ値を用いて副情報を符号化する。例えば、副情報にはゲイン制御部１３、適応ブロック長切換MDCT変換器１５、TNS１７、インテンシティステレオ１９、予測部２１、M/Sステレオ２３などの処理結果の一部が含まれる。ハフマン符号化では、入力データによって符号長が大幅に変化するため、1ブロックの入力データをハフマン符号化する際において符号化前に生成される符号量全体の見積もりが難しい。また、副情報の符号化においては数多くのパラメータ値が用いられることで副情報の量が増え、また選択されたパラメータ値によってブロック全体の符号量が大きく変化する。以上より、AAC方式において発生する符号量は、オーディオ信号などの入力データや、選択されるパラメータ値によって大きく変動し、その変動を吸収するためには極めて大きなバッファを用意しなければならない。つまり、１ブロック長が大きくなり遅延が大きくなる。また、大きなバッファを用いることでさらに大きな遅延が生じる。
【０００７】
ここで、AAC方式には遅延を小さくするための低遅延モードも用意されている。しかし、それでも最大ブロック長は512サンプルと大きく、遅延は解消されていない。また、AAC方式では、AAC方式のアルゴリズムをそのまま用いてブロック長を512サンプル以下に短くすると音質が劣化する。よって、ブロック長をこれ以上短くすることで低遅延かつ高品質とすることはできない。
【０００８】
そこで、本発明は遅延を防止しつつ高品質を維持可能な符号化方法、符号化装置、復号化方法および復号化装置を提供することを目的とする。
【課題を解決するための手段】
【０００９】
本願第１発明は、上記の課題を解決するために、所定時間領域を１ブロックとして、１ブロックごとに入力される入力データを変形離散コサイン変換処理し、１ブロックのMDCT係数を生成するMDCT係数生成ステップと、前記ブロック単位のMDCT係数を、所定周波数領域毎のセグメントに分割し、セグメント毎に前記MDCT係数の振幅の最大値に基づく倍率番号を取得する倍率番号取得ステップと、１ブロック内の複数のセグメントそれぞれについて抽出された倍率番号について、現在ブロックと直前ブロックとのセグメント毎の差分データを演算する倍率番号差分データ演算ステップと、前記MDCT係数の符号化精度を決定する精度番号に応じてMDCT係数を符号化するために、前記精度番号に応じてMDCT係数を伸縮させた仮数番号を１ブロック内で複数取得する仮数番号取得ステップと、前記セグメント単位の倍率番号差分データと、前記複数の倍率番号及び複数の仮数番号を含む仮数情報とをブロックごとに高速算術符号化する高速算術符号化ステップとを含み、前記高速算術符号化ステップでは、前記１ブロック内の倍率番号差分データが取り得る値を２つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記倍率番号差分データを高速算術符号化する処理を繰り返し、前記１ブロック内の仮数番号が取り得る値を２つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記仮数番号を高速算術符号化する処理を繰り返し、前記高速算術符号化の際には、前記倍率番号をパラメータとして前記仮数番号を高速算術符号化する、符号化方法を提供する。
【００１０】
上記の符号化方法によると、隣接するブロック間の倍率番号の差分データにおける頻度分布を利用して高速算術符号化し、かつ仮数番号を倍率番号をパラメータとして高速算術符号化する。また、その高速算術符号化では、倍率番号差分データがとる値を２つの区間に分けて、それぞれの区間に含まれる値が発生する頻度に基づいて符号化を行うことを繰り返す。よって、高速算術符号化により、値の発生確率に応じて符号化データを算出することならびに、差分を取ることにより予測可能となる確率密度関数を用いることにより符号化効率を高め、かつパラメータとしての倍率番号を用いて仮数番号の符号化効率を高めつつ、頻度分布における２つの区間それぞれの頻度に応じてデータを高速算術符号化することで演算量を少なくすることができる。
【００１１】
より具体的に説明すると、入力データは、高速算術符号化により符号化される。高速算術符号化では、従来手法の算術符号化を高速化したものであり、従来手法の算術符号化と同様に入力されたデータの確率そのものから符号化データを算出するため、シャノンのエントロピー限界に近いところまでデータを圧縮できる。よって、符号化による音質の劣化なく符号化効率を高めることができる。また、符号化による遅延を防止するために、１ブロック内に含まれる入力データのサンプル数を減らした場合であっても、高速算術符号化によって最適化された符号化を行うことで音質の劣化を防ぐことができる。
【００１２】
また、上記の高速算術符号化では、倍率番号差分データがとる値を２つの区間に分けて、それぞれの区間に含まれる値に対応する頻度に基づいて符号化を行うことを繰り返す。つまり、倍率番号差分データのとる多値の頻度を２値の頻度に置換し、この２値の頻度を用いて高速算術符号化を行う。よって、高速算術符号化による演算量を少なくすることができる。同様に、複数の仮数番号の頻度分布を２つの区間に分けて、それぞれの区間に対応する頻度に基づいて仮数番号の高速算術符号化を行うため、演算量を少なくすることができる。
【００１３】
さらに、MDCT係数群のブロックを周波数領域毎に分割し、その領域内のMDCT係数群から得られる倍率番号について、現在ブロックと直前ブロックとの差分データをセグメント毎に取得する。倍率番号差分データの頻度分布のブロック間における時間的変化は、倍率番号の頻度分布のブロック間における時間的変化よりも少ない。よって、倍率番号差分データを用いて高速算術符号化すると、ブロック間の頻度分布、つまり確率密度関数が予測可能であり、符号化効率が高い。よって、例えばロスレス圧縮の場合には、符号化効率が良くなるほどデータサイズを小さくできる。また、ビットレート制御をしているような場合には、同じビットレート、つまり圧縮率での音質を向上させることができる。
【００１４】
また、倍率番号は、仮数番号の頻度分布のパラメータを決定する要素の１つであり、この倍率番号を高速算術符号化のパラメータとして用いて仮数番号を高速算術符号化する。このように倍率番号をパラメータとして用いて仮数番号を高速算術符号化すると、仮数番号の頻度分布を実際のものと近い値で求めることができ、符号化効率を向上することができる。
【００１５】
さらに、MDCT係数を伸縮させた仮数番号を高速算術符号化するため、高速算術符号化による符号量を調整することもできる。
【００１６】
以上のような構成により、例えば、マイクを用いてリアルタイムに演説を行う場合などにおいて、１ブロック内のサンプル数を少なくして上記の符号化を行うと、遅延を防止しつつ音質の劣化を防止することができる。
【００１７】
本願第２発明は、第１発明において、前記１ブロック内に含まれる入力データのサンプル数は、６４サンプル以下である符号化方法を提供する。
【００１８】
１ブロックに含まれるサンプル数が６４サンプル以下と少ないため、入力データのバッファリングに要する遅延が少ない。よって、上述の高速算術符号化により音質の劣化を防ぎつつ、リアルタイム性を向上することができる。
【００１９】
また、ＡＡＣなどの方式では、サンプル数が多い少ない、つまり長短２つのブロック長を切り替えている。しかし、６４サンプル以下とブロック長を短くしてMDCT変換すると、時間的に短い、突発的な変動を再現可能かどうかを検討してブロック長を切り替える必要がない。つまり、常に短いブロック長でMDCT変換するため、長いブロック長から短いブロック長への変換を考慮する必要がない。よって、ブロック長の切替処理を行う必要がない。
【００２０】
本願第３発明は、第１発明において、前記入力データを心理聴覚分析し、その分析結果に基づいて１ブロック内で複数の精度番号を取得する精度番号取得ステップと、現在ブロックと直前ブロックとの精度番号の差分データである精度番号差分データを演算する精度番号差分データ演算ステップとをさらに含み、前記高速算術符号化ステップでは、さらに、前記１ブロック内の精度番号差分データが取り得る値を２つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記精度番号差分データを高速算術符号化する処理を繰り返す符号化方法を提供する。高速算術符号化の出力符号量を調整することができる。
【００２１】
本願第４発明は、第１発明において、前記高速算術符号化ステップにおいて、前記１ブロック内の倍率番号差分データが取り得る値は、前記倍率番号差分データの取り得る値のうち最も頻度が高い値を含む区間とそれ以外の値を含む区間との２つの区間に分けられる、符号化方法を提供する。このように２つの区間に分けることを繰り返すことで、より演算量を減らすことができる。
【００２２】
本願第５発明は、所定時間領域を１ブロックとして、１ブロックごとに入力される入力データを変形離散コサイン変換処理し、１ブロックのMDCT係数を生成するMDCT係数生成手段と、前記ブロック単位のMDCT係数を、所定周波数領域毎のセグメントに分割し、セグメント毎に前記MDCT係数の振幅の最大値に基づく倍率番号を取得する倍率番号取得手段と、１ブロック内の複数のセグメントそれぞれについて抽出された倍率番号について、現在ブロックと直前ブロックとのセグメント毎の差分データを演算する倍率番号差分データ演算手段と、前記MDCT係数の符号化精度を決定する精度番号に応じてMDCT係数を符号化するために、前記精度番号に応じてMDCT係数を伸縮させた仮数番号を１ブロック内で複数取得する仮数番号取得手段と、前記セグメント単位の倍率番号差分データと、前記複数の倍率番号及び複数の仮数番号を含む仮数情報とをブロックごとに高速算術符号化する高速算術符号化手段とを含み、
前記高速算術符号化手段は、前記１ブロック内の倍率番号差分データが取り得る値を２つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記倍率番号差分データを高速算術符号化する処理を繰り返し、前記１ブロック内の仮数番号が取り得る値を２つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記仮数番号を高速算術符号化する処理を繰り返し、前記高速算術符号化の際には、前記倍率番号をパラメータとして前記仮数番号を高速算術符号化する、符号化装置を提供する。この符号化装置による符号化は、本願第１発明と同様の作用効果を奏する。
【００２３】
本願第６発明は、本願第１発明に記載の符号化方法により符号化された倍率番号差分データの符号化データと、仮数番号の符号化データとを高速算術復号化する高速算術復号化ステップと、前記高速算術復号化された高速算術復号化データに基づいてMDCT係数を再生するMDCT係数再生ステップと、再生された前記MDCT係数を逆変形離散コサイン変換処理する逆MDCT変換ステップとを含み、前記高速算術復号化ステップでは、前記倍率番号差分データの符号化データが取り得る値を２つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記倍率番号差分データの符号化データを高速算術復号化することを繰り返し、前記仮数番号の符号化データが取り得る値を２つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記仮数番号の符号化データを高速算術復号化することを繰り返す復号化方法を提供する。
【００２４】
高速算術符号化とは逆の手順により、高速算術復号化を高速に行うことができる。高速算術符号化とは処理手順が逆であるが、符号化と同様に復号化に伴う演算量を減らすことができる。
【発明の効果】
【００２５】
本発明では、入力データの符号化に高速算術符号化を用いるため、入力されたデータの確率そのものから符号化データを算出するため、ブロック長を短くした場合であっても入力データの劣化を防止することができる。また、入力データを２値の頻度に置換し、この２値の頻度を用いて高速算術符号化を行うため、高速算術符号化による演算量を少なくすることができる。
【発明を実施するための最良の形態】
【００２６】
＜第１実施形態例＞
［構成］
図１は、本発明の第１実施形態例に係る符号化装置１００の全体構成図である。符号化装置１００は、MDCT変換器１１０、MDCT係数分析器１１５、倍率番号バッファ１２０、仮数伸縮器１３０、仮数分析器１３５及び高速算術符号化器１４０を含む。以下に各構成について説明する。
【００２７】
（１）MDCT変換器
MDCT変換器１１０は、オーディオ信号などの入力データを変形離散コサイン変換処理（MDCT：Modified Discrete Cosine Transform）し、MDCT係数を生成する。このMDCT係数は、入力データの周波数スペクトルを表現する係数である。ここで、入力データはブロック毎に入力され、MDCT変換器１１０はブロック単位のMDCT係数を出力する。ブロックとは、符号化・復号化の1単位処理において処理されるデータであり、1単位の処理ではこれまでのデータに加えて新たに1ブロック分のデータを読み込み、処理を行うことで1ブロック分の新たなデータを算出する。本発明の第１実施形態例に係るMDCT変換器１１０では、変換処理を行うブロック長が短い。つまり１ブロック内のサンプリング数が少ない。例えば、ブロック長が１２８サンプル以下であり、好ましくは６４サンプル以下である。
【００２８】
１ブロックに含まれるサンプル数が６４サンプル以下と少ない。1ブロックの処理は1ブロック分のデータを読み込み終わってから開始される。そのため、ここで最低でも1ブロックの遅延が必要だが、1ブロックが短ければ、１ブロックの処理を開始するまでに要する遅延が少ない。よって、後述の高速算術符号化により音質の劣化を防ぎつつ、リアルタイム性を向上することができる。
【００２９】
また、ＡＡＣなどの方式では、サンプル数が多い少ない、つまり長短２つのブロック長を切り替えている。しかし、６４サンプル以下とブロック長を短くしてMDCT変換すると、時間的に短い、突発的な変動を再現可能かどうかを検討してブロック長を切り替える必要がない。つまり、常に短いブロック長でMDCT変換するため、長いブロック長から短いブロック長への変換を考慮する必要がない。よって、ブロック長の切替処理を行う必要がない。
【００３０】
（２）MDCT係数分析器
MDCT係数分析器１１５は、ブロック単位で生成されたMDCT係数を、所定周波数領域毎のセグメントに分割し、倍率番号を取得する。ここで、倍率番号とは、セグメント毎におけるMDCT係数の振幅の最大値に基づく値である。また、MDCT係数分析器１１５は、取得した倍率番号を随時倍率分析器１２５に出力する。
【００３１】
（３）倍率番号バッファ
倍率番号バッファ１２０は、MDCT係数分析器１１５から取得した倍率番号を記憶し、現在ブロック（ｎ）の前の直前ブロック（ｎ−１）の倍率番号（ｎ−１）を倍率分析器１２５に出力する。
【００３２】
（４）倍率分析器
図２は、倍率分析器１２５が行う倍率番号差分データの演算の概念図である。倍率分析器１２５は、MDCT係数分析器１１５が取得した１ブロック内の複数のセグメントそれぞれについての倍率番号について、現在ブロック（ｎ）と直前ブロック（ｎ−１）とのセグメント毎の差分を演算し、倍率番号差分データを取得する。そして、取得した倍率番号差分データを、高速算術符号化器１４０に出力する。
【００３３】
（５）仮数伸縮器
仮数伸縮器１３０は、精度番号に応じてMDCT係数を伸縮させた仮数番号を１ブロック内で複数取得する。ここで、精度番号とは、MDCT係数の符号化精度を決定するものである。仮数伸縮器１３０に入力される精度番号は、規定値が入力されるものとする。データの欠落が生じないようなロスレス圧縮の場合には、精度番号を一定にしても品質の低下に影響はない。
【００３４】
（６）仮数分析器
仮数分析器１３５は、MDCT係数分析器１１５から取得した倍率番号と、仮数伸縮器１３０が取得した仮数番号とを１セットにした仮数情報を取得し、高速算術符号化器１４０に出力する。ここで、セグメント毎の仮数情報には、例えば倍率番号１つに対して複数の仮数番号が含まれる。
【００３５】
（７）高速算術符号化器
高速算術符号化器１４０は、倍率分析器１２５から１ブロック内の複数のセグメント毎に演算された倍率番号差分データを取得し、仮数分析器１３５から１ブロック内の複数の仮数情報を取得する。そして、高速算術符号化器１４０は、その倍率番号差分データ及び仮数情報を高速算術符号化する。
【００３６】
高速算術符号化器１４０は、まず１ブロック内の倍率番号差分データが取り得る値を２つの区間に分ける。そして、それぞれの区間に含まれる値が発生する頻度に基づいて倍率番号差分データを高速算術符号化する処理を繰り返す。具体的に、図３を用いて高速算術符号化方法について説明する。図３は、高速算術符号化方法を説明するための説明図である。例えば、高速算術符号化器１４０に入力されたデータの取り得る値が“１”、“２”、“３”、“４”、“５”、“６”、“７”、“８”の８通りであり、入力されたデータの値が“３”である場合を検討する。
【００３７】
１サイクル目では、入力されたデータの取り得る値を、“１”である区間と“１”以外の“２〜８”の区間とに分ける。値“３”は、“１”である区間には含まれず、“１”以外の“２〜８”の区間に含まれる。次に、それぞれの区間に含まれる値が発生する頻度を入力されたデータの頻度分布から求め、高速算術符号化を行う。ここでは、“１”の頻度がＰ（１）であり、２〜８”の頻度がＰ（２〜８）である。なお、Ｐ（１）＋Ｐ（２〜８）＝１．０である。値“３”が“１”ではなく、“２〜８”の区間に含まれるため、１サイクル目ではＰ（２〜８）が処理結果として得られる。
【００３８】
次に、２サイクル目では、入力されたデータの取り得る値が“２〜８”であるので、まず“２〜８”を２つの区間に分ける。ここでは、“２”である区間と“２”以外の“３〜８”の区間とに分ける。値“３”は、“２”である区間には含まれず、“２”以外の“３〜８”の区間に含まれる。次に、それぞれの区間に含まれる値が発生する頻度を入力されたデータの頻度分布から求め、高速算術符号化を行う。ここでは、“２”の頻度がＰ（２）であり、“３〜８”の頻度がＰ（３〜８）である。なお、２サイクル目では、入力されたデータの取り得る値が“２〜８”であるので、２サイクル目での“２”の頻度はＰ（２）／Ｐ（２〜８）となり、２サイクル目での“３〜８”の頻度はＰ（３）／Ｐ（２〜８）となる。よって、値“３”が“２”ではなく、“３〜８”の区間に含まれるため、２サイクルを終了すると、Ｐ（２〜８）×Ｐ（３）／Ｐ（２〜８）が処理結果として得られる。
【００３９】
同様に、３サイクル目の処理を行う。入力されたデータの取り得る値が“３〜８”であり、“３”である区間と“３”以外の“４〜８”の区間とに分ける。値“３”は、“３”である区間には含まれ、“３”以外の“４〜８”の区間に含まれない。次に、“３”である区間に含まれる値が発生する頻度を入力されたデータの頻度分布から求め、高速算術符号化を行う。ここでは、３サイクル目での“３”の頻度は、Ｐ（３）／Ｐ（３〜８）であり、３サイクルを終了すると、Ｐ（２〜８）×Ｐ（３）／Ｐ（２〜８）×Ｐ（３）／Ｐ（３〜８）が処理結果として得られる。
【００４０】
なお、頻度の大きい順に取り得る値を２つの区間に分けると、演算量が少なくなり好ましい。例えば、上記の“１”、“２”、“３”、“４”、“５”、“６”、“７”、“８”の取り得る値が、１２３４５６７８”の順に頻度が大→小になるとする。この場合、頻度の大きい“１”とそれ以外というように取り得る値を２区分していく。ここで、入力されるデータは、頻度の大きいものに含まれる可能性が多く、それだけ処理すべきサイクルの数の平均値が減る。
【００４１】
また、仮数番号及び倍率番号を含む仮数情報についても同様の高速算術符号化を行う。高速算術符号化器１４０は、１ブロック内の仮数番号が取り得る値を２つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて仮数番号を高速算術符号化する処理を繰り返す。なお、仮数番号の高速算術符号化の際には、倍率番号を高速算術符号化のパラメータとして用いて高速算術符号化する。
【００４２】
［効果］
上記の符号化方法によると、隣接するブロック間の倍率番号の差分データにおける頻度分布を利用して高速算術符号化し、かつ仮数番号を倍率番号をパラメータとして高速算術符号化する。また、その高速算術符号化では、倍率番号差分データがとる値を２つの区間に分けて、それぞれの区間に含まれる値が発生する頻度に基づいて符号化を行うことを繰り返す。よって、高速算術符号化により、値の発生確率に応じて符号化データを算出することならびに、差分を取ることにより予測可能となる確率密度関数を用いることにより符号化効率を高め、かつパラメータとしての倍率番号を用いて仮数番号の符号化効率を高めつつ、頻度分布における２つの区間それぞれの頻度に応じてデータを高速算術符号化することで演算量を少なくすることができる。
【００４３】
より具体的に説明すると、入力データは、高速算術符号化により符号化される。高速算術符号化では、従来手法の算術符号化を高速化したものであり、従来手法の算術符号化と同様に入力されたデータの確率そのものから符号化データを算出するため、シャノンのエントロピー限界に近いところまでデータを圧縮できる。よって、符号化による音質の劣化なく符号化効率を高めることができる。また、符号化による遅延を防止するために、１ブロック内に含まれる入力データのサンプル数を減らした場合であっても、高速算術符号化によって最適化された符号化を行うことで音質の劣化を防ぐことができる。
【００４４】
また、上記の高速算術符号化では、倍率番号差分データがとる値を２つの区間に分けて、それぞれの区間に含まれる値に対応する頻度に基づいて符号化を行うことを繰り返す。つまり、倍率番号差分データのとる多値の頻度を２値の頻度に置換し、この２値の頻度を用いて高速算術符号化を行う。よって、高速算術符号化による演算量を少なくすることができる。同様に、複数の仮数番号の頻度分布を２つの区間に分けて、それぞれの区間に対応する頻度に基づいて仮数番号の高速算術符号化を行うため、演算量を少なくすることができる。
【００４５】
さらに、MDCT係数群のブロックを周波数領域毎に分割し、その領域内のMDCT係数群から得られる倍率番号について、現在ブロックと直前ブロックとの差分データをセグメント毎に取得する。倍率番号差分データの頻度分布のブロック間における時間的変化は、倍率番号の頻度分布のブロック間における時間的変化よりも少ない。よって、倍率番号差分データを用いて高速算術符号化すると、ブロック間の頻度分布、つまり確率密度関数が予測可能であり、符号化効率が高い。よって、例えばロスレス圧縮の場合には、符号化効率が良くなるほどデータサイズを小さくできる。また、ビットレート制御をしているような場合には、同じビットレート、つまり圧縮率での音質を向上させることができる。
【００４６】
また、倍率番号は、仮数番号の頻度分布のパラメータを決定する要素の１つであり、この倍率番号を高速算術符号化のパラメータとして用いて仮数番号を高速算術符号化する。このように倍率番号をパラメータとして用いて仮数番号を高速算術符号化すると、仮数番号の頻度分布を実際のものと近い値で求めることができ、符号化効率を向上することができる。
【００４７】
さらに、MDCT係数を伸縮させた仮数番号を高速算術符号化するため、高速算術符号化による符号量を調整することもできる。
【００４８】
以上のような構成により、例えば、マイクを用いてリアルタイムに演説を行う場合などにおいて、１ブロック内のサンプル数を少なくして上記の符号化を行うと、遅延を防止しつつ音質の劣化を防止することができる。
【００４９】
＜第２実施形態例＞
［構成］
図４は、本発明の第２実施形態例に係る符号化装置２００の全体構成図である。精度番号バッファ２４５、精度分析器２５０、心理聴覚分析器２６０及びビット制御部２７０がさらに設けられている点が第１実施形態例と異なる。第２実施形態例に係る符号化装置２００は、MDCT変換器２１０、MDCT係数分析器２１５、倍率番号バッファ２２０、仮数伸縮器２３０、仮数分析器２３５及び高速算術符号化器２４０を含む。以下に各構成について説明する。
【００５０】
（１）心理聴覚分析器
心理聴覚分析器２６０は、人間の聴覚特性を利用して感度が小さい情報を省略するためのマスキングの計算等を行う。例えば、大音量中に混ざっている小さい音は、大音量にマスキングされてかき消される。このように、このように他の音によってかき消される音は、省略しても音質の劣化が少ない。そこで、心理聴覚分析器２６０により、音質の劣化を抑えつつ情報を省略するためのマスキングの計算を行う。
【００５１】
具体的には、心理聴覚分析器２６０は入力信号から周波数精度関数を算出する。周波数精度関数とは、音質の劣化を検知できないという条件下での符号化精度、つまり許容できる符号化誤差の周波数毎の分布関数である。算出された周波数精度関数に基づいて符号化されることで、マスキングを行うことができる。なお、心理聴覚分析器２６０で用いる心理聴覚モデルには、例えばISO/IEC 11172-3に記載されている心理聴覚モデル(psychoacoustic model)を用いる。この方法を用いた場合には、入力信号に対してブロック毎に適応的に符号化精度を算出することができる。また、聴覚心理モデルを用い、ビットレートを可変とすることで、符号化音質を一定音質に制御することができる。
【００５２】
周波数精度関数から得られる符号化精度の表現方法としては、符号化によって加わるノイズや歪みのその周波数におけるdB値、帯域内エネルギー値等の単位で表現することが可能で、これらの表現は相互に換算することも可能である。
【００５３】
前述の第１実施形態例においては、心理聴覚分析器は設けられておらず、入力データに関係なく全ブロックで一定の周波数精度関数を用いる。この場合は符号化復号した後の音質は最善のものではなくなるが、ロスレス圧縮などに利用する場合には音質に問題はない。
【００５４】
（２）記号の定義
以下では、実行されるソースプログラム及び関数を用いて各構成を説明する。ソースプログラム及び関数で用いられる記号の定義を以下の通りとする。
P: 量子化のための定数であり２19
L: ブロック長
b: ブロック番号
α: セグメント長
g: セグメント番号
i: セグメント内のサンプル番号
以下のすべての変数はブロック毎に計算する。特に示さない限り添え字のbは省く。
n: 心理聴覚分析が算出した精度 n(k) または n(g)
x: MDCT係数 x(g, i)
x*: 伸縮されたMDCT係数
K: 符号量制御で使う係数
q: 精度番号 q(g)
s: 倍率番号 s(g)
B: 符号量調整パラメータ
H*: 1ブロックの符号化で目標とするbit数
h: 1ブロックを試行的に符号化した際に発生したbit数
H: 1ブロックの符号化で発生したbit数
j,l,m: 説明で使う添え字
a,c,f,g: 説明で使う変数
（３）MDCT変換器
MDCT変換器２１０は、オーディオ信号などの入力データを変形離散コサイン変換処理し、ブロック単位のMDCT係数を生成する。本発明の第２実施形態例に係るMDCT変換器１１０では、変換処理を行うブロック長が短く。例えば、ブロック長が１２８サンプル以下である。ブロック長が６４サンプル以下であると、入力データのバッファリングに要する遅延をさらに防止でき好ましい。
【００５５】
（４）MDCT係数分析器
MDCT係数分析器２１５は、ブロック単位で生成されたMDCT係数を、所定周波数領域毎のセグメントに分割し、倍率番号及びMDCT係数の符号化精度を決定する精度番号を取得する。ここで、倍率番号とは、セグメント毎におけるMDCT係数の振幅の最大値に基づく値である。具体的には、各セグメント内のMDCT係数の最大値を対数(log)に変換して量子化(整数値へのまるめ処理)を行って算出した整数値である。この算出方法はAACやMPEG/Audio レイやIIIにおける「スケールファクタ」とほぼ同じである。この倍率番号を対数から通常尺度であらわした値に戻すと、MDCT係数の最大値に近い値となる。MDCT係数の最大値があらかじめわかっていることにより、効率的な符号化が可能となる。また、MDCT係数分析器２１５は、心理聴覚分析器２６０が取得した周波数精度関数及びMDCT係数に基づいて精度番号を取得する。
【００５６】
MDCT係数分析器２１５は、取得した倍率番号及び精度番号を随時、倍率番号バッファ２２０及び精度番号バッファ２４５に出力する。
【００５７】
（４−１）倍率番号の取得
MDCT係数分析器２１５による倍率番号の取得は、次の表１のソースプログラムにより実行される。
【００５８】
【表１】
2006080927.tif 000003
【００５９】
上記表１のソースプログラムで, 関数sfdecは後に示す表９に示されるsfdecにより実行される。またここで実行される倍率番号の取得は、例えば以下の式（１）及び（２）により表される。
【００６０】
【数１】
2006080927.tif 000004
【００６１】
ここで、ｇはセグメント番号、ｊはそのセグメントのなかのサンプル番号であり、a(g)はセグメント内の振幅の最大値、[x]はfloor(x)関数を意味し、s(g)はセグメントｇの倍率番号である。
【００６２】
まず、式（１）により振幅の最大値a(g)を算出し、算出されたa(g)を元に式（２）から倍率番号s(g)を算出する。
【００６３】
（４−２）精度番号の取得
MDCT係数分析器２１５による精度番号の取得は、次の表２のソースプログラムにより実行される。
【００６４】
【表２】
2006080927.tif 000005
【００６５】
上記表２のソースプログラムで実行される精度番号の取得は、例えば以下の式（３）により表される。
【００６６】
【数２】
2006080927.tif 000006
【００６７】
ここで、q(g)は算出される精度番号であり、[x]はfloor(x)関数を意味し、n(g)は心理聴覚分析器２６０の出力によって与えられるそのセグメント内のデータの精度、つまり許容誤差である。
【００６８】
（５）倍率番号バッファ、精度番号バッファ
倍率番号バッファ２２０は、倍率番号を記憶し、現在ブロック（ｎ）の前の直前ブロック（ｎ−１）の倍率番号（ｎ−１）を倍率分析器２２５に出力する。同様に、精度番号バッファ２４５は、精度番号を記憶し、現在ブロック（ｎ）の前の直前ブロック（ｎ−１）の精度番号（ｎ−１）を精度分析器２５０に出力する。
【００６９】
（６）仮数伸縮器
仮数伸縮器２３０は、MDCT係数の符号化精度を決定する精度番号に応じてMDCT係数を伸縮させた仮数番号を１ブロック内で複数取得する。
【００７０】
仮数伸縮器２３０による仮数番号の取得は、次の表３及び表４のソースプログラムにより実行される。
【００７１】
【表３】
2006080927.tif 000007
【００７２】
【表４】
2006080927.tif 000008
【００７３】
表３のソースプログラムは、以下の式（４）及び（５）により表される。
【００７４】
【数３】
2006080927.tif 000009
【００７５】
gをセグメント番号とすると、精度番号ｑ(g)と倍率a(g)との関係は、式（４）で表される。この場合、式（５）に示すように、iをセグメントのなかのサンプル番号として、x(g,i)にa(g)を掛けて元のMDCT係数を得る。ただしlogは自然対数である。
【００７６】
また、表４のソースプログラムは、以下の式（６）により表される。
【００７７】
【数４】
2006080927.tif 000010
【００７８】
gをセグメント番号、iをセグメントのなかのサンプル番号とすると、式（６）に示すように、MDCT係数から仮数番号を取得する。ここで、P=219 (量子化のための定数)である。
【００７９】
（７）倍率分析器
倍率分析器２２５は、現在ブロック（ｎ）の倍率番号と直前ブロック（ｎ−１）の倍率番号とを取得し、それらの倍率番号の差分を演算して倍率番号差分データを取得する。さらに、倍率分析器２２５は、倍率番号差分データを高速算術符号化する際の各種パラメータを決定する。そして、取得した倍率番号差分データ及び各種パラメータを含む倍率情報を高速算術符号化器２４０に出力する。
【００８０】
倍率分析器２２５による倍率番号差分データ及び各種パラメータを含む倍率情報の取得は、次の表５のソースプログラムにより実行される。
【００８１】
【表５】
2006080927.tif 000011
【００８２】
上記表５のソースプログラムでは、５つのC++プログラムの変数に数値を設定する。５つの変数は、下記の通りである。
【００８３】
int xsf; // 最新のブロックの倍率番号s(g) であり、整数値で表される。
【００８４】
int pxsf: //前ブロックの同じセグメントgの倍率番号s(g)であり、整数値で表される。
【００８５】
float CCC03: //パラメータの１つであり、実数値 0.12である。
【００８６】
float CCC04;// パラメータの１つであり、実数値 1.1である。
【００８７】
int maxsi;  // 倍率番号の最大値であり、(w-3)×4+22で表し、整数値で表される。ここで、wはサンプリングのビット幅である。
【００８８】
なお、xsf-pxsfにより倍率番号差分データを取得する。次に、これらの変数値を使って以下のようにしてput＿gctac(a2(g)-a(g), CCC03,CCC04,max＿si)、またはput＿gcszb(a2(g)-a(g), CCC03,CCC04,max＿si)を実行し、後述の高速算術符号化２４０で実行される高速算術符号化の関数を呼び出す。
【００８９】
ここで、put＿gctacの処理内容は、下記表６に示す通りである。ただし、プログラム中のput＿gcbitとput＿gcsui＿pの処理内容は後述する。
【００９０】
【表６】
2006080927.tif 000012
【００９１】
（８）精度分析器
精度分析器２５０は、現在ブロック（ｎ）の精度番号と直前ブロック（ｎ−１）の精度番号とを取得し、それらの精度番号の差分を演算して精度番号差分データを取得する。さらに、精度分析器２５０は、精度番号差分データを高速算術符号化する際の各種パラメータを決定する。そして、取得した精度番号差分データ及び各種パラメータを含む精度情報を高速算術符号化器２４０に出力する。
【００９２】
精度分析器２５０による精度番号差分データ及び各種パラメータを含む精度情報の取得は、次の表７のソースプログラムにより実行される。
【００９３】
【表７】
2006080927.tif 000013
【００９４】
上記表７のソースプログラムでは、５つのC++プログラムの変数に数値を設定する。５つの変数は、下記の通りである。
【００９５】
int mix; //最新のブロックの精度番号 q(g)であり、整数値で表される。
【００９６】
int pmix; //前ブロックの同じセグメントgの精度番号q(g)であり、整数値で表される。
【００９７】
float CCC05; // パラメータの１つであり、実数値0.1である。
【００９８】
float CCC06; // パラメータの１つであり、実数値1.3である。
【００９９】
int max＿nml; // 精度番号の最大値であり、整数値64で表す。
【０１００】
なお、mix-pmixにより精度番号差分データを取得する。次にこれらの変数値を使って以下のようにしてput＿gcszb(mix-pmix,CCC05,CCC06,max＿nml)を実行し、後述の高速算術符号化２４０で実行される高速算術符号化の関数を呼び出す。put＿gcszbの処理方法は表８に示す通りである。ただし、プログラム中のput＿gcbitとput＿gcsui＿pの処理内容は後述する。
【０１０１】
【表８】
2006080927.tif 000014
【０１０２】
（９）仮数分析器
仮数分析器２３５は、MDCT係数分析器２１５から取得した倍率番号と、仮数伸縮器２３０が取得した仮数番号とを１セットにした仮数情報を取得し、高速算術符号化器２４０に出力する。さらに、仮数分析器２３５は、仮数番号を高速算術符号化する際の各種パラメータを決定する。そして、取得した仮数情報及び各種パラメータを高速算術符号化器２４０に出力する。ここで、セグメント毎の仮数情報には、例えば倍率番号１つに対して複数の仮数番号が含まれる。
【０１０３】
仮数分析器２３５による仮数情報の取得は、次の表９のソースプログラムにより実行される。そして、このソースプログラムの実行により、後述の高速算術符号化２４０で実行される高速算術符号化の関数を呼び出す。
【０１０４】
【表９】
2006080927.tif 000015
【０１０５】
表９のソースプログラムに沿って説明する。仮数分析器２３５は、倍率番号==xsfと、符号化すべき仮数番号==d、つまり伸縮されたMDCT係数であるx*(g,i)とを入力として、後述の高速算術符号化が必要とする入力データとパラメータを算出する。パラメータには、高速算術符号化を、何回どのように実行するか、という実行回数の制御も含まれる。
【０１０６】
まず、プログラム中のlcprec =1L << 19 ; sf = lcprec * (sfdec(xsf)) ; r = ceil(sf-0.5) + 1.0 ; a = 5.0 / r;から倍率番号xsfからrとaを算出する。ここで、rは、q(g), s(g)から求めたブロックg内のx*(g,i)の絶対値の最大値であり、aは定数である。このaは、後述の指数関数分布の高速算術符号化を行う際に指数関数のパラメータとする。
【０１０７】
次に、p0=((r+4.0)/(r+100.0)*25.0)/r を算出する。このp0は、仮数番号d==0の場合（dが0に等しい場合）を効率よく符号化するためのパラメータとなる。まず、d==0かどうかを判定し、その結果がd==0ならば1、d==0でなければ0とする。この0,1の値は、P(0)=p0, p(1)=1.0-p0 という確率分布をパラメータとして用いて高速算術符号化される。dが0の場合は、ここまでで符号は終わり、そうでない場合はさらに以下の符号化処理のための処理を行う。
【０１０８】
まず、符号bitをｓとすると、d<0であればs=1, d<0でなければs=0とする。Sは、P(0):P(1)=1:1というパラメータで高速算術符号化される。そして、dがパラメータaの指数関数分布で高速算術符号化される。このパラメータaは、高速算術符号化を行う際に以下の式（７）で表される指数関数分布のパラメータaとして用いる。
【０１０９】
【数５】
2006080927.tif 000016
【０１１０】
式（７）は、定数Cを用いると、下記式（８）で表される。
【０１１１】
【数６】
2006080927.tif 000017
【０１１２】
ただし、これらの式はこのパラメータaの目的を説明するための式であり、aとrとdが仮数情報として、仮数分析器２３５から出力されて高速算術符号化器２４０に入力される。
【０１１３】
（８）高速算術符号化器
（８−１）高速算術符号化方法
高速算術符号化器２４０は、倍率分析器２２５から１ブロック内の複数のセグメント毎に演算された倍率番号差分データを取得し、精度分析器２５０から１ブロック内の複数のセグメント毎に演算された精度番号差分データを取得し、仮数分析器２３５から１ブロック内の複数の仮数情報を取得する。そして、高速算術符号化器２４０は、その倍率番号差分データ、精度番号差分データ及び仮数情報を高速算術符号化する。
【０１１４】
倍率番号差分データ及び仮数情報の高速算術符号化方法は、第１実施形態例と同様である。また、精度番号差分データの高速算術符号化も同様の方法により、以下のように行われる。高速算術符号化器２４０は、１ブロック内の精度番号差分データが取り得る値を２つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて精度番号差分データを高速算術符号化する処理を繰り返す。第２実施形態例の高速算術符号化では、倍率番号差分データや仮数番号とともに精度番号差分データを高速算術符号化することで、高速算術符号化の出力符号量を調整することができる。
【０１１５】
より具体的には、高速算術符号化器２４０は、倍率分析器２２５から倍率番号差分データ及び各種パラメータを取得する。また、高速算術符号化器２４０は、精度分析器２５０から精度番号差分データ及び各種パラメータを取得する。さらに、高速算術符号化器２４０は、仮数分析器２３５から仮数情報を取得する。高速算術符号化器２４０は、取得した情報を用いて高速算術符号化を行う。
【０１１６】
（８−２）ソースプログラム
高速算術符号化器２４０による高速算術符号化は、次の表１０のソースプログラムにより実行される。
【０１１７】
【表１０】
2006080927.tif 000018
【０１１８】
表１０のソースプログラムに沿って説明する。C++変数を以下の用に設定する。
【０１１９】
int xx : // 符号化すべき対象であり、整数である。
【０１２０】
double a; // 符号化を調整するためのパラメータである。さまざまな入力データを処理し、圧縮率が高まるように調整し、固定する。
【０１２１】
Int nn; // xxの絶対値の最大値である。
【０１２２】
プログラム中の関数であるput＿gcbit((x,f,g);では、xが0または1の値をとる確率がそれぞれP(0)=f, P(1)=g という出現確率であるときに符号化効率が最大となる高速算術符号化を用いて、xを高速算術符号化する。この方法は、高速算術符号化の方法として公知の方法であり、たとえばI. H. Witten et al.の方法（I. H. Witten et al., "Arithmetic Coding For Data Compression", Communications of the ACM, vol. 30, No. 6, Jun. 1987, pp. 520-540）を用いることができる。この時、平均符号長は、およそHavg=P(0)log P(0) + P(1) log P(1)に近い値になる。
【０１２３】
（８−３）本願の高速算術符号化方法が高速な理由
本願の高速算術符号化器２４０での高速算術符号化方法を用いると、演算処理量を減らして高速に符号化できる理由を以下に説明する。
【０１２４】
0か1の符号化、およびあらかじめP(1),…,P(n)が与えられているN値を符号化する算術符号化は、上述の1987年のWitten等の方法で効率よく実行することができる。そこで、入力データの頻度分布（確率密度関数ともいう）がP(x)=c exp(-Ax)という指数関数分布で表され、かつAの値が符号化時に決定する場合、つまりあらかじめP(x)を決定できない場合を検討する。なお、Aは、頻度分布の形を決定するパラメータであり、Xは入力値である。
【０１２５】
以下、本願発明の高速算術符号化方法を用いない通常の算術符号化を用いた場合を方法１とし、本願発明の高速算術符号化方法を用いた場合を方法２として、演算処理量の違いを以下で説明する。
「方法１」
まず、本願発明の高速算術符号化方法を用いない通常の算術符号化を説明する。
【０１２６】
仮数番号、倍率番号及び精度番号の頻度分布が、全てP(x)=C・exp(-A*x)で表される指数関数分布を有していると仮定して算術符号化を行う。すなわち、xがP(x)という確率で発生する場合に、符号化効率が最良となるような算術符号化を行う。Aの値は符号化時に決定されている。Cの値は下記式（９）を満たす定数である。従って、Cの値はAとxの範囲によって決まる。
【０１２７】
【数７】
2006080927.tif 000019
【０１２８】
方法１の算術符号化では、P(x)=C exp(-A*x)において、例えばx=0〜7であり8値の符号化を行う場合、Cは下記式（１０）で表される。
【０１２９】
【数８】
2006080927.tif 000020
【０１３０】
ここで、P(0),P(1)…,P(7)は、それぞれｃ , ｃｅ-A , ｃｅ-7Aとなる。そして、これらの8個の確率値を用いて通常の算術符号化を行う。
「方法２」
次に、本願発明の高速算術符号化方法を説明する。方法２の高速算術符号化方法では、方法１で用いた指数関数分布の代わりに、下記式（１１）で表されるrnを計算して高速算術符号化に用いる。式（１１）は、あるところまで符号化が進んだ場合の、符号化対象のデータの確率を算出する式である。
【０１３１】
【数９】
2006080927.tif 000021
【０１３２】
そして、表９及び表１０に示す手順によってrnをr0から順次計算しながら2値の高速算術符号化を行う。この手順によって符号xの高速算術符号化に実質的に適用される確率は、以下の表１１に示すように、上述の方法1で算出されるP(0),…,P(7)と同じになるので、方法２でも方法１と同等の符号化効率で符号化を行うことができる。
【０１３３】
以下の表１１では、例えば入力データの取り得る値がn0、n1、n2、n3、n4、n5、n6、n7である場合、まず取り得る値を“n0”と“n0でないn1〜n7”との２つに分離する。このとき、入力データの頻度分布から“n0”である確率がr0であり、“n0でないn1〜n7”である確率は１−r0である。次に、“n0でないn1〜n7”を、“１”と“１でないn2〜n7”との２つに分離する。このとき、“n0でないn1〜n7”であり“n1”である確率は、（１−r0）r1であり、“n0でないn1〜n7”であり“n1でないn2〜n7”である確率は、（１−r0）（１−r1）である。同様の手順を繰り返すと、以下の表１１のように表される。これを、数式に表すと、上記の式（１１）となる。
【０１３４】
【表１１】
2006080927.tif 000022
【０１３５】
「方法１及び方法２の比較」
次に、方法２が方法１より大幅に演算量を削減することが可能である理由を以下に示す。方法1では、P(0),…,P(7)の算出に多くの演算が必要になる。まずP(0),…,P(7)の8個の確率値を、指数関数を用いて算出する必要があり、指数関数の計算に非常に多くの演算量を必要とする。通常は、1つの指数関数の演算に10回〜50回の積和計算が必要であるが、仮に20回とすると、その7倍である140回の積和計算が必要になる。
【０１３６】
一方、方法２でループ内を一回実行するのに必要な演算は下記のものである。ここで、ループとは、１回の高速算術符号化処理を意味する。例えば、上記の表１１において、n2の高速算術符号化を終了するには、１）“n0でないn1〜n7”であることの高速算術符号化、２）“n1でないn2〜n7”であることの高速算術符号化、3）“n2”であることの高速算術符号化の３回のループ処理が必要となる。
【０１３７】
上記表１１に沿って、ループ内を一回実行するのに必要な演算を抽出する。
【０１３８】
ww=nn-yy;      // この処理では加算が１回行われる。
【０１３９】
pp=(a/2+1/ww+a*a*ww/12     // この処理では、加算が１回、逆数の計算が１回、乗算が２回、加算が１回行われる。
【０１４０】
yy++;  // この処理では、 カウントアップが1回行われる。
【０１４１】
if (yy==nn-1) break;  // この処理では、条件ブランチが1回行われる。
【０１４２】
一般的なDSPでは、乗算と加算は同時に1クロックで、逆数は7クロック程度で、カウントアップと条件ブランチは実質0クロックで実行可能である。従って、ループ内の実行に要するクロック数は10クロックと極めて小さくなるため、入力データ全体を高速算術符号化する場合であっても方法1に比べて大幅に少なくなる。
【０１４３】
加えて、方法２では、ループはyy==nn-1となった時点で終了する。指数関数分布ではxが小さい値の方がP(x)は大きいので、ループの平均実行回数は4回より少ない。例えば、頻度分布において、x＝０の場合が最も頻度が大きく、xがx＝０から離れるに従って頻度が小さくなり、ループ処理の回数も少なくなる。よって、演算量はさらに半分以下になる。以上の理由により、方法２は方法１と比べ、演算量を大幅に減らすことができる。
【０１４４】
（９）ビット制御部
ビット制御部２７０は、1ブロックの符号化処理によって高速算術符号化によって生成された符号量から符号量調整パラメータＢを算出し、これによって1ブロックの符号化により生じる符号量を最適にする。符号量は、MDCT変換器において利用する符号化精度を全体的に増減することで制御する。
【０１４５】
１ブロック内で符号化されている周波数帯域の帯域幅の合計をW[Hz]とし、符号化精度の増減をΔB［dB］とすると、必要となる情報量の増減ΔH[bit]は、次式（１２）により算出される。
【０１４６】
【数１０】
2006080927.tif 000023
【０１４７】
通常のＡＡＣ方式などでは、符号化後に出力される符号量の増減量は必ずしもH[bit]に近い値にならない。一方、本願発明による符号化方法によると、出力される符号量の増減量はH[bit]に近い値になる。従って、符号量調整パラメータであるＢ0をＢの初期値とし、目標とする目標符号量をHtとすると、１ブロックの符号化により発生する符号量H1をHtに近づけるためのBの補正量ΔBは、次式（１３）で表される。
【０１４８】
【数１１】
2006080927.tif 000024
【０１４９】
ここで、Kは、20log2/Wlog10であり、符号量制御の係数である。ただし、Kの値は近似することも可能である。
【０１５０】
よって、以下の方法によりBをくりかえし再計算することにより、出力される符号量を制御することができる。
ステップＳ１：１ブロックの符号化開始時点までの計算の中間結果をすべて保存する。
ステップＳ２：１ブロックの符号化を行い、符号量H1を算出する。
ステップＳ３：K=20log2/Wlog10を算出する。
ステップＳ４：新たな符号量調整パラメータＢ1を次式（１４）により算出する。
B(1)=B(0)+(Ht-H1)×K      ・・・（１４）
なお、上記ステップＳ１〜Ｓ３は、次式（１５）で表すことができる。
B (β+1) = B(β) + (H* - h(β)) ×K      ・・・（１５）
ここで、K=2.5、B(0)=H*/Kであり、βは符号量調整処理繰り返し回数である。
【０１５１】
式（１４）による符号量調整パラメータの算出を適当な回数繰り返すことにより、最適な符号量調整パラメータを算出することができる。
［効果］
第２実施形態例に係る符号化装置では、第１実施形態例と同様に、高速算術符号化により確率そのものから符号化データを算出することで音質の劣化を防ぎつつ、差分を取ることにより予測可能となる確率密度関数を用いて符号化効率を高め、かつパラメータとしての倍率番号を用いて仮数番号の符号化効率を高めつつ、頻度分布における２つの区間それぞれの頻度に応じてデータを高速算術符号化することで演算量を少なくすることができる。
【０１５２】
また、MDCT係数分析器２１５が、心理聴覚分析器２６０が取得した周波数精度関数とMDCT係数から、符号化精度を決定する精度番号を取得する。そして、この精度番号の差分データを倍率番号差分データや仮数番号とともに精度番号差分データを高速算術符号化することで、高速算術符号化の出力符号量を調整することができる。
【０１５３】
さらに、ビット制御部２７０を設けることで、ビットレートを一定にするなどの制御を行うことができる。
【０１５４】
＜第３実施形態例＞
［構成］
図５は、本発明の第３実施形態例に係る復号化装置３００の全体構成図である。第３実施形態例に係る復号化装置３００は、第２実施形態例に係る符号化装置２００において符号化されたビットストリームを高速算術復号化する。復号化装置３００は、倍率番号パラメータ算出器３０５、精度番号パラメータ算出器３１０、仮数番号パラメータ算出器３１５、倍率番号演算器３３０、倍率番号バッファ３３５、精度番号演算器３４０、精度番号バッファ３４５、仮数逆伸縮器３５０及び逆MDCT変換器３６０を含む。以下に各構成について説明する。
【０１５５】
（１）パラメータ算出器
倍率番号パラメータ算出器３０５は、倍率番号差分データを復号化するために必要なパラメータを算出する。精度番号パラメータ算出器３１０は、精度番号差分データを復号化するために必要なパラメータを算出する。仮数番号パラメータ算出器３１５は、復号化された倍率番号差分データに基づいて算出された倍率番号に基づいて、仮数番号差分データを復号化するために必要なパラメータを算出する。算出された各パラメータは、高速算術復号化器３２０に入力される。
【０１５６】
（２）高速算術復号化器
高速算術復号化器３２０は、前述の第１及び第２実施形態例の高速算術符号化器２４０が行っている高速算術符号化と逆の処理を行う。よって、高速算術符号化器２４０が“１”という入力データを高速算術符号化した場合、高速算術復号化器３２０からは“１”が出力される。同様に、高速算術符号化器２４０が“０”という入力データを高速算術符号化した場合、高速算術復号化器３２０からは“０”が出力される。
【０１５７】
高速算術復号化器３２０では、高速算術符号化器２４０から出力されるビットストリームを受信し、次のように高速算術復号化処理を行う。
【０１５８】
倍率番号差分データの復号化については、倍率番号差分データの符号化データが取り得る値を２つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて倍率番号差分データの符号化データを高速算術復号化することを繰り返す。これにより、高速算術復号化器３２０は、高速算術復号化の結果として、復号化された倍率番号差分データを取得する。
【０１５９】
同様に、精度番号差分データの復号化及び仮数番号の復号化については、倍率番号差分データと同様の処理を行い、高速算術復号化器３２０は、高速算術復号化の結果として、復号化された精度番号差分データ及び仮数番号を取得する。
【０１６０】
（３）倍率番号演算器及び倍率番号バッファ
倍率番号演算器３３０は、高速算術復号化器３２０により復号化された現在ブロック（ｎ）の倍率番号差分データと、倍率番号バッファ３２５から出力される直前ブロック（ｎ−１）の倍率番号（ｎ−１）とに基づいて、現在ブロック（ｎ）の倍率番号（ｎ）を算出する。
【０１６１】
（４）精度番号演算器及び精度番号バッファ
精度番号演算器３４０は、高速算術復号化器３２０により復号化された現在ブロック（ｎ）の精度番号差分データと、精度番号バッファ３４５から出力される直前ブロック（ｎ−１）の精度番号（ｎ−１）とに基づいて、現在ブロック（ｎ）の精度番号（ｎ）を算出する。
【０１６２】
（５）仮数逆伸縮器
仮数逆伸縮器３５０は、精度番号演算器３４０から精度番号を取得し、高速算術復号化器３２０により復号化された仮数番号を取得する。そして、仮数逆伸縮器３５０は、精度番号に基づいて仮数番号を逆伸縮し、MDCT係数を取得する。このとき、仮数番号は、符号化側の仮数伸縮器２３０とは反対に伸縮される。
【０１６３】
（６）逆MDCT変換器
逆MDCT変換器３６０は、仮数逆伸縮器３５０が取得したMDCT係数を逆変形離散コサイン変換処理し、符号化後の入力データが復号化された出力データを取得する。
【０１６４】
［効果］
高速算術符号化とは逆の手順により、高速算術復号化を高速に行うことができる。高速算術符号化とは処理手順が逆であるが、符号化と同様に復号化に伴う演算量を減らすことができる。
【産業上の利用可能性】
【０１６５】
本発明を用いれば、ブロック長を短くしても入力データの劣化を防止することができる。よって、マイクを用いてリアルタイムに演説を行う場合などにおいて本発明を適用すれば、遅延を防止しつつ音質の劣化を防止することができる。
【図面の簡単な説明】
【０１６６】
【図１】本発明の第１実施形態例に係る符号化装置１００の全体構成図。
【図２】倍率分析器１２５が行う倍率番号差分データの演算の概念図。
【図３】頻度分布に基づいて高速算術符号化していく場合の別の説明図。
【図４】頻度分布に基づいて高速算術符号化していく場合の説明図。
【図５】本発明の第３実施形態例に係る復号化装置３００の全体構成図。
【図６】AAC方式の符号化装置の概念図。
【符号の説明】
【０１６７】
１１０、２１０：MDCT変換器
１１５、２１５：MDCT係数分析器
１２０、２２０：倍率番号バッファ
１２５、２２５：倍率分析器
１３０、２３０：仮数伸縮器
１３５、２３５：仮数分析器
１４０、２４０：高速算術符号化器
２４５：精度番号バッファ
２５０：精度分析器
２６０：心理聴覚分析器
２７０：ビット制御部
３０５：倍率番号パラメータ算出器
３１０：精度番号パラメータ算出器
３１５：仮数番号パラメータ算出器
３２０：高速算術復号化器
３３０：倍率番号演算器
３４０：精度番号演算器
３５０：仮数逆伸縮器
【図１】
2006080927.tif 000025
【図２】
2006080927.tif 000026
【図３】
2006080927.tif 000027
【図４】
2006080927.tif 000028
【図５】
2006080927.tif 000029
【図６】
2006080927.tif 000030