(57)【特許請求の範囲】
【請求項１】
逆離散コサイン変換の計算のためにデバイスにより実施される方法であって、
変換された複数の係数のベクトルを生成するために、複数のソース係数のベクトルに変換を適用する複数の固定小数点数に対する一連のバタフライ構造演算をメディア符号化デバイスで使用することを備え、
なお、変換された複数の係数の前記ベクトルの中の変換された複数の係数は、無制限の精度を有する理想的な逆離散コサイン変換を使用して複数のソース係数の前記ベクトルを変換することにより生成されることになる複数の値の近似値である、
なお、前記一連の前記バタフライ構造演算を使用することは、形式、
ｕ＝（（ｘ＊Ｃ）＞＞ｋ）−（（ｙ＊-Ｓ）＞＞ｋ’）、
ν＝（（ｘ＊Ｓ）＞＞ｋ’）−（（ｙ＊Ｃ）＞＞ｋ）、
のバタフライ構造演算を実行することを備え、
なお、ｕおよびνは、結果として生ずる固定小数点数であり、
Ｃ、Ｓ、ｋおよびｋ’は、定数の整数であり、
ｘおよびｙは、固定小数点変数であり、そして
Ｃ／２ｋおよびＳ／２ｋ’は、無理数定数の有理数近似値である、
なお、複数のソース係数の前記ベクトルは、８つの係数、ｘ０、ｘ１、ｘ２、ｘ３、ｘ４、ｘ５、ｘ６、およびｘ７、から構成され、
変換された複数の係数の前記ベクトルは、８つの係数、ｚ０、ｚ１、ｚ２、ｚ３、ｚ４、ｚ５、ｚ６、およびｚ７、から構成され、そして
前記バタフライ構造演算のうちのいずれかを実行することは、
【数１】
0005661836.tif 000087
である第１のバタフライ構造演算を実行することと、
【数２】
0005661836.tif 000088
である第２のバタフライ構造演算を実行することと、
【数３】
0005661836.tif 000089
である第３のバタフライ構造演算を実行することと、
【数４】
0005661836.tif 000090
である第４のバタフライ構造演算を実行することと、
【数５】
0005661836.tif 000091
である第５のバタフライ構造演算を実行することと、
【数６】
0005661836.tif 000092
である第６のバタフライ構造演算を実行することと、
【数７】
0005661836.tif 000093
である第７のバタフライ構造演算を実行することと、
【数８】
0005661836.tif 000094
である第８のバタフライ構造演算を実行することと、
【数９】
0005661836.tif 000095
である第９のバタフライ構造演算を実行することと、
【数１０】
0005661836.tif 000096
である第１０のバタフライ構造演算を実行することと、
【数１１】
0005661836.tif 000097
である第１１のバタフライ構造演算を実行することと、
【数１２】
0005661836.tif 000098
である第１２のバタフライ構造演算を実行することと、
【数１３】
0005661836.tif 000099
である第１３のバタフライ構造演算を実行することと、
を備える、方法。
【請求項２】
α、β、γ、δ、ε、およびζは、それぞれ異なる、無理数値
【数１４】
0005661836.tif 000100
の近似値である、請求項１に記載の方法。
【請求項３】
α＝８８６７／１６３８４、β＝２１４０７／１６３８４、γ＝５６８１／４０９６、δ＝５６５／２０４８、ε＝９６３３／８１９２、ζ＝１２８７３／１６３８４である、請求項２に記載の方法。
【請求項４】
前記一連のバタフライ構造演算を使用することは、前記バタフライ構造演算の中の乗算演算を実行することで得られるであろう複数の値を近似する結果となる変換された複数の係数の前記ベクトルの複数の値を生成する一連のシフト、加算、および減算演算を使用することを備える、請求項１に記載の方法。
【請求項５】
逆離散コサイン変換の計算のためのデバイスであって、
１つ又は複数のプロセッサと、
前記１つまたは複数のプロセッサによって実行される、変換された複数の係数のベクトルを生成するために、複数のソース係数のベクトルに変換を適用する複数の固定小数点数に対する一連のバタフライ構造演算を使用する逆変換モジュールとを備え、
なお、変換された複数の係数の前記ベクトルの中の変換された複数の係数は、無制限の精度を有する理想的な逆離散コサイン変換を使用して複数のソース係数の前記ベクトルを変換することにより生成されることになる複数の値の近似値であり、
前記逆変換モジュールによって実行される前記バタフライ構造演算のうちの前記１つは、形式、
ｕ＝（（ｘ＊Ｃ）＞＞ｋ）−（（ｙ＊-Ｓ）＞＞ｋ’）、
ν＝（（ｘ＊Ｓ）＞＞ｋ’）−（（ｙ＊Ｃ）＞＞ｋ）、であり、
なお、ｕおよびνは、結果として生ずる固定小数点値であり、Ｃ、Ｓ、ｋおよびｋ’は、定数の整数であり、ｘおよびｙは、固定小数点変数であり、そして
Ｃ／２ｋおよびＳ／２ｋ’は、無理数定数の有理数近似値である、
なお、複数のソース係数の前記ベクトルは、８つの係数、ｘ０、ｘ１、ｘ２、ｘ３、ｘ４、ｘ５、ｘ６、およびｘ７、から構成され、
変換された複数の係数の前記ベクトルは、８つの係数、ｚ０、ｚ１、ｚ２、ｚ３、ｚ４、ｚ５、ｚ６、およびｚ７、から構成され、そして
前記逆変換モジュールは、
【数１５】
0005661836.tif 000101
である第１のバタフライ構造演算を実行することと、
【数１６】
0005661836.tif 000102
である第２のバタフライ構造演算を実行することと、
【数１７】
0005661836.tif 000103
である第３のバタフライ構造演算を実行することと、
【数１８】
0005661836.tif 000104
である第４のバタフライ構造演算を実行することと、
【数１９】
0005661836.tif 000105
である第５のバタフライ構造演算を実行することと、
【数２０】
0005661836.tif 000106
である第６のバタフライ構造演算を実行することと、
【数２１】
0005661836.tif 000107
である第７のバタフライ構造演算を実行することと、
【数２２】
0005661836.tif 000108
である第８のバタフライ構造演算を実行することと、
【数２３】
0005661836.tif 000109
である第９のバタフライ構造演算を実行することと、
【数２４】
0005661836.tif 000110
である第１０のバタフライ構造演算を実行することと、
【数２５】
0005661836.tif 000111
である第１１のバタフライ構造演算を実行することと、
【数２６】
0005661836.tif 000112
である第１２のバタフライ構造演算を実行することと、
【数２７】
0005661836.tif 000113
である第１３のバタフライ構造演算を実行することと、
により前記バタフライ構造演算を実行する、デバイス。
【請求項６】
α、β、γ、δ、ε、およびζは、それぞれ異なる、無理数値
【数２８】
0005661836.tif 000114
の近似値である、請求項５に記載のデバイス。
【請求項７】
α＝８８６７／１６３８４、β＝２１４０７／１６３８４、γ＝５６８１／４０９６、δ＝５６５／２０４８、ε＝９６３３／８１９２、ζ＝１２８７３／１６３８４である、請求項６に記載のデバイス。
【請求項８】
前記逆変換モジュールは、前記バタフライ構造演算の中の乗算演算を実行することで得られるであろう複数の値を近似する結果となる変換された複数の係数の前記ベクトルの複数の値を生成する一連のシフト、加算、および減算演算を使用して、前記バタフライ構造演算を実行する、請求項５に記載のデバイス。
【請求項９】
逆離散コサイン変換の計算のためのデバイスであって、
変換された複数の係数のベクトルを計算するために、複数のソース係数のベクトルに変換を適用する複数の固定小数点数に対する一連のバタフライ構造演算を使用するための手段を備え、
変換された複数の係数の前記ベクトルの中の変換された複数の係数は、無制限の精度を有する理想的な逆離散コサイン変換を使用して複数のソース係数の前記ベクトルを変換することにより生成されることになる複数の値の近似値であり、
一連のバタフライ構造演算を使用するための前記手段は、バタフライ構造演算を実行するための１組の手段を備え、
バタフライ構造演算を実行するための前記手段の各々は、形式、
ｕ＝（（ｘ＊Ｃ）＞＞ｋ）−（（ｙ＊-Ｓ）＞＞ｋ’）、
ν＝（（ｘ＊Ｓ）＞＞ｋ’）−（（ｙ＊Ｃ）＞＞ｋ）、
のバタフライ構造演算を実行するための手段を備え、
なお、ｕおよびνは、結果として生ずる固定小数点値であり、
Ｃ、Ｓ、ｋおよびｋ’は、定数の整数であり、
ｘおよびｙは、固定小数点変数であり、そして
Ｃ／２ｋおよびＳ／２ｋ’は、無理数定数の有理数近似値である、
なお、複数のソース係数の前記ベクトルは、８つの係数、ｘ０、ｘ１、ｘ２、ｘ３、ｘ４、ｘ５、ｘ６、およびｘ７、から構成され、
変換された複数の係数の前記ベクトルは、８つの係数、ｚ０、ｚ１、ｚ２、ｚ３、ｚ４、ｚ５、ｚ６、およびｚ７、から構成され、そして
バタフライ構造演算を実行するための前記１組の手段は、
【数２９】
0005661836.tif 000115
である第１のバタフライ構造演算を実行するための手段と、
【数３０】
0005661836.tif 000116
である第２のバタフライ構造演算を実行するための手段と、
【数３１】
0005661836.tif 000117
である第３のバタフライ構造演算を実行するための手段と、
【数３２】
0005661836.tif 000118
である第４のバタフライ構造演算を実行するための手段と、
【数３３】
0005661836.tif 000119
である第５のバタフライ構造演算を実行するための手段と、
【数３４】
0005661836.tif 000120
である第６のバタフライ構造演算を実行するための手段と、
【数３５】
0005661836.tif 000121
である第７のバタフライ構造演算を実行するための手段と、
【数３６】
0005661836.tif 000122
である第８のバタフライ構造演算を実行するための手段と、
【数３７】
0005661836.tif 000123
である第９のバタフライ構造演算を実行するための手段と、
【数３８】
0005661836.tif 000124
である第１０のバタフライ構造演算を実行するための手段と、
【数３９】
0005661836.tif 000125
である第１１のバタフライ構造演算を実行するための手段と、
【数４０】
0005661836.tif 000126
である第１２のバタフライ構造演算を実行するための手段と、
【数４１】
0005661836.tif 000127
である第１３のバタフライ構造演算を実行するための手段と、
を備える、デバイス。
【請求項１０】
α、β、γ、δ、ε、およびζは、それぞれ異なる、無理数値
【数４２】
0005661836.tif 000128
の近似値である、請求項９に記載のデバイス。
【請求項１１】
α＝８８６７／１６３８４、β＝２１４０７／１６３８４、γ＝５６８１／４０９６、δ＝５６５／２０４８、ε＝９６３３／８１９２、ζ＝１２８７３／１６３８４である、請求項１０に記載のデバイス。
【請求項１２】
前記一連のバタフライ構造演算を使用するための前記手段は、前記バタフライ構造演算の中の乗算演算を実行することで得られるであろう複数の値を近似する結果となる変換された係数の前記ベクトルの複数の値を生成する一連のシフト、加算、および減算演算を使用して、前記バタフライ構造演算を実行する、請求項９に記載のデバイス。
【請求項１３】
逆離散コサイン変換の計算のための複数の命令を備えるコンピュータ可読記憶媒体であって、
前記複数の命令は、実行されるときに、プログラマブルプロセッサに、
変換された複数の係数のベクトルを生成するために、複数のソース係数のベクトルに変換を適用する複数の固定小数点数に対する一連のバタフライ構造演算を使用させる、
なお、変換された複数の係数の前記ベクトルの中の変換された複数の係数は、無制限の精度を有する理想的な逆離散コサイン変換を使用して複数のソース係数の前記ベクトルを変換することにより生成されることになる複数の値の近似値であり、
なお、前記プロセッサに前記バタフライ構造演算を実行させる前記複数の命令は、前記プロセッサに、形式、
ｕ＝（（ｘ＊Ｃ）＞＞ｋ）−（（ｙ＊-Ｓ）＞＞ｋ’）、
ν＝（（ｘ＊Ｓ）＞＞ｋ’）−（（ｙ＊Ｃ）＞＞ｋ）、
のバタフライ構造演算を実行させ、
ｕおよびνは、結果として生ずる固定小数点数であり、Ｃ、Ｓ、ｋおよびｋ’は、定数の整数であり、ｘおよびｙは、固定小数点変数であり、そして
Ｃ／２ｋおよびＳ／２ｋ’は、無理数定数の有理数近似値である、
複数のソース係数の前記ベクトルは、８つの係数、ｘ０、ｘ１、ｘ２、ｘ３、ｘ４、ｘ５、ｘ６、およびｘ７、から構成され、
変換された複数の係数の前記ベクトルは、８つの係数、ｚ０、ｚ１、ｚ２、ｚ３、ｚ４、ｚ５、ｚ６、およびｚ７、から構成され、
前記プロセッサに、前記一連のバタフライ構造演算を使用させる前記命令は、前記プログラマブルプロセッサに、
【数４３】
0005661836.tif 000129
である第１のバタフライ構造演算を実行させ、
【数４４】
0005661836.tif 000130
である第２のバタフライ構造演算を実行させ、
【数４５】
0005661836.tif 000131
である第３のバタフライ構造演算を実行させ、
【数４６】
0005661836.tif 000132
である第４のバタフライ構造演算を実行させ、
【数４７】
0005661836.tif 000133
である第５のバタフライ構造演算を実行させ、
【数４８】
0005661836.tif 000134
である第６のバタフライ構造演算を実行させ、
【数４９】
0005661836.tif 000135
である第７のバタフライ構造演算を実行させ、
【数５０】
0005661836.tif 000136
である第８のバタフライ構造演算を実行させ、
【数５１】
0005661836.tif 000137
である第９のバタフライ構造演算を実行させ、
【数５２】
0005661836.tif 000138
である第１０のバタフライ構造演算を実行させ、
【数５３】
0005661836.tif 000139
である第１１のバタフライ構造演算を実行させ、
【数５４】
0005661836.tif 000140
である第１２のバタフライ構造演算を実行させ、
【数５５】
0005661836.tif 000141
である第１３のバタフライ構造演算を実行させる、コンピュータ可読記憶媒体。
【請求項１４】
α、β、γ、δ、ε、およびζは、それぞれ異なる、無理数値
【数５６】
0005661836.tif 000142
の近似値である、請求項１３に記載のコンピュータ可読記憶媒体。
【請求項１５】
α＝８８６７／１６３８４、β＝２１４０７／１６３８４、γ＝５６８１／４０９６、δ＝５６５／２０４８、ε＝９６３３／８１９２、ζ＝１２８７３／１６３８４である、請求項１４に記載のコンピュータ可読記憶媒体。
【請求項１６】
前記プロセッサに、前記一連のバタフライ構造演算を使用させる前記複数の命令は、前記プログラマブルプロセッサに、乗算演算を実行することで得られるであろう複数の値を近似する結果となる複数の値を生成する一連のシフト、加算、減算演算を使用して、前記バタフライ構造演算において変換された複数の係数の前記ベクトルの複数の値を乗算させる、請求項１３に記載のコンピュータ可読記憶媒体。
【発明の詳細な説明】
【利益の主張】
【０００１】
本願は、２００６年６月２６日に出願された米国仮出願第６０／８１６，６９７号、２００６年８月３０日に出願された米国仮出願第６０／８４１，３６２号、２００６年９月２５日に出願された米国仮出願第６０／８４７，１９４号、２００６年１０月１６日に出願された米国仮出願第６０／８２９，６６９号、および２００６年１２月１１日に出願された米国仮許出願第６０／８６９，５３０号の利益を主張するものであり、それらの全体の内容は、参照によりここに組み込まれる。
【技術分野】
【０００２】
本開示は、コンピュータグラフィックスおよびマルチメディアに関し、特に、グラフィックス、画像、およびビデオ情報の圧縮(compression)に関する。
【背景技術】
【０００３】
多数の既存の画像およびビデオの符号化規格は、比較的コンパクトなファイルまたはデータストリームとして、記憶され、または送信されるべき高分解能の画像およびビデオを可能にするために、圧縮技法を使用している。そのような符号化規格は、ジョイントフォトグラフィックエキスパートグループ(Joint Photographic Experts Group)（ＪＰＥＧ）規格と、ムービングピクチャーエキスパートグループ(Moving Pictures Experts Group)（ＭＰＥＧ）−１規格と、ＭＰＥＧ−２規格と、ＭＰＥＧ−４パート２規格と、Ｈ．２６１規格と、Ｈ．２６３規格と、他の画像またはビデオの符号化規格とを含む。
【０００４】
これらの規格の多くに従って、ビデオフレームは、「空間」符号化を使用して圧縮される。これらのフレームは、元のフレーム(original frame)（すなわち、ｉ−フレーム）とすることができ、あるいは動き補償を使用する時間符号化プロセス(temporal encoding process)により生成される残留フレーム(residual frame)とすることができる。空間符号化中に、フレームは、等しいサイズの、ピクセルのブロックへと分解される。例えば、非圧縮フレームは、１組の８×８のピクセルのブロックへと分解されることができる。ピクセルの各ブロックについて、ピクセル成分(pixel component)は、ピクセル成分値(pixel component value)の行列へと分離される。例えば、ピクセルの各ブロックは、Ｙピクセル成分値の行列と、Ｕピクセル成分値の行列と、Ｖピクセル成分値の行列とに分割されることができる。この例においては、Ｙピクセル成分値は、輝度値(luminance value)を指し示し、Ｕピクセル成分値とＶピクセル成分値は、クロミナンス値(chrominance value)を表す。
【０００５】
さらに、空間符号化中に、順方向離散コサイン変換(forward discrete cosine transform)（ＦＤＣＴ）は、符号化されているフレーム内のピクセル成分値の各行列に適用される。理想的な一次元ＦＤＣＴは、
【数１】
0005661836.tif 000002
【０００６】
によって定義され、ここで、ｓは、Ｎ個の元の値のアレイであり、ｔは、Ｎ個の変換された値のアレイであり、そして係数ｃは、１≦ｋ≦Ｎ−１の場合に
【数２】
0005661836.tif 000003
【０００７】
によって与えられる。
【０００８】
理想的な二次元ＦＤＣＴは、式、
【数３】
0005661836.tif 000004
【０００９】
によって定義され、ここで、ｓは、Ｎ個の元の値のアレイであり、ｔは、Ｎ個の変換された値のアレイであり、そしてｃ（ｉ，ｊ）は、ｃ（ｉ，ｊ）＝ｃ（ｉ）ｃ（ｊ）によって与えられ、そしてｃ（ｋ）は、一次元の場合におけるように定義される。
【００１０】
係数の行列は、ピクセル成分値のブロックが、ＦＤＣＴを使用して、変換されるときに生成される。次いで、係数のこの行列は、例えば、ハフマン符号(Huffman code)または算術符号(arithmetic code)を使用して量子化され(quantized)、そして符号化されることができる。ビデオビットストリーム(video bitstream)は、非圧縮の一連のビデオフレーム(video frame)における一連のビデオフレームにおけるピクセル成分値のすべてのブロックに対してこのプロセスを実行することの組み合わされた結果を表す。
【００１１】
非圧縮ビデオフレームは、このプロセスを逆にすることによりビデオビットストリームから導き出されることができる。特に、ビットストリームにおける係数の各行列へと伸張され(decompressed)、それらの伸張された値は、変換された係数の行列を導き出すために逆量子化される(de-quantized)。次いで、逆離散コサイン変換(inverse discrete cosine transform)（「ＩＤＣＴ」）が、ピクセル成分値の行列を導き出すために変換された係数の各行列に対して適用される。理想的な一次元ＩＤＣＴは、
【数４】
0005661836.tif 000005
【００１２】
によって定義され、ここで、ｓは、Ｎ個の元の値のアレイであり、ｔは、Ｎ個の変換された値のアレイであり、そして係数ｃは、１≦ｋ≦Ｎ−１の場合に
【数５】
0005661836.tif 000006
【００１３】
によって与えられる。
【００１４】
理想的な二次元ＩＤＣＴは、式、
【数６】
0005661836.tif 000007
【００１５】
によって定義される。次いで、ピクセル成分値の結果として生ずる行列は、ピクセルのブロックに再アセンブルされ、ピクセルのこれらのブロックは、復号されたフレームを形成するために再アセンブルされる。復号されたフレームが、ｉ−フレームである場合、そのフレームは今や完全に復号される。しかしながら、非圧縮フレーム(uncompressed frame)が、予測フレーム(predictive frame)または双予測フレーム(bi-predictive frame)である場合には、復号されたフレームは、単に復号された残留フレームであるにすぎない。完了されたフレームは、復号されたフレームに関連する動きベクトル(motion vector)を使用して再構成されたフレームを構成することと、次いで復号された残留フレームに再構成されたフレームを加えることと、により生成される。
【００１６】
理想的な状況の下では、情報は、符号化するＦＤＣＴ、またはピクセル成分値のブロックを復号するＩＤＣＴを使用することにより失われない。その結果として、これらの理想的な状況の下では、ビデオフレームの復号されたバージョンは、ビデオフレームの元のバージョンと同一である。しかしながら、ＦＤＣＴおよびＩＤＣＴの計算が乗算演算の有効数字(significant numbers)および実数(real numbers)の使用を伴うので、ＦＤＣＴまたはＩＤＣＴを計算することは、計算上、難しい可能性がある。この理由のために、ＦＤＣＴおよびＩＤＣＴにおいて使用される実数は、しばしば限られた精度数(precision number)を使用して近似される。丸め誤差(rounding error)が、実数値を表すために限られた精度数を使用することからもたらされる。さらに、量子化および逆量子化が、追加の誤差をもたらす可能性がある。
【００１７】
圧縮および伸張のプロセスにおける誤差は、元の非圧縮フレームと最終的な非圧縮フレームとの間にかなりの差をもたらす可能性がある。例えば、最終的な非圧縮フレームにおけるカラーは、元の非圧縮フレームにおけるカラーとは異なる可能性がある。さらに、ＩＤＣＴのエンコーダのインプリメンテーションと、ＩＤＣＴのデコーダのインプリメンテーションとの間のミスマッチによって引き起こされる誤差は、予測フレームのシーケンスの符号化と復号化との間に累積する可能性がある。これらの累積された誤差は、一般に「ＩＤＣＴドリフト(IDCT drift)」と称される。
【発明の概要】
【００１８】
固定小数点計算(fixed-point calculation)を使用して逆離散コサイン変換の計算を近似する技法が、説明される。これらの技法によれば、スケール変更された係数の行列(matrixes of scaled coefficients)が、スケールファクタ(scale factors)により、符号化された係数の行列の中の係数を乗算することによって生成される。次に、バイアスされた係数の行列が、中間点バイアス値と補足的バイアス値とをスケール変更された係数の行列のＤＣ係数に加算することによって生成される。次いで、固定小数点算術演算が、バイアスされた係数の結果として生ずる行列に対して変換を適用するために使用される。次いで、結果として生ずる行列の中の値は、ピクセル成分値の行列を導き出すために右シフトされる(right-shifted)。次いで、ピクセル成分値の行列は、ピクセルの行列を作成するために組み合わされる。これらの技法によって生成されるピクセルの行列は、理想的な逆離散コサイン変換（「ＩＤＣＴ」）を使用して伸張されたピクセルの行列に非常に似ている。
【００１９】
一態様においては、方法は、変換された係数のベクトルを生成するために、ソース係数のベクトルに対して変換を適用するように(to apply)、固定小数点数に対して一連のバタフライ構造演算(a series of butterfly structure operations on fixed-point numbers)を使用すること、を備える。変換された係数のベクトルの中の変換された係数は、理想的な逆離散コサイン変換を使用してソース係数のベクトルを変換することにより生成されることになる(would be produced)値の近似値(approximation)である。本方法はまた、メディアプレゼンテーションユニット(media presentation unit)が、変換された係数のベクトルの中の変換された係数に基づいて可聴信号(audible signal)または可視信号(visible signal)を出力するようにすること、も備える。バタフライ構造演算のうちの１つによって生成される結果と、無制限精度算術演算(unlimited precision arithmetic)を使用して等しいバタフライ構造演算により生成されることになる結果と、の間の差は、ゼロの周囲に集中しており、そして正の差と、負の差とは、ほぼ等しい大きさである。
【００２０】
別の態様においては、デバイスは、変換された係数のベクトルを生成するためにソース係数のベクトルに対して変換を適用するように固定小数点数に対して一連のバタフライ構造演算を使用する逆変換モジュール、を備える。変換された係数のベクトルの中の変換された係数は、理想的な逆離散コサイン変換を使用してソース係数のベクトルを変換することにより生成されることになる値の近似値である。メディアプレゼンテーションユニットは、変換された係数のベクトルの中の変換された係数に基づいて可聴信号または可視信号を提示することができる。バタフライ構造演算のうちの１つによって生成される結果と、無制限精度算術演算を使用して等しいバタフライ構造演算により生成されることになる結果と、の間の差は、ゼロの周囲に集中しており、そして正の差と、負の差とは、ほぼ等しい大きさである。
【００２１】
別の態様においては、デバイスは、変換された係数のベクトルを計算するためにソース係数のベクトルに対して変換を適用するように固定小数点数に対して一連のバタフライ構造演算を使用するための手段、を備える。変換された係数のベクトルの中の変換された係数は、理想的な逆離散コサイン変換を使用してソース係数のベクトルを変換することにより生成されることになる値の近似値である。メディアプレゼンテーションユニットは、変換された係数のベクトルの中の変換された係数に基づいて可聴信号または可視信号を提示することができる。バタフライ構造演算のうちの１つによって生成される結果と、無制限精度算術演算を使用して等しいバタフライ構造演算により生成されることになる結果と、の間の差は、ゼロの周囲に集中しており、そして正の差と、負の差とは、ほぼ等しい大きさである。
【００２２】
別の態様においては、コンピュータ可読媒体は、命令を備える。実行されるときに、本命令は、プロセッサに、変換された係数のベクトルを生成するために係数のベクトルに対して変換を適用するように固定小数点数に対して一連のバタフライ構造演算を使用させる(cause)。変換された係数のベクトルの中の変換された係数は、理想的な逆離散コサイン変換を使用してソース係数のベクトルを変換することにより生成されることになる値の近似値である。本命令はまた、プロセッサに、メディアプレゼンテーションユニット対して、変換された値のベクトルの中の変換された値に基づいて可聴信号または可視信号を出力させることも、させる。バタフライ構造演算のうちの１つによって生成される結果と、無制限精度算術演算を使用して等しいバタフライ構造演算により生成されることになる結果と、の間の差は、ゼロの周囲に集中しており、そして正の差と、負の差とは、ほぼ等しい大きさである。
【００２３】
いくつかの場合には、本コンピュータ可読媒体は、コンピュータプログラムプロダクト(computer program product)の一部分を形成することができ、このコンピュータプログラムプロダクトは、製造業者に対して販売され、かつ／またはデバイスにおいて使用されることができる。コンピュータプログラムプロダクトは、コンピュータ可読媒体を含むことができ、そしていくつかの場合には、パッケージング材料を含むこともできる。
【００２４】
１つまたは複数の例の詳細は、添付の図面、および下記の説明の中で述べられる。本発明の他の特徴、目的、および利点は、説明および図面、ならびに特許請求の範囲から明らかであろう。
【図面の簡単な説明】
【００２５】
【図１】メディアファイルを符号化し、復号する例示のデバイスを示すブロック図である。
【図２】符号化モジュールの例示の詳細を示すブロック図である。
【図３】復号化モジュールの例示の詳細を示すブロック図である。
【図４】符号化モジュールの例示のオペレーションを示すフローチャートである。
【図５】復号化モジュールの例示のオペレーションを示すフローチャートである。
【図６】逆離散コサイン変換（「ＩＤＣＴ」）モジュールの例示の詳細を示すブロック図である。
【図７】ＩＤＣＴモジュールの例示のオペレーションを示すフローチャートである。
【図８】順方向離散コサイン変換（「ＦＤＣＴ」）モジュールの例示の詳細を示すブロック図である。
【図９】ＦＤＣＴモジュールの例示のオペレーションを示すフローチャートである。
【図１０】第１の例示の一次元変換(one-dimensional transform)を示す流れ図である。
【図１１】第２の例示の一次元変換を示す流れ図である。
【図１２】ＩＤＣＴモジュールによって使用される例示のスケール変更された一次元変換を示す流れ図である。
【発明を実施するための形態】
【００２６】
詳細な説明
図１は、メディアファイルを符号化し、復号する例示のデバイス２を示すブロック図である。デバイス２は、パーソナルコンピュータ、モバイル無線電話、サーバ、ネットワーク電気器具(network appliance)、乗り物と一体化されたコンピュータ、ビデオゲーミングプラットフォーム(video gaming platform)、ポータブルビデオゲームデバイス、コンピュータワークステーション、コンピュータキオスク(computer kiosk)、デジタル標識(digital signage)、メインフレームコンピュータ、テレビジョンセットトップボックス(television set-top box)、ネットワーク電話、携帯型個人情報端末(personal digital assistant)、ビデオゲームプラットフォーム(video game platform)、モバイルメディアプレーヤ(mobile media player)、ホームメディアプレーヤ、デジタルビデオプロジェクタ、パーソナルメディアプレーヤ（例えば、ｉＰｏｄ）、あるいは別のタイプの電子デバイスを備えることができる。
【００２７】
デバイス２は、メディアデータを生成するメディアソース４(media source)を含むことができる。メディアソース４は、画像データを取り込むデジタルビデオまたはスチルフォトカメラ(still photo camera)を備えることができる。メディアソース４は、デバイス２内に構築されることもでき、あるいは周辺デバイスとしてデバイス２に取り付けられることもできる。メディアソース４は、オーディオデータを記録するためにマイクロフォンを備えることもできる。メディアソース４は、プロセッサ６に対してメディアデータを供給することができる。プロセッサ６は、デジタル信号プロセッサ(digital signal processor)（「ＤＳＰ」）、マイクロプロセッサ、または何らかの他のタイプの集積回路を備えることができる。
【００２８】
プロセッサ６が、メディアソース４からメディアデータを受け取るとき、符号化モジュール(encoding module)８は、メディアデータを符号化することができる。符号化モジュール８は、プロセッサ６によって実行されるソフトウェアを備えることができる。代わりに、符号化モジュール８は、メディアデータを符号化するプロセッサ６内に専用ハードウェアを備えることもできる。さらに別の代替案においては、符号化モジュール８は、メディアデータを符号化するためにソフトウェアとハードウェアとの任意の組合せを備えることもできる。
【００２９】
符号化モジュール８は、符号化されたメディアデータをメディアリポジトリ(media repository)１０に記憶することができる。メディアリポジトリ１０は、フラッシュメモリ、ランダムアクセスメモリ、ハードディスクドライブ、または何らかの他のタイプの揮発性または不揮発性のデータストレージユニットを備えることができる。
【００３０】
復号化モジュール(decoding module)１２は、メディアリポジトリ１０から符号化されたメディアデータを取り出すことができる。復号化モジュール１２は、プロセッサ６によって実行されるソフトウェアを備えることができる。代わりに、復号化モジュール１２は、符号化されたメディアデータを復号するプロセッサ６内に専用ハードウェアを備えることができる。さらに別の代替案においては、復号化モジュール１２は、符号化されたメディアデータを復号するように協力するソフトウェアとハードウェアとの組合せを備えることができる。
【００３１】
デバイス２の中のプレゼンテーションドライバ(presentation driver)１３は、メディアプレゼンテーションユニット(media presentation unit)１４が、復号化モジュール１２によって復号されたメディアデータを提示するようにする。例えば、メディアプレゼンテーションユニット１４は、画像またはビデオのメディアデータを提示するコンピュータモニタを備えることができる。別の例においては、メディアプレゼンテーションユニット１４は、オーディオメディアデータを提示するオーディオ出力デバイス（例えば、スピーカ）を備えることができる。メディアプレゼンテーションユニット１４は、デバイス２へと一体化されることができ、あるいは周辺デバイスとしてデバイス２に対してワイヤードリンク(wired link)またはワイヤレスリンク(wireless link)を経由して接続されることができる。プレゼンテーションドライバ１３は、デバイスドライバまたは他のソフトウェア、ハードウェアまたはファームウェアのユニット、あるいはメディアプレゼンテーションユニット１４が、メディアデータを提示するようにする何らかの他のメカニズムを備えることができる。
【００３２】
デバイス２は、ネットワークインターフェース(network interface)１６を備えることもできる。ネットワークインターフェース１６は、ワイヤードリンクまたはワイヤレスリンクを経由して、デバイス２とコンピュータネットワークとの間の通信を容易にすることができる。例えば、ネットワークインターフェース１６は、デバイス２とモバイル電話ネットワークとの間の通信を容易にすることができる。デバイス２は、ネットワークインターフェース１６を経由してメディアファイルを受信することができる。例えば、デバイス２は、ネットワークインターフェース１６を介して、写真、ビデオクリップ、ストリーミングビデオ（例えば、テレビジョン、ビデオ会議、映画）、オーディオクリップ（例えば、リングトーン(ringtone)、歌、ＭＰ３ファイル）、ストリーミングオーディオ（例えば、デジタルラジオ局、音声呼出しなど）を受信することができる。ネットワークインターフェース１６が、メディアファイルまたはビデオビットストリームを受信するときに、ネットワークインターフェース１６は、メディアファイルまたはビデオビットストリームをメディアリポジトリ１０に記憶することができる。
【００３３】
ビデオ信号は、ピクチャのシーケンスの観点で説明されることができ、このピクチャのシーケンスは、フレーム（全体のピクチャ）、あるいはフィールド（例えば、フレームの奇数ラインまたは偶数ラインのいずれかを備えるピクチャ）を含む。さらに、おのおののフレームまたはフィールドは、２つ以上のスライス、あるいはそのフレームまたはフィールドの副次的部分(sub-portion)を含むことができる。ここにおいて使用されるように、単独で、あるいは他の言葉と組み合わせてのいずれかで、用語「フレーム」は、ピクチャ、フレーム、フィールド、またはそのスライスを意味することができる。
【００３４】
符号化モジュール８が、一連のビデオフレームを符号化するときに、符号化モジュール８は、「ｉ−フレーム」となるようにビデオフレームのうちの１つを選択することにより、開始することができる。例えば、符号化モジュール８は、８番目ごとのフレームをｉ−フレームとして選択することができる。ｉ−フレームは、他のフレームを参照しないフレームである。ｉ−フレームを選択した後に、符号化モジュール８は、ｉ−フレームを符号化するために「空間符号化」を使用する。さらに、符号化モジュール８は、残りのフレームを符号化するために「時間符号化」を使用することができる。
【００３５】
フレームを符号化するために空間符号化を使用するために、符号化モジュール８は、フレームデータをピクセルのブロックへと分解することができる。例えば、符号化モジュール８は、８ピクセルの幅と、８ピクセルの高さである、ピクセルのブロックへとフレームデータを分解することができる（すなわち、ピクセルの各ブロックは、６４個のピクセルを含む）。次いで、符号化モジュール８は、ピクセルの各ブロックにおけるピクセルのピクセル成分値をピクセル成分値の別個の行列へと分離することができる。ピクセルのピクセル成分値は、ピクセルの外観を特徴づける値である。例えば、各ピクセルは、Ｙピクセル成分値、Ｃｒピクセル成分値、およびＣｂピクセル成分値を指定することができる。Ｙピクセル成分値は、ピクセルの輝度を指し示し、Ｃｒピクセル成分値は、ピクセルの赤色クロミナンスを指し示し、そしてＣｂピクセル成分値は、ピクセルの青色クロミナンスを指し示す。この例においては、符号化モジュール８が、ピクセルのブロックのピクセル成分値を分離するとき、符号化モジュール８は、Ｙピクセル成分値の行列と、Ｃｒピクセル成分値の行列と、Ｃｂピクセル成分値の行列とを取得することができる。
【００３６】
ピクセル成分値をピクセル成分値の行列へと分離した後に、符号化モジュール８は、ピクセル成分値の行列のおのおのについて変換された係数の行列を生成する。符号化モジュール８は、ピクセル成分値の行列の中のピクセル成分値を左シフトすることにより、調整された係数の行列を最初に生成することにより、ピクセル成分値の行列について変換された係数の行列を生成することができる。次いで、符号化モジュール８は、調整された係数の行列に対して一次元変換を繰り返し適用するために固定小数点算術演算を使用し、それによって係数の行列を生成する。いくつかのインプリメンテーションにおいては、次いで、符号化モジュール８は、１組のスケールファクタにより、変換された係数の行列をスケール変更することにより、変換された係数の行列を生成することができる。これらのスケールファクタのおのおのは、整数値である。スケールファクタは、一次元変換内のファクタが、簡単な有理数(rational number)を使用して近似されることができるようなやり方で選択されている。スケーリングを使用しないインプリメンテーションにおいては、変換を適用することにより生成される係数の行列は、変換された係数の行列である。
【００３７】
変換された係数の行列の中の各係数は、符号化された係数の行列に対して理想的な二次元順方向離散コサイン変換（「ＦＤＣＴ」）を適用することにより生成されることになる値の行列の中の対応する値を近似する。理想的な一次元ＦＤＣＴは、
【数７】
0005661836.tif 000008
【００３８】
によって定義され、ここで、ｓは、Ｎ個の元の値のアレイであり、ｔは、Ｎ個の変換された値のアレイであり、そして係数ｃは、１≦ｋ≦Ｎ−１の場合に
【数８】
0005661836.tif 000009
【００３９】
によって与えられる。
【００４０】
理想的な二次元ＦＤＣＴは、式、
【数９】
0005661836.tif 000010
【００４１】
によって定義され、ここで、ｓは、Ｎ個の元の値のアレイであり、ｔは、Ｎ個の変換された値のアレイであり、そしてｃ（ｉ，ｊ）は、ｃ（ｉ，ｊ）＝ｃ（ｉ）ｃ（ｊ）によって与えられ、そしてｃ（ｋ）は、一次元の場合におけるように定義される。
【００４２】
変換された係数の行列を導き出した後に、符号化モジュール８は、変換された係数の行列の中の係数を量子化することにより、量子化された係数の行列を生成する。変換された係数を量子化することは、変換された係数の行列の中の高頻度の係数((high-frequency coefficients))に関連する情報の量を減少させることができる。量子化された係数の行列を生成した後に、符号化モジュール８は、量子化された係数の行列に対してエントロピー符号化スキームを適用することができる。例えば、符号化モジュール８は、係数の行列の中の量子化された係数に対してハフマン符号化スキーム(Huffman encoding scheme)を適用することができる。符号化モジュール８が、量子化された係数の行列のおのおのに対してエントロピー符号化スキームを適用するときに、符号化モジュール８は、ビデオビットストリームの一部分として、符号化された行列を出力することができる。
【００４３】
フレームを符号化する時間符号化を使用するために、符号化モジュール８は、フレームを「マクロブロック(macroblock)」に分割することができる。使用される符号化規格に応じて、これらのマクロブロックは、固定サイズまたは可変サイズとすることができ、そしてオーバーラップしており、またはオーバーラップしていないものとすることができる。例えば、各マクロブロックは、１６×１６のピクセルのブロックとすることができる。フレームの中の各マクロブロックについて、符号化モジュール８は、１つまたは複数の基準フレームの中のソースマクロブロック(source macroblock)を識別しようと試みることができる。符号化規格に応じて、基準フレームは、ｉ−フレーム、予測フレーム、または双予測フレームとすることができる。符号化モジュール８が、基準フレームの中のソースマクロブロックを識別することができる場合、符号化モジュール８は、そのマクロブロックについての動きベクトルを記録する。動きベクトルは、識別されたソースマクロブロックに対するマクロブロックの水平変位(horizontal displacement)を指し示すｘ値と、識別されたソースマクロブロックに対するマクロブロックの垂直変位(vertical displacement)を指し示すy値と、を含む。符号化モジュール８が、マクロブロックについてのソースマクロブロックを識別することができない場合には、符号化モジュール８は、マクロブロックについての動きベクトルを記録ことが必要とされない可能性がある。次に、符号化モジュール８は、「再構成された」フレームを生成する。再構成されたフレームは、現在のフレームについての記録された動きベクトルに従って基準フレームからマクロブロックを移動させることからもたらされることになるフレームを含んでいる。再構成されたフレームを生成した後に、符号化モジュール８は、現在のフレームの対応するピクセルの中の対応するピクセル成分値から、再構成されたフレームの各ピクセルの中のピクセル成分値を差し引き、結果として「残留」フレームが、もたらされる。次いで、符号化モジュール８は、現在のフレームのマクロブロックについて動きベクトルを圧縮するためにエントロピー符号化スキームを使用することができる。さらに、符号化モジュール８は、残留フレームを圧縮するために、上記に説明される空間符号化技法を使用する。
【００４４】
復号化モジュール１２は、符号化モジュール８と類似したプロセスを、但し逆に実行することができる。例えば、空間復号化プロセスを実行するために、復号化モジュール１２は、符号化されたビデオビットストリームの中の量子化された係数の符号化された各行列に対してエントロピー復号化スキームを適用することができる。次いで、復号化モジュール１２は、量子化された係数の各行列の中の係数を逆量子化することができ、それによって量子化された係数の各行列について逆量子化された係数の行列を生成する。量子化された係数の各行列では、復号化モジュール１２は、量子化された係数の行列をスケール変更することによりスケール変更された係数の行列を生成する。
【００４５】
スケール変更された係数の行列を生成した後に、復号化モジュール１２は、行列のＤＣ係数に中間点バイアス値と補足的バイアス値とを加算することにより、バイアスされた係数の行列を生成する。行列のＤＣ係数は、行列の中の他の係数の平均値に等しい係数である。一般的に、ＤＣ係数は、行列の左上隅における係数である。下記に詳細に説明されるように、ＤＣ係数に対するバイアス値の加算は、復号化モジュール１２が、行列のおのおのの行および列に対して逆離散コサイン変換因数分解(inverse discrete cosine transform factorization)を適用することにより生成される値を右シフトするときに、丸め誤差を低減させることができる。これらの丸め誤差は、これらの右シフトが、より計算的に高価な除算演算(division operation)についての代用であることと、固定小数点算術演算における右シフト演算が、必ずしも除算演算と同じ結果をもたらすとは限らないこととに起因する可能性がある。
【００４６】
復号化モジュール１２が、バイアスされた係数の行列を生成した後に、復号化モジュール１２は、バイアスされた係数の行列について変換された係数の行列を生成するために固定小数点算術演算を使用する。復号化モジュール１２は、バイアスされた係数の行列に対して一次元変換を繰り返し適用することにより変換された係数の行列を生成する。例えば、復号化モジュール１２は、バイアスされた係数の行列の各行ベクトルに対して一次元変換を適用することにより中間係数の行列を生成することができる。この例においては、次いで、復号化モジュール１２は、中間係数の行列の中の各列ベクトルに対して一次元変換を適用することにより、変換された係数の行列を生成することができる。
【００４７】
復号化モジュール１２は、一連の「バタフライ構造演算」を使用してこの一次元変換を適用することができる。一般に、「バタフライ構造演算」は、第１の中間値が、第１の定数によって第１の入力値を乗算することにより生成され、第２の中間値が、第２の定数によって第１の入力値を乗算することにより生成され、第３の中間値が、第１の定数によって第２の入力値を乗算することにより生成され、第４の中間値が、第２の定数によって第２の入力値を乗算することにより生成され、第１の出力値が、第１の中間値と第３の中間値とを加算することにより生成され、そして第２の出力値が、第２の中間値と、第４の中間値の負数と、を加算することにより生成される演算を意味する。バタフライ演算においては、定数は、１を含めて任意の有理数または無理数とすることができる。例のバタフライ構造演算は、図１０、１１、および１２の例において示される変換の中で示される。
【００４８】
数を表すために使用可能な限られた数のビットを有するシステムにおいては、バタフライ構造演算において無理定数(irrational constant)による乗算を実行することは、実用的でない可能性がある。この理由のために、復号化モジュール１２は、無理定数を近似する有理分数(rational fraction)によって値を乗算することにより無理定数による乗算を近似することができる。有理分数によって値を効率的に乗算するために、復号化モジュール１２は、有理分数の分母によって値を乗算し、次いで有理分数の分母のｌｏｇ２だけ結果として生ずる値を右シフトすることができる。上記に述べられるように、固定小数点算術演算における右シフト演算は、必ずしも対応する除算演算に等しい結果をもたらすとは限らないので、右シフト演算は、丸め誤差を引き起こす可能性がある。
【００４９】
下記に詳細に説明されるように、復号化モジュール１２は、丸め誤差を低減させるために有理分数の一部においては負の分母を使用することができる。負の分母の使用は、値を右シフトすることに先立って中間点バイアス値を加算する必要性を除去することができる。中間点バイアス値を加算することは、逆離散コサイン変換の適用に対して不必要な複雑さを追加する可能性があるので、これは有利である可能性がある。
【００５０】
復号化モジュール１２が、変換された係数の行列を生成しているときに、復号化モジュール１２は、変換を適用することにより追加されるビットの数と、逆量子化された係数の行列の係数をスケール変更することにより追加されるビットの数とを加えたものに等しいポジションの数だけ、変換された係数の行列の中の各係数を右シフトすることにより、調整された係数の行列を生成する。次いで、復号化モジュール１２は、調整された係数の行列の中の係数をクリップすることにより、クリップされた係数の行列を生成することができる。調整された係数の行列の中の係数をクリップすることは、それらが、ピクセル成分値についての許可された範囲内にあるように、調整された係数を修正する。それ故に、クリップされた係数の行列は、ピクセル成分値の行列として特徴づけられることができる。
【００５１】
ピクセル成分値の行列を生成した後に、復号化モジュール１２は、ピクセルのブロックについての他のピクセル成分値を記憶する行列と、ピクセル成分値の行列を組み合わせることにより、ピクセルのブロックを生成することができる。次に、復号化モジュール１２は、ピクセルのブロックをビデオフレームへと組み合わせることができる。
【００５２】
予測フレームを復号するために、復号化モジュール１２は、予測フレームについての残留イメージにおける量子化された係数の行列を復号するために、上記に説明された空間復号化技法を使用することができる。さらに、復号化モジュール１２は、予測フレームの動きベクトルを復号するためにエントロピー復号化スキームを使用することができる。次に、復号化モジュール１２は、動きベクトルに従って予測フレームの基準フレームのマクロブロックを「移動させること」により、再構成されたフレームを生成することができる。再構成されたフレームを生成した後に、復号化モジュール１２は、再構成されたフレームの対応するピクセルにおける対応するピクセル成分値に、復号された残留フレームの各ピクセルにおけるピクセル成分値を加算する。この加算の結果は、再構成された予測フレームである。
【００５３】
この開示において説明される技法は、いくつかの長所を提供することができる。例えば、離散コサイン変換と、逆離散コサイン変換との計算中における丸め誤差の低減は、画像データにおける可視誤差を低減させることができ、そしてオーディオデータにおける可聴誤差を低減させることができる。さらに、これらの技法は、固定小数点計算に対して適用することができるので、これらの技法は、モバイル電話、携帯型個人情報端末、パーソナルメディアプレーヤなど、より小型の、あまり複雑でないデバイスの中で適用されることができる。特に、本技法は、依然として米国電気電子学会(Institute of Electrical and Electronics Engineers)（ＩＥＥＥ）規格１１８０により指定される精度要件に準拠しながら、それらの仮数部分に非常に限られた数のビット（例えば、３ビット）を有する固定小数点数を使用して、適用されることができ、この規格の全体の内容は、ここに参照により組み込まれている。さらに、これらの技法は、国際電気通信連合標準化部門(International Telecommunication Union Standardization Sector)（ＩＴＵ−Ｔ）勧告Ｈ．２６１、Ｈ．２６３、Ｈ．２６４、Ｔ．８１（ＪＰＥＧ）、ならびに国際標準化機構(International Organization for Standardization)（ＩＳＯ）／ＭＥＣムービングピクチャーエキスパートグループ(Moving Picture Experts Group)（ＭＰＥＧ）−１、ＭＰＥＧ−２、およびＭＰＥＧ−４パート２メディアフォーマット(MPEG-4 Part 2 media formats)を含むフォーマットに対して適用されることができる。
【００５４】
図２は、符号化モジュール８の詳細の例を示すブロック図である。符号化モジュール８は、１組の「モジュール」を備えることができる。これらのモジュールは。符号化モジュール８のソフトウェア命令のサブセットを備えることができる。代わりに、これらのモジュールは、専用ハードウェアを備えることもできる。別の代替案においては、これらのモジュールは、ソフトウェア命令と専用ハードウェアとを備えることもできる。
【００５５】
図２の例において示されるように、符号化モジュール８は、符号化モジュール８が、ｉ−フレームか、予測フレームか、あるいは双予測フレームのいずれとしてビデオフレームを処理するかを制御するフレーム制御モジュール(frame control module)２０を含んでいる。例えば、符号化モジュール８が、ビデオフレームを受け取るときに、フレーム制御モジュール(frame control module)２０は、ビデオフレームに関連するビットストリームフラグ(bitstream flag)が、そのフレームがｉ−フレームか、予測フレームか、あるいは双予測フレームのいずれを指し示すかを決定することができる。ビットストリームフラグが、そのフレームがｉ−フレームであることを指し示すことをフレーム制御モジュール２０が決定する場合、フレーム制御モジュール２０は、ビデオフレームが、ビデオフレームに対する空間符号化を直ちに実行する１組のモジュールによって処理されるようにすることができる。他方、フレーム制御モジュール２０が、そのフレームが予測フレームまたは双予測フレームであることを決定する場合には、フレーム制御モジュール２０は、ビデオフレームが、時間符号化を実行する１組のモジュールによって処理されるようにすることができる。
【００５６】
符号化モジュール８は、ビデオフレームに対して空間符号化を適用する一連のモジュールを含んでいる。これらのモジュールは、ブロックスプリッタモジュール(block splitter module)２２と、成分抽出モジュール(component extraction module)２４と、順方向変換モジュール(forward transform module)２６と、量子化モジュール(quantization module)２８と、エントロピー符号化モジュール(entropy encoding module)３０とを含む。ブロックスプリッタモジュール２２は、メディアソース４、ネットワークインターフェース１６、または別のソースから符号化されていないビデオフレームを受け取ることができる。ブロックスプリッタモジュール２２が、符号化されていないビデオフレームを受け取るときに、ブロックスプリッタモジュール２２は、そのフレームをピクセルのブロックへと分離することができる。ブロックスプリッタモジュール２２は、成分抽出モジュール２４に対してピクセルのブロックを供給することができる。
【００５７】
成分抽出モジュール２４が、ピクセルのブロックを受け取るとき、成分抽出モジュール２４は、各ピクセルのピクセル成分値を異なるカラーフォーマットへと変換することができる。例えば、成分抽出モジュール２４は、赤−緑−青(Red-Green-Blue)（ＲＧＢ）カラーフォーマットからＹＣｒＣｂカラーフォーマットへと各ピクセルを変換することができる。ブロックの中のピクセルを異なるカラーフォーマットへと変換した後に、成分抽出モジュール２４は、ピクセルのピクセル成分値をピクセル成分値の行列へと分離することができる。例えば、成分抽出モジュール２４は、１ブロックのピクセルからＹ値の行列と、Ｃｒ値の行列と、Ｃｂ値の行列とを抽出することができる。Ｙ値は、ピクセルの輝度を指定し、Ｃｒ値は、ピクセルの赤色クロミナンスを指定し、そしてＣｂ値はピクセルの青色クロミナンスを指定する。成分抽出モジュール２４が、ピクセル成分値の行列を抽出しているときには、成分抽出モジュール２４は、順方向変換モジュール２６に対して行列のおのおのを別々に供給することができる。
【００５８】
順方向変換モジュール２６が、ピクセル成分値の行列を受け取るとき、順方向変換モジュール２６は、変換された係数の行列を生成する。スケール変更された係数のこの行列の中の各係数は、ピクセル成分値の行列を変換するために理想的な順方向離散コサイン変換を使用することにより生成されることになる係数に近い。
【００５９】
順方向変換モジュール２６は、ピクセル成分値の行列に対して一次元変換を適用するために固定小数点算術演算を使用する。固定小数点算術演算を使用することは、いくつかの状況において有利である可能性がある。例えば、モバイル電話などのより小型のデバイスは、浮動小数点算術演算を実行するために必要とされる浮動小数点ユニットを含まないかもしれない。順方向変換モジュール２６は、ピクセル成分値のおのおのを左シフトすることにより、スケール変更された係数の行列を生成するプロセスを開始することができる。例えば、順方向変換モジュール２６は、順方向変換モジュール２６が、一次元変換を適用するときに使用する数の固定小数点表現の精度のビットの数（すなわち、仮数ビットの数）と、その変換を適用することからもたらされる変換された係数をスケール変更することにより除去される精度のビットの数と、を加えたものだけピクセル成分値のおのおのを左シフトすることにより調整された係数の行列を生成することができる。ピクセル成分値のおのおのを左シフトした後に、順方向変換モジュール２６は、調整された係数の行列の行ベクトルのおのおのに対して変換を実行することができる。調整された係数の行列の行ベクトルのおのおのに対して離散コサイン変換を実行することは、中間係数の行列を生成する。次に、順方向変換モジュール２６は、中間係数の行列の列ベクトルのおのおのに対して変換を実行することができる。中間係数の行列の列ベクトルのおのおのに対して変換を実行することは、変換された係数の行列をもたらす。
【００６０】
変換された係数の行列を生成した後に、順方向変換モジュール２６は、変換された係数の行列の中の異なる位置における変換された係数を異なるスケールファクタだけスケール変更する。下記に説明されるように、復号化モジュール１２は、逆変換の適用において、これらのスケールファクタの逆数(reciprocal)を使用することができる。順方向変換モジュール２６が、変換された係数をスケールファクタだけスケール変更することを完了しているときに、順方向変換モジュール２６は、スケール変更された係数の結果として生ずる行列を量子化モジュール２８に対して出力することができる。
【００６１】
量子化モジュール２８が、順方向変換モジュール２６から係数の行列を受け取るときに、量子化モジュール２８は、スケール変更された係数を量子化することができる。量子化モジュール２８は、使用されている符号化規格に応じて様々なやり方でスケール変更された係数を量子化することができる。例えば、ＭＰＥＧ−４パート２規格に従って、量子化モジュール２８は、ｉ−フレームについてのスケール変更された係数の行列の中の係数を量子化するために次の量子化行列を使用することができる。
【表１】
0005661836.tif 000011
【００６２】
さらに、この例においては、量子化モジュール２８は、予測フレームまたは双予測フレームについてスケール変更された係数の行列の中の係数を量子化するために次の量子化行列を使用することができる。
【表２】
0005661836.tif 000012
【００６３】
量子化モジュール２８が、量子化された係数の行列を生成した後に、エントロピー符号化モジュール３０は、エントロピー符号化スキームを使用して量子化された係数の行列を圧縮することができる。エントロピー符号化スキームを使用して量子化された係数の行列を圧縮するために、エントロピー符号化モジュール３０は、係数のジグザグパターン(zigzag pattern)を利用することにより、量子化された係数をベクトルへと構成することができる。換言すれば、エントロピー符号化モジュール３０は、予測可能値(predictable)における量子化された係数の一次元ベクトルへと、量子化された係数の二次元行列の中の量子化された係数のすべてを構成することができる。次いで、エントロピー符号化モジュール３０は、量子化された係数のベクトルに対して、ハフマン符号化や算術演算符号化などのエントロピー符号化スキームを適用することができる。
【００６４】
符号化モジュール８は、ビデオフレームの時間符号化を実行する１つまたは複数のモジュールも含んでいる。図２の例に示されるように、符号化モジュール８は、動き推定モジュール(motion estimation module)３２と、再構成フレーム生成モジュール(reconstructed frame generation module)３４と、残留フレーム生成モジュール(residual frame generation module)３６とを含む。動き推定モジュール３２は、現在のビデオフレームにおける各マクロブロックについての基準画像におけるソースマクロブロックを識別しようと試みる。動き推定モジュール３２は、類似したピクセルをマクロブロックとして含む基準画像におけるマクロブロックについてサーチする(search)ことにより、現在のフレームにおけるマクロブロックについてのソースマクロブロックを識別しようと試みることができる。動き推定モジュール３２は、現在のフレームにおけるマクロブロックについてのソースマクロブロックを識別するために、異なる符号化規格に従って異なるサイズの区域をサーチすることができる。例えば、動き推定モジュール３２は、サーチ区域の中心に現在のマクロブロックを有する、３２ピクセル幅×３２ピクセル高さのピクセルである区域内のソースマクロブロックについてサーチすることができる。動き推定モジュール３２が、現在のフレームにおけるマクロブロックについてのソースマクロブロックを識別するとき、動き推定モジュール３２は、現在のフレームにおけるマクロブロックについての動きベクトルを計算する。現在のフレームにおけるマクロブロックについての動きベクトルは、識別されたソースマクロブロックと、現在のフレームのマクロブロックとの間の、水平位置における差を指し示すｘ値を指定する。動き推定モジュール３２が、動きベクトルを計算しているか、あるいは現在のフレームにおける各マクロブロックについてのソースマクロブロックを識別することができなくなっているかのいずれかの後に、動き推定モジュール３２は、再構成フレーム生成モジュール３４に対して現在のフレームについての計算された動きベクトルを供給することができる。
【００６５】
再構成フレーム生成モジュール３４は、再構成されたフレームを生成するために動きベクトルと基準フレームとを使用することができる。再構成フレーム生成モジュール３４は、基準フレームにおけるソースマクロブロックに対して現在のフレームにおける各マクロブロックについての動きベクトルを適用することにより、再構成されたフレームを生成することができる。実際上、再構成フレーム生成モジュール３４は、基準フレームのマクロブロックが、現在のフレームの対応する動きベクトルによって指し示される位置に「移動」させられているフレームを作成する。
【００６６】
残留フレーム生成モジュール３６は、現在のフレームにおける対応するピクセル成分値から再構成されたフレームにおけるピクセル成分値を差し引くことにより残留フレームを生成することができる。一般に、残留フレームは、再構成されたフレームまたは現在のフレームのいずれかよりも少ない情報を含んでいる。残留フレーム生成モジュール３６が、残留フレームを生成した後に、残留フレーム生成モジュール３６は、残留フレームを空間的に符号化するプロセスを開始するために、残留フレームをブロックスプリッタモジュール２２に対して供給する。さらに、動き推定モジュール３２は、動きベクトルを圧縮するために、現在のフレームについての動きベクトルをエントロピー符号化モジュール３０に対して供給することができる。残留フレームが、空間的に符号化され、そしてエントロピー符号化モジュール３０が、動きベクトルを符号化した後に、ストリーム出力モジュール３８(stream output module)は、ビデオビットストリームの一部分として空間的に符号化された残留フレームと、符号化された動きベクトルと、をフォーマットすることができる。
【００６７】
図３は、復号化モジュール１２の例示の詳細を示すブロック図である。復号化モジュール１２は、エントロピー復号化モジュール４４と、逆量子化モジュール４６と、逆変換モジュール(inverse transform module)４８と、ピクセル再構成モジュール(pixel reconstruction module)５０と、フレームバッファ(frame buffer)５１と、ブロックコンバイナモジュール(block combiner module)５２と、フレーム制御モジュール(frame control module)５３と、基準フレームストレージモジュール(reference frame storage module)５４と、再構成フレーム生成モジュール(reconstructed frame generation module)５６と、予測フレーム生成モジュール(predictive frame generation module)５８と、を備えることができる。これらのモジュールのうちの一部または全部は、復号化モジュール１２のソフトウェア命令のサブセットを備えることができる。代わりに、これらのモジュールの一部または全部は、専用のハードウェアまたはファームウェアを備えることもできる。別の代替案においては、これらのモジュールは、ソフトウェア命令と、専用のハードウェアまたはファームウェアとを備えることもできる。
【００６８】
復号化モジュール１２が、ビデオフレームを含むビットストリームを受け取るときに、エントロピー復号化モジュール４４は、ビデオフレームにおける量子化された係数の行列に対してエントロピー復号化スキームを適用することができる。そのビットストリームは、どのエントロピー復号化スキームをビットストリームにおける量子化された係数の行列に適用すべきかをエントロピー復号化モジュール４４に対して指し示す値を含むことができる。さらに、エントロピー復号化モジュール４４は、ビデオフレームの動きベクトルを復号するために、同じまたは異なるエントロピー復号化スキームを適用することができる。
【００６９】
エントロピー復号化モジュール４４が、ビデオファイルにおける量子化された係数の行列に対してエントロピー復号化スキームを適用した後に、逆量子化モジュール４６は、量子化された係数の行列のおのおのにおける係数を逆量子化することができる。符号化規格に応じて、逆量子化モジュール４６は、様々なやり方でそれらの係数を逆量子化することができる。例えば、ＭＰＥＧ−４パート２規格に従って、逆量子化モジュール４６は、２つの異なるやり方で上記にリストアップされた２つの量子化行列(quantization matrix)を使用することができる。第１に、逆量子化モジュール４６は、Ｈ．２６３−スタイルの逆量子化を実行するためにこれらの量子化行列を使用することができる。Ｈ．２６３−スタイルの逆量子化において、逆量子化モジュール４６は、次のように量子化された値ＱＦ［ν］［ｕ］から再構成された係数Ｆ’’［ν］［ｕ］を取得する。
【数１０】
0005661836.tif 000013
【００７０】
これは、ｑｕａｎｔｉｚｅｒ＿ｓｃａｌｅによるただ１つの乗算を含む。
【００７１】
第２に、逆量子化モジュール４６は、ＭＰＥＧ−１／２−スタイルの逆量子化を実行するためにこれらの量子化行列を使用することができる。ＭＰＥＧ−１／２−スタイルの逆量子化においては、逆量子化モジュール４６は、追加の重み行列Ｗ［ｗ］［ν］［ｕ］を使用し、ここでｗは、どの重み行列が使用されているのかを指し示す。
【数１１】
0005661836.tif 000014
【００７２】
逆変換モジュール４８が、逆量子化された係数の行列を受け取るときに、逆変換モジュール４８は、ピクセル成分の行列を生成する。下記に詳細に説明されるように、逆変換モジュール４８は、逆変換された係数の行列における各係数を最初にスケール変更することと、行列のＤＣ係数にバイアス値を加算することと、一連の一次元離散コサイン変換を適用することと、結果として生ずる値を右シフトすることと、右シフトされた値をクリップすることと、次いでクリップされた値を出力することと、により、ピクセル成分値の行列を生成する。
【００７３】
逆変換モジュール４８が、ピクセル成分値の行列を出力した後に、ピクセル再構成モジュール５０は、ビデオフレーム内の等価な位置に関連するピクセル成分値の行列とピクセル成分値の行列を組み合わせることにより、ピクセルの行列を生成することができる。例えば、ピクセル再構成モジュール５０は、Ｙピクセル成分値の行列と、Ｃｂピクセル成分値の行列と、Ｃｒピクセル成分値の行列とを逆変換モジュール４８から受け取ることができる。これらの３つの行列のおのおのは、単一の８×８のピクセルのブロックについてのピクセル成分を含むことができる。ピクセルのおのおのは、Ｙピクセル成分値と、Ｃｂピクセル成分値と、Ｃｒピクセル成分値とを含むことができる。ピクセルの行列を生成した後に、ピクセル再構成モジュール５０は、ピクセルのブロックをブロックコンバイナモジュール(block combiner module)５２に対して供給することができる。
【００７４】
ブロックコンバイナモジュール５２が、ピクセルのブロックを受け取るときに、ブロックコンバイナモジュール５２は、ブロックコンバイナモジュール５２が、ビデオフレームにおけるピクセルのブロックのうちの一部または全部を受け取るまで、ピクセルのブロックをバッファすることができる。ピクセルのブロックのうちの１つまたは複数を受け取った後に、ブロックコンバイナモジュール５２は、ピクセルのブロックをビデオフレームへと組み合わせることができ、ビデオフレームをフレームバッファ５１に対して出力することができる。ビデオフレームは、それがメディアプレゼンテーションユニット(media presentation unit)５１によって表示されるまで、フレームバッファ５１に記憶されることができる。さらに、ブロックコンバイナモジュール５２は、ビデオフレームをフレームストレージモジュール(frame storage module)５４に対して出力することができる。フレームストレージモジュール５４におけるビデオフレームは、予測フレームと双予測フレームとの再構成のための基準フレームとして使用されることができる。さらに、フレームストレージモジュール５４におけるビデオフレームは、予測フレームと双予測フレームとの再構成において使用される残留フレームとすることもできる。
【００７５】
予測フレームまたは双予測フレームを再構成するために、復号化モジュール１２は、再構成フレーム生成モジュール５６を含んでいる。再構成フレーム生成モジュール５６は、エントロピー復号化モジュール４４から復号された動きベクトルを受け取る。さらに、再構成フレーム生成モジュール５６は、フレームストレージモジュール５４から現在のフレームの基準フレームを取り出す。次いで、再構成フレーム生成モジュール５６は、基準フレームにおけるそれらの位置から動きベクトルによって指し示される位置へとマクロブロックを「移動させる」。再構成フレームは、このようにしてマクロブロックを移動させることからもたらされる。再構成フレーム生成モジュール５６が、再構成されたフレームを生成した後に、再構成フレーム生成モジュール５６は、再構成されたフレームを予測フレーム生成モジュール５８へと供給する。
【００７６】
予測フレーム生成モジュール５８が、一時的フレームを受け取るときに、予測フレーム生成モジュール５８は、フレームストレージモジュール５４から現在のフレームについての残留フレームを取り出すことができる。残留フレームを取り出した後に、予測フレーム生成モジュール５８は、残留フレームと再構成されたフレームとの各ピクセルにおける対応するカラー成分値を加算することができる。再構成されたビデオフレームは、この加算からもたらされる。次に、予測フレーム生成モジュール５８は、メディアプレゼンテーションユニット１４上での最終的な表示のためにこの再構成されたフレームをフレームバッファ５１に対して出力することができる。
【００７７】
図４は、符号化モジュール８の一例のオペレーションを示すフローチャートである。図４に説明されるオペレーションは、逐次的なやり方で説明されるが、本オペレーションは、パイプライン化されたやり方で実行されることができることに注意すべきである。
【００７８】
最初に、符号化モジュール８は、非符号化ビデオフレームのシーケンスを受け取る（６０）。例えば、符号化モジュール８は、メディアソース４からピクセルの組の形態で非符号化フレームのシーケンスを受け取ることができる。符号化モジュール８が、非符号化フレームのシーケンスを受け取るときに、符号化モジュール８におけるフレーム制御モジュール２０は、非符号化フレームのシーケンスにおける現在のフレームが、ｉ−フレームとして符号化されるべきか、あるいは予測フレームまたは双予測フレームとして符号化されるべきかを決定することができる（６２）。
【００７９】
フレーム制御モジュール２０が、現在のフレームがｉ−フレームとして符号化されるべきであると決定する場合、符号化モジュール８におけるブロックスプリッタモジュール２２は、現在のフレームをピクセルのブロックへと分割する(split)することができる（６４）。例えば、符号化モジュール８は、現在のフレームを２×２、４×４、または８×８のピクセルのブロックへと分割することができる。
【００８０】
現在のフレームをピクセルのブロックへと分割した後に、成分抽出モジュール２４は、ピクセル成分値をピクセルのブロックのおのおのへと分割することができる（６６）。結果として、ピクセルの各ブロックについてのピクセル成分値の３つのブロック、すなわち、ピクセルの輝度を表すべきＹ値のブロックと、ピクセルの青色クロミナンスを表すべきＣｂ値のブロックと、ピクセルの赤色クロミナンスを表すべきＣｒ値のブロックと、が存在することができる。
【００８１】
次いで、符号化モジュール８における順方向変換モジュール２６は、ピクセル成分値の行列のおのおのについてのスケール変更された係数の行列を生成することができる（６８）。スケール変更された係数のこれらの行列における係数は、ピクセル成分値の行列のそれぞれの行列に対する理想的な２次元順方向離散コサイン変換を使用することにより生成されることになる値の近似値である。
【００８２】
順方向変換モジュール２６が、ピクセル成分の行列のおのおのについてスケール変更された係数の行列を生成した後に、符号化モジュール８における量子化モジュール２８は、スケール変更された係数の行列のおのおのにおける係数を量子化することができる（７０）。ひとたび量子化モジュール２８が、スケール変更された係数の各行列における係数を量子化した後に、エントロピー符号化モジュール３０は、量子化された係数の行列のおのおのに対するエントロピー符号化プロセスを実行することができる（７２）。例えば、符号化モジュール８は、量子化された係数の各行列に対してハフマン符号化スキームまたは算術演算符号化スキームを適用することができる。エントロピー符号化プロセスは、さらにデータを圧縮した。しかしながら、エントロピー符号化プロセスは、情報のロスをもたらしはしない。量子化された係数の各行列に対するエントロピー符号化プロセスを実行した後に、符号化モジュール８におけるストリーム出力モジュール３８は、ビデオフレームのシーケンスについてビットストリームに対して量子化された係数の符号化された行列を追加することができる（７４）。ストリーム出力モジュール３８が、ビットストリームに対して符号化された行列を加算した後に、フレーム制御モジュール２０は、現在のフレームが、フレームのシーケンスの最後のビデオフレームであったかどうかを決定することができる（７６）。現在のフレームが、フレームのシーケンスの最後のフレームである（７６の「ＹＥＳ」の）場合、符号化モジュール８は、フレームのシーケンスの符号化を完了している（７８）。他方、現在のフレームが、フレームのシーケンスの最後のフレームではない（７６の「ＮＯ」の）場合には、符号化モジュール８は、ループバックし、そして新しい現在のフレームが、ｉ−フレームとして符号化されるべきかどうかを決定することができる（６２）。
【００８３】
現在のフレームが、ｉ−フレームとして符号化されるべきでない（６２の「ＮＯ」の）場合、符号化モジュール８における動き推定モジュール３２は、現在のフレームを１組のマクロブロックへと分割することができる（８０）。次に、動き推定モジュール３２は、現在のフレームにおけるマクロブロックのおのおのについて１つまたは複数の基準フレームにおけるソースマクロブロックを識別しようと試みることができる（８２）。次いで、動き推定モジュール３２は、動き推定モジュール３２がソースマクロブロックを識別することが可能であった現在のフレームにおけるマクロブロックのおのおのについて動きベクトルを計算することができる（８４）。動き推定モジュール３２が、動きベクトルを計算した後に、再構成フレーム生成モジュール３４は、基準フレームにおける識別されたマクロブロックを動きベクトルによって指し示される位置へと「移動させること」により、再構成されたフレームを生成するために動きベクトルを使用する（８６）。次いで、残留フレーム生成モジュール３６は、現在のフレームにおける対応するピクセル成分値から再構成されたフレームにおけるピクセル成分値を差し引くことにより、現在のフレームについて残留フレームを生成することができる（８８）。残留フレーム生成モジュール３６が、残留フレームを生成した後に、エントロピー符号化モジュール３０は、現在のフレームについて動きベクトルを符号化するためにエントロピー符号化スキームを使用することができる（９０）。さらに、空間符号化は、ステップ（６６）から（７４）を残留フレームに対して適用することにより、残留フレームに対して適用されることができる。
【００８４】
図５は、復号化モジュール１２の例示のオペレーションを示すフローチャートである。図５に説明されるオペレーションは、逐次的なやり方で説明されるが、本オペレーションは、パイプライン化されたやり方で実行されることができることに注意すべきである。
【００８５】
最初に、復号化モジュール１２は、符号化されたビデオフレームを受け取る（１００）。符号化されたビデオフレームを受け取った後に、復号化モジュール１２におけるエントロピー復号化モジュール４４は、符号化されたフレーム内のデータのブロック上でエントロピー復号化プロセスを実行することができる（１０２）。エントロピー復号化モジュール４４は、フレームを符号化するために使用されるエントロピー符号化プロセスと等価であるエントロピー復号化プロセスを実行することができる。例えば、符号化モジュール８が、フレームを符号化するためにハフマン符号化を使用する場合、エントロピー復号化モジュール４４は、フレームを復号するためにハフマン復号化(Huffman decoding)を使用する。フレームにおけるデータの各ブロックに対してエントロピー復号化プロセスを適用する結果として、エントロピー復号化モジュール４４は、量子化された係数の行列の組を生成している。
【００８６】
次に、復号化モジュール１２における逆量子化モジュール４６は、量子化された係数の行列のおのおのにおける係数を逆量子化することができる（１０４）。量子化された係数の行列における各係数を逆量子化した後に、復号化モジュール１２における逆変換モジュール４８は、ピクセル成分値の行列を生成する（１０６）。ピクセル成分値の行列のうちの１つにおけるピクセル成分値は、理想的な２次元逆離散コサイン変換を使用して量子化された係数の行列のうちの１つを変換することにより生成されることになる対応する値の近似値である。
【００８７】
逆変換モジュール４８が、係数の行列のおのおのについてピクセル成分値の行列を計算しているときに、復号化モジュール１２におけるピクセル再構成モジュール５０は、ピクセルのブロックを作成するためにピクセル成分値の適切な行列(appropriate matrixes)を組み合わせることができる（１０８）。例えば、復号化モジュール１２は、ＹＣｒＣｂピクセルのブロックを作成するために、Ｃｒ値の関連するブロックおよびＣｂ値の関連するブロックと、Ｙ値のブロックを組み合わせることができる。ピクセル再構成モジュール５０が、ピクセルのブロックを作成した後に、ブロックコンバイナモジュール５２は、ピクセルのブロックをビデオフレームへと再結合することができる（１１０）。
【００８８】
次に、復号化モジュール１２におけるフレーム制御モジュール５３は、現在のフレームが、ｉ−フレームであるかどうかを決定することができる（１１４）。現在のフレームが、ｉ−フレームである（１１４の「ＹＥＳ」の）場合、ブロックコンバイナモジュール５２は、ビデオフレームをフレームバッファ５１へと出力することができる（１１４）。他方、現在のフレームがｉ−フレームでない（すなわち、現在のフレームが予測フレーム、または双予測フレームである）（１１４の「ＮＯ」の）場合には、エントロピー復号化モジュール４４は、現在のフレームの動きベクトルを復号するためにエントロピー復号化スキームを使用する（１１６）。次に、再構成フレーム生成モジュール５６は、再構成されたフレームを生成するために、フレームストレージモジュール５４における復号化された動きベクトルと、１つまたは複数の基準フレームとを使用する（１１８）。次いで、予測フレーム生成モジュール５８は、再構成されたフレームを生成するために、再構成されたフレームと、ブロックコンバイナモジュール５２によって生成されるフレームとを使用することができる（１２０）。
【００８９】
図６は、逆変換モジュール４８の例示の詳細を示すブロック図である。図６の例に示されるように、逆変換モジュール４８は、入力モジュール１４０を備えることができる。入力モジュール１４０は、逆量子化モジュール４６から係数の行列を受け取ることができる。例えば、入力モジュール１４０は、係数の行列を記憶するデバイス２のメモリモジュールにおけるロケーションを指し示すポインタを受け取ることができる。代わりに、入力モジュール１４０は、係数の行列を記憶する内部データ構造を含むこともできる。
【００９０】
入力モジュール１４０が、逆量子化された係数の行列を受け取るときに、入力モジュール１４０は、逆変換モジュール４８の中のスケーリングモジュール(scaling module)１４２に対して係数の行列を供給することができる。スケーリングモジュール１４２は、逆量子化された係数の行列の中の各係数をスケール変更することにより、スケール変更された係数の行列を生成する。スケーリングモジュール１４２は、固定小数点表現の数を表現するために、逆変換モジュール１４６によって使用されるいくつかの仮数ビットだけ各係数を左シフトすることにより、逆量子化された係数の行列の中の係数をスケール変更することができる。仮数ビットは、小数点(radix point)（すなわち、数の小数部分）の左側にあるこれらのビットのことである。このようにして、スケーリングモジュール１４２は、逆量子化された係数の行列の中の係数の表現を適切な数の仮数ビットを有する固定小数点表現に効果的に変換する。例えば、逆変換モジュール１４６が、３つの仮数ビットを含む固定小数点数を使用する場合、スケーリングモジュール１４２は、逆量子化された係数の行列の中の係数のおのおのを３つの位置だけ左シフトすることにより、スケール変更された係数の行列を生成する。
【００９１】
スケーリングモジュール１４２が、スケール変更された係数の行列を生成した後に、係数バイアシングモジュール(coefficient biasing module)１４４は、スケール変更された係数の行列のＤＣ係数に対して中間バイアス値(midpoint bias value)と補足バイアス値(supplemental bias value)とを加算することにより、バイアスされた係数の行列を生成することができる。上記で論じられるように、行列のＤＣ係数は、一般的に行列の左上位置にある係数である。一般に、ＤＣ係数は、行列の中の他の係数の平均値を表す。
【００９２】
補足バイアス値は、正の誤差と負の誤差とが、平均して大きさが等しくなるように、そして平均してゼロの周りで対称となるようにする値である。例えば、補足バイアス値は、ＤＣ係数が負でないときにゼロに等しく、そしてＤＣ係数が負であるときに負の１に等しい符号適応バイアス値(sign-adaptive bias value)とすることができる。１６−ビットプロセッサにおいて符号適応バイアス値をＤＣ係数に加算するために、係数バイアシングモジュール１４４は、次の式を使用することができる。
【００９３】
ＤＣ＿ｃｏｅｆｆｉｃｉｅｎｔ＝ＤＣ＿ｃｏｅｆｆｉｃｉｅｎｔ＋（１＜＜（Ｐ＋２））＋（ＤＣ＿ｃｏｅｆｆｉｃｉｅｎｔ＞＞１５）．    （１）
式（１）において、項（１＜＜（Ｐ＋２））は、中間バイアスを提供するために加算される。Ｐは、逆ベクトル変換モジュール１４６によって実行される変換において使用される固定小数点の仮数ビット（すなわち、小数点の右側に位置するビット(bits to the right of the radix point)）の数を意味する定数である。数２は、右シフトモジュール１４８が、すべての係数を（Ｐ＋３）だけ右シフトすることができるので、Ｐに対して加算され、ここで、数「３」は、逆離散コサイン変換を実行することにより追加される精度のビットに由来する。このポイントを詳しく述べると、数ｘが、１を（Ｐ＋２）だけ左シフトすることにより生成され、そして数ｚが、ｘを（Ｐ＋３）だけ右シフトすることにより生成される場合、そのときにはｚ＝１／２である。（別の方法で述べると、２Ｐ＋２／２Ｐ＋３＝２０／２１＝１／２）。それ故に、ＤＣ係数に対して（１＜＜（Ｐ＋２））を加算することは、ＤＣ係数に対して（１＜＜（Ｐ＋３））／２を加算することに等しい。
【００９４】
式（１）において、項（ＤＣ＿ｃｏｅｆｆｉｃｉｅｎｔ＞＞１５）は、１６−ビットＤＣ係数を１５の位置だけ右シフトする。残りの１ビットは、ＤＣ係数の符号を指し示す。例えば、ＤＣ係数は、0b1111 1100 0011 0101であったと仮定する。この例においては、符号拡張を用いて、ＤＣ係数を１５の位置だけ右にシフトすることは、0b1111 1111 1111 1111（１０進数、−１）の値をもたらす。同様に、ＤＣ係数が、0b0111 1111 1111 1111であった場合には、ＤＣ係数を１５の位置だけ右にシフトすることは、0b0000 0000 0000 0000（１０進数、０）の値をもたらす。
【００９５】
別の例においては、補足バイアス値は、ディザリングバイアス値(dithering bias value)とすることができる。ディザリングバイアス値は、−１または０に等しい値である。１６−ビットプロセッサにおいてＤＣ係数に対して符号ディザリングバイアス値を加算するために、ＩＤＣＴモジュール３４は、次の式を使用することができる。
【００９６】
ＤＣ＿ｃｏｅｆｆｉｃｉｅｎｔ＝ＤＣ＿ｃｏｅｆｆｉｃｉｅｎｔ＋（１＜＜（Ｐ＋２））＋ｄｉｔｈｅｒ（−１｜０）．    （２）
式（２）において、Ｐは、ＤＣ＿ｃｏｅｆｆｉｃｉｅｎｔにおける仮数ビットの数を指し示す。項（１＜＜（Ｐ＋２））は、中間バイアスを加算する。項ｄｉｔｈｅｒ（−１｜０）は、ＩＤＣＴモジュール３４が、擬似ランダムベースで−１または０を選択することを指し示す。
【００９７】
係数バイアシングモジュール１４４は、スケール変更された係数の行列の中のＡＣ係数のおのおのに対して中間バイアス値と補足バイアス値とを加算することもできる。行列のＡＣ係数は、すべてＤＣ係数以外の行列の中の係数である。ＡＣ係数のおのおのに対して中間バイアス値とスケール変更されたバイアス値とを加算することは、さらに丸め誤差を減少させることができる。
【００９８】
係数バイアシングモジュール１４４が、バイアスされた係数の行列を生成した後に、逆ベクトル変換モジュール１４６は、バイアスされた係数の行列に対して一次元変換を繰り返し適用するために固定小数点算術演算を使用することにより、変換された係数の行列を生成する。例えば、逆ベクトル変換モジュール１４６は、バイアスされた係数の行列の中の係数の各行ベクトルに対して一次元変換を適用するために固定小数点算術演算を使用することにより、中間値の行列を生成することができる。次に、逆ベクトル変換モジュール１４６は、中間値の行列の中の各列ベクトルに対して一次元変換を適用するために固定小数点算術演算を使用することにより、変換された係数の行列を計算することができる。例示の一次元変換が、以下で図１０および１１に示される。
【００９９】
逆ベクトル変換モジュール１４６が、変換された係数の行列を生成した後に、右シフトモジュール１４８は、変換の適用中およびスケール変更中に加えられるビットの数に等しい位置の数だけ、変換された係数の行列の中の係数のおのおのを右シフトすることにより、調整された係数の行列を生成することができる。例えば、変換を適用することが追加の３ビットをもたらし、係数をスケール変更することが追加の３ビットを加える場合、右シフトモジュール１４８は、係数のおのおのを６つ（３＋３）の位置だけ右シフトすることができる。
【０１００】
右シフトモジュール１４８は、係数のおのおのを２ｂによって除算する代わりとしてこの右シフトを実行することができ、ここで、ｂは、逆ベクトル変換モジュール１４６によって加えられる追加ビットの数と、スケール変更中にスケーリングモジュール１４２によって係数の仮数部分に加えられるビットの数とを加えたものに等しい。ソース画像データと結果画像データとの間の差は、ｘｎ／２ｂとｘｎ＞＞ｂとの間の差に起因して生ずる可能性があり、ここでｘｎは、位置ｎにおける行列の中の係数である。これらの差のうちのいくつかは、固定小数点算術演算の限られた精度における事実のせいである丸め誤差に起因して生ずる可能性があり、（ｘｎ＞＞ｂ）は、ｘｎのすべての値について（ｘｎ／２ｂ）に等しいとは限らない。例えば、符号化モジュール８は、１６ビットの固定小数点数を使用することができ、ｘｎ＝６３（２進数で0000 0000 0011 1111）そしてｂ＝６である。この例においては、0000 0000 0011 1111を６つの位置だけ右にシフトすることは、0000 0000 0000 0000の２進値をもたらす。それ故に、６３＞＞６＝０である。一方では、６３／２６＝３１／６４＝０．９８４３７５である。０と０．９８４との間の差は、ソース画像データと結果画像データとの間の目に見える差をもたらす可能性がある。
【０１０１】
ＤＣ係数に対してバイアス値を加算することは、丸め誤差に起因した差を低減させる。例えば、係数バイアシングモジュール１４４は、ｘｎに対して中間バイアス値を加算することができる。中間バイアス値ｃは、２ｂ／２＝２（ｂ−１）に等しくすることができる。例えば、ｂ＝６である場合、そのときにはｃ＝２６／２＝６４／２＝３２である。この例においては、ｘｎ＝６３である場合、そのときには６３＋３２＝９５（0b0000 0000 0101 1111）である。６つの位置だけ右シフトされた９５＝１（２進数で0b0000 0000 0000 0001）である。中間バイアス値を加算した後に生成される値１は、中間バイアス値を加算せずに生成される値０よりも０．９８４３７５という正しい値に対してより近い。
【０１０２】
中間バイアス値ｃを加算することに加えて、係数バイアシングモジュール１４４は、補足バイアス値をＤＣ係数に対して加算することもできる。例えば、係数バイアシングモジュール１４４は、符号適応バイアス値ｄ（ｘｎ）を加算することができる。ｘｎが負であり、そしてそうでなくて０に等しくなり得るときに、符号適応バイアス値ｄ（ｘｎ）は、−１に等しい可能性がある。符号適応バイアス値ｄ（ｘｎ）を加算することは、符号適応バイアス値ｄ（ｘｎ）のない値よりもよりよい近似値である値をもたらす可能性がある。例えば、符号適応バイアス値ｄ（ｘｎ）なしでは、関数（ｘｎ＋ｃ）＞＞ｂは、０の周りで対称ではない。例えば、ｘｎ＝３２、ｂ＝６、そしてｃ＝３２である場合、そのときには（ｘｎ＋ｃ）＞＞ｂ＝１である。しかしながら、ｘｎ＝−３２、ｂ＝６、そしてｃ＝３２である場合、そのときには（ｘｎ＋ｃ）＞＞ｂ＝０である。ゼロの周りの対称性のこの欠如は、逐次的な予測ビデオフレームを計算するときに徐々により大きな誤差をもたらす可能性がある。さらに、ｘｎ＞＞ｂとｘｎ／２ｂとの間の差は、ｘｎがゼロよりも小さいときよりもｘｎがゼロよりも大きいときに、より大きくなる。これはまた、誤差を生成する可能性がある。
【０１０３】
符号適応バイアス値ｄ（ｘｎ）は、これらの問題を正すことができる。例えば、ｘｎ＝３２、ｂ＝６、ｃ＝３２であることを仮定すると、そのときにはｄ（ｘｎ）＝０である。それ故に、（ｘｎ＋ｃ＋ｄ（ｘｎ））＞＞ｂ＝１である。次に、ｘｎ＝−３２、ｂ＝６、ｃ＝３２であることを仮定すると、そのときにはｄ（ｘｎ）＝−１である。それ故に、（ｘｎ＋ｃ＋ｄ（ｘｎ））＞＞ｂ＝−１である。この例は、関数（ｘｎ＋ｃ＋ｄ（ｘｎ））＞＞ｂが、今や０の周りで対称であり、（ｘｎ）がゼロよりも小さいときよりもｘｎがゼロよりも大きいときにより大きな差を生成することはないことを示している。
【０１０４】
代替インプリメンテーションにおいては、係数バイアシングモジュール１４４は、符号適応バイアス値ｄを加算することの代わりに、ディザリングバイアス値ｅを加算することができる。係数バイアシングモジュール１４４が、ＤＣ係数に対してディザリングバイアス値ｅを加算するときに、係数バイアシングモジュール１４４は、擬似ランダムベースでｅの値となるように値０または値−１のいずれかを選択することができる。ディザリングバイアス値ｅの値を選択するために、係数バイアシングモジュール１４４は、次の命令を含むことができる。
【数１２】
0005661836.tif 000015
【０１０５】
多数のビデオ符号化規格は、ピクチャのグループ(group of pictures)（「ＧＯＰ」）として知られているものを使用している。ＧＯＰは、ＧＯＰ内においてｉ−フレームおよび／または他の予測フレームもしくは双予測フレームを参照するｉ−フレームと、１組の予測フレームおよび／または双予測フレームとを備える。例えば、メディアファイルは、１組の係数行列を使用して符号化されるｉ−フレームを含むことができる。ビデオシーケンスを生成するために、復号化モジュール１２は、このｉ−フレームに基づいて予測フレームを生成することができる。ｉ−フレームを復号することにより引き起こされる誤差は、ｉ−フレームに基づいた予測フレームに反映される。さらに、予測フレームを復号することにより引き起こされる誤差は、次の予測フレームに組み込まれる。フレームを復号することにより引き起こされる誤差がゼロの周りで対称的でない、あるいはより大きな正または負の大きさを有する傾向がある場合、これらの誤差は、逐次的な予測フレームにおけるピクセル成分値の値を急速に増大させ、または低減させる可能性がある。例えば、誤差がより大きな正の誤差を有する傾向がある場合、これらの誤差は、逐次的な予測フレームにおいて累算する可能性があり、正しいピクセル成分値よりも高いピクセル成分値をもたらす。結果として、ＧＯＰ内の逐次的な予測フレームにおけるピクセルが、不適切にカラーまたは輝度を変化させる可能性がある。これは、ドリフト誤差として知られている。あまりにも厳しすぎるドリフト誤差を回避するために、限られた数のフレームだけが、ｉ−フレームから生成されることができる。丸めに起因して、より大きな精度を有する数を使用して変換を実行するときよりも限られた数の仮数ビット（例えば、３つの仮数ビット）を有する固定小数点数を使用して変換を実行するときに、誤差は、大きさがより大きくなる可能性がある。それ故に、ドリフト誤差は、限られた数の仮数ビットを有する固定小数点数を使用して変換を実行するときに特に問題になる可能性がある。
【０１０６】
擬似ランダムベースでディザリングバイアス値ｅの値を選択することは、各予測フレームが、より大きな正の大きさを有する誤差、あるいはより大きな負の大きさを有する誤差を有する等しく可能性のある機会を有することを意味する。したがって、ピクチャのグループの内部で、正の誤差および負の誤差は、大きさが等しくなる傾向があり、そしてゼロの周りで対称となる傾向がある。正の誤差および負の誤差が、平均して、ゼロの周りで対称であり、正の誤差および負の誤差が、平均して、大きさが等しいので、誤差は、後続の予測フレームの中で伝搬され、誇張される可能性が高くない。これは、正の大きさを有する誤差が、別のフレームにおける負の大きさを有する誤差を打ち消し合う可能性が高いからであり、逆もまた同様である。それ故に、ディザリングバイアス値が、誤差をゼロの周りで対称にする傾向があり、正の誤差および負の誤差を大きさが等しいものにする傾向があるので、ＧＯＰ全体を通してより小さなドリフト誤差が存在する可能性が高い。この理由のために、より多くのピクチャが、ＧＯＰに含まれる可能性がある。より多くのピクチャが、ＧＯＰに含まれる可能性があるので、全体的なビデオシーケンスは、よりよい圧縮レートを有する可能性がある。同様に、符号適応バイアス値を加算することは、大きさが等しくなる傾向があり、ゼロの周りで対称となる傾向がある、各フレーム内の誤差をもたらす。結果として、これらの誤差は、後続の予測フレームの中で伝搬され、そして誇張されることがない。
【０１０７】
右シフトモジュール１４８が、係数を右シフトした後に、クリッピングモジュール(clipping module)１５０は、ピクセル成分値の最大許容可能範囲まで係数を制限するために、係数を「クリップする」ことができる。例えば、典型的なＪＰＥＧ画像において、カラー成分値は、−２５６から２５５へと及ぶことができる。係数の行列が、２７０に等しい係数を含むようになっていた場合、クリッピングモジュール１５０は、係数を２５５まで減少させることにより、この係数を最大許容可能範囲まで制限することになる。クリッピングモジュール１５０が、係数をクリップすることを完了した後に、これらの係数は、ピクセル成分値を表すことができる。クリッピングモジュール１５０が、行列の中の係数をクリップすることを完了したときに、クリッピングモジュール１５０は、クリップされた係数の行列を出力モジュール１５２に対して供給することができる。
【０１０８】
出力モジュール１５２が、係数（この係数は今やピクセル成分値である）の行列を受け取るときに、出力モジュール１５２は、ピクセル成分値の行列をピクセル再構成モジュール５０に対して出力することができる。
【０１０９】
図７は、逆変換モジュール３４の例示のオペレーションを示すフローチャートである。最初に、入力モジュール１４０は、逆量子化された係数の行列を受け取る（１７０）。入力モジュール１４０が、逆量子化された係数の行列を受け取るときに、スケーリングモジュール１４２は、逆量子化された係数の行列の中の各値をスケール変更することができ、それによりスケール変更された係数の行列を生成する（１７２）。例えば、スケーリングモジュール１４２は、スケールファクタの行列の中の同等に位置づけられた値により、逆量子化された係数の行列の中の各係数を乗算するオペレーションを実行することができる。
【０１１０】
スケーリングモジュール１４２が、スケール変更された係数の行列を生成した後に、係数バイアシングモジュール１４４は、スケール変更された係数の行列のＤＣ係数に対して中間バイアス値と補足バイアス値とを加算することができ、それによりバイアスされた係数の行列を生成する（１７４）。係数バイアシングモジュール１４４が、行列のＤＣ係数に対してバイアス値を加算した後に、逆ベクトル変換モジュール１４６は、行カウンタが最大行カウンタよりも小さいかどうかを決定することができる（１７６）。最初に、行カウンタは、ゼロに設定されることができる。最大行カウンタは、係数の行列の中の行の数に等しい静的な値とすることができる。例えば、係数の行列が８つの行を含む場合、最大行カウンタは、８に等しい。
【０１１１】
行カウンタが、最大行カウンタよりも小さい（１７６の「ＹＥＳ」の）場合、逆ベクトル変換モジュール１４６は、行カウンタにより指し示される係数の行列の行ベクトルに対して一次元変換を適用するために固定小数点算術演算を使用することができる（１７８）。逆ベクトル変換モジュール１４６が、係数の行列の行ベクトルに対して変換を適用するときに、逆ベクトル変換モジュール１４６は、中間係数のベクトルで係数の行ベクトルの中の元の係数を置換することができる。逆ベクトル変換モジュール１４６が、係数の行列の行ベクトルに対して変換を適用した後に、逆ベクトル変換モジュール１４６は、行カウンタを増分する(increment)ことができる（１８０）。逆ベクトル変換モジュール１４６は、次いでループバックし、この場合にも行カウンタが最大行カウンタよりも小さいかどうかを決定することができる（１７６）。
【０１１２】
行カウンタが、最大行カウンタよりも小さくない（すなわち、それより大きいか、あるいはそれに等しい）（１７６の「ＮＯ」の）場合、逆ベクトル変換モジュール１４６は、列カウンタが、最大列カウンタよりも小さいかどうかを決定することができる（１８２）。最初に、列カウンタは、ゼロに設定されることができる。最大列カウンタは、係数の行列の中の列の数に等しい静的な値とすることができる。例えば、係数の行列が、８つの列を含む場合、最大列カウンタは、８に等しい。
【０１１３】
列カウンタが、最大列カウンタよりも小さい（１８２の「ＹＥＳ」の）場合、逆ベクトル変換モジュール１４６は、列カウンタにより指し示される中間係数の行列の列ベクトルに対して一次元変換を適用することができる（１８４）。逆変換モジュール３４が、中間係数の列ベクトルに対して変換を適用するときに、逆変換モジュール３４は、変換された係数のベクトルで列ベクトルの中の中間係数を置換する。
【０１１４】
逆ベクトル変換モジュール１４６が、係数の行列の列ベクトルに対して変換を適用した後に、逆ベクトル変換モジュール１４６は、列カウンタを増分することができる（１８６）。逆ベクトル変換モジュール１４６は、次いでループバックし、この場合にも列カウンタが最大列カウンタよりも小さいかどうかを決定することができる（１８２）。
【０１１５】
列カウンタが、最大列カウンタよりも小さくない（すなわち、それよりも大きいか、あるいはそれに等しい）（１８２の「ＮＯ」の）場合、右シフトモジュール１４８は、行列の中の変換された係数のおのおのを右シフトすることができる（１８８）。右シフトモジュール１４８が、係数を右シフトするときに、右シフトモジュール１４８は、位置のある種の数だけ係数を右にシフトすることができる。行列の中の第２の中間係数のおのおのを右シフトした結果は、調整された値の行列である。右シフトモジュール１４８が、変換された係数のおのおのを右シフトした後に、クリッピングモジュール１５０は、調整された係数が、ピクセル成分値についての適切な範囲内にあることを保証するために調整された係数をクリップすることができる（１９０）。例えば、クリッピングモジュール１５０は、調整された係数が、−２５６から２５５の範囲内にあることを保証するために調整された係数をクリップすることができる。クリッピングモジュール１５０が、調整された係数をクリップすることを完了するときに、出力モジュール１５２は、ピクセル成分値の、結果として生ずる行列を出力することができる（１９２）。
【０１１６】
図８は、順方向変換モジュール２６の例示の詳細を示すブロック図である。図８の例に示されるように、順方向変換モジュール２６は、成分抽出モジュール２４からピクセル成分値の行列を受け取る入力モジュール２１０を備える。入力モジュール２１０が、ピクセル成分値の行列を受け取るときに、入力モジュール２１０は、ピクセル成分値の行列を左シフトモジュール２１２へと供給することができる。左シフトモジュール２１２は、順方向ベクトル変換モジュール２１４が、順方向変換を実行しながら使用する値の中で使用される仮数ビットの数から、順方向変換を実行することにより移動される仮数ビットの数を差し引いたものだけ、ピクセル成分値の行列の中のピクセル成分値のすべてを左にシフトすることができる。例えば、１０個の仮数ビットが、順方向変換を実行しながら値の中で使用され、そして３つの仮数ビットが、順方向離散コサイン変換を実行することにより除去される場合、左シフトモジュール２１２は、７つの位置だけピクセル成分値を左にシフトすることができる。別の例においては、３つの仮数ビットが、順方向変換を実行しながら値の中で使用され、そして３つの仮数ビットが順方向変換を実行することにより除去される場合、左シフトモジュール２１２は、ゼロ個の位置だけピクセル成分値を左にシフトすることができる。
【０１１７】
左シフトモジュール２１２が、ピクセル成分値をシフトした後に、順方向ベクトル変換モジュール２１４は、中間値の行列を生成するために、ピクセル成分値の行列の中の各列ベクトルに対して順方向変換を適用することができる。次に、順方向ベクトル変換モジュール２１４は、変換された係数の行列を生成するために、中間値の行列の中の各行ベクトルに対して順方向変換を適用することができる。順方向ベクトル変換モジュール２１４が、ベクトルに対して順方向変換を適用するときに、順方向ベクトル変換モジュール２１４は、以下で図１２に説明される順方向変換を適用することができる。以下で図１２に説明される変換は、図１１に説明される変換の逆であることに注意すべきである。
【０１１８】
順方向ベクトル変換モジュール２１４が、変換された係数の行列を生成した後に、スケーリングモジュール２１６は、変換された係数の行列の中の変換された各係数に対してスケーリングファクタを適用することができる。スケーリングモジュール２１６は、逆変換モジュール４８の中のスケーリングモジュール１４２によって使用されるスケーリングファクタの逆数を適用することができる。例えば、１つまたは複数の値が、変換の効率を改善するために変換から除外された場合、これらの値は、スケールファクタの行列の基底(basis)になり得る。変換された係数の行列の中の係数は、これらの値により係数を乗算することによって訂正されることができる。
【０１１９】
丸め誤差を低減させるために、順方向変換モジュール２６の中の係数バイアシングモジュール２１８は、スケール変更された係数の行列の中の係数に対して中間バイアス値と補足バイアス値とを加算することができる。変換された係数の行列の中の係数に対して符号適応バイアス値またはディザリングバイアス値を加算することは、逆変換モジュール４８の中の係数バイアシングモジュール１４４が、符号適応バイアス値またはディザリングバイアス値を加算するときと類似した効果を有する。すなわち、係数に対するバイアス値の加算は、正の誤差および負の誤差が、平均して、大きさが等しくなるように、そして平均してゼロの周りで対称になるようにする。これらの誤差は、精度に無関係に、スケール変更された係数の行列の中の係数の限られた精度の固定小数点表現を第１の大きさだけ右シフトすることからもたらされる値と、スケール変更された係数の行列の中の係数を２の第１の大きさのべき乗により除算することからもたらされる値と、の間の差を表す。
【０１２０】
係数バイアシングモジュール２１８が、バイアスされた係数の行列を生成した後に、順方向変換モジュール２６の中の右シフトモジュール２２０は、バイアスされた係数の行列の中の係数を右シフトすることにより出力係数の行列を生成することができる。右シフトモジュール２２０は、バイアスされた係数の行列の係数における仮数ビットの数に、変換を実行することにより係数に加算されるビットの数を加えたものだけ、バイアスされた係数の行列の中の各係数を右シフトすることができる。
【０１２１】
次の式は、係数バイアシングモジュール２１８が、符号適応バイアス値を加算するときに変換された係数の行列上でのスケーリングモジュール２１６と、係数バイアシングモジュール２１８と、右シフトモジュール２２０との影響を要約したものである。
【０１２２】
Ｆ［ν］［ｕ］＝（Ｆ’［ν］［ｕ］＊Ｓ［ν］［ｕ］＋（１＜＜（Ｐ＋Ｑ）−（（Ｆ’［ν］［ｕ］＞＝０）？０：１））＞＞（Ｐ＋Ｑ）
ここで、ν＝０..７、ｕ＝０..７であり、ここで、Ｓ［ν］［ｕ］は、スケールファクタの行列におけるエントリであり、Ｆは、スケール変更された係数の行列であり、Ｆ’は、変換された係数の行列であり、Ｐは、変換された係数の行列の中の係数における仮数ビットの数を指し示し、そしてＱは、変換を適用することにより、変換された係数の行列の中の係数に対して加算されるビットの数を指し示す。
【０１２３】
次の式は、係数バイアシングモジュール２１８が、ディザリングバイアス値を加算するときに、変換された係数の行列上でのスケーリングモジュール２１６と、係数バイアシングモジュール２１８と、右シフトモジュール２２０との影響を要約したものである。
【０１２４】
Ｆ［ν］［ｕ］＝（Ｆ’［ν］［ｕ］＊Ｓ［ν］［ｕ］＋（１＜＜１９）−（ｄｉｔｈｅｒ（０：１））＞＞２０
ここで、ν＝０..７、ｕ＝０..７であり、ここで、Ｓ［ν］［ｕ］は、スケールファクタの行列におけるエントリであり、Ｆは、スケール変更された係数の行列であり、Ｆ’は、変換された係数の行列である。
【０１２５】
スケーリングモジュール２１６が、スケール変更された係数の行列を生成した後に、出力モジュール２２２は、係数の行列を量子化モジュール２８に対して出力することができる。
【０１２６】
図９は、順方向変換モジュール２６の例示のオペレーションを示すフローチャートである。最初に入力モジュール２１０は、ピクセル成分値の行列を受け取る（２３０）。入力モジュール１４０が、ピクセル成分値の行列を受け取るときに、左シフトモジュール２１２は、ピクセル成分値の行列の中の各値を左シフトすることにより、調整された係数の行列を生成することができる（２３２）。例えば、左シフトモジュール２１２は、係数のすべてを１０個の位置だけ左にシフトすることができる。この例においては、順方向ベクトル変換モジュール２１４が、数が小数部分に１０ビットを使用して符号化される固定小数点算術演算を使用することができるので、左シフトモジュール２１２は、係数のすべてを１０個の位置だけ右にシフトすることができる。したがって、係数を１０個の位置だけ左にシフトすることにより、左シフトモジュール２１２は、１０個の仮数ビットを有する固定小数点数へとピクセル成分値を効果的に変換する。
【０１２７】
調整された値の行列の中の各ピクセル成分値を左シフトした後に、順方向ベクトル変換モジュール２１４は、列カウンタが、最大列カウンタよりも小さいかどうかを決定することができる（２３４）。最初に、列カウンタは、ゼロに設定されることができる。最大列カウンタは、調整された係数の行列の中の列の数に等しい静的な値とすることができる。例えば、調整された係数の行列が、８つの列を含む場合、最大列カウンタは、８に等しい。
【０１２８】
列カウンタが、最大列カウンタよりも小さい（２３４の「ＹＥＳ」の）場合、順方向ベクトル変換モジュール２１４は、列カウンタによって指し示される列ベクトルに対する一次元順方向変換を計算することができる（２３６）。順方向ベクトル変換モジュール２１４が、調整された係数の行列の列ベクトルに対する順方向変換を計算するときに、順方向ベクトル変換モジュール２１４は、列ベクトルの中の元の調整された係数を中間係数で置換する。順方向ベクトル変換モジュール２１４が、調整された係数の行列の列ベクトルに対する順方向変換を計算した後に、順方向ベクトル変換モジュール２１４は、列カウンタを増分することができる（２３８）。順方向ベクトル変換モジュール２１４は、次いでループバックし、そしてこの場合にも列カウンタが、最大列カウンタよりも小さいかどうかを決定することができる（２３４）。
【０１２９】
列カウンタが、最大列カウンタよりも小さくない（すなわち、それよりも大きいか、あるいはそれに等しい）（２３４の「ＮＯ」の）場合、順方向ベクトル変換モジュール２１４は、行カウンタが、最大行カウンタよりも小さいかどうかを決定することができる（２４０）。最初に、行カウンタは、ゼロに設定されることができる。最大行カウンタは、係数の行列の中の行ベクトルの数に等しい静的な値とすることができる。例えば、係数の行列が、８つの行を含む場合、最大行カウンタは、８に等しい。
【０１３０】
行カウンタが、最大行カウンタよりも小さい（２４０の「ＹＥＳ」の）場合、順方向ベクトル変換モジュール２１４は、行カウンタによって指し示される行ベクトルに対する一次元離散コサイン変換を計算することができる（２４２）。順方向ベクトル変換モジュール２１４が、行列の行ベクトルに対する順方向変換を既に計算しているので、係数の行列は、今や中間係数を含んでいる。順方向ベクトル変換モジュール２１４が、中間係数の行ベクトルに対する順方向変換を計算するときに、順方向ベクトル変換モジュール２１４は、列ベクトルの中の中間係数を変換された係数で置換する。
【０１３１】
順方向ベクトル変換モジュール２１４が、係数の行列の行ベクトルに対する離散コサイン変換を計算した後に、順方向ベクトル変換モジュール２１４は、行カウンタを増分することができる（２４４）。順方向ベクトル変換モジュール２１４は、次いでループバックし、この場合にも行カウンタが最大行カウンタよりも小さいかどうかを決定することができる（２４０）。
【０１３２】
行カウンタが、最大行カウンタよりも小さくない（すなわち、それよりも大きいか、あるいはそれに等しい）（２４０の「ＮＯ」の）場合、スケーリングモジュール２１６は、変換された係数の行列の中の変換された各係数をスケール変更することができる（２４６）。スケーリングモジュール２１６が、スケール変更された係数の行列を生成した後に、係数バイアシングモジュール２１８は、スケール変更された係数の行列の中の係数に対して１つまたは複数のバイアス値を加算することにより、バイアスされた係数の行列を生成することができる（２４８）。例えば、係数バイアシングモジュール２１８は、スケール変更された係数の行列の中の各係数に対して中間バイアス値と、符号適応バイアス値またはディザリング補足バイアス値とを加算することができる。次に右シフトモジュール２２０は、バイアスされた係数の行列の中の各係数を右シフトすることができる（２５０）。右シフトモジュール２２０は、係数のおのおのにおける仮数ビットの数と、変換を適用することにより係数に対して加算されるビットの数とを加えたものだけ、各係数を右シフトすることにより、調整された係数の行列を生成することができる。右シフトモジュール２２０が、調整された係数の行列を生成した後に、出力モジュール２２２は、調整された係数の、結果として生ずる行列を出力することができる（２５２）。
【０１３３】
図１０は、第１の例示の一次元変換２６０を示す図である。図１０の例に示されるように、変換２６０は、入力として値Ｘ０からＸ７を取ることができる。値Ｘ０からＸ７は、入力係数行列の１つの行または列の係数を表すことができる。変換２６０は、値ｘ０からｘ７を出力することができる。値Ｘ０からＸ７が、入力係数行列の中の係数の行の中の値であるときに、値ｘ０からｘ７は、中間値の行を表すことができる。値Ｘ０からＸ７が、係数の列の中の値であるときに、値ｘ０からｘ７は、シフトされたピクセル成分値の列を表すことができる。図１０の例に示されるように、「＋」シンボルを取り囲む円は、加算演算を指し示し、「Ｘ」シンボルを取り囲む円は、乗算演算を指し示す。文字／数字の組合せは、値が乗算される値を指し示す。例えば、線ｘ２上で、「Ａ１」シンボルは、「Ｘ」シンボルを取り囲む円上に配置される。これは、線Ｘ２上の値が、値Ａ１により乗算されることを指し示す。
【０１３４】
変換２６０は、１組の「バタフライ構造演算」を含んでいる。「バタフライ構造演算」は、第１の出力値ｕが、第１の中間値を作成するために第１のファクタＣにより第１の入力値ｘを乗算することと、第２の中間値を作成するために第２のファクタＳにより第２の入力値ｙを乗算することと、次いで第１の中間値と第２の中間値とを加算することとにより計算されるソフトウェア構造またはハードウェア構造とすることができる。このより複雑な「バタフライ構造演算」においては、第２の出力値νは、第３の中間値を作成するために第１のファクタにより第２の入力値ｙを乗算することと、第４の中間値を作成するために第２のファクタＳにより第１の入力値ｘを乗算することと、次いで第４の中間値から第３の中間値を差し引くこととにより計算されることができる。次の式は、「バタフライ構造演算」の数学的結果を要約している。
【０１３５】
ｕ＝ｘ＊Ｃ＋ｙ＊Ｓ、
ν＝ｘ＊Ｓ−ｙ＊Ｃ。
【０１３６】
バタフライ構造演算２６４は、変換２６０において使用される１つのバタフライ構造演算を示す。バタフライ構造演算は、バタフライ構造演算が、第１の入力値から第２の入力値へ、そして第２の入力値から第１の入力値への値のクロスオーバー(crossover)のために、２つの「翼(wing)」を有するように見えることに起因してこの名前を有する。
【０１３７】
変換２６０において使用されるように、第１のファクタＣと第２のファクタＳとは、無理数とすることができる。例えば、Ｃは、
【数１３】
0005661836.tif 000016
【０１３８】
に等しくすることができ、Ｓは、
【数１４】
0005661836.tif 000017
【０１３９】
に等しくすることができる。逆ベクトル変換モジュール１４６は、１６−ビットのレジスタにおける固定小数点算術演算を使用することができるので、そしてＣおよびＳは、多くの場合に無理数であるので、ＣおよびＳにより入力値ｘおよびｙを乗算することは、計算上、不都合な可能性がある。この理由から、逆ベクトル変換モジュール１４６は、ＣおよびＳに対して有理数近似値を使用することができる。これらの整数近似値は、形式(form)（Ｃ’／２ｊ）および（Ｓ’／２ｋ）のものとすることができ、ここでＣ’およびＳ’は、ＣおよびＳの「整数化された(integerized)」バージョンであり、ｊおよびｋは、整数である。例えば、
【数１５】
0005661836.tif 000018
【０１４０】
としよう。この例においては、逆ベクトル変換モジュール１４６は、
【数１６】
0005661836.tif 000019
【０１４１】
であるので、
【数１７】
0005661836.tif 000020
【０１４２】
を近似するために、整数値Ｃ’＝２２１７と、ｊ＝１２とを使用することができる。この例においては、０．５４１１９６１が、０．５４１２５９７６６にほぼ等しいことは明らかである。したがって、形式(form)、
ｕ＝ｘ＊Ｃ＋ｙ＊Ｓ、
ν＝ｘ＊Ｓ−ｙ＊Ｃ、
の計算は、形式、
ｕ’＝ｘ＊（Ｃ’／２ｊ）＋ｙ＊（Ｓ’／２ｋ）、
ν’＝ｘ＊（Ｓ’／２ｋ）−ｙ＊（Ｃ’／２ｊ）、
の計算によって置換されることができる。これらの計算をさらに簡略化するために、２ｊおよび２ｋによる除算演算は、次のように「＞＞」シンボルを使用して示されるｊ個およびｋ個の位置だけのビットごとの右シフト演算によって置換されることができる。
【０１４３】
ｕ’’＝（（ｘ＊Ｃ’）＞＞ｊ）＋（（ｙ＊Ｓ’）＞＞ｋ）、
ν’’＝（（ｘ＊Ｓ’）＞＞ｋ）−（（ｙ＊Ｃ’）＞＞ｊ）。
【０１４４】
しかしながら、ＤＣ係数に対してバイアス値を加算することに関して上記で論じられるように、ビットごとの右シフト演算により除算演算を置換することは、ｕ’とｕ’’との間の、そしてν’とν’’との間の、差をもたらす可能性がある。これらの計算における項に対して中間バイアス値を加算することは、ｕ’とｕ’’との間の、そしてν’とν’’との間の、差を低減させることができる。中間バイアス値が、加算されるときに、計算は、次の形式を取ることができる。
【０１４５】
ｕ’’’＝（（ｘ＊Ｃ’＋（１＜＜（ｊ−１））＞＞ｊ）＋（（ｙ＊Ｓ’＋（１＜＜（ｋ−１））＞＞ｋ）、
ν’’’＝（（ｘ＊Ｓ’＋（１＜＜（ｋ−１））＞＞ｋ）−（（ｙ＊Ｃ’＋（１＜＜（ｊ−１））＞＞ｊ）。
【０１４６】
中間バイアス値の加算は、ｕとｕ’’’との間の、そしてνとν’’’との間の差よりも小さいｕとｕ’’’との間の、そしてνとν’’’との間、の差をもたらす可能性があるが、中間バイアス値の加算は、バタフライ構造演算に対して計算的な複雑さを追加する可能性がある。さらに、中間バイアス値の加算は、１６−ビットのレジスタにおいて固定小数点算術演算を使用するときにｕ’’’とν’’’との計算を非現実的にする可能性がある。中間バイアス値の加算は、中間バイアス値の加算が、右シフトの前に行われるので、ｕ’’’とν’’’との計算を非現実的にする可能性があり、そしてその結果として、レジスタオーバーフロー(register overflow)をもたらす可能性がある。
【０１４７】
ν＝ｘ＊Ｓ−ｙ＊Ｃと、ν’’＝（（ｘ＊Ｓ’）＞＞ｋ）−（（ｙ＊Ｃ’）＞＞ｊ）との間の平均的な差は、ほぼゼロである。換言すれば、すべての値ｘおよびｙについてのすべての値（ν’’−ν）の平均は、ほぼゼロに等しい。さらに、ν＝ｘ＊Ｓ−ｙ＊Ｃとν’’’＝（（ｘ＊Ｓ’＋（１＜＜（ｋ−１））＞＞ｋ）−（（ｙ＊Ｃ’＋（１＜＜（ｊ−１））＞＞ｊ）との間の平均的な差もまた、ほぼゼロである。これは、ν’’とν’’’とが、常にほぼ等しいからである。ν’’とν’’’とは、ｊがｋに等しいときに、中間バイアス値が、引き算、
【数１８】
0005661836.tif 000021
【０１４８】
によって打ち消されるので、常にほぼ同等なものであり、ここで、ｍは、中間バイアス値を表す。この例が示すように、ｊがｋに等しいときに（ｍ／２ｊ）から（ｍ／２ｋ）を差し引くことは、中間バイアス値ｍを打ち消し合う。νとν’’との間の平均的な差が、ほぼゼロであるので、逆ベクトル変換モジュール１４６は、ν’’’の代わりにν’’を計算することにより生成される値に正または負のバイアスを体系的に導入することはなく、そしてν’’とν’’’とが、ほぼ等しいので、逆ベクトル変換モジュール１４６は、ν’’’の代わりにν’’を使用することができる。
【０１４９】
ｕ＝ｘ＊Ｃ＋ｙ＊Ｓと、ｕ’’’＝（（ｘ＊Ｃ’＋（１＜＜（ｊ−１））＞＞ｊ）＋（（ｙ＊Ｓ’＋（１＜＜（ｋ−１））＞＞ｋ）との間の平均的な差もまた、ほぼゼロに等しい。同時に、ｕ＝ｘ＊Ｃ＋ｙ＊Ｓと、ｕ’’＝（（ｘ＊Ｃ’）＞＞ｊ）＋（（ｙ＊Ｓ’）＞＞ｋ）と、の間の差は、ほぼゼロに等しくはない。もっと正確に言えば(rather)、ｕとｕ’’との間の平均的な差は、ほぼ−１／２である。したがって、ｕ’’とｕ’’’とは、ほぼ等しくはない。次式のように、ｊがｋに等しいときでさえ、中間バイアス値が、打ち消し合われないので、ｕ’’とｕ’’’とは、ほぼ等しくはない。
【数１９】
0005661836.tif 000022
【０１５０】
ｕ’’は、ｕ’’’にほぼ等しくはないので、ｕ’’は、ｕ’’’の代わりに使用されることができない。ｕ’’’の代わりにｕ’’を使用しようと試みることは、ｕからのかなりの差をもたらす可能性がある。
【０１５１】
あらゆる計算に対して中間バイアス値を加算することに関連する複雑さとオーバーフローの問題を回避するために、次の式が、ｕ’’’およびｕ’’の代わりに使用されることができる。
【０１５２】
ｕ’’’’＝（（ｘ＊Ｃ’）＞＞ｊ）−（（ｙ＊-Ｓ’）＞＞ｋ）
ｕ’’’’において、Ｓ’の負のバージョンが使用され、そして（（ｙ＊-Ｓ’）＞＞ｋ）が、差し引かれる点以外は、ｕ’’’’は、ｕ’’に等しい。ｕ’’’と同様に、ｕ’’’’は、中間バイアス値を加算しない。しかしながら、ｕ’’’とは異なって、ｕ’’’’とｕとの間の差は、０の周りに集中している。ｕ’’’’とｕとの間の差が、ゼロの周りに集中しているので、丸め誤差は、後続のバタフライ構造演算の適用を介して拡大されない。この理由のために、逆ベクトル変換モジュール１４６は、バタフライ構造演算においてｕを計算するためにｕ’’’’を使用することができる。この理由のために、ｊがｋに等しいときに、変換２６０を適用するために逆ベクトル変換モジュール１４６によって使用されるバタフライ構造演算は、次の形式を有することができる。
【０１５３】
ｕ’’’’＝（（ｘ＊Ｃ’）＞＞ｊ）−（（ｙ＊-Ｓ’）＞＞ｋ）、
ν’’’＝（（ｘ＊Ｓ’）＞＞ｋ）−（（ｙ＊Ｃ’）＞＞ｊ）。
【０１５４】
したがって、このタイプのバタフライ構造演算によって生成される結果と、無制限の精度の算術演算を使用して同等なバタフライ構造演算によって生成されることになる結果と、の間の差は、ゼロの周りに集中しており、１以下の正または負の大きさを有する。
【０１５５】
代わりに、ｊが、ｋに等しいときに、逆ベクトル変換モジュール１４６は、右シフトが、バタフライ構造演算、
【数２０】
0005661836.tif 000023
【０１５６】
の最後まで遅らせられているバタフライ構造演算を使用することもできる。バタフライ構造演算の最後まで右シフトを遅らせることは、バタフライ構造演算を実行するために必要とされるシフト演算の全体的な数を低減させることができ、そして精度を改善することができる。さらに、ほとんどの現代の１６−ビットの単一命令多重データ(single instruction multiple data)（「ＳＩＭＤ」）プロセッサと、デジタル信号プロセッサと、の上で使用可能な４−ウェイ乗加算命令(4-way multiply-accumulate instructions)は、効率的にｕ＊およびν＊を計算するために使用されることができる。
【０１５７】
乗算オペレーションは、加算、減算、およびビットごとのシフト演算に対して計算的に高くつく可能性がある。この理由のために、乗算演算と同じ効果を有する一連の加算、減算、およびビットごとのシフト演算を使用することは、より簡単とすることができる。例えば、Ｃ’＝２２１７であるものと仮定する。この例においては、ｒ＝ｘ＊Ｃ’は、次のステップ、
ｘ２＝（ｘ＜＜３）−ｘ、
ｘ３＝ｘ＋（ｘ２＜＜６）、
ｘ４＝ｘ３−ｘ２、
ｒ＝ｘ３＋（ｘ４＜＜２）、
で置換されることができる。この例において、ｘ２、ｘ３、およびｘ４は、中間値である。これを示すために、ｘ＝１である場合の例、
７＝（１＜＜３）−１、
４４９＝１＋（７＜＜６）、
４４２＝４４９−７、
２２１７＝４４９＋（４４２＜＜２）、
２２１７＝（１＊２２１７）＝（ｘ＊２２１７、ここでｘ＝１）、
を考察する。この例においては、１＊２２１７＝２２１７であり、そしてｘ＝１であるときにこのシーケンス演算によって生成される値は、２２１７である。
【０１５８】
次の表は、逆ベクトル変換モジュール１４６が、定数ファクタＡ１、Ａ２、Ｂ１、Ｂ２、Ｃ１、Ｃ２、Ｄ１、およびＤ２のために使用することができる整数値近似の一例の組を要約している。
【表３】
0005661836.tif 000024
【０１５９】
表１において、「整数値」の列の中の値は、２１２＝４０９６によって除算されるときの「元の値」の列の中の値を近似したものである。例えば、
【数２１】
0005661836.tif 000025
【０１６０】
である。同様に、
【数２２】
0005661836.tif 000026
【０１６１】
である。「積を計算するためのアルゴリズム」の列の中の式は、逆ベクトル変換モジュール１４６が、対応する整数値による乗算演算の代わりに使用することができる方法を要約したものである。
【０１６２】
図１１は、第２の例示のアルゴリズム２７０を示す図である。図１０におけるように、値Ｘ０、Ｘ１、Ｘ２、Ｘ３、Ｘ４、Ｘ５、Ｘ６、およびＸ７は、入力係数を表し、そして値ｘ０、ｘ１、ｘ２、ｘ３、ｘ４、ｘ５、ｘ６、およびｘ７は、出力値を表す。「＋」シンボルを取り囲む円の後の線に関連する値は、円を指す矢印に関連する値を加算することの結果である。「ｘ」シンボルを取り囲む円の後の線に関連する値は、円の次に配置される係数と、円を通過する線に関連する値とを乗算することの結果である。矢印の次のシンボル「−」は、矢印に関連する値の否定を表す。例えば、値「１０」が、「−」シンボルの前の矢印に関連づけられる場合、値「-１０」は、「−」シンボルの後の矢印に関連づけられる。さらに、否定された係数と減算とを使用して丸め誤差を低減させるように上記に説明される技法は、アルゴリズム１９０において使用されることができることに注意すべきである。
【０１６３】
変換２７０において、
【数２３】
0005661836.tif 000027
【０１６４】
の値は、有理分数(rational fraction)を使用して近似されることができる。例えば、α、β、γ、δ、ε、およびζの値は、以下の表２にリストアップされる整数近似を使用して近似されることができる。
【表４】
0005661836.tif 000028
【０１６５】
表２において、「整数近似」の列の中の値は、「元の値」の列の中の値の整数化されたバージョンを表す。例えば、
【数２４】
0005661836.tif 000029
【０１６６】
である。表２の「積を計算するためのアルゴリズム」の列の中の式は、逆ベクトル変換モジュール１４６が、「整数近似」の列の中の値による乗算演算の代わりに使用することができるアルゴリズムを表す。
【０１６７】
図１２は、順方向ベクトル変換モジュール２１４によって使用されることができる例示の変換２００を示す流れ図である。図１２において、値Ｘ０、Ｘ１、Ｘ２、Ｘ３、Ｘ４、Ｘ５、Ｘ６、およびＸ７は、出力係数を表し、そして値ｘ０、ｘ１、ｘ２、ｘ３、ｘ４、ｘ５、ｘ６、およびｘ７は、入力値を表す。さらに、否定された係数と、減算とを使用して丸め誤差を低減させるために、上記に説明される技法は、変換２７０において使用されることができることに注意すべきである。
【０１６８】
図１２の例において、
【数２５】
0005661836.tif 000030
【０１６９】
の値は、有理分数を使用して近似されることができる。例えば、α、β、γ、δ、ε、およびζの値は、表２にリストアップされる整数近似を使用して近似されることができる。
【０１７０】
ここにおいて説明される本技法は、ハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組合せの形でインプリメントされることができる。モジュールまたはコンポーネントとして説明される任意の機能は、集積化された論理デバイスにおいて一緒に、あるいは個別の、但し相互運用可能な論理デバイスとして別々にインプリメントされることができる。ソフトウェアの形でインプリメントされる場合、本技法は、実行されるときに、上記に説明される１つまたは複数の方法を実行する命令を備えるコンピュータ可読媒体により少なくとも部分的に実現されることができる。コンピュータ可読媒体は、コンピュータプログラムプロダクト(computer program product)の一部分を形成することができ、このコンピュータプログラムプロダクトは、パッケージング材料を含むことができる。コンピュータ可読媒体は、シンクロナスダイナミックランダムアクセスメモリ(synchronous dynamic random access memory)（ＳＤＲＡＭ）、読取り専用メモリ(read-only memory)（ＲＯＭ）、不揮発性ランダムアクセスメモリ(non-volatile random access memory)（ＮＶＲＡＭ）、電気的消去可能プログラマブル読取り専用メモリ(electrically erasable programmable read-only memory)（ＥＥＰＲＯＭ）、フラッシュメモリ(FLASH memory)、磁気または光学的データストレージ媒体などのランダムアクセスメモリ(random access memory)（ＲＡＭ）を備えることができる。本技法は、追加して、または代わりに、命令またはデータ構造の形態において符号を搬送し、あるいは通信し、そしてコンピュータによりアクセスされ、読み取られ、かつ／または実行されることができるコンピュータ可読通信媒体により、少なくとも部分的に実現されることもできる。
【０１７１】
その符号は、１つまたは複数のデジタル信号プロセッサ(digital signal processor)（ＤＳＰ）、汎用マイクロプロセッサ(general purpose microprocessor)、特定用途向け集積回路(application specific integrated circuit)（ＡＳＩＣ）、フィールドプログラマブル論理アレイ(field programmable logic array)（ＦＰＧＡ）、または他の同等な集積化された、または個別の論理回路など、１つまたは複数のプロセッサにより実行されることができる。したがって、ここにおいて使用されるような用語「プロセッサ」は、ここにおいて説明される技法のインプリメンテーションのために適した前述の構造または他の任意の構造のうちの任意のものを意味することができる。さらに、いくつかの態様においては、ここにおいて説明される機能は、符号化することと、復号することとのために構成され、あるいは組み合わされたビデオエンコーダデコーダ(video encoder-decoder)（ＣＯＤＥＣ）の中に組み込まれた専用のソフトウェアモジュールまたはハードウェアモジュールの内部に提供されることができる。
【０１７２】
本発明の様々な実施形態が、説明されてきている。これらおよび他の実施形態は、添付の特許請求の範囲の範囲内にある。
以下に本件出願当初の特許請求の範囲に記載された発明を付記する。
［Ｃ１］
変換された係数のベクトルを生成するために、ソース係数のベクトルに対して変換を適用するように、固定小数点数に対して一連のバタフライ構造演算を使用することと、
なお、変換された係数の前記ベクトルの中の変換された係数は、理想的な逆離散コサイン変換を使用してソース係数の前記ベクトルを変換することにより生成されることになる値の近似値である；
変換された係数の前記ベクトルの中の変換された係数に基づいて、メディアプレゼンテーションユニットが、可聴信号または可視信号を出力するようにすることと、
なお、前記バタフライ構造演算のうちの１つによって生成される結果と、無制限の精度の算術演算を使用して同等なバタフライ構造演算によって生成されることになる結果と、の間の差は、ゼロの周りに集中しており、そして正の差と、負の差とは、ほぼ等しい大きさである；
を備える方法。
［Ｃ２］
前記一連の前記バタフライ構造演算を使用することは、形式、
ｕ＝（（ｘ＊Ｃ）＞＞ｋ）−（（ｙ＊-Ｓ）＞＞ｋ’）、
ν＝（（ｘ＊Ｓ）＞＞ｋ’）−（（ｙ＊Ｃ）＞＞ｋ）、
のバタフライ構造演算を実行すること、を備え、
なお、ｕおよびνは、結果として生ずる固定小数点数であり、
Ｃ、Ｓ、ｋおよびｋ’は、定数の整数であり、
ｘおよびｙは、固定小数点変数であり、そして
Ｃ／２ｋおよびＳ／２ｋ’は、無理数定数の有理数近似値である、
Ｃ１に記載の方法。
［Ｃ３］
ソース係数の前記ベクトルは、８つの係数、ｘ０、ｘ１、ｘ２、ｘ３、ｘ４、ｘ５、ｘ６、およびｘ７、から構成され、
変換された係数の前記ベクトルは、８つの係数、ｚ０、ｚ１、ｚ２、ｚ３、ｚ４、ｚ５、ｚ６、およびｚ７、から構成され、そして
前記バタフライ構造演算のうちの任意のものを実行することは、
【数２６】
0005661836.tif 000031
である第１のバタフライ構造演算を実行することと、
【数２７】
0005661836.tif 000032
である第２のバタフライ構造演算を実行することと、
【数２８】
0005661836.tif 000033
である第３のバタフライ構造演算を実行することと、
【数２９】
0005661836.tif 000034
である第４のバタフライ構造演算を実行することと、
【数３０】
0005661836.tif 000035
である第５のバタフライ構造演算を実行することと、
【数３１】
0005661836.tif 000036
である第６のバタフライ構造演算を実行することと、
【数３２】
0005661836.tif 000037
である第７のバタフライ構造演算を実行することと、
【数３３】
0005661836.tif 000038
である第８のバタフライ構造演算を実行することと、
【数３４】
0005661836.tif 000039
である第９のバタフライ構造演算を実行することと、
【数３５】
0005661836.tif 000040
である第１０のバタフライ構造演算を実行することと、
【数３６】
0005661836.tif 000041
である第１１のバタフライ構造演算を実行することと、
【数３７】
0005661836.tif 000042
である第１２のバタフライ構造演算を実行することと、
【数３８】
0005661836.tif 000043
である第１３のバタフライ構造演算を実行することと、
を備える、
Ｃ２に記載の方法。
［Ｃ４］
α、β、γ、δ、ε、およびζは、それぞれ、無理数値
【数３９】
0005661836.tif 000044
の近似値である、Ｃ３に記載の方法。
［Ｃ５］
α＝８８６７／１６３８４、β＝２１４０７／１６３８４、γ＝５６８１／４０９６、δ＝５６５／２０４８、ε＝９６３３／８１９２、ζ＝１２８７３／１６３８４である、Ｃ４に記載のデバイス。
［Ｃ６］
前記一連のバタフライ構造演算を使用することは、前記バタフライ構造演算の中の乗算演算を実行することによりもたらされることになる値、を近似する結果として生ずる値、を生成する一連のシフト演算と、加算演算と、減算演算とを使用すること、を備える、Ｃ２に記載のデバイス。
［Ｃ７］
入力係数の行列の中の各係数をスケール変更することにより、スケール変更された係数の行列を生成することと、
スケール変更された係数の前記行列のＤＣ係数に対して１つまたは複数のバイアス値を加算することにより、ソース係数の前記ベクトルを含むバイアスされた係数の行列を生成することと、
中間係数の行列を生成するために、係数の前記行列の中の各行ベクトルに対して前記変換を適用するように、固定小数点数に対して前記一連のバタフライ構造演算を使用することと、
変換された係数の行列を生成するために、中間係数の前記行列の中の各列ベクトルに対して前記変換を適用するように、固定小数点数に対して前記一連のバタフライ構造演算を使用することと、
変換された係数の前記行列の中の係数を第１の大きさだけ右シフトすることによりピクセル成分値の行列を生成することと、
をさらに備えるＣ１に記載の方法。
［Ｃ８］
バイアスされた係数の前記行列を生成することは、スケール変更された係数の前記行列の前記ＤＣ係数に対して中間バイアス値を加算すること、を備え、
前記中間バイアス値は、２（Ｐ＋Ｔ−１）に等しく、なお、Ｐは、前記第１の大きさに等しく、Ｔは、前記変換を実行することにより加算されるビットの数である、
Ｃ７に記載の方法。
［Ｃ９］
バイアスされた係数の前記行列を生成することは、スケール変更された係数の前記行列の前記ＤＣ係数に対して補足バイアス値を加算すること、を備え、
前記ＤＣ係数に対する前記補足バイアス値の前記加算は、正の誤差および負の誤差が、平均して大きさが等しくなるように、そして平均してゼロの周りで対称になるようにし、
前記誤差は、精度に無関係に、変換された係数の前記行列の中の係数の限られた精度の固定小数点表現を前記第１の大きさだけ右シフトすることからもたらされる値と、変換された係数の前記行列の中の前記係数を２Ｐによって除算することからもたらされる値と、の間の差を表し、なお、Ｐは、前記第１の大きさに等しい、
Ｃ８に記載の方法。
［Ｃ１０］
前記補足バイアス値は、前記ＤＣ係数が負であるときに、−１に等しく、前記ＤＣ係数が負でないときに、０に等しい、Ｃ９に記載の方法。
［Ｃ１１］
擬似ランダムベースで、−１または０のいずれかに等しい値を選択すること、をさらに備え、
前記補足バイアス値を加算することは、前記選択された値を加算すること、を備える、
Ｃ９に記載の方法。
［Ｃ１２］
スケール変更された係数の前記行列を生成することは、入力係数の前記行列の中の各係数を第２の大きさだけ左シフトすること、を備え、
前記変換を適用するように前記一連のバタフライ構造演算を使用することは、変換された係数の前記行列の中の各係数が、第３の大きさにより測定される精度の余分なビットの数を含むようにし、
前記第１の大きさは、前記第２の大きさと前記第３の大きさとを加えたものに等しい、
Ｃ７に記載の方法。
［Ｃ１３］
前記第２の大きさは、前記変換を適用しながら使用される前記固定小数点数の仮数ビットの数に等しい、Ｃ１２に記載の方法。
［Ｃ１４］
前記第２の大きさは、３であり、そして
入力係数の前記行列を仮定すると、前記ピクセル成分値は、電気電子技術者協会（ＩＥＥＥ）１１８０規格の精度要件を満たす、
Ｃ１３に記載の方法。
［Ｃ１５］
ピクセル成分値の前記行列の中にピクセル成分値を含むピクセルを構築することと、
ディスプレイユニットが、前記ピクセルを表示するようにすることと、
をさらに備えるＣ７に記載の方法。
［Ｃ１６］
前記固定小数点数は、１６−ビットの固定小数点数である、Ｃ１に記載の方法。
［Ｃ１７］
変換された係数のベクトルを生成するために、ソース係数のベクトルに対して変換を適用するように、固定小数点数に対して一連のバタフライ構造演算を使用する逆変換モジュール、を備え、
変換された係数の前記ベクトルの中の変換された係数は、理想的な逆離散コサイン変換を使用してソース係数の前記ベクトルを変換することにより生成されることになる値の近似値であり、
メディアプレゼンテーションユニットは、変換された係数の前記ベクトルの中の変換された係数に基づいて可聴信号または可視信号を提示することができ、
前記バタフライ構造演算のうちの１つによって生成される結果と、無制限の精度の算術演算を使用して同等なバタフライ構造演算によって生成されることになる結果と、の間の差は、ゼロの周りに集中しており、正の差と負の差とは、ほぼ等しい大きさである、
デバイス。
［Ｃ１８］
前記逆変換モジュールによって実行される前記バタフライ構造演算のうちの前記１つは、形式、
ｕ＝（（ｘ＊Ｃ）＞＞ｋ）−（（ｙ＊-Ｓ）＞＞ｋ’）、
ν＝（（ｘ＊Ｓ）＞＞ｋ’）−（（ｙ＊Ｃ）＞＞ｋ）、
であり、
なお、ｕおよびνは、結果として生ずる固定小数点値であり、
Ｃ、Ｓ、ｋおよびｋ’は、定数の整数であり、
ｘおよびｙは、固定小数点変数であり、そして
Ｃ／２ｋおよびＳ／２ｋ’は、無理数定数の有理数近似値である、
Ｃ１７に記載のデバイス。
［Ｃ１９］
ソース係数の前記ベクトルは、８つの係数、ｘ０、ｘ１、ｘ２、ｘ３、ｘ４、ｘ５、ｘ６、およびｘ７、から構成され、
変換された係数の前記ベクトルは、８つの係数、ｚ０、ｚ１、ｚ２、ｚ３、ｚ４、ｚ５、ｚ６、およびｚ７、から構成され、そして
前記逆変換モジュールは、
【数４０】
0005661836.tif 000045
である第１のバタフライ構造演算を実行することと、
【数４１】
0005661836.tif 000046
である第２のバタフライ構造演算を実行することと、
【数４２】
0005661836.tif 000047
である第３のバタフライ構造演算を実行することと、
【数４３】
0005661836.tif 000048
である第４のバタフライ構造演算を実行することと、
【数４４】
0005661836.tif 000049
である第５のバタフライ構造演算を実行することと、
【数４５】
0005661836.tif 000050
である第６のバタフライ構造演算を実行することと、
【数４６】
0005661836.tif 000051
である第７のバタフライ構造演算を実行することと、
【数４７】
0005661836.tif 000052
である第８のバタフライ構造演算を実行することと、
【数４８】
0005661836.tif 000053
である第９のバタフライ構造演算を実行することと、
【数４９】
0005661836.tif 000054
である第１０のバタフライ構造演算を実行することと、
【数５０】
0005661836.tif 000055
である第１１のバタフライ構造演算を実行することと、
【数５１】
0005661836.tif 000056
である第１２のバタフライ構造演算を実行することと、
【数５２】
0005661836.tif 000057
である第１３のバタフライ構造演算を実行することと、
により、前記バタフライ構造演算を実行する、
Ｃ１８に記載のデバイス。
［Ｃ２０］
α、β、γ、δ、ε、およびζは、それぞれ、無理数値
【数５３】
0005661836.tif 000058
の近似値である、Ｃ１９に記載のデバイス。
［Ｃ２１］
α＝８８６７／１６３８４、β＝２１４０７／１６３８４、γ＝５６８１／４０９６、δ＝５６５／２０４８、ε＝９６３３／８１９２、ζ＝１２８７３／１６３８４である、
Ｃ２０に記載のデバイス。
［Ｃ２２］
前記逆変換モジュールは、前記バタフライ構造演算の中の乗算演算を実行することによりもたらされることになる値、を近似する結果として生ずる値、を生成する一連のシフト演算と、加算演算と、減算演算とを使用して、前記バタフライ構造演算を実行する、Ｃ１９に記載のデバイス。
［Ｃ２３］
前記デバイスは、
入力係数の行列の中の各係数をスケール変更することにより、スケール変更された係数の行列を生成するスケーリングモジュールと；
スケール変更された係数の前記行列のＤＣ係数に対して１つまたは複数のバイアス値を加算することにより、ソース係数の前記ベクトルを含むバイアスされた係数の行列を生成する係数バイアシングモジュールと、
なお前記逆変換モジュールは、バイアスされた係数の前記行列の中の各行ベクトルに対して前記変換を適用するように前記一連のバタフライ構造演算を使用することにより、中間係数の行列を生成し、
前記逆変換モジュールは、中間係数の前記行列の中の各列ベクトルに対して前記変換を適用するように前記一連のバタフライ構造演算を使用することにより、変換された係数の行列を生成する；
変換された係数の前記行列の中の係数を第１の大きさだけ右シフトすることにより、ピクセル成分値の行列を生成する右シフトモジュールと、
なおどちらか一方の前記逆変換モジュールは、ソース係数の前記ベクトルに対して前記変換を適用するように前記一連のバタフライ構造演算を使用する；
をさらに備える、
Ｃ１８に記載のデバイス。
［Ｃ２４］
前記係数バイアシングモジュールは、スケール変更された係数の前記行列の前記ＤＣ係数にたいして中間バイアス値を加算し、
前記中間バイアス値は、２（Ｐ＋Ｔ−１）に等しく、なお、Ｐは、前記第１の大きさに等しく、Ｔは、前記変換を実行することにより加算されるビットの数である、
Ｃ２３に記載のデバイス。
［Ｃ２５］
前記係数バイアシングモジュールは、スケール変更された係数の前記行列の前記ＤＣ係数に対して補足バイアス値を加算し、
前記ＤＣ係数に対する前記補足バイアス値の前記加算は、正の誤差および負の誤差が、平均して、大きさが等しくなるように、そして平均してゼロの周りで対称になるようにし、
前記誤差は、精度に無関係に、変換された係数の前記行列の中の係数の限られた精度の固定小数点表現を前記第１の大きさだけ右シフトすることからもたらされる値と、変換された係数の前記行列の中の前記係数を２Ｐによって除算することからもたらされる値と、の間の差を表し、なお、Ｐは、前記第１の大きさに等しい、
Ｃ２３に記載のデバイス。
［Ｃ２６］
前記補足バイアス値は、前記ＤＣ係数が負であるときに、−１に等しく、前記ＤＣ係数が負でないときに、０に等しい、Ｃ２５に記載のデバイス。
［Ｃ２７］
前記係数バイアシングモジュールは、擬似ランダムベースで、−１または０のいずれかに等しい値を選択し、
前記係数バイアシングモジュールは、前記補足バイアス値として前記選択された値を加算する、
Ｃ２５に記載のデバイス。
［Ｃ２８］
前記スケーリングモジュールは、入力係数の前記行列の中の各係数を第２の大きさだけ左シフトすることにより、入力係数の前記行列の中の各係数をスケール変更し、
前記逆変換モジュールは、変換された係数の前記行列の中の各係数が、第３の大きさにより測定される精度の余分なビットの数を含むようにし、
前記第１の大きさは、前記第２の大きさと、前記第３の大きさとを加えたものに等しい、
Ｃ２３に記載のデバイス。
［Ｃ２９］
前記第２の大きさは、前記変換を適用しながら使用される前記固定小数点数の仮数ビットの数に等しい、Ｃ２８に記載のデバイス。
［Ｃ３０］
変換された係数のベクトルを計算するために、ソース係数のベクトルに対して変換を適用するように、固定小数点数に対して一連のバタフライ構造演算を使用するための手段、
を備え、
変換された係数の前記ベクトルの中の変換された係数は、理想的な逆離散コサイン変換を使用してソース係数の前記ベクトルを変換することにより生成されることになる値の近似値であり、
メディアプレゼンテーションユニットは、変換された係数の前記ベクトルの中の前記変換された係数に基づいて可聴信号または可視信号を提示することができ、
前記バタフライ構造演算のうちの１つによって生成される結果と、無制限の精度の算術演算を使用して同等なバタフライ構造演算によって生成されることになる結果と、の間の差は、ゼロの周りに集中しており、そして正の差と、負の差とは、ほぼ等しい大きさである、
デバイス。
［Ｃ３１］
一連のバタフライ構造演算を使用するための前記手段は、バタフライ構造演算を実行するための１組の手段、
を備え、
バタフライ構造演算を実行するための前記手段のおのおのは、形式、
ｕ＝（（ｘ＊Ｃ）＞＞ｋ）−（（ｙ＊-Ｓ）＞＞ｋ）、
ν＝（（ｘ＊Ｓ）＞＞ｋ）−（（ｙ＊Ｃ）＞＞ｋ）、
のバタフライ構造演算を実行するための手段を備え、
なお、ｕ、ν、ｘ、およびｙは、固定小数点数であり、
ｘおよびｙは、入力値であり、ｕおよびνは、出力値であり、そして
Ｃ、Ｓ、およびｋは、整数である、
Ｃ３０に記載のデバイス。
［Ｃ３２］
ソース係数の前記ベクトルは、８つの係数、ｘ０、ｘ１、ｘ２、ｘ３、ｘ４、ｘ５、ｘ６、およびｘ７、から構成され、
変換された係数の前記ベクトルは、８つの係数、ｚ０、ｚ１、ｚ２、ｚ３、ｚ４、ｚ５、ｚ６、およびｚ７、から構成され、そして
バタフライ構造演算を実行するための前記１組の手段は、
【数５４】
0005661836.tif 000059
である第１のバタフライ構造演算を実行するための手段と、
【数５５】
0005661836.tif 000060
である第２のバタフライ構造演算を実行するための手段と、
【数５６】
0005661836.tif 000061
である第３のバタフライ構造演算を実行するための手段と、
【数５７】
0005661836.tif 000062
である第４のバタフライ構造演算を実行するための手段と、
【数５８】
0005661836.tif 000063
である第５のバタフライ構造演算を実行するための手段と、
【数５９】
0005661836.tif 000064
である第６のバタフライ構造演算を実行するための手段と、
【数６０】
0005661836.tif 000065
である第７のバタフライ構造演算を実行するための手段と、
【数６１】
0005661836.tif 000066
である第８のバタフライ構造演算を実行するための手段と、
【数６２】
0005661836.tif 000067
である第９のバタフライ構造演算を実行するための手段と、
【数６３】
0005661836.tif 000068
である第１０のバタフライ構造演算を実行するための手段と、
【数６４】
0005661836.tif 000069
である第１１のバタフライ構造演算を実行するための手段と、
【数６５】
0005661836.tif 000070
である第１２のバタフライ構造演算を実行するための手段と、
【数６６】
0005661836.tif 000071
である第１３のバタフライ構造演算を実行するための手段と、
を備える、
Ｃ３１に記載のデバイス。
［Ｃ３３］
α、β、γ、δ、ε、およびζは、それぞれ、無理数値
【数６７】
0005661836.tif 000072
の近似値である、Ｃ３２に記載のデバイス。
［Ｃ３４］
α＝８８６７／１６３８４、β＝２１４０７／１６３８４、γ＝５６８１／４０９６、
δ＝５６５／２０４８、ε＝９６３３／８１９２、ζ＝１２８７３／１６３８４である、
Ｃ３３に記載のデバイス。
［Ｃ３５］
前記一連のバタフライ構造演算を使用するための前記手段は、前記バタフライ構造演算の中の乗算演算を実行することによりもたらされることになる値、を近似する結果として生ずる値、を生成する一連のシフト演算と、加算演算と、減算演算とを使用して、前記バタフライ構造演算を実行する、Ｃ３１に記載のデバイス。
［Ｃ３６］
入力係数の行列の中の各係数をスケール変更することにより、スケール変更された係数の行列を生成するための手段と、
スケール変更された係数の前記行列のＤＣ係数に対して１つまたは複数のバイアス値を加算することにより、ソース係数の前記ベクトルを含むバイアスされた係数の行列を生成するための手段と、
バイアスされた係数の前記行列の中の各行ベクトルに対して前記変換を適用するように、前記一連のバタフライ構造演算を使用することにより、中間係数の行列を生成するための手段と、
中間係数の前記行列の中の各列ベクトルに対して前記変換を適用するように、前記一連のバタフライ構造演算を使用することにより、変換された係数の行列を生成するための手段と、
変換された係数の前記行列の中の係数を第１の大きさだけ右シフトすることによりピクセル成分値の行列を生成するための手段と、
をさらに備え、
中間係数の前記行列を生成するための前記手段、または変換された係数の前記行列を生成するための前記手段のいずれかは、ソース係数の前記ベクトルに対して前記変換を適用するように前記一連のバタフライ構造演算を使用するための前記手段を備える、
Ｃ３０に記載のデバイス。
［Ｃ３７］
バイアスされた係数の前記行列を生成するための前記手段は、スケール変更された係数の前記行列の前記ＤＣ係数に対して中間バイアス値を加算するための手段、を備え、
前記中間バイアス値は、２（Ｐ＋Ｔ−１）に等しく、なおＰは、前記第１の大きさに等しく、Ｔは、前記変換を実行することにより加算されるビットの数である、
Ｃ３６に記載のデバイス。
［Ｃ３８］
バイアスされた係数の前記行列を生成するための前記手段は、スケール変更された係数の前記行列の前記ＤＣ係数に対して補足バイアス値を加算するための手段、を備え、
前記ＤＣ係数に対する前記補足バイアス値の前記加算は、正の誤差および負の誤差が、平均して大きさが等しくなるように、そして平均してゼロの周りで対称になるようにし、
前記誤差は、精度に無関係に、変換された係数の前記行列の中の係数の限られた精度の固定小数点表現を前記第１の大きさだけ右シフトすることからもたらされる値と、変換された係数の前記行列の中の前記係数を２Ｐによって除算することからもたらされる値と、の間の差を表し、なお、Ｐは、前記第１の大きさに等しい、
Ｃ３６に記載のデバイス。
［Ｃ３９］
前記補足バイアス値は、前記ＤＣ係数が負であるときに、−１に等しく、前記ＤＣ係数が負でないときに、０に等しい、Ｃ３８に記載のデバイス。
［Ｃ４０］
擬似ランダムベースで、−１または０のいずれかに等しい値を選択するための手段、を備え、
前記補足バイアス値を加算するための前記手段は、前記選択された値を前記補足バイアス値として加算する、
Ｃ３８に記載のデバイス。
［Ｃ４１］
スケール変更された係数の前記行列を生成するための前記手段は、入力係数の前記行列の中の前記係数のおのおのを第２の大きさだけ左シフトすることにより、入力係数の前記行列の中の各係数をスケール変更するための手段、を備え、
前記変換を適用するように前記一連のバタフライ構造演算を使用するための前記手段は、変換された係数の前記行列の中の各係数が、第３の大きさにより測定される精度の余分なビットの数を含むようにし、
前記第１の大きさは、前記第２の大きさと前記第３の大きさとを加えたものに等しい、
Ｃ３６に記載のデバイス。
［Ｃ４２］
前記第２の大きさは、前記変換を適用しながら使用される前記固定小数点数の仮数ビットの数に等しい、Ｃ４１に記載のデバイス。
［Ｃ４３］
前記第２の大きさは、３であり、そして
入力係数の前記行列を仮定すると、前記ピクセル成分値は、電気電子技術者協会（ＩＥＥＥ）１１８０規格の精度要件を満たす、
Ｃ４２に記載のデバイス。
［Ｃ４４］
前記デバイスは、ピクセル成分値の前記行列の中のピクセル成分値を含むピクセルを構築するための手段、をさらに備え、そして
前記デバイスは、ディスプレイユニットが前記ピクセルを表示するようにするための手段、をさらに備える、
Ｃ３０に記載のデバイス。
［Ｃ４５］
前記固定小数点数は、１６−ビットの固定小数点数である、Ｃ３０に記載のデバイス。
［Ｃ４６］
実行されるときに、プロセッサに、
変換された係数のベクトルを生成するために、係数のベクトルに対して変換を適用するように、固定小数点数に対して一連のバタフライ構造演算を使用させ、
なお、変換された係数の前記ベクトルの中の変換された係数は、理想的な逆離散コサイン変換を使用してソース係数の前記ベクトルを変換することにより生成されることになる値の近似値である；
変換された係数の前記ベクトルの中の変換された値に基づいて、メディアプレゼンテーションユニットに可聴信号または可視信号を出力させる、ことをさせる、
なお、前記バタフライ構造演算のうちの１つによって生成される結果と、無制限の精度の算術演算を使用して同等なバタフライ構造演算によって生成されることになる結果と、の間の差は、ゼロの周りに集中しており、そして正の差と、負の差とは、ほぼ等しい大きさである；
命令、
を備えるコンピュータ可読媒体。
［Ｃ４７］
前記プロセッサに、前記バタフライ構造演算を実行させる前記命令は、前記プロセッサに、形式、
ｕ＝（（ｘ＊Ｃ）＞＞ｋ）−（（ｙ＊-Ｓ）＞＞ｋ’）、
ν＝（（ｘ＊Ｓ）＞＞ｋ’）−（（ｙ＊Ｃ）＞＞ｋ）、
のバタフライ構造演算を実行させ、
ｕおよびνは、結果として生ずる固定小数点数であり、
Ｃ、Ｓ、ｋおよびｋ’は、定数の整数であり、
ｘおよびｙは、固定小数点変数であり、そして
Ｃ／２ｋおよびＳ／２ｋ’は、無理数定数の有理数近似値である、
Ｃ４４に記載のコンピュータ可読媒体。
［Ｃ４８］
ソース係数の前記ベクトルは、８つの係数、ｘ０、ｘ１、ｘ２、ｘ３、ｘ４、ｘ５、ｘ６、およびｘ７、から構成され、
変換された係数の前記ベクトルは、８つの係数、ｚ０、ｚ１、ｚ２、ｚ３、ｚ４、ｚ５、ｚ６、およびｚ７、から構成され、
前記プロセッサに、前記一連のバタフライ構造演算を使用させる前記命令は、前記プログラマブルプロセッサに、
【数６８】
0005661836.tif 000073
である第１のバタフライ構造演算を実行させ、
【数６９】
0005661836.tif 000074
である第２のバタフライ構造演算を実行させ、
【数７０】
0005661836.tif 000075
である第３のバタフライ構造演算を実行させ、
【数７１】
0005661836.tif 000076
である第４のバタフライ構造演算を実行させ、
【数７２】
0005661836.tif 000077
である第５のバタフライ構造演算を実行させ、
【数７３】
0005661836.tif 000078
である第６のバタフライ構造演算を実行させ、
【数７４】
0005661836.tif 000079
である第７のバタフライ構造演算を実行させ、
【数７５】
0005661836.tif 000080
である第８のバタフライ構造演算を実行させ、
【数７６】
0005661836.tif 000081
である第９のバタフライ構造演算を実行させ、
【数７７】
0005661836.tif 000082
である第１０のバタフライ構造演算を実行させ、
【数７８】
0005661836.tif 000083
である第１１のバタフライ構造演算を実行させ、
【数７９】
0005661836.tif 000084
である第１２のバタフライ構造演算を実行させ、
【数８０】
0005661836.tif 000085
である第１３のバタフライ構造演算を実行させる、
Ｃ４７に記載のコンピュータ可読媒体。
［Ｃ４９］
α、β、γ、δ、ε、およびζは、それぞれ、無理数値
【数８１】
0005661836.tif 000086
の近似値である、Ｃ４８に記載のコンピュータ可読媒体。
［Ｃ５０］
α＝８８６７／１６３８４、β＝２１４０７／１６３８４、γ＝５６８１／４０９６、δ＝５６５／２０４８、ε＝９６３３／８１９２、ζ＝１２８７３／１６３８４である、Ｃ４９に記載のコンピュータ可読媒体。
［Ｃ５１］
前記プロセッサに、前記一連のバタフライ構造演算を使用させる前記命令は、前記プログラマブルプロセッサに、乗算演算を実行することによりもたらされることになる値、を近似する結果として生ずる値、を生成する一連のシフト演算と、加算演算と、減算演算とを使用して、前記バタフライ構造演算において値を乗算させる、Ｃ４７に記載のコンピュータ可読媒体。
［Ｃ５２］
前記命令は、さらに前記プログラマブルプロセッサに、
入力係数の行列の中の各係数をスケール変更することにより、スケール変更された係数の行列を生成させ、
スケール変更された係数の前記行列のＤＣ係数に対して１つまたは複数のバイアス値を加算することにより、ソース係数の前記ベクトルを含むバイアスされた係数の行列を生成させ、
中間係数の行列を生成するために、係数の前記行列の中の各行ベクトルに対して前記変換を適用するように、固定小数点数に対して前記一連のバタフライ構造演算を使用させ、
変換された係数の行列を生成するために、中間係数の前記行列の中の各列ベクトルに対して前記変換を適用するように、固定小数点数に対して前記一連のバタフライ構造演算を使用させ、
変換された係数の前記行列の中の係数を第１の大きさだけ右シフトすることによりピクセル成分値の行列を生成させる、
Ｃ４６に記載のコンピュータ可読媒体。
［Ｃ５３］
前記プロセッサに、バイアスされた係数の前記行列を生成させる前記命令は、前記プロセッサに、スケール変更された係数の前記行列の前記ＤＣ係数に対して中間バイアス値を加算させ、
前記中間バイアス値は、２（Ｐ＋Ｔ−１）に等しく、なお、Ｐは、前記第１の大きさに等しく、Ｔは、前記変換を実行することにより加算されるビットの数である、
Ｃ５２に記載のコンピュータ可読媒体。
［Ｃ５４］
前記プロセッサに、バイアスされた係数の前記行列を生成させる前記命令は、前記プロセッサに、スケール変更された係数の前記行列の前記ＤＣ係数に対して補足バイアス値を加算させ、
前記ＤＣ係数に対する前記補足バイアス値の前記加算は、正の誤差および負の誤差が、平均して大きさが等しくなるように、そして平均してゼロの周りで対称になるようにし、
前記誤差は、精度に無関係に、変換された係数の前記行列の中の係数の限られた精度の固定小数点表現を前記第１の大きさだけ右シフトすることからもたらされる値と、変換された係数の前記行列の中の前記係数を２Ｐによって除算することからもたらされる値と、の間の差を表し、なお、Ｐは、前記第１の大きさに等しい、
Ｃ５２に記載のコンピュータ可読媒体。
［Ｃ５５］
前記補足バイアス値は、前記ＤＣ係数が負であるときに、−１に等しく、前記ＤＣ係数が負でないときに、０に等しい、Ｃ５４に記載のコンピュータ可読媒体。
［Ｃ５６］
前記命令は、さらに、前記プロセッサに、擬似ランダムベースで、−１または０のいずれかに等しい値を選択させ、
前記プロセッサに、前記補足バイアス値を加算させる前記命令は、前記プロセッサに、前記選択された値を前記補足バイアス値として加算させる、
Ｃ５４に記載のコンピュータ可読媒体。
［Ｃ５７］
前記プロセッサに、スケール変更された係数の前記行列を生成させる前記命令は、前記プロセッサに、入力係数の前記行列の中の各係数を第２の大きさだけ左シフトさせ、
前記プロセッサに、前記一連のバタフライ構造演算を使用させる前記命令は、変換された係数の前記行列の中の各係数が、第３の大きさによって測定される精度の余分なビットの数を含むようにし、そして
前記第１の大きさは、前記第２の大きさと前記第３の大きさとを加えたものに等しい、
Ｃ５２に記載のコンピュータ可読媒体。
［Ｃ５８］
前記第２の大きさは、前記変換を適用しながら使用される前記固定小数点数の仮数ビットの数に等しい、Ｃ５７に記載のコンピュータ可読媒体。
［Ｃ５９］
前記第２の大きさは、３であり、そして
入力係数の前記行列を仮定すると、前記ピクセル成分値は、電気電子技術者協会（ＩＥＥＥ）１１８０規格の精度要件を満たす、
Ｃ５８に記載のコンピュータ可読媒体。
［Ｃ６０］
前記命令は、さらに、前記プロセッサに、
ピクセル成分値の前記行列の中にピクセル成分値を含むピクセルを構築させ、
前記ピクセルをディスプレイユニット上で表示させる、
Ｃ５２に記載のコンピュータ可読媒体。
［Ｃ６１］
前記固定小数点数は、１６−ビットの固定小数点数である、Ｃ４６に記載のコンピュータ可読媒体。
【図１】
0005661836.tif 000143
【図２】
0005661836.tif 000144
【図３】
0005661836.tif 000145
【図４】
0005661836.tif 000146
【図５】
0005661836.tif 000147
【図６】
0005661836.tif 000148
【図７】
0005661836.tif 000149
【図８】
0005661836.tif 000150
【図９】
0005661836.tif 000151
【図１０】
0005661836.tif 000152
【図１１】
0005661836.tif 000153
【図１２】
0005661836.tif 000154