説明

符号化方法、符号化装置、復号化方法及び復号化装置

【課題】 本発明は、遅延を防止しつつ高品質を維持可能な符号化方法を提供することを目的とする。
【解決手段】 MDCT計数分析器115は、MDCT変換器110の出力であるMDCT係数から倍率番号及び仮数番号を取得する。倍率分析器125は、MDCT計数分析器115が取得した倍率番号に基づいて、現在ブロック(n)と直前ブロック(n)とのセグメント毎の差分データを演算し、倍率番号差分データを取得する。そして、高速算術符号化器140は、1ブロック内の倍率番号差分データが取り得る値を2つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて倍率番号差分データを高速算術符号化する処理を繰り返し、1ブロック内の仮数番号が取り得る値を2つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて、倍率番号をパラメータとして仮数番号を高速算術符号化する処理を繰り返す。

【発明の詳細な説明】
【技術分野】
【0001】
本発明は、入力データのデジタル符号への符号化・復号化に関し、特にMDCT変換された後の情報の符号化・復号化に関する。
【背景技術】
【0002】
オーディオ符号化装置の1つにMPEG-2 AAC(Advanced Audio Coding)符号化方式(以下、AAC方式という)がある。例えば、非特許文献1にAAC方式の一例が開示されている。図6は、AAC方式の符号化装置の概念図を示す。符号化装置50は、心理聴覚分析器10、ゲイン制御部13、適応ブロック長切換MDCT15、TNS17、インテンシティステレオ19、予測部21、M/Sステレオ23、スケーリング25、量子化器27、ハフマン符号化器29、ビットストリーム生成部31及びビット制御部33を含む。
【0003】
オーディオ信号などの入力データは、心理聴覚分析器10及びゲイン制御部13に入力される。心理聴覚分析器10は、人間の聴覚特性に従って入力データを評価し、聴覚特性評価値を出力する。適応ブロック長切換MDCT変換器15は、聴覚特性評価値から入力データを符号化するのに最適な変換ブロック長を選択し、ゲイン制御部13から出力された入力データをMDCT(Modified Discrete Cosine Transform)係数に変換する。AAC方式では、通常、変換ブロック長は、128サンプルもしくは1024サンプルであり、入力データに応じて切り替えられる。ここでブロックとは、符号化・復号化の1単位処理において処理されるデータであり、1単位の処理ではこれまでのデータに加えて新たに1ブロック分のデータを読み込み、1ブロック分の新たなデータを算出する。
【0004】
続いて、TNS17、インテンシティステレオ19、予測部21、M/Sステレオ23、スケーリング25で処理した結果を量子化器27において量子化し、量子化された結果をハフマン符号化器29においてハフマン符号化する。そして、各部の出力に基づいてビットストリーム生成部31において、ビットストリームを生成する。また、各処理で発生する副情報をすべて符号化する。
【非特許文献1】HYPERLINK "http://www.pioneer.co.jp/crdl/tech/mpeg/3-3.html" ISO/IEC 13818-7:1997(E)
【発明の開示】
【発明が解決しようとする課題】
【0005】
しかし、AAC方式では適応ブロック長切換MDCT変換器15において大きな遅延が生じる。一般に、MDCTはある程度の長さの入力データをひとまとめに処理する必要があり、適応ブロック長切換MDCT変換器15では最大ブロック長により最大遅延量が決まる。AAC方式の適応ブロック長切換MDCT変換器15の最大ブロック長は1024サンプルであり、1024サンプルの遅延が生じる。
【0006】
また、上述の通り、AAC方式では、符号化処理の最終段階でハフマン符号化を行う。また、適応ブロック長切換MDCT変換器15を始め、処理の各段階で信号に最適なパラメータ値を選び、選択されたパラメータ値を用いて副情報を符号化する。例えば、副情報にはゲイン制御部13、適応ブロック長切換MDCT変換器15、TNS17、インテンシティステレオ19、予測部21、M/Sステレオ23などの処理結果の一部が含まれる。ハフマン符号化では、入力データによって符号長が大幅に変化するため、1ブロックの入力データをハフマン符号化する際において符号化前に生成される符号量全体の見積もりが難しい。また、副情報の符号化においては数多くのパラメータ値が用いられることで副情報の量が増え、また選択されたパラメータ値によってブロック全体の符号量が大きく変化する。以上より、AAC方式において発生する符号量は、オーディオ信号などの入力データや、選択されるパラメータ値によって大きく変動し、その変動を吸収するためには極めて大きなバッファを用意しなければならない。つまり、1ブロック長が大きくなり遅延が大きくなる。また、大きなバッファを用いることでさらに大きな遅延が生じる。
【0007】
ここで、AAC方式には遅延を小さくするための低遅延モードも用意されている。しかし、それでも最大ブロック長は512サンプルと大きく、遅延は解消されていない。また、AAC方式では、AAC方式のアルゴリズムをそのまま用いてブロック長を512サンプル以下に短くすると音質が劣化する。よって、ブロック長をこれ以上短くすることで低遅延かつ高品質とすることはできない。
【0008】
そこで、本発明は遅延を防止しつつ高品質を維持可能な符号化方法、符号化装置、復号化方法および復号化装置を提供することを目的とする。
【課題を解決するための手段】
【0009】
本願第1発明は、上記の課題を解決するために、所定時間領域を1ブロックとして、1ブロックごとに入力される入力データを変形離散コサイン変換処理し、1ブロックのMDCT係数を生成するMDCT係数生成ステップと、前記ブロック単位のMDCT係数を、所定周波数領域毎のセグメントに分割し、セグメント毎に前記MDCT係数の振幅の最大値に基づく倍率番号を取得する倍率番号取得ステップと、1ブロック内の複数のセグメントそれぞれについて抽出された倍率番号について、現在ブロックと直前ブロックとのセグメント毎の差分データを演算する倍率番号差分データ演算ステップと、前記MDCT係数の符号化精度を決定する精度番号に応じてMDCT係数を符号化するために、前記精度番号に応じてMDCT係数を伸縮させた仮数番号を1ブロック内で複数取得する仮数番号取得ステップと、前記セグメント単位の倍率番号差分データと、前記複数の倍率番号及び複数の仮数番号を含む仮数情報とをブロックごとに高速算術符号化する高速算術符号化ステップとを含み、前記高速算術符号化ステップでは、前記1ブロック内の倍率番号差分データが取り得る値を2つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記倍率番号差分データを高速算術符号化する処理を繰り返し、前記1ブロック内の仮数番号が取り得る値を2つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記仮数番号を高速算術符号化する処理を繰り返し、前記高速算術符号化の際には、前記倍率番号をパラメータとして前記仮数番号を高速算術符号化する、符号化方法を提供する。
【0010】
上記の符号化方法によると、隣接するブロック間の倍率番号の差分データにおける頻度分布を利用して高速算術符号化し、かつ仮数番号を倍率番号をパラメータとして高速算術符号化する。また、その高速算術符号化では、倍率番号差分データがとる値を2つの区間に分けて、それぞれの区間に含まれる値が発生する頻度に基づいて符号化を行うことを繰り返す。よって、高速算術符号化により、値の発生確率に応じて符号化データを算出することならびに、差分を取ることにより予測可能となる確率密度関数を用いることにより符号化効率を高め、かつパラメータとしての倍率番号を用いて仮数番号の符号化効率を高めつつ、頻度分布における2つの区間それぞれの頻度に応じてデータを高速算術符号化することで演算量を少なくすることができる。
【0011】
より具体的に説明すると、入力データは、高速算術符号化により符号化される。高速算術符号化では、従来手法の算術符号化を高速化したものであり、従来手法の算術符号化と同様に入力されたデータの確率そのものから符号化データを算出するため、シャノンのエントロピー限界に近いところまでデータを圧縮できる。よって、符号化による音質の劣化なく符号化効率を高めることができる。また、符号化による遅延を防止するために、1ブロック内に含まれる入力データのサンプル数を減らした場合であっても、高速算術符号化によって最適化された符号化を行うことで音質の劣化を防ぐことができる。
【0012】
また、上記の高速算術符号化では、倍率番号差分データがとる値を2つの区間に分けて、それぞれの区間に含まれる値に対応する頻度に基づいて符号化を行うことを繰り返す。つまり、倍率番号差分データのとる多値の頻度を2値の頻度に置換し、この2値の頻度を用いて高速算術符号化を行う。よって、高速算術符号化による演算量を少なくすることができる。同様に、複数の仮数番号の頻度分布を2つの区間に分けて、それぞれの区間に対応する頻度に基づいて仮数番号の高速算術符号化を行うため、演算量を少なくすることができる。
【0013】
さらに、MDCT係数群のブロックを周波数領域毎に分割し、その領域内のMDCT係数群から得られる倍率番号について、現在ブロックと直前ブロックとの差分データをセグメント毎に取得する。倍率番号差分データの頻度分布のブロック間における時間的変化は、倍率番号の頻度分布のブロック間における時間的変化よりも少ない。よって、倍率番号差分データを用いて高速算術符号化すると、ブロック間の頻度分布、つまり確率密度関数が予測可能であり、符号化効率が高い。よって、例えばロスレス圧縮の場合には、符号化効率が良くなるほどデータサイズを小さくできる。また、ビットレート制御をしているような場合には、同じビットレート、つまり圧縮率での音質を向上させることができる。
【0014】
また、倍率番号は、仮数番号の頻度分布のパラメータを決定する要素の1つであり、この倍率番号を高速算術符号化のパラメータとして用いて仮数番号を高速算術符号化する。このように倍率番号をパラメータとして用いて仮数番号を高速算術符号化すると、仮数番号の頻度分布を実際のものと近い値で求めることができ、符号化効率を向上することができる。
【0015】
さらに、MDCT係数を伸縮させた仮数番号を高速算術符号化するため、高速算術符号化による符号量を調整することもできる。
【0016】
以上のような構成により、例えば、マイクを用いてリアルタイムに演説を行う場合などにおいて、1ブロック内のサンプル数を少なくして上記の符号化を行うと、遅延を防止しつつ音質の劣化を防止することができる。
【0017】
本願第2発明は、第1発明において、前記1ブロック内に含まれる入力データのサンプル数は、64サンプル以下である符号化方法を提供する。
【0018】
1ブロックに含まれるサンプル数が64サンプル以下と少ないため、入力データのバッファリングに要する遅延が少ない。よって、上述の高速算術符号化により音質の劣化を防ぎつつ、リアルタイム性を向上することができる。
【0019】
また、AACなどの方式では、サンプル数が多い少ない、つまり長短2つのブロック長を切り替えている。しかし、64サンプル以下とブロック長を短くしてMDCT変換すると、時間的に短い、突発的な変動を再現可能かどうかを検討してブロック長を切り替える必要がない。つまり、常に短いブロック長でMDCT変換するため、長いブロック長から短いブロック長への変換を考慮する必要がない。よって、ブロック長の切替処理を行う必要がない。
【0020】
本願第3発明は、第1発明において、前記入力データを心理聴覚分析し、その分析結果に基づいて1ブロック内で複数の精度番号を取得する精度番号取得ステップと、現在ブロックと直前ブロックとの精度番号の差分データである精度番号差分データを演算する精度番号差分データ演算ステップとをさらに含み、前記高速算術符号化ステップでは、さらに、前記1ブロック内の精度番号差分データが取り得る値を2つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記精度番号差分データを高速算術符号化する処理を繰り返す符号化方法を提供する。高速算術符号化の出力符号量を調整することができる。
【0021】
本願第4発明は、第1発明において、前記高速算術符号化ステップにおいて、前記1ブロック内の倍率番号差分データが取り得る値は、前記倍率番号差分データの取り得る値のうち最も頻度が高い値を含む区間とそれ以外の値を含む区間との2つの区間に分けられる、符号化方法を提供する。このように2つの区間に分けることを繰り返すことで、より演算量を減らすことができる。
【0022】
本願第5発明は、所定時間領域を1ブロックとして、1ブロックごとに入力される入力データを変形離散コサイン変換処理し、1ブロックのMDCT係数を生成するMDCT係数生成手段と、前記ブロック単位のMDCT係数を、所定周波数領域毎のセグメントに分割し、セグメント毎に前記MDCT係数の振幅の最大値に基づく倍率番号を取得する倍率番号取得手段と、1ブロック内の複数のセグメントそれぞれについて抽出された倍率番号について、現在ブロックと直前ブロックとのセグメント毎の差分データを演算する倍率番号差分データ演算手段と、前記MDCT係数の符号化精度を決定する精度番号に応じてMDCT係数を符号化するために、前記精度番号に応じてMDCT係数を伸縮させた仮数番号を1ブロック内で複数取得する仮数番号取得手段と、前記セグメント単位の倍率番号差分データと、前記複数の倍率番号及び複数の仮数番号を含む仮数情報とをブロックごとに高速算術符号化する高速算術符号化手段とを含み、
前記高速算術符号化手段は、前記1ブロック内の倍率番号差分データが取り得る値を2つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記倍率番号差分データを高速算術符号化する処理を繰り返し、前記1ブロック内の仮数番号が取り得る値を2つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記仮数番号を高速算術符号化する処理を繰り返し、前記高速算術符号化の際には、前記倍率番号をパラメータとして前記仮数番号を高速算術符号化する、符号化装置を提供する。この符号化装置による符号化は、本願第1発明と同様の作用効果を奏する。
【0023】
本願第6発明は、本願第1発明に記載の符号化方法により符号化された倍率番号差分データの符号化データと、仮数番号の符号化データとを高速算術復号化する高速算術復号化ステップと、前記高速算術復号化された高速算術復号化データに基づいてMDCT係数を再生するMDCT係数再生ステップと、再生された前記MDCT係数を逆変形離散コサイン変換処理する逆MDCT変換ステップとを含み、前記高速算術復号化ステップでは、前記倍率番号差分データの符号化データが取り得る値を2つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記倍率番号差分データの符号化データを高速算術復号化することを繰り返し、前記仮数番号の符号化データが取り得る値を2つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記仮数番号の符号化データを高速算術復号化することを繰り返す復号化方法を提供する。
【0024】
高速算術符号化とは逆の手順により、高速算術復号化を高速に行うことができる。高速算術符号化とは処理手順が逆であるが、符号化と同様に復号化に伴う演算量を減らすことができる。
【発明の効果】
【0025】
本発明では、入力データの符号化に高速算術符号化を用いるため、入力されたデータの確率そのものから符号化データを算出するため、ブロック長を短くした場合であっても入力データの劣化を防止することができる。また、入力データを2値の頻度に置換し、この2値の頻度を用いて高速算術符号化を行うため、高速算術符号化による演算量を少なくすることができる。
【発明を実施するための最良の形態】
【0026】
<第1実施形態例>
[構成]
図1は、本発明の第1実施形態例に係る符号化装置100の全体構成図である。符号化装置100は、MDCT変換器110、MDCT係数分析器115、倍率番号バッファ120、仮数伸縮器130、仮数分析器135及び高速算術符号化器140を含む。以下に各構成について説明する。
【0027】
(1)MDCT変換器
MDCT変換器110は、オーディオ信号などの入力データを変形離散コサイン変換処理(MDCT:Modified Discrete Cosine Transform)し、MDCT係数を生成する。このMDCT係数は、入力データの周波数スペクトルを表現する係数である。ここで、入力データはブロック毎に入力され、MDCT変換器110はブロック単位のMDCT係数を出力する。ブロックとは、符号化・復号化の1単位処理において処理されるデータであり、1単位の処理ではこれまでのデータに加えて新たに1ブロック分のデータを読み込み、処理を行うことで1ブロック分の新たなデータを算出する。本発明の第1実施形態例に係るMDCT変換器110では、変換処理を行うブロック長が短い。つまり1ブロック内のサンプリング数が少ない。例えば、ブロック長が128サンプル以下であり、好ましくは64サンプル以下である。
【0028】
1ブロックに含まれるサンプル数が64サンプル以下と少ない。1ブロックの処理は1ブロック分のデータを読み込み終わってから開始される。そのため、ここで最低でも1ブロックの遅延が必要だが、1ブロックが短ければ、1ブロックの処理を開始するまでに要する遅延が少ない。よって、後述の高速算術符号化により音質の劣化を防ぎつつ、リアルタイム性を向上することができる。
【0029】
また、AACなどの方式では、サンプル数が多い少ない、つまり長短2つのブロック長を切り替えている。しかし、64サンプル以下とブロック長を短くしてMDCT変換すると、時間的に短い、突発的な変動を再現可能かどうかを検討してブロック長を切り替える必要がない。つまり、常に短いブロック長でMDCT変換するため、長いブロック長から短いブロック長への変換を考慮する必要がない。よって、ブロック長の切替処理を行う必要がない。
【0030】
(2)MDCT係数分析器
MDCT係数分析器115は、ブロック単位で生成されたMDCT係数を、所定周波数領域毎のセグメントに分割し、倍率番号を取得する。ここで、倍率番号とは、セグメント毎におけるMDCT係数の振幅の最大値に基づく値である。また、MDCT係数分析器115は、取得した倍率番号を随時倍率分析器125に出力する。
【0031】
(3)倍率番号バッファ
倍率番号バッファ120は、MDCT係数分析器115から取得した倍率番号を記憶し、現在ブロック(n)の前の直前ブロック(n−1)の倍率番号(n−1)を倍率分析器125に出力する。
【0032】
(4)倍率分析器
図2は、倍率分析器125が行う倍率番号差分データの演算の概念図である。倍率分析器125は、MDCT係数分析器115が取得した1ブロック内の複数のセグメントそれぞれについての倍率番号について、現在ブロック(n)と直前ブロック(n−1)とのセグメント毎の差分を演算し、倍率番号差分データを取得する。そして、取得した倍率番号差分データを、高速算術符号化器140に出力する。
【0033】
(5)仮数伸縮器
仮数伸縮器130は、精度番号に応じてMDCT係数を伸縮させた仮数番号を1ブロック内で複数取得する。ここで、精度番号とは、MDCT係数の符号化精度を決定するものである。仮数伸縮器130に入力される精度番号は、規定値が入力されるものとする。データの欠落が生じないようなロスレス圧縮の場合には、精度番号を一定にしても品質の低下に影響はない。
【0034】
(6)仮数分析器
仮数分析器135は、MDCT係数分析器115から取得した倍率番号と、仮数伸縮器130が取得した仮数番号とを1セットにした仮数情報を取得し、高速算術符号化器140に出力する。ここで、セグメント毎の仮数情報には、例えば倍率番号1つに対して複数の仮数番号が含まれる。
【0035】
(7)高速算術符号化器
高速算術符号化器140は、倍率分析器125から1ブロック内の複数のセグメント毎に演算された倍率番号差分データを取得し、仮数分析器135から1ブロック内の複数の仮数情報を取得する。そして、高速算術符号化器140は、その倍率番号差分データ及び仮数情報を高速算術符号化する。
【0036】
高速算術符号化器140は、まず1ブロック内の倍率番号差分データが取り得る値を2つの区間に分ける。そして、それぞれの区間に含まれる値が発生する頻度に基づいて倍率番号差分データを高速算術符号化する処理を繰り返す。具体的に、図3を用いて高速算術符号化方法について説明する。図3は、高速算術符号化方法を説明するための説明図である。例えば、高速算術符号化器140に入力されたデータの取り得る値が“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”の8通りであり、入力されたデータの値が“3”である場合を検討する。
【0037】
1サイクル目では、入力されたデータの取り得る値を、“1”である区間と“1”以外の“2〜8”の区間とに分ける。値“3”は、“1”である区間には含まれず、“1”以外の“2〜8”の区間に含まれる。次に、それぞれの区間に含まれる値が発生する頻度を入力されたデータの頻度分布から求め、高速算術符号化を行う。ここでは、“1”の頻度がP(1)であり、2〜8”の頻度がP(2〜8)である。なお、P(1)+P(2〜8)=1.0である。値“3”が“1”ではなく、“2〜8”の区間に含まれるため、1サイクル目ではP(2〜8)が処理結果として得られる。
【0038】
次に、2サイクル目では、入力されたデータの取り得る値が“2〜8”であるので、まず“2〜8”を2つの区間に分ける。ここでは、“2”である区間と“2”以外の“3〜8”の区間とに分ける。値“3”は、“2”である区間には含まれず、“2”以外の“3〜8”の区間に含まれる。次に、それぞれの区間に含まれる値が発生する頻度を入力されたデータの頻度分布から求め、高速算術符号化を行う。ここでは、“2”の頻度がP(2)であり、“3〜8”の頻度がP(3〜8)である。なお、2サイクル目では、入力されたデータの取り得る値が“2〜8”であるので、2サイクル目での“2”の頻度はP(2)/P(2〜8)となり、2サイクル目での“3〜8”の頻度はP(3)/P(2〜8)となる。よって、値“3”が“2”ではなく、“3〜8”の区間に含まれるため、2サイクルを終了すると、P(2〜8)×P(3)/P(2〜8)が処理結果として得られる。
【0039】
同様に、3サイクル目の処理を行う。入力されたデータの取り得る値が“3〜8”であり、“3”である区間と“3”以外の“4〜8”の区間とに分ける。値“3”は、“3”である区間には含まれ、“3”以外の“4〜8”の区間に含まれない。次に、“3”である区間に含まれる値が発生する頻度を入力されたデータの頻度分布から求め、高速算術符号化を行う。ここでは、3サイクル目での“3”の頻度は、P(3)/P(3〜8)であり、3サイクルを終了すると、P(2〜8)×P(3)/P(2〜8)×P(3)/P(3〜8)が処理結果として得られる。
【0040】
なお、頻度の大きい順に取り得る値を2つの区間に分けると、演算量が少なくなり好ましい。例えば、上記の“1”、“2”、“3”、“4”、“5”、“6”、“7”、“8”の取り得る値が、12345678”の順に頻度が大→小になるとする。この場合、頻度の大きい“1”とそれ以外というように取り得る値を2区分していく。ここで、入力されるデータは、頻度の大きいものに含まれる可能性が多く、それだけ処理すべきサイクルの数の平均値が減る。
【0041】
また、仮数番号及び倍率番号を含む仮数情報についても同様の高速算術符号化を行う。高速算術符号化器140は、1ブロック内の仮数番号が取り得る値を2つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて仮数番号を高速算術符号化する処理を繰り返す。なお、仮数番号の高速算術符号化の際には、倍率番号を高速算術符号化のパラメータとして用いて高速算術符号化する。
【0042】
[効果]
上記の符号化方法によると、隣接するブロック間の倍率番号の差分データにおける頻度分布を利用して高速算術符号化し、かつ仮数番号を倍率番号をパラメータとして高速算術符号化する。また、その高速算術符号化では、倍率番号差分データがとる値を2つの区間に分けて、それぞれの区間に含まれる値が発生する頻度に基づいて符号化を行うことを繰り返す。よって、高速算術符号化により、値の発生確率に応じて符号化データを算出することならびに、差分を取ることにより予測可能となる確率密度関数を用いることにより符号化効率を高め、かつパラメータとしての倍率番号を用いて仮数番号の符号化効率を高めつつ、頻度分布における2つの区間それぞれの頻度に応じてデータを高速算術符号化することで演算量を少なくすることができる。
【0043】
より具体的に説明すると、入力データは、高速算術符号化により符号化される。高速算術符号化では、従来手法の算術符号化を高速化したものであり、従来手法の算術符号化と同様に入力されたデータの確率そのものから符号化データを算出するため、シャノンのエントロピー限界に近いところまでデータを圧縮できる。よって、符号化による音質の劣化なく符号化効率を高めることができる。また、符号化による遅延を防止するために、1ブロック内に含まれる入力データのサンプル数を減らした場合であっても、高速算術符号化によって最適化された符号化を行うことで音質の劣化を防ぐことができる。
【0044】
また、上記の高速算術符号化では、倍率番号差分データがとる値を2つの区間に分けて、それぞれの区間に含まれる値に対応する頻度に基づいて符号化を行うことを繰り返す。つまり、倍率番号差分データのとる多値の頻度を2値の頻度に置換し、この2値の頻度を用いて高速算術符号化を行う。よって、高速算術符号化による演算量を少なくすることができる。同様に、複数の仮数番号の頻度分布を2つの区間に分けて、それぞれの区間に対応する頻度に基づいて仮数番号の高速算術符号化を行うため、演算量を少なくすることができる。
【0045】
さらに、MDCT係数群のブロックを周波数領域毎に分割し、その領域内のMDCT係数群から得られる倍率番号について、現在ブロックと直前ブロックとの差分データをセグメント毎に取得する。倍率番号差分データの頻度分布のブロック間における時間的変化は、倍率番号の頻度分布のブロック間における時間的変化よりも少ない。よって、倍率番号差分データを用いて高速算術符号化すると、ブロック間の頻度分布、つまり確率密度関数が予測可能であり、符号化効率が高い。よって、例えばロスレス圧縮の場合には、符号化効率が良くなるほどデータサイズを小さくできる。また、ビットレート制御をしているような場合には、同じビットレート、つまり圧縮率での音質を向上させることができる。
【0046】
また、倍率番号は、仮数番号の頻度分布のパラメータを決定する要素の1つであり、この倍率番号を高速算術符号化のパラメータとして用いて仮数番号を高速算術符号化する。このように倍率番号をパラメータとして用いて仮数番号を高速算術符号化すると、仮数番号の頻度分布を実際のものと近い値で求めることができ、符号化効率を向上することができる。
【0047】
さらに、MDCT係数を伸縮させた仮数番号を高速算術符号化するため、高速算術符号化による符号量を調整することもできる。
【0048】
以上のような構成により、例えば、マイクを用いてリアルタイムに演説を行う場合などにおいて、1ブロック内のサンプル数を少なくして上記の符号化を行うと、遅延を防止しつつ音質の劣化を防止することができる。
【0049】
<第2実施形態例>
[構成]
図4は、本発明の第2実施形態例に係る符号化装置200の全体構成図である。精度番号バッファ245、精度分析器250、心理聴覚分析器260及びビット制御部270がさらに設けられている点が第1実施形態例と異なる。第2実施形態例に係る符号化装置200は、MDCT変換器210、MDCT係数分析器215、倍率番号バッファ220、仮数伸縮器230、仮数分析器235及び高速算術符号化器240を含む。以下に各構成について説明する。
【0050】
(1)心理聴覚分析器
心理聴覚分析器260は、人間の聴覚特性を利用して感度が小さい情報を省略するためのマスキングの計算等を行う。例えば、大音量中に混ざっている小さい音は、大音量にマスキングされてかき消される。このように、このように他の音によってかき消される音は、省略しても音質の劣化が少ない。そこで、心理聴覚分析器260により、音質の劣化を抑えつつ情報を省略するためのマスキングの計算を行う。
【0051】
具体的には、心理聴覚分析器260は入力信号から周波数精度関数を算出する。周波数精度関数とは、音質の劣化を検知できないという条件下での符号化精度、つまり許容できる符号化誤差の周波数毎の分布関数である。算出された周波数精度関数に基づいて符号化されることで、マスキングを行うことができる。なお、心理聴覚分析器260で用いる心理聴覚モデルには、例えばISO/IEC 11172-3に記載されている心理聴覚モデル(psychoacoustic model)を用いる。この方法を用いた場合には、入力信号に対してブロック毎に適応的に符号化精度を算出することができる。また、聴覚心理モデルを用い、ビットレートを可変とすることで、符号化音質を一定音質に制御することができる。
【0052】
周波数精度関数から得られる符号化精度の表現方法としては、符号化によって加わるノイズや歪みのその周波数におけるdB値、帯域内エネルギー値等の単位で表現することが可能で、これらの表現は相互に換算することも可能である。
【0053】
前述の第1実施形態例においては、心理聴覚分析器は設けられておらず、入力データに関係なく全ブロックで一定の周波数精度関数を用いる。この場合は符号化復号した後の音質は最善のものではなくなるが、ロスレス圧縮などに利用する場合には音質に問題はない。
【0054】
(2)記号の定義
以下では、実行されるソースプログラム及び関数を用いて各構成を説明する。ソースプログラム及び関数で用いられる記号の定義を以下の通りとする。
P: 量子化のための定数であり219
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: 説明で使う変数
(3)MDCT変換器
MDCT変換器210は、オーディオ信号などの入力データを変形離散コサイン変換処理し、ブロック単位のMDCT係数を生成する。本発明の第2実施形態例に係るMDCT変換器110では、変換処理を行うブロック長が短く。例えば、ブロック長が128サンプル以下である。ブロック長が64サンプル以下であると、入力データのバッファリングに要する遅延をさらに防止でき好ましい。
【0055】
(4)MDCT係数分析器
MDCT係数分析器215は、ブロック単位で生成されたMDCT係数を、所定周波数領域毎のセグメントに分割し、倍率番号及びMDCT係数の符号化精度を決定する精度番号を取得する。ここで、倍率番号とは、セグメント毎におけるMDCT係数の振幅の最大値に基づく値である。具体的には、各セグメント内のMDCT係数の最大値を対数(log)に変換して量子化(整数値へのまるめ処理)を行って算出した整数値である。この算出方法はAACやMPEG/Audio レイやIIIにおける「スケールファクタ」とほぼ同じである。この倍率番号を対数から通常尺度であらわした値に戻すと、MDCT係数の最大値に近い値となる。MDCT係数の最大値があらかじめわかっていることにより、効率的な符号化が可能となる。また、MDCT係数分析器215は、心理聴覚分析器260が取得した周波数精度関数及びMDCT係数に基づいて精度番号を取得する。
【0056】
MDCT係数分析器215は、取得した倍率番号及び精度番号を随時、倍率番号バッファ220及び精度番号バッファ245に出力する。
【0057】
(4−1)倍率番号の取得
MDCT係数分析器215による倍率番号の取得は、次の表1のソースプログラムにより実行される。
【0058】
【表1】

