(57)【要約】固定小数点を用いる離散コサイン変換の計算における丸め誤差を低減するための技術について説明する。これらの技術に従って、離散コサイン変換において、縮尺された係数の行列は係数の行列の係数に縮尺因数を乗算することにより、計算される。次に、中点バイアス値および補足バイアス値が縮尺された係数の行列のＤＣ係数に加算される。次に、逆離散コサイン変換が求めた縮尺された係数の行列に適用される。次に、求めた行列中の値が画素成分値の行列を導出するために右シフトされる。ここに説明したように、補足バイアス値をＤＣ係数へ加算することはこの右シフトに起因する丸め誤差を減少させる。その結果、これらの技術を用いて復元されたディジタルメディアファイルの最終版は、ディジタルメディアファイルの原版により良く類似しているかもしれない。  【選択図】      図６
2010505154.tif 000002
【特許請求の範囲】
【請求項１】
ソース係数の行列の１つの係数に１つ以上のバイアス値を加算することにより、バイアスされた係数の行列を生成することと、
前記バイアスされた係数の行列内の係数に固定小数点演算を用いて１次元変換を繰り返し適用することにより、変換された係数の行列を生成することと、
前記変換された係数の行列内の係数を右シフトすることにより出力係数の行列を生成することであって、
前記出力係数の行列内の係数が、理想的な逆離散コサイン変換を用いてソース係数の行列を変換することにより作成される値の近似値である、出力係数の行列を生成することと、
メディアプレゼンテーションユニットに出力値の行列に基づき可聴または可視信号を出力させることとを含む方法であって、
係数へのバイアス値の加算が、正の誤差および負の誤差を平均して大きさが等しく、かつ平均して０に関して対称であるようにさせ、
これらの誤差が、変換された係数の行列内の係数の限られた精度の固定小数点表現を第１の大きさだけ右シフトした結果と、変換された係数の行列内の係数を精度を考慮せず２を底とし第１の大きさを指数とするべき乗で除算した結果との差を表す、方法。
【請求項２】
出力係数の行列内の係数が、画素成分値であり、
方法が、前記画素成分値を含む画素のブロックを構築することをさらに含む、請求項1に記載の方法。
【請求項３】
メディアプレゼンテーションユニットに出力値の行列に基づき可聴または可視信号を出力させることが、メディアプレゼンテーションユニットに画素のブロックを表示させることを含む、請求項2に記載の方法。
【請求項４】
方法が、
画素のブロックを他の画素のブロックと結合することにより第1のビデオフレームを生成することと、
第1のビデオフレームを基準ビデオフレームとして用いる１つ以上の後続ビデオフレームを生成するために時間復号を用いることとをさらに含む請求項2に記載の方法。
【請求項５】
係数が、ソース係数の行列のＤＣ係数である、請求項１に記載の方法。
【請求項６】
方法が、係数に中点バイアス値を加算することをさらに含み、
前記中点バイアス値が、２P-1に等しく、前記Pが変換に用いられる固定小数点数における仮数ビット数と、変換を適用することにより変換された係数の行列内の係数に加えられたビット数との和に等しい、請求項１に記載の方法。
【請求項７】
第1の大きさが２Pに等しく、前記Pが変換に用いられる固定小数点数における仮数ビット数と、変換を適用することにより変換された係数の行列内の係数に加えられたビット数との和に等しい、請求項１に記載の方法。
【請求項８】
バイアスされた係数の行列を生成することが、係数に補足バイアス値を加算することを含み、
前記補足バイアス値が、係数が負の場合は−１に等しく、係数が負でない場合は０に等しい、請求項１に記載の方法。
【請求項９】
方法が、擬似ランダムベースで−１または０のいずれかに等しい値を選択することをさらに含み、
バイアスされた係数の行列を生成することが、係数に前記選択された値を加算することを含む、請求項１に記載の方法。
【請求項１０】
方法が、
量子化された係数の行列を逆量子化することにより、逆量子化された係数の行列を生成することと、
逆量子化された係数の行列内の係数を、変換された係数の行列を生成する間に用いられる固定小数点数の仮数ビット数だけ左シフトすることによりソース係数の行列を生成することとをさらに含む請求項１に記載の方法。
【請求項１１】
仮数ビットの数が３であり、
ソース係数の行列を与えると、出力係数の行列が、米国電気電子技術者学会（ＩＥＥＥ）１１８０標準の精度要求を満たす、請求項１０に記載の方法。
【請求項１２】
変換された係数の行列を生成することが、バイアスされた係数の行列に乗算または除算操作を行うことなく変換を繰り返し適用するために固定小数点演算を用いることを含む、請求項１に記載の方法。
【請求項１３】
変換された係数の行列を生成する間に用いられる固定小数点数が、１６ビットの固定小数点数である、請求項１に記載の方法。
【請求項１４】
変換された係数の行列を生成することが、
固定小数点演算を用いてバイアスされた係数の行列の各行ベクトルに一連のバタフライ構造演算を適用することにより、中間係数の行列を生成することと、
固定小数点演算を用いて前記中間係数の行列の各列ベクトルに前記一連のバタフライ構造演算を適用することにより、変換された係数の行列を生成することとを含む、請求項１に記載の方法。
【請求項１５】
バタフライ構造演算のいずれかを実行することが、形式
u = ((x * C′) + (y * S′) + (1 << (k - 1))) >> k
v = ((x * S′) + (y * -C′) + (1 << (k - 1))) >> k
のバタフライ構造演算を実行することを含み、
ｕ、ｖ、ｘ、およびｙが固定小数点数であり、
xおよびｙが入力値並びにｕおよびｖが出力値であり、
Ｃ、Ｓ、およびｋが整数である、
請求項１４に記載の方法。
【請求項１６】
バタフライ構造演算の１つにより生成された結果と、無限の精度の演算を用いる等価なバタフライ構造演算により生成される結果と間の差が、約０を中心とし、１以下の正または負の大きさを有する、請求項１４に記載の方法。
【請求項１７】
バタフライ構造演算のいずれかを実行することが、形式
u = ((x * C) >> k) - ( (y * -S) >> k)
v = ((x * S) >> k) - ( (y * C) >> k)
のバタフライ構造演算を実行することを含み、
ｕ、ｖ、ｘ、およびｙが固定小数点数であり、
xおよびｙが入力値並びにｕおよびｖが出力値であり、
Ｃ、Ｓ、およびｋが整数である、
請求項１６に記載の方法。
【請求項１８】
ソース係数の行列の１つの係数に１つ以上のバイアス値を加算することにより、バイアスされた係数の行列を生成する係数バイアスモジュールと、
固定小数点演算を用いて前記バイアスされた係数の行列内の係数に１次元変換を繰り返し適用することにより、変換された係数の行列を生成する逆変換モジュールと、
前記変換された係数の行列内の係数を右シフトすることにより出力係数の行列を生成する右シフトモジュールであって、
前記出力係数の行列内の係数が、理想的な逆離散コサイン変換を用いてソース係数の行列を変換することにより作成される値の近似値である、右シフトモジュールと、
メディアプレゼンテーションユニットに出力値の行列に基づき可聴または可視信号を出力させるプレゼンテーションドライバ、とを含む無線通信デバイスであって、
係数へのバイアス値の加算が、正の誤差および負の誤差を平均して大きさが等しく、かつ平均して０に関して対称であるようにさせ、
これらの誤差が、変換された係数の行列内の係数の限られた精度の固定小数点表現を第１の大きさだけ右シフトした結果と、変換された係数の行列内の係数を精度を考慮せず２を底とし第１の大きさを指数とするべき乗で除算した結果との差を表す、無線通信デバイス。
【請求項１９】
ソース係数の行列の１つの係数に１つ以上のバイアス値を加算することにより、バイアスされた係数の行列を生成する係数バイアスモジュールと、
固定小数点演算を用いて前記バイアスされた係数の行列内の係数に１次元変換を繰り返し適用することにより、変換された係数の行列を生成する逆変換モジュールと、
前記変換された係数の行列内の係数を右シフトすることにより出力係数の行列を生成する右シフトモジュールであって、
前記出力係数の行列内の係数が、理想的な逆離散コサイン変換を用いてソース係数の行列を変換することにより作成される値の近似値である、右シフトモジュールと、
メディアプレゼンテーションユニットに出力値の行列に基づき可聴または可視信号を出力させるプレゼンテーションドライバ、とを含むデバイスであって、
係数へのバイアス値の加算が、正の誤差および負の誤差を平均して大きさが等しく、かつ平均して０に関して対称であるようにさせ、
これらの誤差が、変換された係数の行列内の係数の限られた精度の固定小数点表現を第１の大きさだけ右シフトした結果と、変換された係数の行列内の係数を精度を考慮せず２を底とし第１の大きさを指数とするべき乗で除算した結果との差を表す、デバイス。
【請求項２０】
出力係数の行列内の係数が、画素成分値であり、
デバイスが、前記画素成分値を含む画素のブロックを構築する画素再構築モジュールをさらに含む、請求項１９に記載のデバイス。
【請求項２１】
プレゼンテーションドライバが、メディアプレゼンテーションユニットに画素のブロックを表示させる、請求項２０に記載のデバイス。
【請求項２２】
デバイスが、
画素のブロックを他の画素のブロックと結合することにより第１のビデオフレームを生成するブロック結合器モジュールと、
第１のビデオフレームを基準ビデオフレームとして用いる１つ以上の後続ビデオフレームを生成する予測フレーム生成モジュール、とをさらに含む請求項２０に記載のデバイス。
【請求項２３】
係数がソース係数の行列のＤＣ係数である、請求項１９に記載のデバイス。
【請求項２４】
係数バイアスモジュールが、係数に中点バイアス値を加算することによりバイアスされた係数の行列を生成し、
前記中点バイアス値が、２Ｐ−１に等しく、前記Ｐが変換に用いられる固定小数点数における仮数ビット数と、変換を適用することにより変換された係数の行列内の係数に加えられたビット数との和に等しい、請求上１９に記載のデバイス。
【請求項２５】
第１の大きさが２Ｐに等しく、前記Ｐが変換に用いられる固定小数点数における仮数ビット数と、変換を適用することにより変換された係数の行列内の係数に加えられたビット数との和に等しい、請求項１９に記載のデバイス。
【請求項２６】
係数バイアスモジュールが、係数が負の場合は−１に等しく、係数が負でない場合は０に等しい補足バイアス値を加算することにより、バイアスされた係数の行列を生成する、請求項１９に記載のデバイス。
【請求項２７】
係数バイアスモジュールが、擬似ランダムベースで−１または０のいずれかに等しい値を選択し、係数に前記選択された値を補足バイアス値として加算することにより、バイアスされた係数の行列を生成する、請求項１９に記載のデバイス。
【請求項２８】
デバイスが、
逆量子化された係数の行列を逆量子化することにより、逆量子化された係数の行列を生成する逆量子化モジュールと、
逆量子化された係数の行列内の係数を、変換された係数の行列を生成する間に用いられる固定小数点数の仮数ビット数だけ左シフトすることによりソース係数の行列を生成する縮尺モジュールとをさらに含む、請求項１９に記載のデバイス。
【請求項２９】
仮数ビットの数が３であり、
ソース係数の行列を与えると、出力係数の行列が、米国電気電子技術者学会（ＩＥＥＥ）１１８０標準の精度要求を満たす、請求項２８に記載のデバイス。
【請求項３０】
逆変換モジュールが、バイアスされた係数の行列内の係数に１次元変換を繰り返し適用するために固定小数点演算を用いる場合、１６ビットの固定小数点数を用いる、請求項１９に記載のデバイス。
【請求項３１】
逆変換モジュールが、固定小数点演算を用いて縮尺された係数の行列の各行ベクトルに一連のバタフライ構造演算を適用して中間係数の行列を作成し、固定小数点演算を用いて前記中間係数の行列の各列ベクトルに前記一連のバタフライ構造演算を適用して変換された係数の行列を作成する、請求項１９に記載の装置。
【請求項３２】
バタフライ構造演算が、形式
u = ((x * C′) + (y * S′) + (1 << (k - 1))) >> k
v = ((x * S′) + (y * -C′) + (1 << (k - 1))) >> k
の演算であり、
ｕ、ｖ、ｘ、およびｙが固定小数点数であり、
ｘおよびｙが入力値並びにｕおよびｖが出力値であり、
Ｃ、Ｓ、およびｋが整数である、
請求項３１に記載のデバイス。
【請求項３３】
バタフライ構造演算の１つにより生成された結果と、無限の精度の演算を用いる等価なバタフライ構造演算により生成される結果と間の差が、約０を中心とし、１以下の正または負の大きさを有する、請求項３１に記載のデバイス。
【請求項３４】
バタフライ構造演算が、形式
u = ((x * C) >> k) - ((y * -S) >> k)
v = ((x * S) >> k) - ((y * C) >> k)
の演算であり、
ｕ、ｖ、ｘ、およびｙが固定小数点数であり、
ｘおよびｙが入力値並びにｕおよびｖが出力値であり
Ｃ、Ｓ、およびｋが整数である、
請求項３３に記載のデバイス。
【請求項３５】
ソース係数の行列の１つの係数に１つ以上のバイアス値を加算することにより、バイアスされた係数の行列を生成するための手段と、
固定小数点演算を用いて前記バイアスされた係数の行列内の係数に１次元変換を繰り返し適用することにより、変換された係数の行列を生成するための手段と、
前記変換された係数の行列内の係数を右シフトすることにより出力係数の行列を生成するための手段であって、
前記出力係数の行列内の係数が、理想的な逆離散コサイン変換を用いてソース係数の行列を変換することにより作成される値の近似値である手段と、
メディアプレゼンテーションユニットに出力値の行列に基づき可聴または可視信号を出力させるための手段、とを含むデバイスであって、
係数へのバイアス値の加算が、正の誤差および負の誤差を平均して大きさが等しく、かつ平均して０に関して対称であるようにさせ、
これらの誤差が、変換された係数の行列内の係数の限られた精度の固定小数点表現を第１の大きさだけ右シフトした結果と、変換された係数の行列内の係数を精度を考慮せず２を底とし第１の大きさを指数とするべき乗で除算した結果との差を表す、デバイス。
【請求項３６】
出力係数の行列内の係数が、画素成分値であり、
デバイスが、前記画素成分値を含む画素のブロックを構築するための手段をさらに含む、
請求項３５に記載のデバイス。
【請求項３７】
メディアプレゼンテーションユニットに出力値の行列に基づき可聴または可視信号を出力させるための手段が、メディアプレゼンテーションユニットに画素のブロックを表示させるための手段を含む、請求項３６に記載のデバイス。
【請求項３８】
画素のブロックを他の画素のブロックと結合することにより第１のビデオフレームを生成するための手段と、
第１のビデオフレームを基準ビデオフレームとして用いる１つ以上の後続ビデオフレームを生成するために時間復号を用いるための手段とをさらに含む、請求項３６に記載のデバイス。
【請求項３９】
係数が、ソース係数の行列のＤＣ係数である、請求項３５に記載のデバイス。
【請求項４０】
バイアスされた係数の行列を生成するための手段が、係数に中点バイアス値を加算するための手段を含み、
前記中点バイアス値が、２Ｐ−１に等しく、前記Ｐが変換に用いられる固定小数点数における仮数ビット数と、変換を適用することにより変換された係数の行列内の係数に加えられたビット数との和に等しい、請求項３５に記載のデバイス。
【請求項４１】
第１の大きさが２Ｐに等しく、前記Ｐが変換に用いられる固定小数点数における仮数ビット数と、変換を適用することにより変換された係数の行列内の係数に加えられたビット数との和に等しい、請求項４０に記載のデバイス。
【請求項４２】
バイアスされた係数の行列を生成するための手段が、係数に補足バイアス値を加算するための手段を含み、
前記補足バイアス値は係数が負の場合は−１に等しく、係数が負でない場合は０に等しい、請求項３５に記載のデバイス。
【請求項４３】
擬似ランダムベースで−１または０のいずれかに等しい値を選択することを含み、
バイアスされた係数の行列を生成するための手段が、係数に前記選択された値を加算するための手段を含む、請求項３５に記載のデバイス。
【請求項４４】
デバイスが、
量子化された係数の行列を逆量子化することにより、逆量子化された係数の行列を生成するための手段と、
逆量子化された係数の行列内の係数を、変換された係数の行列を生成する間に用いられる固定小数点数の仮数ビット数だけ左シフトすることによりソース係数の行列を生成するための手段とをさらに含む、請求項３５に記載のデバイス。
【請求項４５】
仮数ビットの数が３であり、
ソース係数の行列を与えると、出力係数の行列が、米国電気電子技術者学会（ＩＥＥＥ）１１８０標準の精度要求を満たす、請求項４４に記載のデバイス。
【請求項４６】
変換された係数の行列を生成するための手段が、固定小数点演算を用いてバイアスされた係数の行列に乗算または除算操作を行うことなく変換を繰り返し適用するための手段を含む、請求項３５に記載のデバイス。
【請求項４７】
変換された係数の行列を生成するための手段が、固定小数点演算を用いてバイアスされた係数の行列内の係数に１次元変換を繰り返し適用する場合、１６ビットの固定小数点数を用いる、請求項３５に記載のデバイス。
【請求項４８】
変換された係数の行列を生成するための手段が、
固定小数点演算を用いてバイアスされた係数の行列の各行ベクトルに一連のバタフライ構造演算を適用することにより、中間係数の行列を生成するための手段と、
固定小数点演算を用いて前記中間係数の行列の各列ベクトルに前記一連のバタフライ構造演算を適用することにより、変換された係数の行列を生成するための手段とを含む、請求項３５に記載の装置。
【請求項４９】
バタフライ構造演算のいずれかを実行するための手段が、形式
u = ((x * C′) + (y * S′) + (1 << (k - 1))) >> k
v = ((x * S′) + (y * -C′) + (1 << (k - 1))) >> k
のバタフライ構造演算を実行するための手段を含み、
ｕ、ｖ、ｘ、およびｙが固定小数点数であり、
ｘおよびｙが入力値並びにｕおよびｖが出力値であり、
Ｃ、Ｓ、およびｋが整数である、
請求項４８に記載のデバイス。
【請求項５０】
バタフライ構造演算の１つにより生成された結果と、無限の精度の演算を用いる等価なバタフライ構造演算により生成される結果と間の差が、約０を中心とし、１以下の正または負の大きさを有する、請求項４８に記載のデバイス。
【請求項５１】
バタフライ構造演算のいずれかを実行するための手段が、形式
u = ((x * C) >> k) - ((y * -S) >> k)
v = ((x * S) >> k) - ((y * C) >> k)
のバタフライ構造演算を実行するための手段を含み、
ｕ、ｖ、ｘ、およびｙが固定小数点数であり、
ｘおよびｙが入力値並びにｕおよびｖが出力値であり、
Ｃ、Ｓ、およびｋが整数である、
請求項５０に記載のデバイス。
【請求項５２】
命令が実行されると、プロセッサに、
ソース係数の行列の１つの係数に１つ以上のバイアス値を加算することにより、バイアスされた係数の行列を生成させ、
固定小数点演算を用いて前記バイアスされた係数の行列内の係数に１次元変換を繰り返し適用することにより、変換された係数の行列を生成させ、
前記変換された係数の行列内の係数を右シフトすることにより出力係数の行列を生成させ、
前記出力係数の行列内の係数が、理想的な逆離散コサイン変換を用いてソース係数の行列を変換することにより作成される値の近似値であり、および
メディアプレゼンテーションユニットに出力値の行列に基づき可聴または可視信号を出力させ、
係数へのバイアス値の加算が、正の誤差および負の誤差を平均して大きさが等しく、かつ平均して０に関して対称であるようにさせ、
これらの誤差が、変換された係数の行列内の係数の限られた精度の固定小数点表現を第１の大きさだけ右シフトした結果と、変換された係数の行列内の係数を精度を考慮せず２を底とし第１の大きさを指数とするべき乗で除算した結果との差を表す、命令を含む計算機可読媒体。
【請求項５３】
出力係数の行列内の係数が、画素成分値であり、
命令が、さらにプロセッサに画素成分値を含む画素のブロックを構築させる、請求項５２に記載の計算機可読媒体。
【請求項５４】
命令が、メディアプレゼンテーションユニットに画素のブロックを表示させることをプロセッサにさせることにより、メディアプレゼンテーションユニットに出力値の行列に基づき可聴または可視信号を出力させることをプロセッサにさせる、請求項５３に記載の計算機可読媒体。
【請求項５５】
命令が、さらにプロセッサに
画素ブロックを他の画素ブロックと結合することにより、第１のビデオフレームを生成させ、
第１のビデオフレームを基準ビデオフレームとして用いる１つ以上の後続ビデオフレームを生成するために時間復号を用いさせる、請求項５３に記載の計算機可読媒体。
【請求項５６】
係数がソース係数の行列のＤＣ係数である、請求項５２に記載の計算機可読媒体。
【請求項５７】
命令がさらにプロセッサに中点バイアス値を係数に加算させ、
前記中点バイアス値が、２Ｐ−１に等しく、前記Ｐが変換に用いられる固定小数点数における仮数ビット数と、変換を適用することにより変換された係数の行列内の係数に加えられたビット数との和に等しい、請求項５２に記載の計算機可読媒体。
【請求項５８】
第１の大きさが２Ｐに等しく、前記Ｐが変換に用いられる固定小数点数における仮数ビット数と、変換を適用することにより変換された係数の行列内の係数に加えられたビット数との和に等しい、請求項５２に記載の計算機可読媒体。
【請求項５９】
命令がさらにプロセッサにバイアスされた係数の行列を生成させ、プロセッサに補足バイアス値を係数に加算させ、
前記補足バイアス値が、係数が負の場合は−１に等しく、係数が負でない場合には０に等しい、請求項５２に記載の計算機可読媒体。
【請求項６０】
命令が、さらにプロセッサに擬似ランダムベースで−１または０のいずれかに等しい値を選択させ、および
プロセッサにバイアスされた係数の行列を生成させる命令が、プロセッサに前記選択された値を係数に加算させる、請求項５２に記載の計算機可読媒体。
【請求項６１】
命令が、さらにプロセッサに、
量子化された係数の行列を逆量子化することにより、逆量子化された係数の行列を生成させ、および
前記逆量子化された係数の行列内の係数を、変換された係数の行列を生成する間に用いられる固定小数点数の仮数ビット数だけ左シフトすることによりソース係数の行列を生成させる、請求項５２に記載の計算機可読媒体。
【請求項６２】
仮数ビットの数が３であり、
ソース係数の行列を与えると、出力係数の行列が、米国電気電子技術者学会（ＩＥＥＥ）１１８０標準の精度要求を満たす、請求項６１に記載の計算機可読媒体。
【請求項６３】
命令が、バイアスされた係数の行列内の係数に乗算または除算操作を行うことなく繰り返し変換をプロセッサに適用させることにより、変換された係数の行列をプロセッサに生成させる、請求項５２に記載の計算機可読媒体。
【請求項６４】
命令が、バイアスされた係数の行列内の係数に１次元変換を繰り返し適用するために固定小数点演算をプロセッサに用いさせる場合、命令が１６ビットの固定小数点数をプロセッサに用いさせる、請求項５２に記載の計算機可読媒体。
【請求項６５】
命令が、プロセッサに、
固定小数点演算を用いてバイアスされた係数の行列の各行ベクトルに一連のバタフライ構造演算を適用することにより、中間係数の行列を生成させ、および
固定小数点演算を用いて前記中間係数の行列の各列ベクトルに前記一連のバタフライ構造演算を適用することにより、変換された係数の行列を生成させることにより、
変換された係数の行列をプロセッサに生成させる、請求項５２に記載の計算機可読媒体。
【請求項６６】
命令が、プロセッサに、
u = ((x * C′) + (y * S′) + (1 << (k - 1))) >> k
v = ((x * S′) + (y * -C′) + (1 << (k - 1))) >> k
の形式であって、
ｕ、ｖ、ｘ、およびｙが固定小数点数であり、
ｘおよびｙが入力値並びにｕおよびｖが出力値であり、
Ｃ、Ｓ、およびｋが整数である、形式
のバタフライ構造演算を実行させることにより、プロセッサに任意のバタフライ構造演算を実行させる、請求項６５に記載の計算機可読媒体。
【請求項６７】
バタフライ構造演算の１つにより生成された結果と、無限の精度の演算を用いる等価なバタフライ構造演算により生成されるであろう結果と間の差が、約０を中心とし、１以下の正または負の大きさを有する、請求項６５に記載の計算機可読媒体。
【請求項６８】
命令が、プロセッサに、
u = ((x * C) >> k) - ((y * -S) >> k)
v = ((x * S) >> k) - ((y * C) >> k)
の形式であって、
ｕ、ｖ、ｘ、およびｙが固定小数点数であり、
ｘおよびｙが入力値並びにｕおよびｖが出力値であり、
Ｃ、Ｓ、およびｋが整数である、形式のバタフライ構造演算を実行させることにより、プロセッサにバタフライ構造演算のいずれかを実行させる、請求項６７に記載の計算機可読媒体。
【請求項６９】
ソース係数の行列内の各係数を左シフトすることにより、調整された係数の行列を生成することと、
固定小数点演算を用いて前記調整された係数の行列内の係数に１次元変換を繰り返し適用することにより、変換された係数の行列を生成することと、
前記変換された係数の行列内の各係数を縮尺することにより、縮尺された係数の行列を生成することと、
前記縮尺された係数の行列内の１つ以上の係数に１つ以上のバイアス値を加算することにより、バイアスされた係数の行列を生成することと、
前記バイアスされた係数の行列内の係数を第１の大きさだけ右シフトすることにより出力係数の行列を生成することとを含む方法であって、
前記ソース係数の行列が、メディアデータを表し、
前記出力係数の行列内の係数が、理想的な順離散コサイン変換を用いてソース係数の行列を変換することにより作成される値の近似値であり、
係数へのバイアス値の加算が、正の誤差および負の誤差を平均して大きさが等しく、かつ平均して０に関して対称であるようにさせ、
これらの誤差が、バイアスされた係数の行列内の係数の限られた精度の固定小数点表現を第１の大きさだけ右シフトして生じた値と、バイアスされた係数の行列内の係数を精度を考慮せず第１の大きさの２のべき乗で除して生じた値との差を表す、方法。
【請求項７０】
第１の大きさが２Ｐに等しく、前記Ｐが変換に用いられる固定小数点数における仮数ビット数と、変換を適用することにより変換された係数の行列内の係数に加えられたビット数との和に等しい、請求項６９に記載の方法。
【請求項７１】
バイアスされた係数の行列を生成することが、補足バイアス値を縮尺された係数の行列内の１つ以上に加算することを含み、
前記補足バイアス値が、係数が負の場合には−１に等しく、係数が負でない場合には、０に等しい、請求項６９に記載の方法。
【請求項７２】
方法が、擬似ランダムベースで−１または０のいずれかに等しい値を選択することをさらに含み、
バイアスされた係数の行列を生成することが、縮尺された係数の行列内の１つ以上の係数に前記選択された値を加算することを含む、請求項６９に記載の方法。
【請求項７３】
ソース係数の行列内の各係数を左シフトすることにより調整された係数の行列を生成する左シフトモジュールと、
固定小数点演算を用いて前記調整された係数の行列内の係数に１次元変換を繰り返し適用することにより、変換された係数の行列を生成する順変換モジュールと、
前記変換された係数の行列内の各係数を縮尺することにより、縮尺された係数の行列を生成する縮尺モジュールと、
前記縮尺された係数の行列内の１つ以上の係数に１つ以上のバイアス値を加算することにより、バイアスされた係数の行列を生成する係数バイアスモジュールと、
前記バイアスされた係数の行列内の係数を第１の大きさだけ右シフトすることにより出力係数の行列を生成する右シフトモジュールとを含むデバイスであって、
前記ソース係数の行列が、メディアデータを表し、
前記出力係数の行列内の係数が、理想的な順離散コサイン変換を用いてソース係数の行列を変換することにより作成される値の近似値であり、
係数へのバイアス値の加算が、正の誤差および負の誤差を平均して大きさが等しく、かつ平均して０に関して対称にさせ、
これらの誤差が、バイアスされた係数の行列内の係数の限られた精度の固定小数点表現を第１の大きさだけ右シフトして生じた値と、バイアスされた係数の行列内の係数を精度を考慮せず第１の大きさの２のべき乗で除して生じた値との差を表す、デバイス。
【請求項７４】
第１の大きさが２Ｐに等しく、前記Ｐが変換に用いられる固定小数点数における仮数ビット数と、変換を適用することにより変換された係数の行列内の係数に加えられたビット数との和に等しい、請求項７３に記載のデバイス。
【請求項７５】
係数バイアスモジュールが、縮尺された係数の行列内の１つ以上の係数に補足バイアス値を加算することによりバイアスされた係数の行列を生成し、
前記補足バイアス値が、係数が負の場合には−１に等しく、係数が負でない場合には、０に等しい、請求項７３に記載のデバイス。
【請求項７６】
係数バイアスモジュールが、擬似ランダムベースで−１または０のいずれかに等しい値を選択し、前記選択された値を縮尺された係数の行列内の１つ以上の係数に加算する、請求項７３に記載のデバイス。
【請求項７７】
ソース係数の行列内の各係数を左シフトすることにより調整された係数の行列を生成するための手段と、
固定小数点演算を用いて前記調整された係数の行列内の係数に１次元変換を繰り返し適用することにより、変換された係数の行列を生成するための手段と、
前記変換された係数の行列内の各係数を縮尺することにより、縮尺された係数の行列を生成するための手段と、
前記縮尺された係数の行列内の１つ以上の係数に１つ以上のバイアス値を加算することにより、バイアスされた係数の行列を生成するための手段と、
前記バイアスされた係数の行列内の係数を第１の大きさだけ右シフトすることにより出力係数の行列を生成するための手段とを含むデバイスであって、
前記ソース係数の行列が、メディアデータを表し、
前記出力係数の行列内の係数が、理想的な順離散コサイン変換を用いてソース係数の行列を変換することにより作成される値の近似値であり、
係数へのバイアス値の加算が、正の誤差および負の誤差を平均して大きさが等しく、かつ平均して０に関して対称であるようにさせ、
これらの誤差が、バイアスされた係数の行列内の係数の限られた精度の固定小数点表現を第１の大きさだけ右シフトして生じた値と、バイアスされた係数の行列内の係数を精度を考慮せず第１の大きさの２のべき乗で除して生じた値との差を表す、デバイス。
【請求項７８】
第１の大きさが２Ｐに等しく、前記Ｐが変換に用いられる固定小数点数における仮数ビット数と、変換を適用することにより変換された係数の行列内の係数に加えられたビット数との和に等しい、請求項７７に記載のデバイス。
【請求項７９】
バイアスされた係数の行列を生成するための手段が、縮尺された係数の行列内の１つ以上の係数に補足バイアス値を加算することにより、バイアスされた係数の行列を生成し、
前記補足バイアス値が、係数が負の場合には−１に等しく、係数が負でない場合には、０に等しい、請求項７７に記載のデバイス。
【請求項８０】
バイアスされた係数の行列を生成するための手段が、擬似ランダムベースで−１または０のいずれかに等しい値を選択し、前記選択された値を縮尺された係数の行列内の１つ以上の係数に加算する、請求項７７に記載のデバイス。
【請求項８１】
命令がプログラマブルプロセッサに
ソース係数の行列内の各係数を左シフトすることにより、調整された係数の行列を生成させ、
固定小数点演算を用いて前記調整された係数の行列内の係数に１次元変換を繰り返し適用することにより、変換された係数の行列を生成させ、
前記変換された係数の行列内の各係数を縮尺することにより、縮尺された係数の行列を生成させ、
前記縮尺された係数の行列内の１つ以上の係数に１つ以上のバイアス値を加算することにより、バイアスされた係数の行列を生成させ、および
前記バイアスされた係数の行列内の係数を第１の大きさだけ右シフトすることにより、出力係数の行列を生成させる、命令を含む計算機可読媒体であって、
前記ソース係数の行列が、メディアデータを表し、
前記出力係数の行列内の係数が、理想的な順離散コサイン変換を用いてソース係数の行列を変換することにより作成される値の近似値であり、
係数へのバイアス値の加算が、正の誤差および負の誤差を平均して大きさが等しく、かつ平均して０に関して対称であるようにさせ、
これらの誤差が、バイアスされた係数の行列内の係数の限られた精度の固定小数点表現を第１の大きさだけ右シフトして生じた値と、バイアスされた係数の行列内の係数を精度を考慮せず第１の大きさの２のべき乗で除して生じた値との差を表す、計算機可読媒体。
【請求項８２】
第１の大きさが２Ｐに等しく、前記Ｐが変換に用いられる固定小数点数における仮数ビット数と、変換を適用することにより変換された係数の行列内の係数に加えられたビット数との和に等しい、請求項８１に記載の計算機可読媒体。
【請求項８３】
命令が、プロセッサに、縮尺された係数の行列内の１つ以上の係数に補足バイアスを加算させることにより、プロセッサにバイアスされた係数の行列を生成させ、
前記補足バイアス値が、係数が負の場合には−１に等しく、係数が負でない場合には、０に等しい、請求項８１に記載の計算機可読媒体。
【請求項８４】
命令が、プロセッサに、
擬似ランダムベースで、−１または０のいずれかに等しい値を選択させ、
縮尺された係数の行列内の１つ以上の係数へ前記選択された値を加算させる
ことにより、バイアスされた係数の行列をプロセッサに生成させる、請求項８１に記載の計算機可読媒体。
【発明の詳細な説明】
【技術分野】
【０００１】
本出願は、２００６年６月２６日出願の米国仮出願番号60/816,697、２００６年８月３０日出願の米国仮出願番号60/841,362、２００６年９月２５日出願の米国仮出願番号60/847,194、２００６年１０月１６日出願の米国仮出願番号60/829,669、２００６年１２月１１日出願の米国仮出願番号60/869,530の利益を主張する。これらの内容は全体としてここに参照として組み込まれる。
【０００２】
本開示はコンピュータグラフィックスおよびマルチメディアに関する。特にグラフィックス、画像、およびビデオ情報の圧縮に関する。
【背景技術】
【０００３】
多くの既存の画像およびビデオ符号化標準は、高分解能の画像およびビデオが比較的コンパクトなファイルまたはデータストリームとして蓄積または伝送されることができるように圧縮技術を採用している。そのような符号化標準はJoint Photographic Experts Group（ＪＰＥＧ）、Moving Pictures Experts Group（ＭＰＥＧ）-１、ＭＰＥＧ-２、ＭＰＥＧ-４第２部、Ｈ２６１、Ｈ２６３、および他の画像またはビデオ符号化標準を含む。
【０００４】
これらの多くの標準に従って、ビデオフレームは「空間」符号化を用いて圧縮される。これらのフレームは原フレーム（すなわちｉ-フレーム）であるかもしれないし、または動き補償を用いる時間符号化処理で生成される残差フレームであるかもしれない。空間符号化において、フレームは等しい大きさの画素ブロックに分割される。例えば、非圧縮フレームは８×８の画素ブロックのセットに分割されるかもしれない。各画像ブロックについて、画素成分は画素成分値の複数の行列に分解される。例えば、各画素ブロックはＹ画素成分値の行列、Ｕ画素成分値の行列、およびＶ画素成分値の行列に分解されるかもしれない。この実施例において、Ｙ画素成分値は輝度値を示し、ＵおよびＶ画素成分値はクロミナンス値を表す。
【０００５】
さらに、空間符号化において、符号化されるフレーム内の画素成分値の各行列に順離散コサイン変換（ＦＤＣＴ）が適用される。理想的な１次元ＦＤＣＴは
【数１】
2010505154.tif 000003
【０００６】
で定義される。ここで、ｓはＮ個の原値アレイ、ｔは変換されたＮ個の値のアレイであり、係数ｃは１≦ｋ≦Ｎ−１について
【数２】
2010505154.tif 000004
【０００７】
で与えられる。
【０００８】
理想的な２次元ＦＤＣＴは
【数３】
2010505154.tif 000005
【０００９】
で定義される。ここで、ｓはＮ個の原値のアレイ、ｔはＮ個の変換された値のアレイであり、c(i,j)は１次元の場合と同様に定義されたc(k)を用いてc(i , j) = c(i) c(j)で与えられる。
【００１０】
係数の行列は、画素成分値のブロックがＦＤＣＴを用いて変換される際に作成される。次に、この係数行列は量子化され、例えばハフマン符号または算術符号を用いて符号化されるかもしれない。ビデオビットストリームは、この処理を非圧縮ビデオフレーム系列内の一連のビデオフレーム内のすべての画素成分値のブロックに実行した結果を組み合わせた結果を表す。
【００１１】
非圧縮ビデオフレームはこの処理の逆を行うことによりビデオビットストリームから導出されるかもしれない。特に、ビットストリーム内の各係数行列が復元され、その復元された値は変換された係数行列を導出するために逆量子化される。次に、画素成分値の行列を導出するために変換された係数の各行列に、逆離散コサイン変換（「ＩＤＣＴ」）が適用される。理想的な１次元ＩＤＣＴは
【数４】
2010505154.tif 000006
【００１２】
により定義される。ここで、ｓはＮ個の原値のアレイ、ｔはＮ個の変換された値のアレイであり、係数ｃは１≦ｋ≦Ｎ−１について
【数５】
2010505154.tif 000007
【００１３】
で与えられる。理想的な２次元IＤＣＴは
【数６】
2010505154.tif 000008
【００１４】
により定義される。得られた画素成分値行列は、次に、複数の画素ブロックに再構成され、これらの画素ブロックは復号されたフレームを形成するために再構成される。復号されたフレームがｉ-フレームである場合、そのフレームは完全に復号されている。しかし、非圧縮フレームが予測または双予測フレームである場合、復号されたフレームは単に復号された残差フレームである。完全なフレームは、復号されたフレームに関係する動きベクトルを用いて再構築されたフレームを構築し、その再構築されたフレームを復号された残差フレームに加えることにより生成される。
【００１５】
理想的な状況の下では、画素成分値のブロックの符号化のためのＦＤＣＴを、または復号のためにＩＤＣＴを用いることによる情報の損失はない。従って、これらの理想的な状況の下では、ビデオフレームの復号版はビデオフレームの原版と同一である。しかし、ＦＤＣＴおよびＩＤＣＴの計算は実数およびかなり多くの乗算を用いることを伴うため、ＦＤＣＴまたはＩＤＣＴを計算することは計算上困難であるかもしれない。このため、ＦＤＣＴおよびＩＤＣＴで用いられる実数はしばしば精度に限度のある数を用いて近似される。実数値を表すのに精度に限界のある数を用いることが原因となって丸め誤差が生ずる。さらに、量子化および逆量子化が付加的誤差に寄与するかもしれない。
【００１６】
圧縮および復元処理における誤差は原非圧縮フレームと最終的な非圧縮フレームの間に著しい違いをもたらすかもしれない。例えば、最終的な非圧縮フレームにおける色が原非圧縮フレームにおける色と異なるかもしれない。さらに、ＩＤＣＴの符号器の実施とＩＤＣＴの復号器の実施の間の不整合に帰因する誤差が予測フレームのシーケンスの符号化および復号化において累積するかもしれない。これらの累積誤差は一般に「ＩＤＣＴドリフト」と呼ばれる。  
【発明の概要】
【００１７】
固定小数点を用いる離散コサイン変換の計算における丸め誤差を低減するための技術について説明する。これらの技術に従って、縮尺された係数行列は係数行列の係数に縮尺因数を乗算することにより、計算される。次に、中点バイアス値および補足バイアス値が縮尺された係数行列のＤＣ係数に加算される。次に、逆離散コサイン変換が求めた縮尺された係数行列に適用される。次に、求めた行列中の値が画素成分値行列を導出するために右シフトされる。ここに説明するように、補足バイアス値をＤＣ係数へ加算することはこの右シフトに起因する丸め誤差を減少させる。その結果、これらの技術を用いて復元されたディジタルメディアファイルの最終版はディジタルメディアファイルの原版により良く類似しているかもしれない。
【００１８】
一態様において、１つの方法はソース係数行列の係数へ１つ以上のバイアス値を加算することによりバイアスされた係数行列を生成することを含む。また、本方法は、固定小数点演算を用いてそのバイアスされた係数行列に１次元変換を繰り返し適用することにより、変換された係数行列を生成することを含む。さらに、本方法はその変換された係数行列内の係数を右シフトすることにより出力係数行列を生成することを含む。その出力係数行列内の係数はソース係数行列を理想的な逆離散コサイン変換を用いて変換することにより作成されるであろう値の近似値である。また、本方法はメディアプレゼンテーションユニットに出力値の行列に基づいて可聴または可視信号を出力させることを含む。バイアス値を係数に加算することは正の誤差と負の誤差の大きさを平均して等しくさせ、かつ０に関して平均して対称にさせる。これらの誤差は、変換された係数行列内の係数の限られた精度の固定小数点表現を第１の大きさだけ右シフトした結果と、変換された係数行列内の係数を精度を考慮せず２を底とし第１の大きさを指数とするべき乗で除算した結果との差を表す。
【００１９】
別の態様において、デバイスはソース係数行列の１つの係数に１つ以上のバイアス値を加算することによりバイアスされた係数の行列を生成する係数バイアスモジュールを含む。また、本デバイスは、固定小数点演算を用いてそのバイアスされた係数行列に１次元変換を繰り返し適用することにより、変換された係数の行列を生成する、逆変換モジュールを含む。さらに、本デバイスはその変換された係数行列内の係数を右シフトすることにより出力係数の行列を生成する、右シフトモジュールを含む。その出力係数行列内の係数はソース係数行列を理想的な逆離散コサイン変換を用いて変換することにより作成されるであろう値の近似値である。また、本デバイスはメディアプレゼンテーションユニットに出力係数行列に基づいて可聴または可視信号を出力させるプレゼンテーションドライバを含む。バイアス値を係数へ加算することは、正の誤差と負の誤差の大きさを平均して等しくさせ、かつ０に関して平均して対称にさせる。これらの誤差は、変換された係数行列内の係数の限られた精度の固定小数点表現を第１の大きさだけ右シフトした結果と、変換された係数行列内の係数を精度を考慮せず２を底とし第１の大きさを指数とするべき乗で除算した結果との差を表す。
【００２０】
別の態様において、デバイスは、ソース係数行列の１つの係数に１つ以上のバイアス値を付加することにより、バイアスされた係数の行列を生成するための手段を含む。また、本デバイスは、固定小数点演算を用いてバイアスされた係数の行列に１次元変換を繰り返し適用することにより、変換された係数の行列を生成するための手段を含む。さらに、本デバイスは、その変換された係数の行列内の係数を右シフトすることにより出力係数の行列を生成するための手段を含む。その出力係数の行列内の係数はソース係数の行列を理想的な逆離散コサイン変換を用いて変換することにより作成されるであろう値の近似値である。また、本デバイスはメディアプレゼンテーションユニットに出力値の行列に基づいて可聴または可視信号を出力させるための手段を含む。バイアス値を係数へ加算することは正の誤差と負の誤差の大きさを平均して等しくさせ、かつ０に関して平均して対称にさせる。これらの誤差は、変換された係数の行列内の係数の限られた精度の固定小数点表現を第１の大きさだけ右シフトした結果と、変換された係数の行列内の係数を精度を考慮せず２を底とし第１の大きさを指数とするべき乗で除算した結果との差を表す。
【００２１】
別の態様において、本発明は命令を含む計算機可読媒体に関する。実行時に、本命令は、ソース係数の行列の１つの係数に１つ以上のバイアス値を付加することによりバイアスされた係数の行列をプロセッサに生成させる。本命令は、固定小数点演算を用いてそのバイアスされた係数の行列に１次元変換を繰り返し適用することにより、変換された係数の行列をプロセッサに生成させる。さらに、その変換された係数の行列内の係数を右シフトすることにより出力係数の行列をプロセッサに生成させる。その出力係数の行列内の係数は、ソース係数の行列を理想的な逆離散コサイン変換を用いて変換することにより作成されるであろう値の近似値である。また、本命令はメディアプレゼンテーションユニットに、出力値の行列に基づいて可聴または可視信号を出力させる。バイアス値を係数へ加算することは、正の誤差と負の誤差の大きさを平均して等しくさせ、かつ０に関して平均して対称にさせる。これらの誤差は、変換された係数の行列内の係数の限られた精度の固定小数点表現を第１の大きさだけ右シフトした結果と、変換された係数の行列内の係数を精度を考慮せず２を底とし第１の大きさを指数とするべき乗で除算した結果との差を表す。
【００２２】
別の態様において、方法は、ソース係数の行列内の各係数を左シフトすることにより、調整された係数の行列を生成することを含む。また、本方法は、固定小数点演算を用いてその調整された係数の行列に１次元変換を繰り返し適用することにより、変換された係数の行列を生成することを含む。さらに、本方法は、その変換された係数の行列内の各係数を縮尺することにより、縮尺された係数の行列を生成することを含む。さらに、本方法は、その縮尺された係数の行列内の１つ以上の係数に１つ以上のバイアス値を加算することにより、バイアスされた係数の行列を生成することを含む。また、本方法は、そのバイアスされた係数の行列内の係数を第１の大きさだけ右シフトすることにより出力係数の行列を生成することを含む。ソース係数の行列はメディアデータを表す。その出力係数の行列内の係数は、ソース係数の行列を理想的な順離散コサイン変換を用いて変換することにより作成されるであろう値の近似値である。バイアス値を係数へ加算することは、正の誤差と負の誤差の大きさを平均して等しくさせ、かつ０に関して平均して対称にさせる。これらの誤差は、バイアスされた係数の行列内の係数の限られた精度の固定小数点表現を第１の大きさだけ右シフトした結果と、バイアスされた係数の行列内の係数を精度を考慮せず２を底とし第１の大きさを指数とするべき乗で除算した結果との差を表す。
【００２３】
別の態様において、デバイスは、ソース係数の行列内の各係数を左シフトすることにより調整された係数の行列を生成する左シフトモジュールを含む。また、本デバイスは、固定小数点演算を用いてその調整された係数の行列内の係数に１次元変換を繰り返し適用することにより、変換された係数の行列を生成する順変換モジュールを含む。さらに、本デバイスは、その変換された係数の行列内の各係数を縮尺することにより、縮尺された係数の行列を生成する縮尺モジュールを含む。さらに、本デバイスは、その縮尺された係数の行列内の１つ以上の係数に１つ以上のバイアス値を加算することにより、バイアスされた係数の行列を生成するバイアスモジュールを含む。また、本デバイスは、そのバイアスされた係数の行列内の係数を第１の大きさだけ右シフトすることにより出力係数の行列を生成する右シフトモジュールを含む。ソース係数の行列はメディアデータを表す。その出力係数の行列内の係数は、ソース係数の行列を理想的な順離散コサイン変換を用いて変換することにより作成されるであろう値の近似値である。バイアス値を係数へ加算することは、正の誤差と負の誤差の大きさを平均して等しくさせ、かつ０に関して平均して対称にさせる。これらの誤差は、バイアスされた係数の行列内の係数の限られた精度の固定小数点表現を第１の大きさだけ右シフトした結果と、バイアスされた係数の行列内の係数を精度を考慮せず２を底とし第１の大きさを指数とするべき乗で除算した結果との差を表す。
【００２４】
別の態様において、デバイスは、ソース係数の行列内の各係数を左シフトすることにより調整された係数の行列を生成するための手段を含む。また、本デバイスは、固定小数点演算を用いてその調整された係数の行列内の係数に１次元変換を繰り返し適用することにより、変換された係数の行列を生成するための手段を含む。さらに、本デバイスは、その変換された係数の行列内の各係数を縮尺することにより、縮尺された係数の行列を生成するための手段を含む。さらに、本デバイスは、その縮尺された係数の行列内の１つ以上の係数に１つ以上のバイアス値を加算することにより、バイアスされた係数の行列を生成するための手段を含む。また、本デバイスは、そのバイアスされた係数の行列内の係数を第１の大きさだけ右シフトすることにより出力係数の行列を生成するための手段を含む。ソース係数の行列はメディアデータを表す。その出力係数の行列内の係数は、ソース係数の行列を理想的な順離散コサイン変換を用いて変換することにより作成されるであろう値の近似値である。バイアス値を係数へ加算することは、正の誤差と負の誤差の大きさを平均して等しくさせ、かつ０に関して平均して対称にさせる。これらの誤差は、バイアスされた係数の行列内の係数の限られた精度の固定小数点表現を第１の大きさだけ右シフトした結果と、バイアスされた係数の行列内の係数を精度を考慮せず２を底とし第１の大きさを指数とするべき乗で除算した結果との差を表す。
【００２５】
別の態様において、計算機可読媒体は命令を含む。本命令は、ソース係数の行列内の各係数を左シフトすることにより、調整された係数の行列をプログラム可能プロセッサに生成させる。本命令は、固定小数点演算を用いてその調整された係数の行列に１次元変換を繰り返し適用することにより、変換された係数の行列をプロセッサに生成させる。さらに、本命令は、その変換された係数の行列内の各係数を縮尺することにより、縮尺された係数の行列をプロセッサに生成させる。さらに、本命令は、その縮尺された係数の行列内の１つ以上の係数に１つ以上のバイアス値を加算することにより、バイアスされた係数の行列をプロセッサに生成させる。また、本命令は、そのバイアスされた係数の行列内の係数を第１の大きさだけ右シフトすることにより出力係数の行列をプロセッサに生成させる。ソース係数の行列はメディアデータを表す。その出力係数の行列内の係数は、ソース係数の行列を理想的な順離散コサイン変換を用いて変換することにより作成されるであろう値の近似値である。バイアス値を係数へ加算することは、正の誤差と負の誤差の大きさを平均して等しくさせ、かつ０に関して平均して対称にさせる。これらの誤差は、バイアスされた係数の行列内の係数の限られた精度の固定小数点表現を第１の大きさだけ右シフトした結果と、バイアスされた係数の行列内の係数を精度を考慮せず２を底とし第１の大きさを指数とするべき乗で除算した結果との差を表す。
【００２６】
いくつかの場合、計算機可読媒体は、製造者に販売されおよび／またはデバイス内で用いられるかもしれない計算機プログラム製品の１部を形成するかもしれない。計算機プログラム製品は計算機可読媒体を含むかもしれない。また、いくつかの場合、パッケージ部材を含むかもしれない。
【図面の簡単な説明】
【００２７】
【図１】本発明のメディアファイルを符号化しおよび復号する代表的デバイスを示すブロック図。
【図２】本発明の符号化モジュールの代表的詳細を示すブロック図。
【図３】本発明の復号モジュールの代表的詳細を示すブロック図。
【図４】本発明の符号化モジュールの代表的動作を示すフローチャート。
【図５】本発明の復号モジュールの代表的動作を示すフローチャート。
【図６】本発明の逆離散コサイン変換（「ＩＤＣＴ」）モジュールの代表的詳細を示すブロック図。
【図７】本発明のＩＤＣＴモジュールの代表的動作を示すフローチャート。
【図８】本発明の順離散コサイン変換（「ＦＤＣＴ」）モジュールの代表的詳細を示すブロック図。
【図９】本発明のＦＤＣＴモジュールの代表的動作を示すフローチャート。
【図１０】本発明の第１の代表的１次元変換を示すダイヤグラム。
【図１１】本発明の第２の代表的１次元変換を示すダイヤグラム。
【図１２】本発明のＩＤＣＴモジュールで用いられる代表的な縮尺された１次元変換を示すダイヤグラム。
【発明を実施するための形態】
【００２８】
以下の添付図面および説明において、１つ以上の例の詳細が記述される。本発明の他の特徴、目的、利点は説明と図面とから、および特許請求の範囲から明らかになるだろう。
【００２９】
図１は、メディアファイルを符号化しおよび復号する代表的デバイスを示すブロック図である。デバイス２はパーソナルコンピュータ、移動無線電話、サーバ、ネットワーク機器、車載計算機、ビデオゲームプラットホーム、携帯用ビデオゲームデバイス、計算機ワークステーション、計算機売店、ディジタルサイネージ、メインフレーム計算機、テレビセットトップボックス、ネットワーク電話、携帯情報端末、ビデオゲームプラットホーム、移動メディアプレーヤ、ホームメディアプレーヤ、ディジタルビデオプロジェクタ、個人用メディアプレーヤ（例えば、ｉＰｏｄ）、または別の形式の電子デバイス、を含むかもしれない。
【００３０】
デバイス２はメディアデータを生成するためのメディアソース４を含むかもしれない。メディアソース４は画像データを取得するためにディジタルビデオまたは静止画像カメラを含むかもしれない。メディアソース４はデバイス２に組み込まれるかもしれないし、周辺デバイスとしてデバイス２に付加されるかもしれない。また、メディアソース４はオーディオデータを記録するためにマイクロホンを含むかもしれない。メディアソース４はメディアデータをプロセッサ６に出力するかもしれない。プロセッサ６はディジタル信号プロセッサ（「ＤＳＰ」）、マイクロプロセッサ、または他の形式の集積回路であるかもしれない。
【００３１】
プロセッサ６がメディアソース４からメディアデータを入力すると、符号化モジュール８はメディアデータを符号化するかもしれない。符号化モジュール８はプロセッサ６で実行されるソフトウェアを含むかもしれない。代替的に、符号化モジュール８はプロセッサ６内にメディアデータを符号化する専用ハードウェアを含むかもしれない。さらに別の代替手段において、符号化モジュール８はメディアデータを符号化するソフトウェアとハードウェアの任意の組み合わせを含むかもしれない。
【００３２】
符号化モジュール８はメディア保管庫１０に符号化されたメディアデータを格納するかもしれない。メディア保管庫１０はフラッシュメモリー、ランダムアクセスメモリー、ハードディスクドライブ、または他の形式の揮発性もしくは不揮発性のデータ格納ユニットを含むかもしれない。
【００３３】
復号モジュール１２はメディア保管庫１０から符号化されたメディアデータを検索するかもしれない。復号モジュール１２はプロセッサ６により実行されるソフトウェアを含むかもしれない。代替的に、復号モジュール１２はプロセッサ６内に符号化されたメディアデータ復号する専用ハードウェアを含むかもしれない。さらに別の代替手段において、復号モジュール１２は符号化されたメディアデータを協調して復号するソフトウェアとハードウェアの組み合わせを含むかもしれない。
【００３４】
デバイス２のプレゼンテーションドライバ１３はメディアプレゼンテーションユニット１４に復号モジュール１２で復号されたメディアデータを提示させる。例えば、メディアプレゼンテーションユニット１４は画像またはビデオメディアデータを表示する計算機モニタを含むかもしれない。別の例において、メディアプレゼンテーションユニット１４はオーディオメディアデータを提示するオーディオ出力デバイス（例えば、スピーカ）を含むかもしれない。メディアプレゼンテーションユニット１４はデバイス２に組み込まれるかもしれないし、周辺デバイスとして有線または無線リンクを介してデバイス２に接続されるかもしれない。プレゼンテーションドライバ１３はデバイスドライバもしくは他のソフトウェア、ハードウェアもしくはファームウェアユニット、またはメディアプレゼンテーションユニット１４にメディアデータを提示させる他のメカニズムを含むかもしれない。
【００３５】
また、デバイス２はネットワークインターフェース１６を含むかもしれない。ネットワークインターフェース１６は有線または無線リンクを介するデバイス２と計算機ネットワーク間の通信を容易にするかもしれない。例えば、ネットワークインターフェース１６はデバイス２と移動電話ネットワーク間の通信を容易にするかもしれない。デバイス２はネットワークインターフェース１６を介してメディアファイルを受信するかもしれない。例えば、デバイス２は写真、ビデオクリップ、ストリーミングビデオ（例えば、テレビ、テレビ会議、映画）、オーディオクリップ（例えば、呼び出し音、歌、ＭＰ３ファイル）をネットワークインターフェース１６を通じて受信するかもしれない。ネットワークインターフェース１６がメディアファイルまたはビデオビットストリームを受信すると、ネットワークインターフェース１６はそのメディアファイルまたはビデオビットストリームをメディア保管庫１０に格納するかもしれない。
【００３６】
ビデオ信号はピクチャのシーケンスとして記述されるかもしれない。これはフレーム（ピクチャ全体）、またはフィールド（例えばフレームの奇数または偶数ラインのいずれかを含むピクチャ）を含む。さらに、各フレームもしくはフィールドは２つ以上のスライス、またはフレームもしくはフィールドの下位部分を含むかもしれない。用語「フレーム」はここに用いられると、単独であっても他の用語との組み合わせであっても、ピクチャ、フレーム、フィールド、またはそれらのスライスを指すかもしれない。
【００３７】
符号化モジュール８が一連のビデオフレームを符号化する場合、符号化モジュール８はビデオフレームのいくつかを選択して「ｉ-フレーム」とすることから始めるかもしれない。例えば、符号化モジュール８は、８番目毎のフレームをｉ-フレームとして選択するかもしれない。ｉ-フレームは、他のフレームを参照しないフレームである。ｉ-フレームを選択した後に、符号化モジュール８は、ｉ-フレームを符号化するために「空間符号化」を用いる。さらに、符号化モジュール８は、残りのフレームを符号化するために「時間符号化」を用いるかもしれない。
【００３８】
フレームを符号化するための空間符号化を用いるために、符号化モジュール８はフレームデータを複数画素の複数ブロックに分割するかもしれない。例えば、符号化モジュール８はフレームデータを幅８画素、高さ８画素の画素ブロックに分割するかもしれない（すなわち各ブロックは６４画素を含む）。次に、符号化モジュール８は各画素ブロック内の画素の画素成分値を別々の画素成分値行列に分離するかもしれない。画素の画素成分値は、その画素の見え方を特徴づける値である。例えば、各画素はＹ画素成分値、Ｃｒ画素成分値、およびＣｂ画素成分値を特定するかもしれない。Ｙ画素成分値は画素の輝度を表し、Ｃｒ画素成分値は画素の赤のクロミナンスを表し、Ｃｂ画素成分値は画素の青のクロミナンスを表す。本例において、符号化モジュール８が画素ブロックの画素成分値を分離すると、符号化モジュール８はＹ画素成分値行列、Ｃｒ画素成分値行列、およびＣｂ画素成分値行列を得るかもしれない。
【００３９】
画素成分値を複数の画素成分値行列に分離した後に、符号化モジュール８は画素成分値行列の各々に対する変換された係数の行列を生成する。符号化モジュール８は、最初に画素成分値行列内の画素成分値を左シフトすることにより、調整された係数の行列を生成することにより、画素成分値行列に対する変換された係数の行列を生成するかもしれない。次に、符号化モジュール８は、固定小数点演算を用いてその調整された係数行列に１次元変換を繰り返し適用する。これにより係数行列を生成する。いくつかの実施において、次に、符号化モジュール８はその変換された係数行列を１組の縮尺因数に従って縮尺することにより、変換された係数の行列を生成するかもしれない。これらの縮尺因数の各々は整数値である。縮尺因数は、１次元変換内の因数が簡単な有理数を用いて近似されるかもしれないような方法で選択されている。縮尺を用いない実施において、変換を適用することにより生成された係数行列は変換された係数行列である。
【００４０】
変換された係数行列における各係数は、理想的２次元順離散コサイン変換（「ＦＤＣＴ」）を符号化された係数行列に適用することより作成さたであろう値の行列内の対応する値を近似する。理想的な１次元ＦＤＣＴは
【数７】
2010505154.tif 000009
【００４１】
で定義される。ここで、ｓはＮ個の原値のアレイ、ｔはＮ個の変換された値のアレイであり、係数ｃは、１≦ｋ≦Ｎ−１に対して
【数８】
2010505154.tif 000010
【００４２】
で与えられる。理想的な２次元ＦＤＣＴは、
【数９】
2010505154.tif 000011
【００４３】
で定義される、ここで、ｓはＮ個の原値のアレイ、ｔはＮ個の変換された値のアレイであり、c(i,j)は１次元の場合に定義されたc(k)を用いてc(i , j) = c(i) c(j)で与えられる。
【００４４】
変換された係数行列を導出した後に、符号化モジュール８は、変換された係数行列内の係数を量子化することにより量子化係数の行列を生成する。変換された係数の量子化は、変換された係数行列内の高い周波数の係数に関係する情報量を低下させるかもしれない。量子化係数行列を生成した後に、符号化モジュール８はエントロピー符号化方式を量子化係数行列に適用するかもしれない。例えば、符号化モジュール８はハフマン符号化方式を係数行列内の量子化係数に適用するかもしれない。符号化モジュール８が量子化係数行列の各々にエントロピー符号化方式を適用すると、符号化モジュール８はビデオビットストリームの１部として符号化された行列を出力するかもしれない。
【００４５】
時間符号化を用いてフレームを符号化するために、符号化モジュール８はフレームを複数の「マクロブロック」に分割するかもしれない。用いられる符号化標準に従って、これらのマクロブロックは固定または可変サイズであるかもしれないし、オーバラップまたは非オーバラップしているかもしれない。例えば、各マクロブロックは１６×１６の画素ブロックであるかもしれない。フレーム内の各マクロブロックに対して、符号化モジュール８は１つ以上の基準フレーム内のソースマクロブロックを特定することを試みるかもしれない。符号化標準に従って、基準フレームは、ｉ-フレーム、予測フレーム、または双予測フレームであるかもしれない。符号化モジュール８が基準フレーム内のソースマクロブロックを特定できる場合、符号化モジュール８はそのマクロブロックについての動きベクトルを記録する。動きベクトルは、特定されたソースマクロブロックに対するそのマクロブロックの水平方向の移動量を示すｘ値、および特定されたソースマクロブロックに対するそのマクロブロックの垂直方向の移動量を示すｙ値を含む。符号化モジュール８が基準フレーム内のソースマクロブロックを特定できない場合、符号化モジュール８は、そのマクロブロックについての動きベクトルを記録するようには要求されないかもしれない。次に、符号化モジュール８は「再構築された」フレームを生成する。その再構築されたフレームは、現フレームに対する記録された動きベクトルに従ってマクロブロックを基準フレームから動かした結果となるだろうフレームを含む。再構築されたフレームを生成した後に、符号化モジュール８は、再構築されたフレームの各画素の画素成分値を現フレームの対応する画素の対応する画素成分値から減算し、「残差」フレームを得る。次に、符号化モジュール８は現フレームのマクロブロックに対する動きベクトルを圧縮するためにエントロピー符号化方式を用いるかもしれない。さらに、符号化モジュール８は残差フレームを圧縮するために上述した空間符号化技術を用いる。
【００４６】
復号モジュール１２は符号化モジュール８に類似ではあるが逆の処理を実行するかもしれない。例えば、空間復号処理を実行するために、復号モジュール１２はエントロピー復号方式を符号化されたビデオビットストリームの量子化係数の符号化された各行列に適用するかもしれない。次に、復号モジュール１２は各量子化係数行列の係数を逆量子化し、それにより各量子化係数行列に対する逆量子化された係数の行列を生成するかもしれない。各量子化係数行列に対して、復号モジュール１２は量子化係数行列を縮尺することにより、縮尺された係数の行列を生成する。
【００４７】
縮尺された係数行列を生成した後に、復号モジュール１２は中点バイアス値および補足バイアス値を行列のＤＣ係数に加算することによりバイアスされた係数の行列を生成する。行列のＤＣ係数は行列内の他の係数の平均値に等しい係数である。ＤＣ係数は通常、行列の左上隅の係数である。以下に詳述するように、復号モジュール１２が行列の各行および列に逆離散コサイン変換分解を適用して作成した値を右シフトする場合、ＤＣ係数へのバイアス値の加算は、丸め誤差を減少させるかもしれない。これらの丸め誤差は、以下の事実、すなわち、これらの右シフトが計算上より高価な除算操作の置き換えであり、さらに固定小数点演算における右シフトが常に除算操作と同じ結果を生むというわけではないという事実に起因しているかもしれない。
【００４８】
復号モジュール１２がバイアスされた係数行列を生成した後に、復号モジュール１２は、バイアスされた係数行列に対する変換された係数の行列を生成するために固定小数点演算を用いる。復号モジュール１２はバイアスされた係数行列に１次元変換を繰り返し適用することにより、変換された係数の行列を生成する。例えば、復号モジュール１２はバイアスされた係数行列の各行ベクトルに１次元変換を適用することにより、中間的係数の行列を生成するかもしれない。この例においては、復号モジュール１２は、次に中間的係数行列の各列ベクトルに１次元変換を適用することにより、変換された係数の行列を生成するかもしれない。
【００４９】
復号モジュール１２は、この１次元変換を一連の「バタフライ構造演算」を用いて適用するかもしれない。一般に、「バタフライ構造演算」は以下の演算のことを言う。すなわち、第１の中間値が第１の入力値に第１の定数を乗算することにより作成され、第２の中間値が第１の入力値に第２の定数を乗算することにより作成され、第３の中間値が第２の入力値に第１の定数を乗算することにより作成され、第４の中間値が第２の入力値に第２の定数を乗算することにより作成され、第１の出力値が第１の中間値と第３の中間値を加算することにより作成され、第２の出力値が第２の中間値と負号をつけた第４の中間値を加算することにより作成される演算である。バタフライ動作において、定数は１を含む任意の有理数または無理数であるかもしれない。例示的バタフライ構造演算は図１０、１１、および１２の例に示す変換において示される。
【００５０】
数を表すために有限な利用可能なビット数を有するシステムにおいて、バタフライ構造演算中に無理定数の乗算を実行することは実用的ではないかもしれない。それ故、復号モジュール１２は無理定数を近似する有理分数を値に乗算することにより無理定数による乗算を近似するかもしれない。値に有理分数を効率的に乗算するために、復号モジュール１２はその値に有理分数の分子を乗算し、次に得られた値を有理分数の分母のｌｏｇ２だけ右シフトするかもしれない。上述したように、固定小数点演算における右シフト操作が対応する除算操作に等しい結果を常に生み出すというわけではないため、右シフト操作は丸め誤差を生ずる。
【００５１】
以下に詳述するように、復号モジュール１２は、丸め誤差を抑圧するためにいくつかの有理分数の負の分子を用いるかもしれない。負の分子を用いることは、値を右シフトする前に中点バイアス値を加えるという必要性を回避するかもしれない。中点バイアス値を加えると言うことが逆離散コサイン変換の適用に不要な複雑さを付加するかもしれない故、このことは有利であるかもしれない。
【００５２】
復号モジュール１２が変換された係数行列を生成した場合、復号モジュール１２は変換された係数行列内の各係数を、変換を適用することにより加えられたビット数と、逆量子化係数行列の係数を縮尺することにより加えられたビット数との和に等しい桁数だけ右シフトすることにより調整された係数の行列を生成する。次に、復号モジュール１２は、その調整された係数行列内の係数をクリッピングすることにより、クリッピングされた係数の行列を生成するかもしれない。調整された係数行列内の係数のクリッピングは、係数が画素成分値のための許容範囲内になるように、調整された係数を変更する。したがって、クリッピングされた係数行列は、画素成分値行列として特性化されるかもしれない。
【００５３】
画素成分値行列を生成した後に、復号モジュール１２は、画素成分値行列と、画素ブロックに対する他の画素成分値を格納する複数の行列とを結合することにより画素ブロックを生成するかもしれない。次に、復号モジュール１２は、その画素ブロックの画素をビデオフレーム内に結合するかもしれない。
【００５４】
予測フレームを復号するために、復号モジュール１２は予測フレームに対する残差画像の量子化係数行列を復号するために上述した空間復号技術を用いるかもしれない。さらに、復号モジュール１２は予測フレームの動きベクトルを復号するためにエントロピー復号方式を用いるかもしれない。次に、復号モジュール１２は動きベクトルに従って予測フレームの基準フレームのマクロブロックを「動かす」ことにより、再構築されたフレームを生成するかもしれない。再構築されたフレームを生成した後に、復号モジュール１２は復号された残差フレームの各画素の画素成分値を、再構築されたフレームの対応する画素の対応する画素成分値に加算する。この加算の結果は再構築された予測フレームである。
【００５５】
この開示で説明する技術はいくつかの利点を提供するかもしれない。例えば、離散コサイン変換および逆離散コサイン変換の計算における丸め誤差の減少は、画像データにおいては目に見える誤差を抑圧し、オーディオデータにおいては聞きとれる誤差を抑圧するかもしれない。さらに、これらの技術が固定小数点計算に適用されるかもしれない故、これらの技術は移動電話、携帯情報端末、個人メディアプレーヤのようなより小型の、複雑さの小さいデバイスに適用されるかもしれない。特に、これらの技術は全内容が参照としてここに組み込まれる米国電気電子技術者学会（ＩＥＥＥ）標準１１８０により指定された精度要求を満たしながら、仮数部分にごく限られたビット数（例えば３ビット）を有する固定小数点数を用いて適用されるかもしれない。さらに、これらの技術は国際標準化機構（ＩＳＯ）／ＭＥＣの動画像専門家グループ（ＭＰＥＧ）−１、ＭＰＥＧ−２、ＭＰＥＧ−４第２部のメディアフォーマットに加えて国際電気通信連合標準化部門（ＩＴＵ−Ｔ）勧告Ｈ．２６１、Ｈ．２６３、Ｈ．２６４、Ｔ．８１（ＪＰＥＧ）を含むフォーマットに適用されるかもしれない。
【００５６】
図２は符号化モジュール８の代表的詳細を示すブロック図である。符号化モジュール８は複数の「モジュール」のセットを含むかもしれない。これらのモジュールは符号化モジュール８のソフトウェア命令のサブセットを含むかもしれない。代替的に、これらのモジュールは専用ハードウェアを含むかもしれない。別の代替手段において、これらのモジュールは、ソフトウェア命令および専用ハードウェアを含むかもしれない。
【００５７】
図２の例に示すように、符号化モジュール８は、符号化モジュール８が１つのビデオフレームをｉ-フレーム、予測フレーム、または双予測フレームとして処理するどうかを制御するフレーム制御モジュール２０を含む。例えば、符号化モジュール８がビデオフレームを入力すると、フレーム制御モジュール２０は、そのビデオフレームに関係するビットストリームフラグがそのフレームがｉ-フレーム、予測フレーム、または双予測フレームのいずれを示すかを判定するかもしれない。フレーム制御モジュール２０が、ビットストリームフラグがフレームがｉ-フレームであることを示すと判定する場合、フレーム制御モジュール２０はそのビデオフレームが直ちにそのフレームに対して空間符号化を実行する１組のモジュールで処理されるようにするかもしれない。他方、フレーム制御モジュール２０が、フレームが予測フレームまたは双予測フレームであると判定する場合、フレーム制御モジュール２０はそのビデオフレームが時間符号化を実行する１組のモジュールで処理されるようにするかもしれない。
【００５８】
符号化モジュール８はビデオフレームに空間符号化を適用するための一連のモジュールを含む。これらのモジュールはブロックスプリッタモジュール２２、成分抽出モジュール２４、順変換モジュール２６、量子化モジュール２８、およびエントロピー符号化モジュール３０を含む。ブロックスプリッタモジュール２２はメディアソース４、ネットワークインターフェース１６、または別のソースから符号化されていないビデオフレームを入力するかもしれない。ブロックスプリッタモジュール２２が符号化されていないビデオフレームを入力すると、ブロックスプリッタモジュール２２は、そのフレームを複数の画素ブロックに分解するかもしれない。ブロックスプリッタモジュール２２は成分抽出モジュール２４に画素ブロックを出力するかもしれない。
【００５９】
成分抽出モジュール２４が画素ブロックを入力すると、成分抽出モジュール２４は各画素の画素成分値を異なる色形式に変換するかもしれない。例えば、成分抽出モジュール２４は各画素を赤-緑-青（ＲＧＢ）の色形式からＹＣｒＣｂの色形式へ変換するかもしれない。ブロック内の画素を異なる色形式に変換した後に、成分抽出モジュール２４はブロック内の画素の画素成分値を画素成分値行列に分解するかもしれにない。例えば、成分抽出モジュール２４は１つの画素ブロックからＹ値の行列、Ｃｒ値の行列、およびＣｂ値の行列を抽出するかもしれない。Ｙ値は画素の輝度を特定し、Ｃｒ値は画素の赤のクロミナンスを特定し、およびＣｂ値は画素の青のクロミナンスを特定する。成分抽出モジュール２４が画素成分値行列を抽出し終わると、成分抽出モジュール２４は行列の各々を順変換モジュール２６に別々に出力するかもしれない。
【００６０】
順変換モジュール２６が画素成分値行列を入力すると、順変換モジュール２６は変換された係数の行列を生成する。縮尺された係数のこの行列内の各係数は、画素成分値行列を変換する理想的な順離散コサイン変換を用いて作成されるであろう係数を近似する。
【００６１】
順変換モジュール２６は１次元変換を画素成分値行列に適用するために固定小数点演算を用いる。固定小数点演算を用いることはいくつかの状況において有利であるかもしれない。例えば、移動電話などの、より小型のデバイスは浮動小数点演算を実行するために必要な浮動小数点ユニットを含まないかもしれない。順変換モジュール２６は画素成分値の各々を左シフトすることにより縮尺された係数の行列を生成する処理を開始するかもしれない。例えば、順変換モジュール２６は、１次元変換を適用したとき順変換モジュール２６が用いる数の固定小数点表現の精度のビット数（すなわち仮数ビット数）と、変換を適用することにより得た変換された係数を縮尺することにより除去された精度のビット数との和だけ、画素成分値の各々を左シフトすることにより、調整された係数の行列を生成するかもしれない。画素成分値の各々を左シフトした後に、順変換モジュール２６は調整された係数行列の行ベクトルの各々に変換を実行するかもしれない。調整された係数行列の行ベクトルの各々に離散コサイン変換を実行することにより中間係数の行列が生成される。次に、順変換モジュール２６は中間係数行列の列ベクトルの各々に変換を実行するかもしれない。中間係数行列の列ベクトルの各々に変換を実行することにより変換された係数行列が得られる。
【００６２】
変換された係数行列を生成した後に、順変換モジュール２６は、変換された係数行列内の異なる部分における変換された係数を異なる縮尺因数で縮尺する。後述するように、復号モジュール１２は逆変換の適用において、これらの縮尺因数の逆数を用いるかもしれない。順変換モジュール２６が変換された係数を縮尺因数に従って縮尺し終わると、順変換モジュール２６は得られた縮尺された係数行列を量子化モジュール２８に出力するかもしれない。
【００６３】
量子化モジュール２８が順変換モジュール２６から係数行列を入力すると、量子化モジュール２８は縮尺された係数を量子化するかもしれない。量子化モジュール２８は、採用している符号化標準に依存して種々の方法で縮尺された係数を量子化するかもしれない。例えば、ＭＰＥＧ−４第２部の標準に従って、量子化モジュール２８はｉ-フレームに対する縮尺された係数行列内の係数を量子化するために次の量子化行列を用いるかもしれない。
【表１】
2010505154.tif 000012
【００６４】
さらに、この例において、量子化モジュール２８は予測フレームまたは双予測フレームに対する縮尺された係数行列内の係数を量子化するために次の量子化行列を用いるかもしれない。
【表２】
2010505154.tif 000013
【００６５】
量子化モジュール２８が量子化された係数行列を生成した後に、エントロピー符号化モジュール３０は１つのエントロピー符号化方式を用いて量子化された係数行列を圧縮するかもしれない。エントロピー符号化方式を用いて量子化された係数行列を圧縮するために、エントロピー符号化モジュール３０は係数のジグザグパターンをたどることにより量子化された係数を１つのベクトルに構成するかもしれない。言い換えれば、エントロピー符号化モジュール３０は量子化された係数の２次元行列内のすべての量子化された係数を、予測できる量子化された係数の１次元ベクトルに配列するかもしれない。次に、エントロピー符号化モジュール３０は、ハフマン符号化または算術符号化のようなエントロピー符号化方式を量子化された係数のベクトルに適用するかもしれない。
【００６６】
符号化モジュール８はビデオフレームの時間符号化を実行するための１つ以上のモジュールも含む。図２の例に示すように、符号化モジュール８は動き推定モジュール３２、再構築フレーム生成モジュール３４、および残差生成モジュール３６を含む。動き推定モジュール３２は現ビデオフレーム内の各マクロブロックに対する基準画像内のソースマクロブロックを特定することを試みる。動き推定モジュール３２は現フレーム内のマクロブロックに対するソースマクロブロックを、そのマクロブロックに類似した画素を含む基準画像内の複数マクロブロックを探索することにより特定することを試みるかもしれない。動き推定モジュール３２は現フレームのマクロブロックに対するソースマクロブロックを特定するために異なる符号化標準に従って異なるサイズの領域を探索するかもしれない。例えば、動き推定モジュール３２は探索領域の中心に現マクロブロックがある幅３２画素、高さ３２画素領域内のソースマクロブロックを探索するかもしれない。動き推定モジュール３２が現フレーム内のマクロブロックに対するソースマクロブロックを特定すると、動き推定モジュール３２は現フレーム内のマクロブロックに対する動きベクトルを計算する。現フレーム内のマクロブロックに対する動きベクトルは特定されたソースマクロブロックと現フレームのマクロブロックの間の水平位置の差を示すｘ値を指定する。動き推定モジュール３２が動きベクトルを計算し終わるかまたは現フレーム内の各マクロブロックに対するソースマクロブロックを特定できなかった場合、動き推定モジュール３２は現フレームに対する計算された動きベクトルを再構築フレーム生成モジュール３４へ出力するかもしれない。
【００６７】
再構築フレーム生成モジュール３４は再構築されたフレームを生成するために動きベクトルおよび基準フレームを用いるかもしれない。再構築フレーム生成モジュール３４は現フレーム内の各マクロブロックに対する動きベクトルを基準フレーム内のソースマクロブロックに適用することにより再構築されたフレームを生成するかもしれない。実際には、再構築フレーム生成モジュール３４は、基準フレームのマクロブロックが、現フレームの対応する動きベクトルにより示される位置へ「動かされた」フレームを作る。残差フレーム生成モジュール３６は再構築されたフレーム内の画素成分値を現フレーム内の対応する画素成分値から減算することにより残差フレームを生成するかもしれない。一般に、残差フレームは再構築されたフレームまたは現フレームのいずれかより少ない情報を含む。残差フレーム生成モジュール３６が残差フレームを生成した後に、残差フレーム生成モジュール３６は残差フレームの空間符号化を開始するために残差フレームをブロックスプリッタモジュール２２へ出力する。さらに、動き推定モジュール３２は動きベクトルを圧縮するために現フレームに対する動きベクトルをエントロピー符号化モジュール３０へ出力する。残差フレームが空間符号化され、エントロピー符号化モジュール３０が動きベクトルを符号化し終わった後に、ストリーム出力モジュール３８は、ビデオビットストリームの部分として空間符号化された残差フレームおよび符号化された動きベクトルをフォーマットするかもしれない。
【００６８】
図３は、復号モジュール１２の代表的詳細を示すブロック図である。復号モジュール１２はエントロピー復号モジュール４４、逆量子化モジュール４６、逆変換モジュール４８、画素再構築モジュール５０、フレームバッファ５１、ブロック結合器モジュール５２、フレーム制御モジュール５３、基準フレーム格納モジュール５４、再構築フレーム生成モジュール５６、および予測フレーム生成モジュール５８を含むかもしれない。これらのモジュールのいくつかまたはすべては復号モジュール１２のソフトウェア命令のサブセットを含むかもしれない。代替的に、これらのモジュールのいくつかまたはすべては専用ハードウェアまたはファームウェアを含むかもしれない。別の代替手段において、これらのモジュールは、ソフトウェア命令および専用ハードウェアまたはファームウェアを含むかもしれない。
【００６９】
復号モジュール１２がビデオフレームを含むビットストリームを入力すると、エントロピー復号モジュール４４はエントロピー復号方式をビデオフレーム内の量子化された係数行列に適用するかもしれない。ビットストリームはビットストリームの量子化係数行列にどのエントロピー復号方式を適用するかをエントロピー復号モジュール４４に示す値を含むかもしれない。さらに、エントロピー復号モジュール４４はビデオフレームの動きベクトルを復号するために同じまたは異なるエントロピー復号方式を適用するかもしれない。
【００７０】
エントロピー復号モジュール４４がビデオファイル内の量子化係数行列にエントロピー復号方式を適用した後に、逆量子化モジュール４６は量子化された係数行列の各々内の係数を逆量子化するかもしれない。符号化標準に依存して、逆量子化モジュール４６は種々の方法で係数を逆量子化するかもしれない。例えば、ＭＰＥＧ−４第２部標準に従って、逆量子化モジュール４６は上で２つの異なる方法において、一覧表にした２つの量子化行列を用いるかもしれない。第１には、逆量子化モジュール４６は、Ｈ．２６３形式の逆量子化を実行するためにこれらの量子化行列を用いるかもしれない。Ｈ．２６３形式の逆量子化において、逆量子化モジュール４６は量子化された値QF[v][u]から、再構築された係数F″[v][u]を以下のように求める。
【数１０】
2010505154.tif 000014
【００７１】
F″[v][u]: F″[v][u] = Sign(QF[v][u]) × |F″[v][u]|
これはquantiser_scaleとのただ１回の乗算を含む。第２には、逆量子化モジュール４６は、ＭＰＥＧ１／２形式の逆量子化を実行するためにこれらの量子化行列を用いるかもしれない。ＭＰＥＧ１／２形式の逆量子化において、逆量子化モジュール４６は追加の重みづけ行列W[w][v][u]を用いる。ここでｗはどの重みづけ行列が用いられようとしているかを示す。
【数１１】
2010505154.tif 000015
【００７２】
逆変換モジュール４８が逆量子化された係数行列を入力すると、逆変換モジュール４８は画素成分行列を生成する。以下で詳細に説明するように、逆変換モジュール４８は、逆量子化された係数行列内の各係数を最初に縮尺し、行列のＤＣ係数にバイアス値を加算し、一連の１次元離散コサイン変換を適用し、得られた値を右シフトし、右シフトされた値をクリッピングし、次にクリッピングされた値を出力することにより、画素成分値行列を生成する。
【００７３】
逆変換モジュール４８が画素成分値行列を出力した後に、画素再構築モジュール５０は画素成分値行列と、ビデオフレーム内の対応する位置に関連する画素成分値行列とを結合することにより、画素の行列を生成するかもしれない。例えば、画素再構築モジュール５０は逆変換モジュール４８からＹ画素成分値行列、Ｃｂ画素成分値行列、およびＣｒ画素成分値行列を入力するかもしれない。これらの３つの行列の各々は単一の８×８の画素ブロックに対する画素成分を含むかもしれない。画素の各々はＹ画素成分値、Ｃｂ画素成分値、およびＣｒ画素成分値を含むかもしれない。画素の行列を生成した後に、画素再構築モジュール５０は画素ブロックをブロック結合器モジュール５２へ出力するかもしれない。
【００７４】
ブロック結合器モジュール５２が画素ブロックを入力する場合、ブロック結合器モジュール５２はブロック結合器モジュール５２がビデオフレーム内の画素ブロックのいくつかまたはすべてを入力するまで、画素ブロックをバッファリングするかもしれない。画素の１つ以上のブロックを入力後に、ブロック結合器モジュール５２は画素ブロックをビデオフレーム内に結合し、そのビデオフレームをフレームバッファ５１へ出力する。ビデオフレームはメディアプレゼンテーションユニット１４で表示されるまでフレームバッファ５１に格納されるかもしれない。さらに、ブロック結合器モジュール５２はビデオフレームをフレーム格納モジュール５４へ出力する。フレーム格納モジュール５４内のビデオフレームは予測および双予測フレームの再構築のための基準フレームとして用いられるかもしれない。さらに、フレーム格納モジュール５４内のビデオフレームは予測および双予測フレームの再構築において用いられる残差フレームであるかもしれない。
【００７５】
予測フレームまたは双予測フレームを再構築するために、復号モジュール１２は再構築フレーム生成モジュール５６を含む。再構築フレーム生成モジュール５６はエントロピー復号モジュール４４から復号された動きベクトルを入力する。さらに、再構築フレーム生成モジュール５６は現フレームの基準フレームをフレーム格納モジュール５４から検索する。次に、再構築フレーム生成モジュール５６は複数マクロブロックを基準フレーム内のそれらの位置から動きベクトルで示された位置へ「動かす」。再構築されたフレームはこのようにマクロブロックを動かしたことの結果である。再構築フレーム生成モジュール５６が再構築されたフレームを生成した後に、再構築フレーム生成モジュール５６は再構築されたフレームを予測フレーム生成モジュール５８へ出力する。
【００７６】
予測フレーム生成モジュール５８が一時的フレームを入力すると、予測フレーム生成モジュール５８は現フレームに対する残差フレームをフレーム格納モジュール５４から検索するかもしれない。残差フレームの検索後、予測フレーム生成モジュール５８は残差フレームおよび再構築されたフレームの各画素の対応する色成分を加算するかもしれない。再構築されたビデオフレームはこの加算の結果である。次に、予測フレーム生成モジュール５８はこの再構築されたフレームをメディアプレゼンテーションユニット１４の最終的表示のためにフレームバッファ５１へ出力する。
【００７７】
図４は符号化モジュール８の代表的動作を示すフローチャートである。図４に説明される操作は連続した形で説明されるが、この操作はパイプライン方式で実行されるかもしれないことに注意するべきである。
【００７８】
最初に、符号化モジュール８は未符号化ビデオフレームのシーケンスを入力する（６０）。例えば、符号化モジュール８は画素のセットの形で未符号化ビデオフレームのシーケンスをメディアソース４から入力するかもしれない。符号化モジュール８が未符号化フレームのシーケンスを入力すると、符号化モジュール８内のフレーム制御モジュール２０は未符号化フレームのシーケンス内の現フレームがｉ-フレームとして、または予測もしくは双予測フレームとして符号化されるべきかを判定するかもしれない（６２）。
【００７９】
フレーム制御モジュール２０が現フレームがｉ-フレームとして符号化されるべきであると判定する場合、符号化モジュール８内のブロックスプリッタモジュール２２は現フレームを複数画素のブロックに分割するかもしれない（６４）。例えば、符号化モジュール８は現フレームを２×２、４×４、または８×８の画素ブロックに分割するかもしれない。
【００８０】
現フレームを複数の画素ブロックに分割した後に、成分抽出モジュール２４は、画素ブロックの各々内の画素成分値を分離するかもしれない（６６）。その結果、画素の各ブロックに対して画素成分値の３つのブロックがあるかもしれない。すなわち、画素の輝度を表すＹ値のブロック、画素の青のクロミナンスを表すＣｂ値のブロック、および画素の赤のクロミナンスを表すＣｒ値のブロックである。
【００８１】
次に、符号化モジュール８内の順変換モジュール２６は画素成分値行列の各々に対して縮尺された係数の行列を生成するかもしれない。（６８）。これらの縮尺された係数行列内の係数は、画素成分値行列のそれぞれに理想的２次元順離散コサイン変換を用いて作成されるであろう値の近似値である。
【００８２】
順変換モジュール２６が、画素成分の行列の各々に対する縮尺された係数行列を生成した後に、符号化モジュール８内の量子化モジュール２８は縮尺された係数行列の各々内の係数を量子化するかもしれない（７０）。量子化モジュール２８が各縮尺された係数行列内の係数を量子化すると、エントロピー符号化モジュール３０は量子化された係数行列の各々にエントロピー符号化処理を実行するかもしれない（７２）。例えば、符号化モジュール８は量子化された係数行列の各々にハフマン符号化方式または算術符号化方式を適用するかもしれない。エントロピー符号化処理はデータをさらに圧縮した。しかし、エントロピー符号化処理は情報の消失を生じない。各量子化された係数行列にエントロピー符号化処理を実行した後に、符号化モジュール８内のストリーム出力モジュール３８は、ビデオフレームのシーケンスに対するビットストリームに量子化された係数の符号化された行列を加えるかもしれない（７４）。ストリーム出力モジュール３８が符号化された行列をビットストリームに加えた後に、フレーム制御モジュール２０は現フレームがフレームのシーケンスの最後のビデオフレームであったかどうかを判定するかもしれない（７６）。現フレームがフレームのシーケンスの最後のフレームである場合（７６の「はい」）、符号化モジュール８はフレームのシーケンスの符号化を完了している（７８）。他方、現フレームがフレームのシーケンスの最後のフレームでない場合（７６の「いいえ」）、符号化モジュール８はループを戻り、新しい現フレームがｉ-フレームとして符号化されるべきかを判定するかもしれない（６２）。
【００８３】
現フレームがｉ-フレームとして符号化されるべきでない場合（６２の「いいえ」）、符号化モジュール８内の動き推定モジュール３２は現フレームを１組のマクロブロックに分割するかもしれない（８０）。次に、動き推定モジュール３２は現フレーム内のマクロブロックの各々に対する１つ以上の基準フレーム内のソースマクロブロックを特定することを試みるかもしれない（８２）。次に、動き推定モジュール３２は動き推定モジュール３２がソースマクロブロックを特定することができた現フレームにおけるマクロブロックの各々に対する動きベクトルを計算するかもしれない（８４）。動き推定モジュール３２が動きベクトルを計算した後に、再構築フレーム生成モジュール３４はその動きベクトルを用いて基準フレーム内の特定されたマクロブロックを、動きベクトルにより示された位置へ「動かす」ことにより、再構築されたフレームを生成する（８６）。次に、残差フレーム生成モジュール３６は、再構築されたフレーム内の画素成分値を現フレーム内の対応する画素成分値から減算することにより現フレームに対する残差フレームを生成するかもしれない（８８）。残差フレーム生成モジュール３６が残差フレームを生成した後に、エントロピー符号化モジュール３０は現フレームに対する動きベクトルを符号化するためにエントロピー符号化方式を用いるかもしれない（９０）。さらに、ステップ（６６）から（７４）を残差フレームに適用することにより残差フレームに空間符号化が適用されるかもしれない。
【００８４】
図５は復号モジュール１２の代表的動作を示すフローチャートである。図５に説明した操作は連続した形で説明したが、この操作はパイプライン方式で実行されるかもしれないことに注意するべきである。
【００８５】
最初に、復号モジュール１２は、符号化されたビデオフレームを入力する（１００）。符号化されたビデオフレームを入力した後に、復号モジュール１２内のエントロピー復号モジュール４４は符号化されたフレーム内のデータブロックにエントロピー復号処理を実行するかもしれない（１０２）。エントロピー復号モジュール４４はフレームを符号化するために用いられたエントロピー符号化処理と同様なエントロピー復号処理を実行するかもしれない。例えば、符号化モジュール８がフレームを符号化するためにハフマン符号化を用いる場合、エントロピー復号モジュール４４はフレームを復号するためにハフマン復号を用いる。フレーム内の各データブロックにエントロピー復号処理を適用した結果として、エントロピー復号モジュール４４は１組の量子化された係数行列を作成している。
【００８６】
次に、復号モジュール１２内の逆量子化モジュール４６は量子化された係数行列の各々内の係数を逆量子化するかもしれない（１０４）。量子化された係数行列内の各係数を逆量子化した後に、復号モジュール１２内の逆変換モジュール４８は画素成分値行列を生成する（１０６）。画素成分値行列の１つにおける画素成分値は、量子化された係数行列の１つを理想的２次元逆離散コサイン変換を用いて変換することにより作成されるであろう対応する値の近似値である。
【００８７】
逆変換モジュール４８が係数行列の各々に対する画素成分値行列を計算し終わると、復号モジュール１２内の画素再構築モジュール５０は画素ブロックを作るために画素成分値の適切な複数の行列を結合するかもしれない（１０８）。例えば、復号モジュール１２は、ＹＣｒＣｂ画素のブロックを作るためにＹ値のブロックを関連するＣｒ値のブロックおよび関連するＣｂ値のブロックと結合するかもしれない。画素再構築モジュール５０が画素ブロックを作り終わった後に、ブロック結合器モジュール５２は画素ブロックをビデオフレームに再結合するかもしれない（１１０）。
【００８８】
次に、復号モジュール１２内のフレーム制御モジュール５３は現フレームがｉ-フレームであるかどうかを判定する（１１２）。現フレームがｉ-フレームである場合（１１２の「はい」）、ブロック結合器モジュール５２はそのビデオフレームをフレームバッファ５１へ出力するかもしれない（１１４）。他方、現フレームがｉ-フレームではない（すなわち、現フレームは予測または双予測フレームである）場合（１１２の「いいえ」）、エントロピー復号モジュール４４は、現フレームの動きベクトルを復号するためにエントロピー復号方式を用いる（１１６）。次に、再構築フレーム生成モジュール５６は、再構築されたフレームを生成するために、復号された動きベクトルおよびフレーム格納モジュール５４内の１つ以上の基準フレームを用いる（１１８）。次に、再構築されたフレームを生成するために、予測フレーム生成モジュール５８は再構築されたフレームおよびブロック結合器モジュール５２により生成されたフレームを用いるかもしれない（１２０）。
【００８９】
図６は、逆変換モジュール４８の代表的詳細を示すブロック図である。図６の例に示すように、逆変換モジュール４８は入力モジュール１４０を含むかもしれない。入力モジュール１４０は逆量子化モジュール４６から係数行列を入力するかもしれない。例えば、入力モジュール１４０は係数行列を格納するデバイス２のメモリーモジュール内の位置を示すポインタを入力するかもしれない。代替的に、入力モジュール１４０は係数行列を格納する内部データ構造を含むかもしれない。
【００９０】
入力モジュール１４０が逆量子化された係数行列を入力すると、入力モジュール１４０は逆変換モジュール４８内の縮尺モジュール１４２へ係数行列を出力するかもしれない。縮尺モジュール１４２は逆量子化された係数行列内の各係数を縮尺することにより縮尺された係数の行列を生成する。縮尺モジュール１４２は、数の固定小数点表現を表すために逆変換モジュール１４６で用いられる仮数ビット数だけ各係数を左シフトすることにより、逆量子化された係数行列内の係数を縮尺するかもしれない。仮数ビットは、小数点の左側にあるビット（すなわち、数の小数部分）である。このように縮尺モジュール１４２は逆量子化された係数行列内の係数の表現を、適切な数の仮数ビットを有する固定小数点表現に効果的に変換する。例えば、逆変換モジュール１４６が３仮数ビットを含む固定小数点数を用いる場合、縮尺モジュール１４２は逆量子化された係数行列内の係数の各々を３桁だけ左シフトすることにより縮尺された係数の行列を生成する。
【００９１】
縮尺モジュール１４２が縮尺された係数行列を生成した後に、係数バイアスモジュール１４４は中点バイアス値および補足バイアス値を縮尺された係数行列のＤＣ係数に加算することによりバイアスされた係数の行列を生成するかもしれない。上述したように、行列のＤＣ係数は通常、行列の左上隅の係数である。一般に、ＤＣ係数は行列内の他の係数の平均値を表す。
【００９２】
補足バイアス値は正の誤差および負の誤差を平均して大きさを等しくさせ、かつ平均して０に関して対称にさせる値である。例えば、補足バイアス値は、ＤＣ係数が負でない時０に等しく、ＤＣ係数が負の時−１となる符号適応バイアス値であるかもしれない。１６ビットプロセッサにおいて符号適応バイアス値をＤＣ係数に加えるために、係数バイアスモジュール１４４は次式を用いるかもしれない。
【００９３】
DC_coefficient = DC_coefficient + (1 << (P + 2)) + (DC_coefficient >> 15)    （１）
（１）式において、(1<<(P+2))の項が中点バイアスを与えるために加えられている。Ｐは逆ベクトル変換モジュール１４６により実行される変換で用いられる固定小数点仮数ビットの数(すなわち小数点の右側のビット）を表す定数である。右シフトモジュール１４８がすべての係数を（Ｐ＋３）だけ右シフトするかもしれないため、数２がＰに加えられている。ここで数「３」は逆離散コサイン変換を実行することにより加えられる精度のビットからきている。この点を詳述すると、数ｘが１を（Ｐ＋２）だけ左シフトして生成される場合、および数ｚがｘを（Ｐ＋３）だけ右シフトして生成される場合、ｚ＝１／２である。（別の表現では、２Ｐ＋２／２Ｐ＋３＝２０／２１＝１／２）。このように、ＤＣ係数に(1 << (P + 2))を加えることはＤＣ係数に(1 << (P + 3)) / 2を加えることと等価である。
【００９４】
（１）式において、(DC_coefficient >> 15)の項は１６ビットのＤＣ係数を１５桁だけ右シフトする。残りの１ビットはＤＣ係数の符号を示す。例えば、ＤＣ係数が0b1111 1100 0011 0101であると仮定する。この例において、符号拡張を用いて、ＤＣ係数を１５桁だけ右にシフトすることにより、0b1111 1111 1111 1111（十進法で−１）の値が得られる。同様に、ＤＣ係数が0b0111 1111 1111 1111である場合、ＤＣ係数の１５桁だけ右にシフトすることにより、0b0000 0000 0000 0000（十進法で０）の値が得られる。
【００９５】
別の例において、補足バイアス値はディザリングバイアス値であるかもしれない。ディザリングバイアス値は−１または０に等しい値である。１６ビットのプロセッサのＤＣ係数に符号ディザリングバイアス値を加算するために、ＩＤＣＴモジュール３４は次式を用いるかもしれない。
【００９６】
DC_coefficient = DC_coefficient + (1 << (P + 2)) + dither(-1 | 0))      （２）
（２）式において、ＰはＤＣ係数の仮数ビット数を示す。(1 << (P + 2))の項は中点バイアスを加える。dither(-1 | 0)の項は、ＩＤＣＴモジュール３４が擬似ランダムベースで−１または０を選択することを示す。
【００９７】
また、係数バイアスモジュール１４４は中点バイアス値および補足バイアス値を縮尺された係数行列内のＡＣ係数の各々に加えるかもしれない。行列のＡＣ係数は行列内のＤＣ係数以外のすべての係数である。中点バイアス値および縮尺されたバイアス値をＡＣ係数の各々に加算することはさらに丸め誤差を抑圧するかもしれない。
【００９８】
係数バイアスモジュール１４４が、バイアスされた係数行列を生成した後に、逆ベクトル変換モジュール１４６は、固定小数点演算を用いてバイアスされた係数行列に１次元変換を繰り返し適用することにより、変換された係数の行列を生成する。例えば、逆ベクトル変換モジュール１４６は、固定小数点演算を用いてバイアスされた係数行列内の係数の各行ベクトルに１次元変換を適用することにより、中間値の行列を生成するかもしれない。次に、逆ベクトル変換モジュール１４６は、固定小数点演算を用いて中間値行列内の係数の各列ベクトルに１次元変換を適用することにより、変換された係数行列を計算するかもしれない。代表的な１次元変換を後述の図１０および図１１示す。
【００９９】
逆ベクトル変換モジュール１４６が変換された係数行列を生成した後に、右シフトモジュール１４８は、変換された係数行列内の係数の各々を、変換の適用中および縮尺中に加えられたビット数に等しい桁数だけ右シフトすることにより、調整された係数の行列を生成するかもしれない。例えば、変換を適用することにより追加の３ビットが生じ、係数を縮尺することがさらに３ビットを追加する場合、右シフトモジュール１４８は係数の各々を６（３＋３）桁だけ右シフトするかもしれない。
【０１００】
右シフトモジュール１４８は係数の各々を２ｂで除算する代わりとしてこの右シフトを実行するかもしれない。ここでｂは逆ベクトル変換モジュール１４６により加えられた追加ビット数と、縮尺中に縮尺モジュール１４２により係数の仮数部分に加えられたビット数との和に等しい。ソース画像データと結果の画像データの間の差はxn / 2bとxn >> bとの差に帰因して発生する。ここでｘｎは位置ｎにおける行列内の係数である。これらの差のいくつかは固定小数点演算の有限な精度においては、すべてのｘｎに対して(xn >> b)が(xn / 2b )に等しいとは言えない、という事実に起因する丸め誤差のために発生するかもしれない。例えば、符号化モジュール８は、１６ビットの固定小数点数およびｘｎ＝６３(２進法で0000 0000 0011 1111)とｂ＝６を用いるかもしれない。この例において、0000 0000 0011 1111を右へ６桁シフトすると、0000 0000 0000 0000の２進値となる。したがって、６３＞＞６＝０。１方、６３／２６＝６３／６４＝０．９８４３７５。０と０．９８４の差はソース画像と結果の画像間に目に見える差を生じるかもしれない。
【０１０１】
バイアス値をＤＣ係数に加算することは丸め誤差による差を低減させる。例えば、係数バイアスモジュール１４４は中点バイアス値ｃをｘｎに加えるかもしれない。中点バイアス値ｃは２ｂ／２＝２（ｂ−１）に等しいかもしれない。例えば、ｂ＝６の場合、ｃは２６／２  ＝６４／２＝３２。この例において、ｘｎ＝６３の場合、６３＋３２＝９５(0b0000 0000 0101 1111)。６桁だけ右シフトされた９５＝１（２進法で0b0000 0000 0000 0001）。中点バイアス値を加算した後に作成された値１は中点バイアス値を加算しないで生成された値０よりも、正しい値０．９８４３７５により近い。
【０１０２】
また、中点バイアス値ｃの加算に加えて、係数バイアスモジュール１４４は、補足バイアス値をＤＣ係数に加算するかもしれない。例えば、係数バイアスモジュール１４４は符号適応バイアス値ｄ（ｘｎ）を加えるかもしれない。符号適応バイアス値ｄ（ｘｎ）はｘｎが負の時は−１、それ以外では０であるかもしれない。符号適応バイアス値ｄ（ｘｎ）の加算は、符号適応バイアス値ｄ（ｘｎ）がない時の値よりもより良い近似の値を生じるかもしれない。例えば、符号適応バイアス値ｄ（ｘｎ）がないとき、関数(xn + c) >> bは０に関して対称ではない。例えば、ｘｎ＝３２、ｂ＝６およびｃ＝３２の場合、(xn + c) >> b = 1である。しかし、ｘｎ＝−３２、ｂ＝６およびｃ＝３２の場合、(xn + c) >> b = 0である。０に関する対称性の欠如は連続して予測ビデオフレームを計算すると、累進的により大きな誤差を生じるかもしれない。さらに、xn >> bとxn / 2bの間の差はｘｎが０よりも小さいときよりｘｎが０より大きいときの方が大きい。このことも誤差をうむ。
【０１０３】
符号適応バイアス値ｄ（ｘｎ）はこれらの問題を除去するかもしれない。例えば、ｘｎ＝３２、ｂ＝６、ｃ＝３２と仮定すると、ｄ（ｘｎ）＝０である。したがって、(xn + c + d(xn)) >> b = 1。次に、ｘｎ＝−３２、ｂ＝６、ｃ＝３２と仮定すると、ｄ（ｘｎ）＝−１である。したがって、(xn + c + d(xn)) >> b = -1。この例は、関数(xn + c + d(xn)) >> bが０に関して対称となり、ｘｎが０より小さいときよりもｘｎが０より大きいときの方が関数値が大きいという差を生じない。
【０１０４】
代替的実施において、係数バイアスモジュール１４４は、符号適応バイアス値ｄの加算の代わりにディザリングバイアス値ｅを加算するかもしれない。係数バイアスモジュール１４４がディザリングバイアス値ｅをＤＣ係数に加算すると、係数バイアスモジュール１４４は、擬似ランダムベースで値０または値−１のいずれかを選択してｅの値とするかもしれない。ディザリングバイアス値ｅの値を選択するために、係数バイアスモジュール１４４は、以下の命令を含むかもしれない。
【０１０５】
#define IB1  1
#define IB2  2
#define IB5  16
#define IB18  131072
#define MASK (IB1+IB2+IB5)
static unsigned long iseed = 0xAAAAAAAA;
int ditherBit( )  {
if (iseed & IB18) {
iseed = ((iseed ^ MASK)<< 1) |  IB1;
return 1;
} else {
iseed <<= 1;
return 0;
}
}
多くのビデオ符号化標準はピクチャ群（「ＧＯＰ」）として知られているものを用いる。ＧＯＰはｉ-フレーム並びにＧＯＰ内のそのｉ-フレームおよび／または他の予測もしくは双予測フレームを参照する１組の予測フレームおよび／または双予測フレームを含む。例えば、１つのメディアファイルは１組の係数行列を用いて符号化されるｉ-フレームを含むかもしれない。ビデオシーケンスを作成するために、復号モジュール１２はこのｉ-フレームに基づいて予測フレームを作成するかもしれない。ｉ-フレームの復号に起因する誤差は、ｉ-フレームに基づく予測フレームに反映される。さらに、予測フレームの復号に起因する誤差は、次の予測フレームに組み入れられる。フレームの復号に起因する誤差が０に関して対称でない、またはより大きい正もしくは負の大きさを有する方向に向かう場合、これらの誤差は連続する予測フレーム内の画素成分値の値を急速に減少または増加させるかもしれない。例えば、誤差がより大きい正の誤差を有する方向に向かう場合、これらの誤差は連続する予測フレームで累算され、その結果画素成分値は正しい画素成分値より大きくなるかもしれない。結果として、ＧＯＰ内の連続する予測フレーム中の画素は不適切に色または輝度を変えるかもしれない。これはドリフト誤差として知られている。非常に厳しいドリフト誤差を避けるために、限られた数のフレームしかｉ-フレームから生成できない。限られた数の仮数ビット（例えば、３仮数ビット）を有する固定小数点数を用いて変換を実行する場合の誤差の大きさは、丸めに起因して、より高い精度を有する数を用いて変換を実行する場合よりもより大きいかもしれない。従って、限られた数の仮数ビットを有する固定小数点数を用いて変換を実行する場合、ドリフト誤差は特に問題となるかもしれない。
【０１０６】
擬似ランダムベースでディザリングバイアス値ｅの値を選択するということは、各予測フレームがより大きい正の大きさを有する誤差、またはより大きい負の大きさを有する誤差を、均等な可能性で有することを意味する。したがって、ピクチャ群内において、正の誤差および負の誤差は大きさが等しく、かつ０に関して対称になる方向に向かう。正の誤差および負の誤差が平均して０に関して対称であり、また正の誤差および負の誤差が平均して大きさが等しい故、それらの誤差は、おそらく後続の予測フレームに伝搬されたり、拡大されたりしない。これはおそらく正の大きさの誤差が別のフレームの負の大きさの誤差を相殺するからであり、逆もまた同様である。したがって、ディザリングバイアス値は誤差を０に関して対称にする方向に向かい、かつ正の誤差と負の誤差を大きさにおいて等しくする方向に向かう故、おそらくＧＯＰ全体を通じてより小さい誤差となる。このため、ＧＯＰ内により多くのピクチャが含まれることが可能となる。ＧＯＰにより多くのピクチャが含まれ得る故、ビデオシーケンス全体はより優れた圧縮率を有するかもしれない。同様に、符号適応バイアス値を加算することは各フレーム内において大きさが等しく、０に関して対称になる方向に向かう誤差を生じる。その結果、これらの誤差は後続の予測フレームに伝搬されたり、拡大されたりしない。
【０１０７】
右シフトモジュール１４８が係数を右シフトした後に、クリッピングモジュール１５０は係数を画素成分値の最大許容範囲に制限するために係数を「クリップ」するかもしれない。例えば、典型的なＪＰＥＧ画像において、色成分値は−２５６から２５５に及ぶかもしれない。係数行列が２７０に等しい係数を含むことになった場合、クリッピングモジュール１５０はこの係数を２５５まで減少させることにより、この係数を最大の許容範囲に制限する。クリッピングモジュール１５０が、係数のクリッピングを終了した後には、これらの係数は画素成分値を表すかもしれない。クリッピングモジュール１５０が行列内の係数のクリッピングを終了すると、クリッピングモジュール１５０はクリッピングされた係数行列を出力モジュール１５２に出力する。
【０１０８】
出力モジュール１５２が（画素成分値になっている）係数の行列を入力すると、出力モジュール１５２は画素再構築モジュール５０へ画素成分値行列を出力するかもしれない。
【０１０９】
図７は、逆変換モジュール４８の代表的動作を示すフローチャートである。最初に、入力モジュール１４０は逆量子化された係数行列を入力する（１７０）。入力モジュール１４０が逆量子化された係数行列を入力すると、縮尺モジュール１４２は逆量子化された係数行列内の各値を縮尺し、それにより縮尺された係数の行列を生成するかもしれない（１７２）。例えば、縮尺モジュール１４２は逆量子化された係数行列内の各係数に、縮尺因数の行列内の対応する位置にある値を乗算する操作を実行するかもしれない。
【０１１０】
縮尺モジュール１４２が縮尺された係数行列を生成した後に、係数バイアスモジュール１４４は、中点バイアス値および補足バイアス値を、縮尺された係数行列のＤＣ係数に加算し、それによりバイアスされた係数の行列を生成するかもしれない（１７４）。係数バイアスモジュール１４４が行列のＤＣ係数にバイアス値を加算した後に、逆ベクトル変換モジュール１４６は行カウンタが最大行カウンタより小さいかどうかを判定するかもしれない（１７６）。最初に、行カウンタは０に設定されるかもしれない。最大行カウンタは係数行列における行の数と等しい固定の値であるかもしれない。例えば、係数行列が８個の行を含む場合、最大行カウンタは８に等しい。
【０１１１】
行カウンタが最大行カウンタより少ない場合（１７６の「はい」）、逆ベクトル変換モジュール１４６は、固定小数点演算を用いて、行カウンタにより示される係数行列の行ベクトルに１次元変換を適用するかもしれない（１７８）。逆ベクトル変換モジュール１４６が係数行列の行ベクトルに変換を適用すると、逆ベクトル変換モジュール１４６は係数の行ベクトルにおける原係数を中間係数のベクトルで置き換えるかもしれない。逆ベクトル変換モジュール１４６が係数行列の行ベクトルに変換を適用した後に、逆ベクトル変換モジュール１４６は、行カウンタを進めるかもしれない（１８０）。次に、逆ベクトル変換モジュール１４６はループを戻り、行カウンタが最大行カウンタより小さいかどうかを再度判定するかもしれない（１７６）。
【０１１２】
行カウンタが最大行カウンタより小さくない（すなわち、大きいまたは等しい）場合（１７６の「いいえ」）、逆ベクトル変換モジュール１４６は、列カウンタが最大列カウンタより小さいかどうかを判定するかもしれない（１８２）。最初に、列カウンタは０に設定されるかもしれない。最大列カウンタは係数行列における列の数と等しい固定の値であるかもしれない。例えば、係数行列が８個の列を含む場合、最大列カウンタは８に等しい。
【０１１３】
列カウンタが最大列カウンタより小さい場合（１８２の「はい」）、逆ベクトル変換モジュール１４６は、列カウンタにより示される中間係数行列の列ベクトルに１次元変換を適用するかもしれない（１８４）。逆変換モジュール４８が中間係数行列の列ベクトルに変換を適用すると、逆変換モジュール４８は列ベクトルにおける中間係数を変換された係数のベクトルで置き換える。
【０１１４】
逆ベクトル変換モジュール１４６が係数行列の列ベクトルに変換を適用した後に、逆ベクトル変換モジュール１４６は、列カウンタを進めるかもしれない（１８６）。次に、逆ベクトル変換モジュール１４６はループを戻り、列カウンタが最大列カウンタより小さいかどうかを再度判定するかもしれない（１８２）。
【０１１５】
列カウンタが最大列カウンタより小さくない（すなわち、大きいまたは等しい）場合（１８２の「いいえ」）、右シフトモジュール１４８は行列内の変換された係数の各々を右シフトするかもしれない（１８８）。右シフトモジュール１４８が係数を右シフトする場合、右シフトモジュール１４８は係数をある桁数だけ右にシフトするかもしれない。行列内の第２の中間係数の各々を右シフトした結果は調整された値の行列である。右シフトモジュール１４８が変換された係数の各々を右シフトした後に、クリピングモジュール１５０は、調整された係数が画素成分値に対する適切な範囲内にあることを確実にするために調整された係数をクリッピングするかもしれない（１９０）。例えば、クリッピングモジュール１５０は調整された係数が−２５６から２５５の範囲にあることを確実にするために調整された係数をクリッピングするかもしれない。クリッピングモジュール１５０が調整された係数のクリッピングを終了すると、出力モジュール１５２は得られた画素成分値行列を出力するかもしれない（１９２）。
【０１１６】
図８は順変換モジュール２６の代表的詳細を示すブロック図である。図８の例に示すように、順変換モジュール２６はコンポーネント抽出モジュール２４から画素成分値行列を入力する入力モジュール２１０を含む。入力モジュール２１０が画素成分値行列を入力すると、入力モジュール２１０は左シフトモジュール２１２へ画素成分値行列を出力するかもしれない。左シフトモジュール２１２は画素成分値行列内のすべての画素成分値を、ベクトル順変換モジュール２１４が順変換の実行中に用いる値に用いられる仮数ビットの数から順変換の実行により除去された仮数ビットの数を減算した数だけ左シフトするかもしれない。例えば、順変換の実行中に１０仮数ビットが値に用いられ、３仮数ビットが順離散コサイン変換を実行することにより取り除かれる場合、左シフトモジュール２１２は画素成分値を７桁だけ左へシフトするかもしれない。別の例において、順変換の実行中に３仮数ビットが値に用いられ、３仮数ビットが順離散コサイン変換を実行することにより取り除かれる場合、左シフトモジュール２１２は画素成分値を０桁だけ左へシフトするかもしれない。
【０１１７】
左シフトモジュール２１２が画素成分値をシフトした後に、ベクトル順変換モジュール２１４は、中間値行列を作成するために画素成分値行列内の各列ベクトルに順変換を適用するかもしれない。次に、ベクトル順変換モジュール２１４は、変換された係数行列を作成するために中間値行列内の各行ベクトルに順変換を適用するかもしれない。ベクトル順変換モジュール２１４が順変換をベクトルに適用する場合、ベクトル順変換モジュール２１４は後述の図１２に記載される順変換を適用するかもしれない。後述の図１２に記載される変換は図１１に記載される変換の逆であることに注意のこと。
【０１１８】
ベクトル順変換モジュール２１４が変換された係数行列を作成した後に、縮尺モジュール２１６は変換された係数行列内の各変換された係数に縮尺因数を適用するかもしれない。縮尺モジュール２１６は逆変換モジュール４８内で縮尺モジュール１４２により用いられた縮尺因数の逆数を適用するかもしれない。例えば、１つ以上の値が変換効率を高めるために変換から抽出された場合、これらの値は縮尺因数行列の基底になるかもしれない。変換された係数行列内の係数は係数にこれらの値を乗算することにより補正されるかもしれない。
【０１１９】
丸め誤差を減少するために、順変換モジュール２６内の係数バイアスモジュール２１８は、中点バイアス値および補足バイアス値を縮尺された係数行列内の係数に加算するかもしれない。符号適応バイアス値またはディザリングバイアス値を変換された係数行列内の係数に加算することは、逆変換モジュール４８内の係数バイアスモジュール１４４が符号適応バイアス値またはディザリングバイアス値を加算する時と同様な効果を有する。すなわち、バイアス値を係数へ加算することは、正の誤差と負の誤差の大きさを平均して等しくさせ、かつ０に関して平均して対称にさせる。これらの誤差は、縮尺された係数行列内の係数の限られた精度の固定小数点表現を第１の大きさだけ右シフトした結果と、縮尺された係数行列内の係数を精度を考慮せず２を底とし第１の大きさを指数とするべき乗で除算した結果との差を表す。
【０１２０】
係数バイアスモジュール２１８がバイアスされた係数行列を生成した後に、順変換モジュール２６内の右シフトモジュール２２０はバイアスされた係数行列内の係数を右シフトすることにより出力係数の行列を生成するかもしれない。右シフトモジュール２２０はバイアスされた係数行列内の各係数を、バイアスされた係数行列の係数における仮数ビットの数と、変換を実行することにより係数に加えられたビット数との和だけ右シフトするかもしれない。
【０１２１】
次式は、係数バイアスモジュール２１８が符号適応バイアス値を加算した場合の、縮尺モジュール２１６、係数バイアスモジュール２１８、および右シフトモジュール２２０が変換された係数行列に及ぼす効果の要点を示す。
【０１２２】
F[v][u] = (F′[v][u] * S[v][u] + (1 << (P + Q) - ((F′[v][u] >= 0) ? 0 : 1) ) >> (P+Q) 
ここでv=0..7、u=0..7、S[v][u]は縮尺因数行列内のエントリーであり、Ｆは縮尺された係数行列であり、Ｆ′は変換された係数行列であり、Ｐは変換された係数行列内の係数における仮数ビットの数を表し、Ｑは変換を適用することにより変換された係数行列内の係数に加えられたビット数を表す。
【０１２３】
次式は、係数バイアスモジュール２１８がディザリングバイアス値を加算した場合の、縮尺モジュール２１６、係数バイアスモジュール２１８、および右シフトモジュール２２０が変換された係数の行列に及ぼす効果の要点を示す。
【０１２４】
F[v][u] = (F′[v][u] * S[v][u] + (1 << 19) - (dither(0 : 1) ) >> 20
ここでv=0..7、u=0..7、S[v][u]は縮尺因数行列内のエントリーであり、Ｆは縮尺された係数行列であり、Ｆ′は変換された係数行列である。
【０１２５】
縮尺モジュール２１６が縮尺された係数行列を生成した後に、出力モジュール２２２は量子化モジュール２８へ係数行列を出力するかもしれない。
【０１２６】
図９は順変換モジュール２６の代表的動作を示すフローチャートである。最初に、入力モジュール２１０は画素成分値行列を入力する（２３０）。入力モジュール１４０が画素成分値行列を入力すると、左シフトモジュール２１２は画素成分値行列内の各値を左シフトすることにより調整された係数の行列を生成するかもしれない（２３２）。例えば、左シフトモジュール２１２はすべての係数を１０桁だけ左へシフトするかもしれない。この例において、左シフトモジュール２１２がすべての係数を左へ１０桁だけシフトするかもしれれないのは、ベクトル順変換モジュール２１４が数が小数部分に１０ビットを用いて符号化される固定小数点演算を用いるかもしれないからである。したがって、係数を１０桁だけ左にシフトすることにより、左シフトモジュール２１２は効果的に画素成分値を１０仮数ビットを有する固定小数点数に変換する。
【０１２７】
調整された値の行列内の各画素成分値を左シフトした後に、ベクトル順変換モジュール２１４は、列カウンタが最大列カウンタより小さいかどうかを判定するかもしれない（２３４）。最初に、列カウンタが０に設定されるかもしれない。最大列カウンタは調整された係数行列における列の数と等しい固定の値であるかもしれない。例えば、調整された係数行列が８個の列を含む場合、最大列カウンタは８に等しい。
【０１２８】
列カウンタが最大列カウンタより小さい場合（２３４の「はい」）、ベクトル順変換モジュール２１４は列カウンタにより示される列ベクトルに関して１次元順変換を計算するかもしれない（２３６）。ベクトル順変換モジュール２１４が調整された係数行列の列ベクトルに関して順変換を計算すると、ベクトル順変換モジュール２１４は列ベクトルにおける調整された原係数を中間係数で置き換える。ベクトル順変換モジュール２１４が調整された係数行列の列ベクトルに関して順変換を計算した後に、ベクトル順変換モジュール２１４は、列カウンタを進めるかもしれない（２３８）。次に、ベクトル順変換モジュール２１４はループを戻り、列カウンタが最大列カウンタより小さいかどうかを再度判定するかもしれない（２３４）。
【０１２９】
列カウンタが最大列カウンタより小さくない（すなわち、大きいまたは等しい）場合（２３４の「いいえ」）、ベクトル順変換モジュール２１４は、行カウンタが最大行カウンタより小さいかどうかを判定するかもしれない（２４０）。最初に、行カウンタが０に設定されるかもしれない。最大行カウンタは係数行列における行の数と等しい固定の値であるかもしれない。例えば、係数行列が８個の行を含む場合、最大行カウンタは８に等しい。
【０１３０】
行カウンタが最大行カウンタより小さい場合（２４０の「はい」）、ベクトル順変換モジュール２１４は行カウンタにより示される行ベクトルに関して１次元離散コサイン変換を計算するかもしれない（２４２）。ベクトル順変換モジュール２１４が行列の行ベクトルに関して既に順変換を計算している故、係数行列は、中間係数を含んでいる。ベクトル順変換モジュール２１４が中間係数の行ベクトルに関して順変換を計算すると、ベクトル順変換モジュール２１４は列ベクトルにおける中間係数を変換された係数で置き換える。
【０１３１】
ベクトル順変換モジュール２１４が係数行列の行ベクトルに関して離散コサイン変換を計算した後に、ベクトル順変換モジュール２１４は、行カウンタを進めるかもしれない（２４４）。次に、ベクトル順変換モジュール２１４はループを戻り、行カウンタが最大行カウンタより小さいかどうかを再度判定するかもしれない（２４０）。
【０１３２】
行カウンタが最大行カウンタより小さくない（すなわち、大きいまたは等しい）場合（２４０の「いいえ」）、縮尺モジュール２１６は変換された係数行列内の変換された係数の各々を縮尺するかもしれない（２４６）。縮尺モジュール２１６が縮尺された係数行列を生成した後に、係数バイアスモジュール２１８は、１つ以上のバイアス値を縮尺された係数行列内の係数に加算することによりバイアスされた係数の行列を生成するかもしれない（２４８）。例えば、係数バイアスモジュール２１８は、中点バイアス値および符号適応またはディザリング補足バイアス値を縮尺された係数行列内の各係数に加算するかもしれない。次に、右シフトモジュール２２０はバイアスされた係数行列内の各係数を右シフトするかもしれない（２５０）。右シフトモジュール２２０は、各係数を係数の各々における仮数ビット数と、変換を適用することにより係数に加えられたビット数との和だけ右シフトすることにより、調整された係数の行列を生成するかもしれない。右シフトモジュール２２０が調整された係数行列を生成した後に、出力モジュール２２２は得られた調整された係数行列を出力するかもしれない（２５２）。
【０１３３】
図１０は第１の代表的１次元変換２６０を示すダイヤグラムである。図１０の例に示すように、変換２６０は入力値としてＸ０乃至Ｘ７を取り込むかもしれない。値Ｘ０乃至Ｘ７は入力係数行列の１つの行または列の係数を表すかもしれない。変換２６０は値ｘ０乃至ｘ７を出力するかもしれない。値Ｘ０乃至Ｘ７が入力係数行列の係数の行における値である場合、値ｘ０乃至ｘ７は中間値の行を表すかもしれない。値Ｘ０乃至Ｘ７が係数の列における値である場合、値ｘ０乃至ｘ７はシフトされた画素成分値の列を表すかもしれない。図１０の例に示すように、円で囲った記号「＋」は加算操作を示し、円で囲った記号「×」は乗算操作を示す。文字／数の組み合わせはある値に乗算する値を示す。例えば、線Ｘ２上で「Ａ１」記号が円で囲った記号「×」の上に位置する。これは、Ｘ２上の値に値Ａ１を乗算することを示す。
【０１３４】
変換２６０は１組の「バタフライ構造演算」を含む。「バタフライ構造演算」は、第１の中間値を作るために第１の入力値ｘに第１の因数Ｃを乗算し、第２の中間値を作るために第２の入力値ｙに第２の因数Ｓを乗算し、さらに第１の中間値と第２の中間値を加算することにより第１の出力値ｕが計算される、ソフトウェアまたはハードウェア構造であるかもしれない。このより複雑な「バタフライ構造演算」において、第３の中間値を作るために第２の入力値ｙに第１の因数を乗算し、第４の中間値を作るために第１の入力値ｘに第２の因数Ｓを乗算し、さらに第３の中間値を第４の中間値から減算することにより第２の出力値ｖが計算されるかもしれない。次式に「バタフライ構造演算」の数学的結果を要約する。
【０１３５】
u = x * C + y * S
v = x * S - y * C
バタフライ構造演算２６４は変換２６０で用いられる１つのバタフライ構造演算を示す。バタフライ構造演算は、第１の入力値から第２の入力値へ、および第２の入力値から第１の入力値への値が交差していることから、バタフライ構造演算が２つの羽を有しているように見えるという事実に由来してこの名前を有している。
【０１３６】
変換２６０で用いられるように、第１の因数Ｃおよび第２の因数Ｓは、無理数であるかもしれない。例えば、Ｃは
【数１２】
2010505154.tif 000016
【０１３７】
に等しく、Ｓは
【数１３】
2010505154.tif 000017
【０１３８】
に等しいかもしれない。逆ベクトル変換モジュール１４６が１６ビットレジスタにおいて固定小数点演算を用いるかもしれない故、およびＣおよびＳがしばしば無理数の値である故、入力値ｘおよびｙにＣおよびＳを乗算することは計算上面倒であるかもしれない。このため、逆ベクトル変換モジュール１４６はＣおよびＳに有理数の近似値を用いるかもしれない。これらの整数近似は（Ｃ′／２ｊ）および（Ｓ′／２ｋ）の形をしているかもしれない。ここでＣ′およびＳ′はＣおよびＳの「整数化」版であり、ｊおよびｋは整数である。例えば、
【数１４】
2010505154.tif 000018
【０１３９】
とする。本例において、２２１７／２１２＝０．５４１２５９７６６であり
【数１５】
2010505154.tif 000019
【０１４０】
である故、逆ベクトル変換モジュール１４６は
【数１６】
2010505154.tif 000020
【０１４１】
を近似するために、整数値Ｃ′＝２２１７およびｊ＝１２を用いるかもしれない。本例において、０．５４１１９６１は０．５４１２５９７６６とほぼ等しいことは明らかである。その結果、
u = x * C + y * S、
v = x* S - y * C
の形式の計算は、
u′ = x * (C′ / 2j) + y * (S′ / 2k)、
v′ = x * (S′ / 2k) - y*(C′ / 2j)
の形式の計算で置き換えられるかもしれない。これらの計算をさらに簡単にするために、２ｊおよび２ｋによる除算はｊおよびｋ桁のビットの右シフト操作で置き換えられるかもしれない。これは「>>」記号を用いて
u″ = ((x * C′) >> j) + ((y * S′) >> k)、
v″ = ((x * S′) >> k) - ((y * C′) >> j)
と表される。.
しかし、上でバイアス値をＤＣ係数に加算することに関して検討したように、除算演算をビットの右シフトで置き換えることはｕ′とｕ″およびｖ′とｖ″間の差につながるかもしれない。これらの計算の項に中点バイアス値を加算することはｕ′とｕ″間の差およびｖ′とｖ″間の差を減少させるかもしれない。中点バイアス値が加えられると、計算は以下の形を取るかもしれない。
【０１４２】
u′″ = ((x * C′ + (1 << (j - 1))) >> j) + ((y * S′ + (1 << (k - 1))) >> k)、
v′″ = ((x * S′ + (1 << (k - 1))) >> k) - ((y * C′ + (1 << (j - 1))) >> j)
中点バイアス値の加算の結果、ｕとu′″の差およびｖとｖ′″の差よりも小さいｕとu″の差およびｖとｖ″の差が得られるかもしれないが、中点バイアス値の加算はバタフライ構造演算に計算量を付加するかもしれない。さらに、１６ビットレジスタでの固定小数点演算を用いた場合、中点バイアス値の加算はu′″およびｖ′″の計算を非実用的にするかもしれない。中点バイアス値の加算がu′″およびｖ′″の計算を非実用的にするかもしれないのは、中点バイアス値の加算が右シフトの前に起こり、その結果レジスタのオーバフローにつながるかもしれないからである。
【０１４３】
v = x * S − y * Cとv″ = ((x * S′) >> k) - ((y * C′) >> j)間の平均的差は約０である。言い換えれば、すべての値ｘおよびｙに対するすべての値（ｖ″−ｖ）の平均値は約０に等しい。さらに、v = x * S − y * Cとv′″ = ((x * S′ + (1 << (k - 1))) >> k) - ((y * C′ + (1 << (j - 1))) >> j)間の平均差も約０である。これはｖ″とｖ′″は常にほぼ等しい故である。ｖ″とｖ′″が常にほぼ等しいのは、ｊがｋに等しいとき中点バイアス値が以下の減算により相殺されるためである。
【０１４４】
v′″ = ((x * C′ + m) >> j) - ((y * S′ + m) >> k) ≒
(x * C′ + m) / 2j - ((y * S′ + m) / 2k =
(x * C′) / 2j + (m / 2j) - (y * S′) / 2k - (m / 2k) =
(x * C′) / 2j - (y * S′) / 2k ≒
v″ = ((x * C′) >> j) - ((y * S′) >> k)
ここで、ｍは中点バイアス値を表す。この例が示すように、（ｍ／２ｋ）を（ｍ／２ｊ）から減算することは、ｊがｋに等しいときには中点バイアス値ｍを相殺する。ｖとｖ″間の平均的差はほぼ０である故、逆ベクトル変換モジュール１４６は、ｖ′″の代わりにｖ″を計算することにより生成される値に正または負のバイアスを系統的に発生させない。また、ｖ″とｖ′″はほぼ等しい故、逆ベクトル変換モジュール１４６はｖ′″の代わりにｖ″を用いるかもしれない。
【０１４５】
u = x * C + y * Sとu′″ = ((x * C′ + (1 << (j - 1))) >> j) + ((y * S′ + (1 << (k - 1))) >> k)間の平均的差も約０である。同時に、u = x * C + y * Sとu″ = ((x * C′) >> j) + ((y * S′) >> k)間の差はほぼ０ではない。むしろ、ｕとｕ″間の平均的差は約−１／２である。従って、ｕ″とｕ′″ほぼ等しいとはならない。ｕ″とｕ′″がほぼ等しいとはならないのは、ｊがｋに等しい場合でも中点バイアス値が相殺されないためである。
【０１４６】
u′″ = ((x * C′ + m) >>j) + ((y * S′ + m) >> k) ≒
((x * C′ + m) / 2j) + ((y * S′ + m) / 2k) =
((x * C′) / 2j) + (m / 2j) + ((y * S′) / 2k) + (m / 2k) =
((x * C′) / 2j) + ((y * S′) / 2k) + (m / 2j) + (m / 2k) ≠
u″ = ((x * C′) >> j) + ((y * S′) >> k)
ｕ″がｕ′″とほぼ等しくならない故、ｕ″はｕ′″の代わりに用いられないかもしれない。ｕ′″の代わりにｕ″を用いようとするとｕとの顕著な違いを生じるかもしれない。
【０１４７】
中点バイアス値を計算毎に加えることに伴う複雑さおよびオーバフローの問題を回避するために、ｕ′″およびｕ″の代わりに次式が用いられるかもしれない。
【０１４８】
u″″ = ((x * C′) >> j) - ((y * -S′) >> k) 
ｕ″″ は、ｕ″″においてS′の負のバージョンが用いられ ((y * -S') >> k)が減算されていること以外、ｕ″に等しい。ｕ″″はｕ′″のように中点バイアス値を加えない。しかしｕ′″とは異なり、ｕ″″とｕ間の差は０を中心とする。ｕ″″とｕ間の差が０を中心とする故、丸め誤差は後続のバタフライ構造演算の適用を通じて拡大されない。このため、逆ベクトル変換モジュール１４６はバタフライ構造演算においてｕを計算するためにｕ″″を用いるかもしれない。このため、ｊがｋに等しい場合、変換２６０を適用するために逆ベクトル変換モジュール１４６で用いられるバタフライ構造演算は、以下の形式を有するかもしれない。
【０１４９】
u″″ = ((x * C′) >> j) - ((y * -S′) >> k)
v′″ = ((x * S′) >> k) - ((y * C′) >> j)
したがって、この形式のバタフライ構造演算で生成される結果と無限精度の演算を用いて同等なバタフライ構造演算で生成されるであろう結果の間の差は、約０を中心とし、１以下の正または負の大きさを有する。
【０１５０】
代替的に、ｊがｋに等しい場合、逆ベクトル変換モジュール１４６は右シフトをバタフライ構造演算の終了前までやらないでおくバタフライ構造演算を用いかもしれない。
【０１５１】
u′ = x * (C′ / 2ｋ) + y * (S′ / 2k)；
((x * C′) / 2k) + ((y * S′) / 2k) =
((x * C′) + (y * S′)) / 2k ≒
u* = ((x * C′) + (y * S′) + (1 << (k - 1))) >> k；
v′ = x * (S′ / 2k) − y * (C′ / 2j) =
((x * S′) / 2k) - ((y * C′) / 2k) =
((x * S′) / 2k) + ((-1)(y * C′) / 2k) =
((x * S′) / 2k) + ((y * -C′) / 2k) =
((x * S′) + (y * -C′)) / 2k ≒
v* = ((x * S′) + (y * -C′) + (1 << (k - 1))) >> k
右シフトをバタフライ構造演算の終了前までやらないでおくことはバタフライ構造演算を実行するために必要なシフト操作の総数を減少させ、精度を向上させるかもしれない。さらに、ほとんどの最近の１６ビット単一命令複数データ（「ＳＩＭＤ」）プロセッサおよびディジタル信号プロセッサで利用可能な４ウェイ積和演算命令がｕ＊およびｖ＊を効率的に計算するために用いられるかもしれない。
【０１５２】
乗算操作は加算、減算およびビットのシフト操作に比べて計算的に高価であるかもしれない。このため、乗算と同じ効果を有する一連の加算、減算およびビットのシフト操作を用いることはより簡易であるかもしれない。例えば、Ｃ′＝２２１７と仮定する。この例において、ｒ＝ｘ＊Ｃ′は以下のステップで置き換えられるかもしれない。
【０１５３】
x2 = (x << 3) − x；  
x3 = x + (x2 << 6)；
x4 = x3 - x2；
r = x3 + (x4 << 2)
この例において、ｘ２、ｘ３、およびｘ４は中間的値である。これを例示するために、ｘ＝１の例を考察する。
【０１５４】
7 = (1 << 3) - 1；  
449 = 1 + (7 << 6)；
442 = 449 - 7；
2217 = 449 + (442 << 2)；
2217 = (1 * 2217) = (x * 2217,ここでx = 1)
この例において、１＊２２１７＝２２１７であり、ｘ＝１の時この連続操作により作成される値は２２１７である。
【０１５５】
次表に、逆ベクトル変換モジュール１４６が定数Ａ１、Ａ２、Ｂ１、Ｂ２、Ｃ１、Ｃ２、Ｄ１、およびＤ２に用いるかもしれない整数値近似の例示的セットをまとめて示す。
【表３】
2010505154.tif 000021
【０１５６】
表１において「整数値」列の値は２１２＝４０９６で除したとき「原値」列の値を近似する。例えば、２２１７／４０９６＝０．５４１２５９７６６と
【数１７】
2010505154.tif 000022
【０１５７】
同様に、５３５２／４０９６＝１．３０６６４０６２と
【数１８】
2010505154.tif 000023
【０１５８】
「積を計算するためのアルゴリズム」列内の式は逆ベクトル変換モジュール１４６が、対応する整数値による乗算操作に代わって用いるかもしれない方法をまとめて示す。
【０１５９】
図１１は、第２の代表的アルゴリズム２７０を示すダイヤグラムである。図１０におけると同様に、値Ｘ０、Ｘ１、Ｘ２、Ｘ３、Ｘ４、Ｘ５、Ｘ６、およびＸ７は入力係数を表し、値ｘ０、ｘ１、ｘ２、ｘ３、ｘ４、ｘ５、ｘ６、およびｘ７は出力値を表す。円で囲った記号「＋」の後の線に関係づけられた値は、その円に向かう矢印に関係づけられた複数の値の加算結果である。円で囲った記号「×」の後の線に関係づけられた値は、その円の横に位置する係数と円を通り抜ける線に関係づけられた値との乗算結果である。矢印の横の記号「−」はその矢印に関係づけられた値の符号反転を表す。例えば、値「１０」が「−」記号の前の矢印に関係づけられる場合、値「−１０」が「−」記号の後の矢印に関係づけられる。さらに、負にした係数および減算を用いて丸め誤差を減少させるための上述した技術はアルゴリズム２７０で用いられるかもしれないことに注意すべきである。
【０１６０】
変換２７０において、
【数１９】
2010505154.tif 000024
【０１６１】
の値は有理分数を用いて近似されるかもしれない。例えば、下の表２に記載された整数近似値を用いてα、β、γ、δ、ε、およびζの値が近似されるかもしれない。
【表４】
2010505154.tif 000025
【０１６２】
表２において、「整数近似」列の値は「原値」列の値の整数化版を表す。例えば、
【数２０】
2010505154.tif 000026
【０１６３】
と８８６７／１６３８４＝０．５４１１９８７３０４６８７５。表２の「積計算用アルゴリズム」列内の式は逆ベクトル変換モジュール１４６が「整数近似」列内の値による乗算操作に代わって用いるかもしれないアルゴリズムを表す。
【０１６４】
図１２は、ベクトル順変換モジュール２１４により用いられるかもしれない代表的変換２８０を示すフローチャートである。図１２において、値Ｘ０、Ｘ１、Ｘ２、Ｘ３、Ｘ４、Ｘ５、Ｘ６、およびＸ７は出力係数を表し、値ｘ０、ｘ１、ｘ２、ｘ３、ｘ４、ｘ５、ｘ６、およびｘ７は入力値を表す。さらに、負にした係数および減算を用いて丸め誤差を減少させるための上述した技術は変換２８０で用いられるかもしれないことに注意すべきである。
【０１６５】
図１２の例において、
【数２１】
2010505154.tif 000027
【０１６６】
の値は有理分数を用いて近似されるかもしれない。例えば、表２に記載された整数近似値を用いてα、β、γ、δ、ε、およびζの値が近似されるかもしれない。
【０１６７】
ここに説明した技術はハードウェア、ソフトウェア、ファームウェア、またはそれらの任意の組み合わせで実施されるかもしれない。モジュールまたは部品として説明したいかなる特徴も、１つの集積化された論理デバイス内で共に、または個別であるが相互運用可能なデバイスとして別々に実施されるかもしれない。ソフトウェアで実施される場合、本技術は、実行されると上述した方法の１つ以上を実行する命令を含む計算機可読媒体により少なくとも部分的に実現されるかもしれない。計算機可読媒体は計算機プログラム製品の部分を形成するかもしれない。これはパッケージ部材を含むかもしれない。計算機可読媒体は、シンクロナスダイナミックランダムアクセスメモリー（ＳＤＲＡＭ）のようなランダムアクセスメモリー（ＲＡＭ）、読み出し専用メモリー（ＲＯＭ）、不揮発性ランダムアクセスメモリー（ＮＶＲＡＭ）、電気的消去書き込み可能な読み出し専用メモリー（ＥＥＰＲＯＭ）、フラッシュメモリー、磁気または光学的データ格納媒体、等を含むかもしれない。本技術は、付加的または代替的に、命令またはデータ構造の形でコードを搬送または伝達し、かつ計算機によりアクセスされ読み込まれおよび／または実行されうる計算機可読通信媒体により、少なくとも部分的に実現されるかもしれない。
【０１６８】
コードは１つ以上のプロセッサ、例えば１つ以上のディジタル信号プロセッサ（ＤＳＰ）、汎用マイクロプロセッサ、特定用途向ＩＣ（ＡＳＩＣ）、プログラマブル論理アレイ（ＦＰＧＡ）、または他の同等な集積化もしくは個別論理回路により実行されるかもれない。従って、用語「プロセッサ」は、ここで用いられると、上記の構造のいずれか、またはここに説明した技術の実施に適した任意の他の構造を指すかもしれない。さらに、いくつかの態様において、ここに説明した機能は、符号化および復号のために構成された専用ソフトウェアモジュールもしくはハードウェアモジュール内に提供されるか、または１体化したビデオ符号器-復号器（コーデック）に組み込まれるかもしれない。本発明の種々の実施例について説明した。これらのおよび他の実施例は特許請求の範囲内にある。
【図１】
2010505154.tif 000028
【図２】
2010505154.tif 000029
【図３】
2010505154.tif 000030
【図４】
2010505154.tif 000031
【図５】
2010505154.tif 000032
【図６】
2010505154.tif 000033
【図７】
2010505154.tif 000034
【図８】
2010505154.tif 000035
【図９】
2010505154.tif 000036
【図１０】
2010505154.tif 000037
【図１１】
2010505154.tif 000038
【図１２】
2010505154.tif 000039