【0059】
上記表1のソースプログラムで, 関数sfdecは後に示す表9に示されるsfdecにより実行される。またここで実行される倍率番号の取得は、例えば以下の式(1)及び(2)により表される。
【0060】
【数1】

【0061】
ここで、gはセグメント番号、jはそのセグメントのなかのサンプル番号であり、a(g)はセグメント内の振幅の最大値、[x]はfloor(x)関数を意味し、s(g)はセグメントgの倍率番号である。
【0062】
まず、式(1)により振幅の最大値a(g)を算出し、算出されたa(g)を元に式(2)から倍率番号s(g)を算出する。
【0063】
(4−2)精度番号の取得
MDCT係数分析器215による精度番号の取得は、次の表2のソースプログラムにより実行される。
【0064】
【表2】

【0065】
上記表2のソースプログラムで実行される精度番号の取得は、例えば以下の式(3)により表される。
【0066】
【数2】

【0067】
ここで、q(g)は算出される精度番号であり、[x]はfloor(x)関数を意味し、n(g)は心理聴覚分析器260の出力によって与えられるそのセグメント内のデータの精度、つまり許容誤差である。
【0068】
(5)倍率番号バッファ、精度番号バッファ
倍率番号バッファ220は、倍率番号を記憶し、現在ブロック(n)の前の直前ブロック(n−1)の倍率番号(n−1)を倍率分析器225に出力する。同様に、精度番号バッファ245は、精度番号を記憶し、現在ブロック(n)の前の直前ブロック(n−1)の精度番号(n−1)を精度分析器250に出力する。
【0069】
(6)仮数伸縮器
仮数伸縮器230は、MDCT係数の符号化精度を決定する精度番号に応じてMDCT係数を伸縮させた仮数番号を1ブロック内で複数取得する。
【0070】
仮数伸縮器230による仮数番号の取得は、次の表3及び表4のソースプログラムにより実行される。
【0071】
【表3】

【0072】
【表4】

【0073】
表3のソースプログラムは、以下の式(4)及び(5)により表される。
【0074】
【数3】

【0075】
gをセグメント番号とすると、精度番号q(g)と倍率a(g)との関係は、式(4)で表される。この場合、式(5)に示すように、iをセグメントのなかのサンプル番号として、x(g,i)にa(g)を掛けて元のMDCT係数を得る。ただしlogは自然対数である。
【0076】
また、表4のソースプログラムは、以下の式(6)により表される。
【0077】
【数4】

【0078】
gをセグメント番号、iをセグメントのなかのサンプル番号とすると、式(6)に示すように、MDCT係数から仮数番号を取得する。ここで、P=219 (量子化のための定数)である。
【0079】
(7)倍率分析器
倍率分析器225は、現在ブロック(n)の倍率番号と直前ブロック(n−1)の倍率番号とを取得し、それらの倍率番号の差分を演算して倍率番号差分データを取得する。さらに、倍率分析器225は、倍率番号差分データを高速算術符号化する際の各種パラメータを決定する。そして、取得した倍率番号差分データ及び各種パラメータを含む倍率情報を高速算術符号化器240に出力する。
【0080】
倍率分析器225による倍率番号差分データ及び各種パラメータを含む倍率情報の取得は、次の表5のソースプログラムにより実行される。
【0081】
【表5】

【0082】
上記表5のソースプログラムでは、5つのC++プログラムの変数に数値を設定する。5つの変数は、下記の通りである。
【0083】
int xsf; // 最新のブロックの倍率番号s(g) であり、整数値で表される。
【0084】
int pxsf: //前ブロックの同じセグメントgの倍率番号s(g)であり、整数値で表される。
【0085】
float CCC03: //パラメータの1つであり、実数値 0.12である。
【0086】
float CCC04;// パラメータの1つであり、実数値 1.1である。
【0087】
int maxsi; // 倍率番号の最大値であり、(w-3)×4+22で表し、整数値で表される。ここで、wはサンプリングのビット幅である。
【0088】
なお、xsf-pxsfにより倍率番号差分データを取得する。次に、これらの変数値を使って以下のようにしてput_gctac(a2(g)-a(g), CCC03,CCC04,max_si)、またはput_gcszb(a2(g)-a(g), CCC03,CCC04,max_si)を実行し、後述の高速算術符号化240で実行される高速算術符号化の関数を呼び出す。
【0089】
ここで、put_gctacの処理内容は、下記表6に示す通りである。ただし、プログラム中のput_gcbitとput_gcsui_pの処理内容は後述する。
【0090】
【表6】

【0091】
(8)精度分析器
精度分析器250は、現在ブロック(n)の精度番号と直前ブロック(n−1)の精度番号とを取得し、それらの精度番号の差分を演算して精度番号差分データを取得する。さらに、精度分析器250は、精度番号差分データを高速算術符号化する際の各種パラメータを決定する。そして、取得した精度番号差分データ及び各種パラメータを含む精度情報を高速算術符号化器240に出力する。
【0092】
精度分析器250による精度番号差分データ及び各種パラメータを含む精度情報の取得は、次の表7のソースプログラムにより実行される。
【0093】
【表7】

【0094】
上記表7のソースプログラムでは、5つのC++プログラムの変数に数値を設定する。5つの変数は、下記の通りである。
【0095】
int mix; //最新のブロックの精度番号 q(g)であり、整数値で表される。
【0096】
int pmix; //前ブロックの同じセグメントgの精度番号q(g)であり、整数値で表される。
【0097】
float CCC05; // パラメータの1つであり、実数値0.1である。
【0098】
float CCC06; // パラメータの1つであり、実数値1.3である。
【0099】
int max_nml; // 精度番号の最大値であり、整数値64で表す。
【0100】
なお、mix-pmixにより精度番号差分データを取得する。次にこれらの変数値を使って以下のようにしてput_gcszb(mix-pmix,CCC05,CCC06,max_nml)を実行し、後述の高速算術符号化240で実行される高速算術符号化の関数を呼び出す。put_gcszbの処理方法は表8に示す通りである。ただし、プログラム中のput_gcbitとput_gcsui_pの処理内容は後述する。
【0101】
【表8】

【0102】
(9)仮数分析器
仮数分析器235は、MDCT係数分析器215から取得した倍率番号と、仮数伸縮器230が取得した仮数番号とを1セットにした仮数情報を取得し、高速算術符号化器240に出力する。さらに、仮数分析器235は、仮数番号を高速算術符号化する際の各種パラメータを決定する。そして、取得した仮数情報及び各種パラメータを高速算術符号化器240に出力する。ここで、セグメント毎の仮数情報には、例えば倍率番号1つに対して複数の仮数番号が含まれる。
【0103】
仮数分析器235による仮数情報の取得は、次の表9のソースプログラムにより実行される。そして、このソースプログラムの実行により、後述の高速算術符号化240で実行される高速算術符号化の関数を呼び出す。
【0104】
【表9】

【0105】
表9のソースプログラムに沿って説明する。仮数分析器235は、倍率番号==xsfと、符号化すべき仮数番号==d、つまり伸縮されたMDCT係数であるx*(g,i)とを入力として、後述の高速算術符号化が必要とする入力データとパラメータを算出する。パラメータには、高速算術符号化を、何回どのように実行するか、という実行回数の制御も含まれる。
【0106】
まず、プログラム中の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は、後述の指数関数分布の高速算術符号化を行う際に指数関数のパラメータとする。
【0107】
次に、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の場合は、ここまでで符号は終わり、そうでない場合はさらに以下の符号化処理のための処理を行う。
【0108】
まず、符号bitをsとすると、d<0であればs=1, d<0でなければs=0とする。Sは、P(0):P(1)=1:1というパラメータで高速算術符号化される。そして、dがパラメータaの指数関数分布で高速算術符号化される。このパラメータaは、高速算術符号化を行う際に以下の式(7)で表される指数関数分布のパラメータaとして用いる。
【0109】
【数5】

【0110】
式(7)は、定数Cを用いると、下記式(8)で表される。
【0111】
【数6】

【0112】
ただし、これらの式はこのパラメータaの目的を説明するための式であり、aとrとdが仮数情報として、仮数分析器235から出力されて高速算術符号化器240に入力される。
【0113】
(8)高速算術符号化器
(8−1)高速算術符号化方法
高速算術符号化器240は、倍率分析器225から1ブロック内の複数のセグメント毎に演算された倍率番号差分データを取得し、精度分析器250から1ブロック内の複数のセグメント毎に演算された精度番号差分データを取得し、仮数分析器235から1ブロック内の複数の仮数情報を取得する。そして、高速算術符号化器240は、その倍率番号差分データ、精度番号差分データ及び仮数情報を高速算術符号化する。
【0114】
倍率番号差分データ及び仮数情報の高速算術符号化方法は、第1実施形態例と同様である。また、精度番号差分データの高速算術符号化も同様の方法により、以下のように行われる。高速算術符号化器240は、1ブロック内の精度番号差分データが取り得る値を2つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて精度番号差分データを高速算術符号化する処理を繰り返す。第2実施形態例の高速算術符号化では、倍率番号差分データや仮数番号とともに精度番号差分データを高速算術符号化することで、高速算術符号化の出力符号量を調整することができる。
【0115】
より具体的には、高速算術符号化器240は、倍率分析器225から倍率番号差分データ及び各種パラメータを取得する。また、高速算術符号化器240は、精度分析器250から精度番号差分データ及び各種パラメータを取得する。さらに、高速算術符号化器240は、仮数分析器235から仮数情報を取得する。高速算術符号化器240は、取得した情報を用いて高速算術符号化を行う。
【0116】
(8−2)ソースプログラム
高速算術符号化器240による高速算術符号化は、次の表10のソースプログラムにより実行される。
【0117】
【表10】

【0118】
表10のソースプログラムに沿って説明する。C++変数を以下の用に設定する。
【0119】
int xx : // 符号化すべき対象であり、整数である。
【0120】
double a; // 符号化を調整するためのパラメータである。さまざまな入力データを処理し、圧縮率が高まるように調整し、固定する。
【0121】
Int nn; // xxの絶対値の最大値である。
【0122】
プログラム中の関数である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)に近い値になる。
【0123】
(8−3)本願の高速算術符号化方法が高速な理由
本願の高速算術符号化器240での高速算術符号化方法を用いると、演算処理量を減らして高速に符号化できる理由を以下に説明する。
【0124】
0か1の符号化、およびあらかじめP(1),…,P(n)が与えられているN値を符号化する算術符号化は、上述の1987年のWitten等の方法で効率よく実行することができる。そこで、入力データの頻度分布(確率密度関数ともいう)がP(x)=c exp(-Ax)という指数関数分布で表され、かつAの値が符号化時に決定する場合、つまりあらかじめP(x)を決定できない場合を検討する。なお、Aは、頻度分布の形を決定するパラメータであり、Xは入力値である。
【0125】
以下、本願発明の高速算術符号化方法を用いない通常の算術符号化を用いた場合を方法1とし、本願発明の高速算術符号化方法を用いた場合を方法2として、演算処理量の違いを以下で説明する。
「方法1」
まず、本願発明の高速算術符号化方法を用いない通常の算術符号化を説明する。
【0126】
仮数番号、倍率番号及び精度番号の頻度分布が、全てP(x)=C・exp(-A*x)で表される指数関数分布を有していると仮定して算術符号化を行う。すなわち、xがP(x)という確率で発生する場合に、符号化効率が最良となるような算術符号化を行う。Aの値は符号化時に決定されている。Cの値は下記式(9)を満たす定数である。従って、Cの値はAとxの範囲によって決まる。
【0127】
【数7】

【0128】
方法1の算術符号化では、P(x)=C exp(-A*x)において、例えばx=0〜7であり8値の符号化を行う場合、Cは下記式(10)で表される。
【0129】
【数8】

【0130】
ここで、P(0),P(1)…,P(7)は、それぞれc , ce-A , ce-7Aとなる。そして、これらの8個の確率値を用いて通常の算術符号化を行う。
「方法2」
次に、本願発明の高速算術符号化方法を説明する。方法2の高速算術符号化方法では、方法1で用いた指数関数分布の代わりに、下記式(11)で表されるrnを計算して高速算術符号化に用いる。式(11)は、あるところまで符号化が進んだ場合の、符号化対象のデータの確率を算出する式である。
【0131】
【数9】

【0132】
そして、表9及び表10に示す手順によってrnをr0から順次計算しながら2値の高速算術符号化を行う。この手順によって符号xの高速算術符号化に実質的に適用される確率は、以下の表11に示すように、上述の方法1で算出されるP(0),…,P(7)と同じになるので、方法2でも方法1と同等の符号化効率で符号化を行うことができる。
【0133】
以下の表11では、例えば入力データの取り得る値がn0、n1、n2、n3、n4、n5、n6、n7である場合、まず取り得る値を“n0”と“n0でないn1〜n7”との2つに分離する。このとき、入力データの頻度分布から“n0”である確率がr0であり、“n0でないn1〜n7”である確率は1−r0である。次に、“n0でないn1〜n7”を、“1”と“1でないn2〜n7”との2つに分離する。このとき、“n0でないn1〜n7”であり“n1”である確率は、(1−r0)r1であり、“n0でないn1〜n7”であり“n1でないn2〜n7”である確率は、(1−r0)(1−r1)である。同様の手順を繰り返すと、以下の表11のように表される。これを、数式に表すと、上記の式(11)となる。
【0134】
【表11】

【0135】
「方法1及び方法2の比較」
次に、方法2が方法1より大幅に演算量を削減することが可能である理由を以下に示す。方法1では、P(0),…,P(7)の算出に多くの演算が必要になる。まずP(0),…,P(7)の8個の確率値を、指数関数を用いて算出する必要があり、指数関数の計算に非常に多くの演算量を必要とする。通常は、1つの指数関数の演算に10回〜50回の積和計算が必要であるが、仮に20回とすると、その7倍である140回の積和計算が必要になる。
【0136】
一方、方法2でループ内を一回実行するのに必要な演算は下記のものである。ここで、ループとは、1回の高速算術符号化処理を意味する。例えば、上記の表11において、n2の高速算術符号化を終了するには、1)“n0でないn1〜n7”であることの高速算術符号化、2)“n1でないn2〜n7”であることの高速算術符号化、3)“n2”であることの高速算術符号化の3回のループ処理が必要となる。
【0137】
上記表11に沿って、ループ内を一回実行するのに必要な演算を抽出する。
【0138】
ww=nn-yy; // この処理では加算が1回行われる。
【0139】
pp=(a/2+1/ww+a*a*ww/12 // この処理では、加算が1回、逆数の計算が1回、乗算が2回、加算が1回行われる。
【0140】
yy++; // この処理では、 カウントアップが1回行われる。
【0141】
if (yy==nn-1) break; // この処理では、条件ブランチが1回行われる。
【0142】
一般的なDSPでは、乗算と加算は同時に1クロックで、逆数は7クロック程度で、カウントアップと条件ブランチは実質0クロックで実行可能である。従って、ループ内の実行に要するクロック数は10クロックと極めて小さくなるため、入力データ全体を高速算術符号化する場合であっても方法1に比べて大幅に少なくなる。
【0143】
加えて、方法2では、ループはyy==nn-1となった時点で終了する。指数関数分布ではxが小さい値の方がP(x)は大きいので、ループの平均実行回数は4回より少ない。例えば、頻度分布において、x=0の場合が最も頻度が大きく、xがx=0から離れるに従って頻度が小さくなり、ループ処理の回数も少なくなる。よって、演算量はさらに半分以下になる。以上の理由により、方法2は方法1と比べ、演算量を大幅に減らすことができる。
【0144】
(9)ビット制御部
ビット制御部270は、1ブロックの符号化処理によって高速算術符号化によって生成された符号量から符号量調整パラメータBを算出し、これによって1ブロックの符号化により生じる符号量を最適にする。符号量は、MDCT変換器において利用する符号化精度を全体的に増減することで制御する。
【0145】
1ブロック内で符号化されている周波数帯域の帯域幅の合計をW[Hz]とし、符号化精度の増減をΔB[dB]とすると、必要となる情報量の増減ΔH[bit]は、次式(12)により算出される。
【0146】
【数10】

【0147】
通常のAAC方式などでは、符号化後に出力される符号量の増減量は必ずしもH[bit]に近い値にならない。一方、本願発明による符号化方法によると、出力される符号量の増減量はH[bit]に近い値になる。従って、符号量調整パラメータであるB0をBの初期値とし、目標とする目標符号量をHtとすると、1ブロックの符号化により発生する符号量H1をHtに近づけるためのBの補正量ΔBは、次式(13)で表される。
【0148】
【数11】

【0149】
ここで、Kは、20log2/Wlog10であり、符号量制御の係数である。ただし、Kの値は近似することも可能である。
【0150】
よって、以下の方法によりBをくりかえし再計算することにより、出力される符号量を制御することができる。
ステップS1:1ブロックの符号化開始時点までの計算の中間結果をすべて保存する。
ステップS2:1ブロックの符号化を行い、符号量H1を算出する。
ステップS3:K=20log2/Wlog10を算出する。
ステップS4:新たな符号量調整パラメータB1を次式(14)により算出する。
B(1)=B(0)+(Ht-H1)×K ・・・(14)
なお、上記ステップS1〜S3は、次式(15)で表すことができる。
B (β+1) = B(β) + (H* - h(β)) ×K ・・・(15)
ここで、K=2.5、B(0)=H*/Kであり、βは符号量調整処理繰り返し回数である。
【0151】
式(14)による符号量調整パラメータの算出を適当な回数繰り返すことにより、最適な符号量調整パラメータを算出することができる。
[効果]
第2実施形態例に係る符号化装置では、第1実施形態例と同様に、高速算術符号化により確率そのものから符号化データを算出することで音質の劣化を防ぎつつ、差分を取ることにより予測可能となる確率密度関数を用いて符号化効率を高め、かつパラメータとしての倍率番号を用いて仮数番号の符号化効率を高めつつ、頻度分布における2つの区間それぞれの頻度に応じてデータを高速算術符号化することで演算量を少なくすることができる。
【0152】
また、MDCT係数分析器215が、心理聴覚分析器260が取得した周波数精度関数とMDCT係数から、符号化精度を決定する精度番号を取得する。そして、この精度番号の差分データを倍率番号差分データや仮数番号とともに精度番号差分データを高速算術符号化することで、高速算術符号化の出力符号量を調整することができる。
【0153】
さらに、ビット制御部270を設けることで、ビットレートを一定にするなどの制御を行うことができる。
【0154】
<第3実施形態例>
[構成]
図5は、本発明の第3実施形態例に係る復号化装置300の全体構成図である。第3実施形態例に係る復号化装置300は、第2実施形態例に係る符号化装置200において符号化されたビットストリームを高速算術復号化する。復号化装置300は、倍率番号パラメータ算出器305、精度番号パラメータ算出器310、仮数番号パラメータ算出器315、倍率番号演算器330、倍率番号バッファ335、精度番号演算器340、精度番号バッファ345、仮数逆伸縮器350及び逆MDCT変換器360を含む。以下に各構成について説明する。
【0155】
(1)パラメータ算出器
倍率番号パラメータ算出器305は、倍率番号差分データを復号化するために必要なパラメータを算出する。精度番号パラメータ算出器310は、精度番号差分データを復号化するために必要なパラメータを算出する。仮数番号パラメータ算出器315は、復号化された倍率番号差分データに基づいて算出された倍率番号に基づいて、仮数番号差分データを復号化するために必要なパラメータを算出する。算出された各パラメータは、高速算術復号化器320に入力される。
【0156】
(2)高速算術復号化器
高速算術復号化器320は、前述の第1及び第2実施形態例の高速算術符号化器240が行っている高速算術符号化と逆の処理を行う。よって、高速算術符号化器240が“1”という入力データを高速算術符号化した場合、高速算術復号化器320からは“1”が出力される。同様に、高速算術符号化器240が“0”という入力データを高速算術符号化した場合、高速算術復号化器320からは“0”が出力される。
【0157】
高速算術復号化器320では、高速算術符号化器240から出力されるビットストリームを受信し、次のように高速算術復号化処理を行う。
【0158】
倍率番号差分データの復号化については、倍率番号差分データの符号化データが取り得る値を2つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて倍率番号差分データの符号化データを高速算術復号化することを繰り返す。これにより、高速算術復号化器320は、高速算術復号化の結果として、復号化された倍率番号差分データを取得する。
【0159】
同様に、精度番号差分データの復号化及び仮数番号の復号化については、倍率番号差分データと同様の処理を行い、高速算術復号化器320は、高速算術復号化の結果として、復号化された精度番号差分データ及び仮数番号を取得する。
【0160】
(3)倍率番号演算器及び倍率番号バッファ
倍率番号演算器330は、高速算術復号化器320により復号化された現在ブロック(n)の倍率番号差分データと、倍率番号バッファ325から出力される直前ブロック(n−1)の倍率番号(n−1)とに基づいて、現在ブロック(n)の倍率番号(n)を算出する。
【0161】
(4)精度番号演算器及び精度番号バッファ
精度番号演算器340は、高速算術復号化器320により復号化された現在ブロック(n)の精度番号差分データと、精度番号バッファ345から出力される直前ブロック(n−1)の精度番号(n−1)とに基づいて、現在ブロック(n)の精度番号(n)を算出する。
【0162】
(5)仮数逆伸縮器
仮数逆伸縮器350は、精度番号演算器340から精度番号を取得し、高速算術復号化器320により復号化された仮数番号を取得する。そして、仮数逆伸縮器350は、精度番号に基づいて仮数番号を逆伸縮し、MDCT係数を取得する。このとき、仮数番号は、符号化側の仮数伸縮器230とは反対に伸縮される。
【0163】
(6)逆MDCT変換器
逆MDCT変換器360は、仮数逆伸縮器350が取得したMDCT係数を逆変形離散コサイン変換処理し、符号化後の入力データが復号化された出力データを取得する。
【0164】
[効果]
高速算術符号化とは逆の手順により、高速算術復号化を高速に行うことができる。高速算術符号化とは処理手順が逆であるが、符号化と同様に復号化に伴う演算量を減らすことができる。
【産業上の利用可能性】
【0165】
本発明を用いれば、ブロック長を短くしても入力データの劣化を防止することができる。よって、マイクを用いてリアルタイムに演説を行う場合などにおいて本発明を適用すれば、遅延を防止しつつ音質の劣化を防止することができる。
【図面の簡単な説明】
【0166】
【図1】本発明の第1実施形態例に係る符号化装置100の全体構成図。
【図2】倍率分析器125が行う倍率番号差分データの演算の概念図。
【図3】頻度分布に基づいて高速算術符号化していく場合の別の説明図。
【図4】頻度分布に基づいて高速算術符号化していく場合の説明図。
【図5】本発明の第3実施形態例に係る復号化装置300の全体構成図。
【図6】AAC方式の符号化装置の概念図。
【符号の説明】
【0167】
110、210:MDCT変換器
115、215:MDCT係数分析器
120、220:倍率番号バッファ
125、225:倍率分析器
130、230:仮数伸縮器
135、235:仮数分析器
140、240:高速算術符号化器
245:精度番号バッファ
250:精度分析器
260:心理聴覚分析器
270:ビット制御部
305:倍率番号パラメータ算出器
310:精度番号パラメータ算出器
315:仮数番号パラメータ算出器
320:高速算術復号化器
330:倍率番号演算器
340:精度番号演算器
350:仮数逆伸縮器

【特許請求の範囲】
【請求項1】
所定時間領域を1ブロックとして、1ブロックごとに入力される入力データを変形離散コサイン変換処理し、1ブロックのMDCT係数を生成するMDCT係数生成ステップと、
前記ブロック単位のMDCT係数を、所定周波数領域毎のセグメントに分割し、セグメント毎に前記MDCT係数の振幅の最大値に基づく倍率番号を取得する倍率番号取得ステップと、
1ブロック内の複数のセグメントそれぞれについて抽出された倍率番号について、現在ブロックと直前ブロックとのセグメント毎の差分データを演算する倍率番号差分データ演算ステップと、
前記MDCT係数の符号化精度を決定する精度番号に応じてMDCT係数を符号化するために、前記精度番号に応じてMDCT係数を伸縮させた仮数番号を1ブロック内で複数取得する仮数番号取得ステップと、
前記セグメント単位の倍率番号差分データと、前記複数の倍率番号及び複数の仮数番号を含む仮数情報とをブロックごとに高速算術符号化する高速算術符号化ステップとを含み、
前記高速算術符号化ステップでは、前記1ブロック内の倍率番号差分データが取り得る値を2つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記倍率番号差分データを高速算術符号化する処理を繰り返し、前記1ブロック内の仮数番号が取り得る値を2つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記仮数番号を高速算術符号化する処理を繰り返し、前記高速算術符号化の際には、前記倍率番号をパラメータとして前記仮数番号を高速算術符号化する、符号化方法。
【請求項2】
前記1ブロック内に含まれる入力データのサンプル数は、64サンプル以下である、請求項1に記載の符号化方法。
【請求項3】
前記入力データを心理聴覚分析し、その分析結果に基づいて1ブロック内で複数の精度番号を取得する精度番号取得ステップと、
現在ブロックと直前ブロックとの精度番号の差分データである精度番号差分データを演算する精度番号差分データ演算ステップとをさらに含み、
前記高速算術符号化ステップでは、さらに、前記1ブロック内の精度番号差分データが取り得る値を2つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記精度番号差分データを高速算術符号化する処理を繰り返す、請求項1に記載の符号化方法。
【請求項4】
前記高速算術符号化ステップにおいて、前記1ブロック内の倍率番号差分データが取り得る値は、前記倍率番号差分データの取り得る値のうち最も頻度が高い値を含む区間とそれ以外の値を含む区間との2つの区間に分けられる、請求項1に記載の符号化方法。
【請求項5】
所定時間領域を1ブロックとして、1ブロックごとに入力される入力データを変形離散コサイン変換処理し、1ブロックのMDCT係数を生成するMDCT係数生成手段と、
前記ブロック単位のMDCT係数を、所定周波数領域毎のセグメントに分割し、セグメント毎に前記MDCT係数の振幅の最大値に基づく倍率番号を取得する倍率番号取得手段と、
1ブロック内の複数のセグメントそれぞれについて抽出された倍率番号について、現在ブロックと直前ブロックとのセグメント毎の差分データを演算する倍率番号差分データ演算手段と、
前記MDCT係数の符号化精度を決定する精度番号に応じてMDCT係数を符号化するために、前記精度番号に応じてMDCT係数を伸縮させた仮数番号を1ブロック内で複数取得する仮数番号取得手段と、
前記セグメント単位の倍率番号差分データと、前記複数の倍率番号及び複数の仮数番号を含む仮数情報とをブロックごとに高速算術符号化する高速算術符号化手段とを含み、
前記高速算術符号化手段は、前記1ブロック内の倍率番号差分データが取り得る値を2つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記倍率番号差分データを高速算術符号化する処理を繰り返し、前記1ブロック内の仮数番号が取り得る値を2つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記仮数番号を高速算術符号化する処理を繰り返し、前記高速算術符号化の際には、前記倍率番号をパラメータとして前記仮数番号を高速算術符号化する、符号化装置。
【請求項6】
請求項1に記載の符号化方法により符号化された倍率番号差分データの符号化データと、仮数番号の符号化データとを高速算術復号化する高速算術復号化ステップと、
前記高速算術復号化された高速算術復号化データに基づいてMDCT係数を再生するMDCT係数再生ステップと、
再生された前記MDCT係数を逆変形離散コサイン変換処理する逆MDCT変換ステップとを含み、
前記高速算術復号化ステップでは、前記倍率番号差分データの符号化データが取り得る値を2つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記倍率番号差分データの符号化データを高速算術復号化することを繰り返し、前記仮数番号の符号化データが取り得る値を2つの区間に分け、それぞれの区間に含まれる値が発生する頻度に基づいて前記仮数番号の符号化データを高速算術復号化することを繰り返す復号化方法。

【図1】
image rotate

【図2】
image rotate

【図3】
image rotate

【図4】
image rotate

【図5】
image rotate

【図6】
image rotate


【公開番号】特開2006−80927(P2006−80927A)
【公開日】平成18年3月23日(2006.3.23)
【国際特許分類】
【出願番号】特願2004−263126(P2004−263126)
【出願日】平成16年9月9日(2004.9.9)
【出願人】(000223182)ティーオーエー株式会社 (190)
【出願人】(597040902)学校法人東京工芸大学 (28)
【Fターム(参考)】