(57)【要約】  映像の変換方法及びその装置、逆変換方法及びその装置に係り、該映像変換方法は、Ｎポイント離散コサイン変換に利用される変換行列を構成する元素を、所定のスケーリング・ファクタを利用してスケーリングし、整数値を有するスケーリングされた元素を獲得し、整数値を有するスケーリングされた元素から構成された整数変換行列を利用して、Ｎポイント離散コサイン変換を行い、スケーリング・ファクタを利用して、Ｎポイント離散コサイン変換行列の結果値をデスケーリングする。
2014523673.tif 000002
【特許請求の範囲】
【請求項１】
映像の変換方法において、
Ｎ（Ｎは、整数）ポイント離散コサイン変換に利用される変換行列を構成する元素を、所定のスケーリング・ファクタを利用してスケーリングし、整数値を有するスケーリングされた元素を獲得する段階と、
前記整数値を有するスケーリングされた元素から構成された整数変換行列を利用して、前記Ｎポイント離散コサイン変換を行う段階と、
前記スケーリング・ファクタを利用して、前記Ｎポイント離散コサイン変換行列の結果値をデスケーリングする段階と、を含むことを特徴とする映像の変換方法。
【請求項２】
前記整数値を有するスケーリングされた元素を獲得する段階は、
前記スケーリング・ファクタの二乗値を利用して、前記元素を整数値にスケーリングすることを特徴とする請求項１に記載の映像の変換方法。
【請求項３】
前記スケーリング・ファクタをＳとするとき、Ｓは、２の指数乗の値を有し、
前記整数値を有するスケーリングされた元素を獲得する段階は、
前記スケーリング・ファクタを乗じた元素を四捨五入して獲得された整数値を、ｌｏｇ２Ｓビットほど、左向きシフト演算（＜＜）を利用してスケーリングする段階をさらに含むことを特徴とする請求項１に記載の映像の変換方法。
【請求項４】
前記Ｎポイント離散コサイン変換を行う段階は、
前記Ｎポイント離散コサイン変換行列を構成する演算のうち、中間値Ｘ，Ｙ（Ｘ，Ｙは、実数）に対して、結果値Ｕ，Ｖ（Ｕ，Ｖは、実数）を獲得する以下の演算：Ｕ＝Ｃ１＊Ｘ−Ｃ０＊Ｙ（Ｃ０及びＣ１は、既定の実数）及びＶ＝Ｃ０＊Ｘ＋Ｃ１＊Ｙを、以下の演算：Ｔ＝Ｃ０＊（Ｘ＋Ｙ）、Ｕ＝Ｃ１＿ｐ＿Ｃ０＊Ｘ−Ｔ及びＶ＝Ｔ＋Ｃ１＿ｍ＿Ｃ０＊Ｙ（Ｃ１＿ｐ＿Ｃ０＝Ｃ１＋Ｃ０及びＣ１＿ｍ＿Ｃ０＝Ｃ１−Ｃ０）に変更する段階と、
前記変更された演算：Ｔ＝Ｃ０＊（Ｘ＋Ｙ）、Ｕ＝Ｃ１＿ｐ＿Ｃ０＊Ｘ−Ｔ及びＶ＝Ｔ＋Ｃ１＿ｍ＿Ｃ０＊Ｙを利用して、入力値Ｘ，Ｙに係わる演算を遂行し、結果値Ｕ，Ｖを獲得する段階と、を含むことを特徴とする請求項１に記載の映像の変換方法。
【請求項５】
前記デスケーリングする段階は、
前記Ｎポイント離散コサイン変換された結果値に係わる量子化過程と結合されて遂行されることを特徴とする請求項１に記載の映像の変換方法。
【請求項６】
前記スケーリング・ファクタは、２の指数乗の値を有し、
前記量子化過程は、
前記Ｎポイント離散コサイン変換された結果値を右向きシフト演算（＞＞）してデスケーリングを行う段階をさらに含むことを特徴とする請求項５に記載の映像の変換方法。
【請求項７】
映像の変換装置において、
Ｎ（Ｎは、整数）ポイント離散コサイン変換に利用される変換行列を構成する元素を、所定のスケーリング・ファクタを利用してスケーリングし、整数値を有するスケーリングされた元素を獲得し、前記整数値を有するスケーリングされた元素から構成された整数変換行列を利用して、前記Ｎポイント離散コサイン変換を行い、前記スケーリング・ファクタを利用して、前記Ｎポイント離散コサイン変換行列の結果値をデスケーリングする変換部を含むことを特徴とする映像の変換装置。
【請求項８】
映像の逆変換方法において、
Ｎ（Ｎは、整数）ポイント逆離散コサイン変換に利用される逆変換行列を構成する元素を、所定のスケーリング・ファクタを利用してスケーリングし、整数値を有するスケーリングされた元素を獲得する段階と、
前記整数値を有するスケーリングされた元素から構成された整数逆変換行列を利用して、前記Ｎポイント逆離散コサイン変換を行う段階と、
前記スケーリング・ファクタを利用して、前記Ｎポイント逆離散コサイン変換行列の結果値をデスケーリングする段階と、を含むことを特徴とする映像の逆変換方法。
【請求項９】
前記整数値を有するスケーリングされた元素を獲得する段階は、
前記スケーリング・ファクタの二乗値を利用して、前記元素を整数値にスケーリングすることを特徴とする請求項８に記載の映像の逆変換方法。
【請求項１０】
前記スケーリング・ファクタをＳとするとき、Ｓは、２の指数乗の値を有し、
前記整数値を有するスケーリングされた元素を獲得する段階は、
前記スケーリング・ファクタを乗じた元素を四捨五入して獲得された整数値を、ｌｏｇ２Ｓビットほど左向きシフト演算（＜＜）を利用してスケーリングする段階をさらに含むことを特徴とする請求項８に記載の映像の逆変換方法。
【請求項１１】
前記Ｎポイント逆離散コサイン変換を行う段階は、
前記Ｎポイント逆離散コサイン変換行列を構成する演算のうち、中間値Ｘ，Ｙ（Ｘ，Ｙは、実数）に対して、結果値Ｕ，Ｖ（Ｕ，Ｖは、実数）を獲得する以下の演算：Ｕ＝Ｃ１＊Ｘ−Ｃ０＊Ｙ（Ｃ０及びＣ１は、既定の実数）及びＶ＝Ｃ０＊Ｘ＋Ｃ１＊Ｙを、以下の演算：Ｔ＝Ｃ０＊（Ｘ＋Ｙ）、Ｕ＝Ｃ１＿ｐ＿Ｃ０＊Ｘ−Ｔ及びＶ＝Ｔ＋Ｃ１＿ｍ＿Ｃ０＊Ｙ（Ｃ１＿ｐ＿Ｃ０＝Ｃ１＋Ｃ０及びＣ１＿ｍ＿Ｃ０＝Ｃ１−Ｃ０）に変更する段階と、
前記変更された演算：Ｔ＝Ｃ０＊（Ｘ＋Ｙ）、Ｕ＝Ｃ１＿ｐ＿Ｃ０＊Ｘ−Ｔ及びＶ＝Ｔ＋Ｃ１＿ｍ＿Ｃ０＊Ｙを利用して、入力値Ｘ，Ｙに係わる演算を遂行し、結果値Ｕ，Ｖを獲得する段階と、を含むことを特徴とする請求項８に記載の映像の逆変換方法。
【請求項１２】
前記デスケーリングする段階は、
逆量子化過程と結合されて遂行されることを特徴とする請求項８に記載の映像の逆変換方法。
【請求項１３】
前記スケーリング・ファクタは、２の指数乗の値を有し、
前記逆量子化過程は、
ビットストリームから抽出されたＮポイント離散コサイン変換結果値を量子化した値を、右向きシフト演算（＞＞）してデスケーリングを行う段階をさらに含むことを特徴とする請求項１２に記載の映像の逆変換方法。
【請求項１４】
前記整数値を有するスケーリングされた元素は、あらかじめ計算されて保存された値を利用することを特徴とする請求項８に記載の映像の逆変換方法。
【請求項１５】
映像の逆変換装置において、
Ｎ（Ｎは、整数）ポイント逆離散コサイン変換に利用される逆変換行列を構成する元素を、所定のスケーリング・ファクタを利用してスケーリングし、整数値を有するスケーリングされた元素を獲得し、前記整数値を有するスケーリングされた元素から構成された整数逆変換行列を利用して、前記Ｎポイント逆離散コサイン変換を行い、前記スケーリング・ファクタを利用して、前記Ｎポイント逆離散コサイン変換行列の結果値をデスケーリングする逆変換部を含むことを特徴とする映像の逆変換装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明は、映像符号化、復号化の方法及びその装置に係り、さらに詳細には、大サイズのブロックに対する向上した変換、逆変換の方法及びその装置に関する。
【背景技術】
【０００２】
Ｈ．２６４及びＭＰＥＧ（moving  picture  experts  group）−４のような、現在国際ビデオコーディング標準で、ビデオ信号は、シーケンス、フレーム、スライス、マクロブロック及びブロックに階層的に分割され、ブロックは、最小処理ユニットになる。エンコード側面で、イントラ・フレーム予測またはインター・フレーム予測を介して、ブロックの予測残留エラーが獲得され、ブロック変換は、エネルギーが少数の係数に集中するように実行され、量子化、スキャニング、ランレングス・コーディング（run  length  coding）及びエントロピ・コーディングを介して、イメージデータは圧縮され、コーディングされたビットストリームに記録される。デコーディング側面で、処理手続きは、反対になる。まず、エントロピ・コーディングのブロック変換係数がビットストリームから抽出される。その後、逆量子化及び逆変換を介して、ブロックの予測残留エラーが再構成され、予測情報は、ブロックのビデオデータを再構成するために使用される。エンコーディング・デコーディング処理手続きで、変換モジュールは、ビデオ圧縮の基礎であり、変換性能は、コーデックの一般的な性能に直接的に影響を与える。
【０００３】
離散コサイン変換（ＤＣＴ）は、ＭＰＥＧ−１及びＨ．２６１のような初期ビデオコーディング標準で採択された。１９７４年のＤＣＴの提案以後、ＤＣＴは、イメージ分野及びビデオコーディング分野で広く使用された。変換ドメイン内のイメージ要素の相関性を除去し、高効率イメージ圧縮のための基盤を設けるので、その変換性能は、全ての次善変換（sub-optimal  transform）のうちですぐれている。しかし、ＤＣＴ変換行列は、浮動小数点数（floating  point  number）で表現されるため、大量の浮動小数点計算によって、多くのシステム資源が消耗される。変換効率を改善する一方、大サイズのブロックに対する変換を行うために、新しいＤＣＴ変換アルゴリズムの必要性が高まっている。
【発明の概要】
【発明が解決しようとする課題】
【０００４】
本発明が解決しようとする技術的課題は、さらに効率的なＤＣＴを利用して、映像を変換、逆変換する方法及びその装置を提供するところにある。特に、本発明が解決しようとする技術的課題は、大サイズのＤＣＴ時の演算複雑度、並びにハードウェア具現時のコストを増大させる乗算演算の個数を減らしながら、類似したＤＣＴを行う映像変換方法及びその装置と、映像の逆変換方法及びその装置とを提供するものである。
【課題を解決するための手段】
【０００５】
本発明の実施形態は、ＤＣＴ行列の元素をスケーリングし、整数値を有するＤＣＴ行列を獲得し、ＤＣＴ行列に基づいた変換アルゴリズムで行われる回転変換に該当する演算を、乗算演算の回数が減った代替的な演算を介して遂行することによって、演算複雑度を低下させる。
【発明の効果】
【０００６】
本発明によれば、大サイズのブロックに対する変換時及び逆変換時に、浮動小数点演算ではない整数基盤の演算過程を介して複雑度を低下させ、演算速度を速める映像の変換方法及び逆変換方法、並びにその装置を提供することができる。また、本発明によれば、ＤＣＴ時及び逆変換時に遂行される乗算演算の回数を低減させることによって、演算複雑度を低下させる。
【図面の簡単な説明】
【０００７】
【図１】本発明の一実施形態による映像符号化装置を図示する図面である。
【図２】本発明の一実施形態による３２ポイントＤＣＴのフローチャートの一例である。
【図３】本発明の一実施形態による映像変換方法を示したフローチャートである。
【図４】本発明の一実施形態による３２，１６，８及び４ポイントＤＣＴ過程を再構成したフローチャートである。
【図５】図４のフローチャートに図示された各演算構成要素について説明するための参照図である。
【図６】図２の３２ポイントＤＣＴ行列に含まれた回転変換演算過程について説明するための参照図である。
【図７Ａ】図４の図面符号４４０による演算過程について説明するための図面である。
【図７Ｂ】図４の図面符号４４０による演算過程について説明するための図面である。
【図７Ｃ】図４の図面符号４４０による演算過程について説明するための図面である。
【図８】本発明の一実施形態による映像逆変換装置の構成を示したブロック図である。
【図９】本発明の一実施形態による映像逆変換方法を示したフローチャートである。
【図１０】本発明の一実施形態による３２，１６，８及び４ポイント逆離散コサイン変換過程を再構成したフローチャートである。
【発明を実施するための形態】
【０００８】
本発明の一実施形態による映像の変換方法は、Ｎ（Ｎは、整数）ポイント離散コサイン変換（ＤＣＴ：discrete  cosine  transform）に利用される変換行列を構成する元素を、所定のスケーリング・ファクタを利用してスケーリングし、整数値を有するスケーリングされた元素を獲得する段階と、前記整数値を有するスケーリングされた元素から構成された整数変換行列を利用して、前記ＮポイントＤＣＴを行う段階と、前記スケーリング・ファクタを利用して、前記ＮポイントＤＣＴ行列の結果値をデスケーリング（de-scaling）する段階と、を含むことを特徴とする。
【０００９】
本発明の一実施形態による映像の変換装置は、Ｎ（Ｎは、整数）ポイントＤＣＴに利用される変換行列を構成する元素を、所定のスケーリング・ファクタを利用してスケーリングし、整数値を有するスケーリングされた元素を獲得し、前記整数値を有するスケーリングされた元素から構成された整数変換行列を利用して、前記ＮポイントＤＣＴを行い、前記スケーリング・ファクタを利用して、前記ＮポイントＤＣＴ行列の結果値をデスケーリングする変換部を含むことを特徴とする。
【００１０】
本発明の一実施形態による映像の逆変換方法は、Ｎ（Ｎは、整数）ポイント逆離散コサイン変換に利用される逆変換行列を構成する元素を、所定のスケーリング・ファクタを利用してスケーリングし、整数値を有するスケーリングされた元素を獲得する段階と、前記整数値を有するスケーリングされた元素から構成された整数逆変換行列を利用して、前記Ｎポイント逆離散コサイン変換を行う段階と、前記スケーリング・ファクタを利用して、前記Ｎポイント逆離散コサイン変換行列の結果値をデスケーリングする段階と、を含むことを特徴とする。
【００１１】
本発明の一実施形態による映像の逆変換装置は、Ｎ（Ｎは、整数）ポイント逆離散コサイン変換に利用される逆変換行列を構成する元素を、所定のスケーリング・ファクタを利用してスケーリングし、整数値を有するスケーリングされた元素を獲得し、前記整数値を有するスケーリングされた元素から構成された整数逆変換行列を利用して、前記Ｎポイント逆離散コサイン変換を行い、前記スケーリング・ファクタを利用して、前記Ｎポイント逆離散コサイン変換行列の結果値をデスケーリングする逆変換部を含むことを特徴とする。
【００１２】
以下、添付された図面を参照し、本発明の望ましい実施形態について具体的に説明する。
【００１３】
図１は、本発明の一実施形態による映像符号化装置を図示している。図１を参照すれば、本発明の一実施形態による映像符号化装置１００は、予測部１１０、減算部１１５、変換部１２０、量子化部１３０及びエントロピ符号化部１４０を含む。
【００１４】
予測部１１０は、入力映像を所定サイズのブロックに分割し、分割された各ブロックに対して、インター予測またはイントラ予測を介して予測ブロックを生成する。具体的には、予測部１１０は、以前に符号化された後で復元された参照ピクチャの所定探索範囲内で、現在ブロックと類似した領域を示す動きベクトルを生成する動き予測及び動き補償過程を介して、予測ブロックを生成するインター予測、及び現在ブロックに隣接した周辺ブロックのデータを利用して、予測ブロックを生成するイントラ予測を行う。
【００１５】
減算部１１５は、現在ブロックの予測ブロックから原映像データを減算した残差を生成する。
【００１６】
変換部１２０は、残差を周波数領域に変換する。特に、本発明の実施形態による変換部１２０は、従来４ｘ４、８ｘ８の相対的に小さいサイズについて定義されたＤＣＴ行列を拡張し、１６ｘ１６以上の大サイズのブロックにも適用される。後述するように、本発明の一実施形態による変換部１２０は、Ｎ（Ｎは、整数）ポイントＤＣＴに利用される変換行列を構成する元素を、所定のスケーリング・ファクタを利用してスケーリングし、整数値を有する元素から構成されたＮポイントＤＣＴ行列を生成し、生成されたＮポイントＤＣＴ行列を利用してＮポイントＤＣＴを行う。また、本発明の一実施形態による変換部１２０は、原ＮポイントＤＣＴ行列による結果値との差を考慮し、スケーリングされた元素を利用したＮポイントＤＣＴ行列の結果値に対して、さらにスケーリング・ファクタを利用したデスケーリングを遂行する。後述するように、かようなスケーリング過程及びデスケーリング過程は、スケーリング・ファクタが２の指数乗（power  of  ２）の値を有する場合、シフト演算（＞＞，＜＜）で具現される。かようなシフト演算は、乗算演算に比べて簡単に具現され、乗算演算に比べて演算複雑度が低減される。従って、本発明の実施形態による変換部１２０は、大サイズのブロックに対するＤＣＴ時の演算複雑度を低下させながら、演算速度を速めることができる。また、本発明の一実施形態による変換部１２０は、ＮポイントＤＣＴ行列による演算過程で、必要な乗算演算の回数を低減させるために、回転変換に該当する演算を、乗算演算の回数が低減された代替演算を介して行うことによって、ＮポイントＤＣＴ過程に必要な全体乗算演算の回数を低減させ、全体的な演算複雑度を低下させる。
【００１７】
量子化部１３０は、変換された残差を量子化する。量子化部１３０は、量子化過程でスケーリング・ファクタを利用して、変換部１２０でスケーリングされて整数値を有する元素から構成されたＮポイントＤＣＴ行列を利用して変換された結果値と、原ＮポイントＤＣＴ行列に基づいた結果値との差を補償するためのデスケーリング過程を遂行することができる。すなわち、変換部１２０で遂行されるデスケーリング過程は、量子化部１３０による量子化過程に統合され、これについては後述する。
【００１８】
エントロピ符号化部１４０は、量子化された映像データに対して可変長符号化を行い、ビットストリームを生成する。
【００１９】
以下、図１の変換部１２０で遂行される変換過程について具体的に説明する。
【００２０】
変換部１２０は、ＮｘＮ（Ｎは、整数）入力ブロックに対して、列方向変換（column-wise  transform）及び行方向変換（row-wise  transform）を行い、ＮｘＮ変換ブロックを生成する。ＮｘＮ入力ブロックをInput、行方向のＤＣＴ変換行列をTransform＿ｈｏｒ、列方向のＤＣＴ変換行列をTransform＿ｖｅｒ、変換結果値をOutputとするならば、変換部１２０は、次の数式：Output＝Transform＿ｈｏｒｘInputｘTransform＿ｖｅｒのようなＮポイントＤＣＴ行列演算を遂行して変換結果値Outputを出力する。ここで、最初の行列乗算Transform＿ｈｏｒｘInputは、Ｎ×Ｎ入力ブロックであるInputの各行に対して、一次元水平方向ＮポイントＤＣＴを行うことに該当し、Transform＿ｈｏｒｘInputにTransform＿ｖｅｒを乗じることは、一次元Ｎポイント垂直方向ＤＣＴを行うことに該当する。行方向のＤＣＴ行列Transform＿ｈｏｒと、列方向のＤＣＴ行列Transform＿ｖｅｒは、互いに転置（transpose）行列関係である。以下の説明で、行方向及び列方向に対して遂行されるＮポイントＤＣＴ行列について説明する。
【００２１】
ＮポイントＤＣＴ行列の（ｋ，ｎ）番目（ｋ，ｎは、それぞれ０から（Ｎ−１）までの整数）に位置した元素をＡｋｎとすれば、ＮｘＮ入力ブロックの変換のための垂直方向または水平方向のＮポイントＤＣＴ行列の（ｋ，ｎ）番目の元素Ａｋｎは、次の数式（１）のように定義される。
【００２２】
【数１】
2014523673.tif 000003
ＮポイントＤＣＴ行列と、Ｎポイント逆離散コサイン変換行列は、互いに転置関係にあるので、Ｎポイント逆離散コサイン変換行列の（ｋ，ｎ）番目の元素Ｂｋｎは、次の数式（２）のように定義される。
【００２３】
【数２】
2014523673.tif 000004
数式（１）及び（２）で、Ｃ及びｉＣは、Ｃ＊ｉＣ＝２／（Ｎ＾２）を満足する係数値である。Ｃ及びｉＣを乗じる演算過程は、変換過程以後に、量子化過程と結合され、シフト演算として具現されるので、以下の説明では、Ｎポイント変換行列及びＮポイント逆変換行列に含まれた
【００２４】
【数３】
2014523673.tif 000005
成分を整数値で置き換える場合を中心に説明する。また、以下の説明で、πは、ｐｉと表現される。
【００２５】
図２は、本発明の一実施形態による３２ポイントＤＣＴのフローチャートの一例である。数式（１）で定義された元素から構成されたＤＣＴ行列は、図２に図示されたようなフローチャート２００を介して具現される。
【００２６】
具体的には、図２を参照すれば、Ｘ０ないしＸ３１は、３２ポイントＤＣＴの入力値を示す。Ｙ０ないしＹ３１は、３２ポイントＤＣＴによる結果値である。一方、Ｙ０ないしＹ３１を入力値であると仮定すれば、Ｘ０ないしＸ３１は、３２ポイント逆離散コサイン変換（ＩＤＣＴ）の出力値になる。すなわち、Ｘ０ないしＸ３１は、３２ポイントＤＣＴの入力値を示すと同時に、３２ポイントＩＤＣＴの出力値である。３２ポイントＤＣＴ時に、データ処理方向は、左側から右側であり、３２ポイントＩＤＣＴ時に、データ処理方向は、右側から左側である。点で交差する２本のラインは、２個の数の加算を示す。「−」は、否定（negation）を示し、当該ラインを通過する値をＸとすれば、−Ｘを出力する。各ラインの上の値Ｒ（θ）は、入力値をθほど回転変換を行う回転変換に該当する演算を示し、各ラインを介して入力される値に、ｃｏｓθまたはｓｉｎθの値を乗じた値を加算したり、あるいは減算する演算を示す。図２の回転変換演算過程については、以下の図６を参照して詳細に説明する。
【００２７】
図２では、３２ポイントＤＣＴ行列のフローチャートを図示したが、偶数番目及び奇数番目の入力に係わる部分を選択することによって、１６ポイントＤＣＴのフローチャートを獲得することができ、さらに１６ポイントＤＣＴのフローチャートのうち、偶数番目及び奇数番目の入力に係わる部分を選択することによって、８ポイントＤＣＴのフローチャートを獲得することができる。同様に、図２のフローチャートから、４ポイントＤＣＴ及び２ポイントＤＣＴのフローチャートを獲得することができる。
【００２８】
図２で、一部ラインに表示されたＲ（θ）は、入力値をθほど回転変換を行う演算であるということ示す。例えば、図２の図面符号２１０で図示された部分の演算過程を図６を参照して説明する。
【００２９】
図６は、図２の３２ポイントＤＣＴ行列に含まれた回転変換演算過程について説明するための参照図である。図６を参照すれば、図２の図面符号２１０に図示された演算は、入力値［Ｘ１，Ｘ２］に対して、以下の数式：
【００３０】
【数４】
2014523673.tif 000006
のような演算を介して、出力値［Ｙ１，Ｙ２］を出力するのである。かような演算は、（ｘ１，ｘ２）の値をθほど回転した値を出力する回転変換演算に該当する。
【００３１】
図２のフローチャートによって、ＮポイントＤＣＴを行う場合、Ｒ（θ）によって、ｃｏｓθ及びｓｉｎθと、入力された値との乗算演算が遂行される。θが、０、ｐｉ／２、ｐｉ／３、ｐｉ／６である特定の場合を除き、ｃｏｓθ及びｓｉｎθは、無理数（irrational  number）であるために、ｃｏｓθ及びｓｉｎθを利用した乗算演算過程は、ハードウェアで具現するときに、複雑度を上昇させる。従って、本発明の一実施形態による変換部１２０は、ＤＣＴ演算行列に含まれた元素に、所定のスケーリング・ファクタを乗じた後で四捨五入し、整数値を有する元素から構成されたＤＣＴ行列を生成し、ＤＣＴ結果値を、さらにスケーリング・ファクタを利用して、デスケーリングする過程を遂行する。
【００３２】
以下、本発明の一実施形態によって、整数値を有する元素から構成されたＤＣＴ行列を生成する過程について具体的に説明する。
【００３３】
図３は、本発明の一実施形態による映像変換方法を示したフローチャートである。
【００３４】
図１及び図３を参照すれば、段階３１０で、変換部１２０は、ＮポイントＤＣＴ行列を構成する各元素に、所定のスケーリング・ファクタＳを乗じた後で四捨五入し、整数値を有する元素を獲得する。
【００３５】
前述のように、ＮポイントＤＣＴ行列は、
【００３６】
【数５】
2014523673.tif 000007
である成分を含む。変換部１２０は、かような
【００３７】
【数６】
2014523673.tif 000008
に、所定のスケーリング・ファクタＳを乗じた後で四捨五入して整数値を獲得する。ｉｎｔ（ｘ）（ｘは、実数）を、ｘを四捨五入した整数値、ｓｑｒｔ（ｘ）をｘの自乗根、Ｓをスケーリング・ファクタとすれば、変換部１２０によって、ＮポイントＤＣＴ行列に含まれた
【００３８】
【数７】
2014523673.tif 000009
を整数値に変換した元素は、ｉｎｔ（ｃｏｓ（（２ｎ＋１）ｋ）＊ｓｑｒｔ（２．０）＊Ｓ）と表現され、かような整数値に変換された元素ｉｎｔ（ｃｏｓ（（２ｎ＋１）ｋ）＊ｓｑｒｔ（２．０）＊Ｓ）を、ＣＯＳ＿（（２ｎ＋１）ｋ）＿ＳＱＲＴ＿２と示すと定義する。一例として、３２ポイントＤＣＴ行列に含まれた
【００３９】
【数８】
2014523673.tif 000010
に、スケーリング・ファクタＳを乗じて四捨五入した整数値を獲得する場合、以下の表１で定義されているように、
【００４０】
【数９】
2014523673.tif 000011
を整数値に変換した元素が定義される。
【００４１】
【表１】
2014523673.tif 000012
2014523673.tif 000013
表１でＳＱＲＴ＿２は、
【００４２】
【数１０】
2014523673.tif 000014
で、ｋが０の値を有する場合、すなわち、
【００４３】
【数１１】
2014523673.tif 000015
を整数値に変換した元素を示す。表１では、スケーリング・ファクタＳは、２＾６、すなわち、６４の値を有する場合、
【００４４】
【数１２】
2014523673.tif 000016
の代わりに利用される整数値を例示している。例えば、ｃｏｓ（７＊ｐｉ／６４）＊６４は、約６０．２５８８の値を有し、それを四捨五入すれば６０の値を有する。従って、変換部１２０は、ｃｏｓ（７＊ｐｉ／６４）＊６４の代わりに、ｃｏｓ（７＊ｐｉ／６４）＊６４を四捨五入した値であるＣＯＳ７＿ＳＱＲＴ＿２（＝６０）を利用して変換を行う。
【００４５】
変換部１２０は、このように、ＮポイントＤＣＴ行列の元素にスケーリング・ファクタＳを乗じた後で四捨五入した値に対して、さらにスケーリング・ファクタＳを利用した左向きシフト演算（＜＜）を行う。Ｓ＿ＢＩＴをｌｏｇ２Ｓと定義すれば、変換部１２０は、ＣＯＳ＿（（２ｎ＋１）ｋ）＿ＳＱＲＴ＿２を、さらにＳ＿ＢＩＴほど左向きシフト（＜＜）してＮポイントＤＣＴ行列を獲得する。Ｓ＝１＜＜Ｓ＿ＢＩＴであるので、ＣＯＳ＿（（２ｎ＋１）ｋ）＿ＳＱＲＴ＿２を、さらにＳ＿ＢＩＴほど左向きシフト（＜＜）する演算は、結局、Ｓを乗じる演算に該当する。従って、本発明の一実施形態による変換部１２０は、ＮポイントＤＣＴ行列の元素にＳを乗じた後で四捨五入した値に、さらにＳを乗じることによって、結果としてＳ＾２ほどＮポイントＤＣＴ行列の元素をスケーリングすることになる。かようなスケーリング過程を介して、獲得された４ポイントＤＣＴ行列であるＤＣＴ＿４ｘ４［４］［４］、８ポイントＤＣＴ行列であるＤＣＴ＿８ｘ８［８］［８］、１６ポイントＤＣＴ行列であるＤＣＴ＿１６ｘ１６［１６］［１６］、３２ポイントＤＣＴ行列であるＤＣＴ＿３２ｘ３２［３２］［３２］を、表１に記載されたような記号を利用して表現すれば、以下の通りである。
DCT_4x4[4][4]  =  {
{  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT},
{  COS8_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT  },
{  COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT},
{  COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT  }
};
DCT_8x8[8][8]  =  {
{  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT
{  (COS12+COS20)<<S_BIT,  (COS4+COS28)<<S_BIT,  (COS4-COS28)<<S_BIT,  (COS12-COS20)<<S_BIT,-((COS12-COS20)<<S_BIT),-((COS4-COS28)<<S_BIT),-((COS4+COS28)<<S_BIT),-((COS12+COS20)<<S_BIT)},
{  COS8_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT},
{  COS12*SQRT_2,-COS28*SQRT_2,-COS4*SQRT_2,-COS20*SQRT_2,  COS20*SQRT_2,  COS4*SQRT_2,  COS28*SQRT_2,-COS12*SQRT_2},  
{  COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT},
{  COS20*SQRT_2,-COS4*SQRT_2,  COS28*SQRT_2,  COS12*SQRT_2,-COS12*SQRT_2,-COS28*SQRT_2,  COS4*SQRT_2,-COS20*SQRT_2},
{  COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT},
{  (COS12-COS20)<<S_BIT,-((COS4-COS28)<<S_BIT),  (COS4+COS28)<<S_BIT,-((COS12+COS20)<<S_BIT),  (COS12+COS20)<<S_BIT,-((COS4+COS28)<<S_BIT),  (COS4-COS28)<<S_BIT,-((COS12-COS20)<<S_BIT)}
};
DCT_16x16[16][16]  =  {
{  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT},
{  (COS14+COS18)<<S_BIT,  (COS10+COS22)<<S_BIT,  (COS6+COS26)<<S_BIT,  (COS2+COS30)<<S_BIT,  (COS2-COS30)<<S_BIT,  (COS6-COS26)<<S_BIT,  (COS10-COS22)<<S_BIT,  (COS14-COS18)<<S_BIT,  -(COS14-COS18)<<S_BIT,-(COS10-COS22)<<S_BIT,-(COS6-COS26)<<S_BIT,-(COS2-COS30)<<S_BIT,-(COS2+COS30)<<S_BIT,-(COS6+COS26)<<S_BIT,-(COS10+COS22)<<S_BIT,-(COS14+COS18)<<S_BIT},
{  ((COS12+COS20)<<S_BIT),  ((COS4+COS28)<<S_BIT),  ((COS4-COS28)<<S_BIT),  ((COS12-COS20)<<S_BIT),-((COS12-COS20)<<S_BIT),-((COS4-COS28)<<S_BIT),-((COS4+COS28)<<S_BIT),-((COS12+COS20)<<S_BIT),-((COS12+COS20)<<S_BIT),-((COS4+COS28)<<S_BIT),-((COS4-COS28)<<S_BIT),-((COS12-COS20)<<S_BIT),  ((COS12-COS20)<<S_BIT),  ((COS4-COS28)<<S_BIT),  ((COS4+COS28)<<S_BIT),  ((COS12+COS20)<<S_BIT)},
{  (COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),  (COS10*COS8_SQRT_2-COS22*COS24_SQRT_2),  (COS6*COS24_SQRT_2-COS8_SQRT_2*COS26),-(COS30*COS8_SQRT_2+COS2*COS24_SQRT_2),-(COS2*COS8_SQRT_2-COS24_SQRT_2*COS30),-(COS24_SQRT_2*COS26+COS8_SQRT_2*COS6),-(COS10*COS24_SQRT_2+COS22*COS8_SQRT_2),-(COS18*COS8_SQRT_2-COS14*COS24_SQRT_2),  (COS18*COS8_SQRT_2-COS14*COS24_SQRT_2),  (COS10*COS24_SQRT_2+COS22*COS8_SQRT_2),  (COS24_SQRT_2*COS26+COS8_SQRT_2*COS6),  (COS2*COS8_SQRT_2-COS24_SQRT_2*COS30),  (COS30*COS8_SQRT_2+COS2*COS24_SQRT_2),  -(COS6*COS24_SQRT_2-COS8_SQRT_2*COS26),-(COS10*COS8_SQRT_2-COS22*COS24_SQRT_2),-(COS24_SQRT_2*COS18+COS8_SQRT_2*COS14)},
{  COS8_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT},
{  (COS24_SQRT_2*COS14+COS8_SQRT_2*COS18),  (COS8_SQRT_2*COS22-COS24_SQRT_2*COS10),-(COS8_SQRT_2*COS6-COS24_SQRT_2*COS26),-(COS24_SQRT_2*COS30+COS8_SQRT_2*COS2),-(COS24_SQRT_2*COS2-COS8_SQRT_2*COS30),  (COS24_SQRT_2*COS6+COS8_SQRT_2*COS26),  (COS22*COS24_SQRT_2+COS8_SQRT_2*COS10),  (-COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),-(-COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),-(COS22*COS24_SQRT_2+COS8_SQRT_2*COS10),-(COS24_SQRT_2*COS6+COS8_SQRT_2*COS26),  (COS24_SQRT_2*COS2-COS8_SQRT_2*COS30),  (COS24_SQRT_2*COS30+COS8_SQRT_2*COS2),  (COS8_SQRT_2*COS6-COS24_SQRT_2*COS26),  -(COS8_SQRT_2*COS22-COS24_SQRT_2*COS10),-(COS24_SQRT_2*COS14+COS8_SQRT_2*COS18)},
{  COS12*SQRT_2,-COS28*SQRT_2,-COS4*SQRT_2,-COS20*SQRT_2,  COS20*SQRT_2,  COS4*SQRT_2,  COS28*SQRT_2,-COS12*SQRT_2,-COS12*SQRT_2,  COS28*SQRT_2,  COS4*SQRT_2,  COS20*SQRT_2,-COS20*SQRT_2,-COS4*SQRT_2,-COS28*SQRT_2,  COS12*SQRT_2},
{  COS14*SQRT_2,-COS22*SQRT_2,-COS6*SQRT_2,  COS30*SQRT_2,  COS2*SQRT_2,  COS26*SQRT_2,-COS10*SQRT_2,-COS18*SQRT_2,  COS18*SQRT_2,  COS10*SQRT_2,-COS26*SQRT_2,-COS2*SQRT_2,  -COS30*SQRT_2,  COS6*SQRT_2,  COS22*SQRT_2,-COS14*SQRT_2},
{  COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT},
{  COS18*SQRT_2,-COS10*SQRT_2,-COS26*SQRT_2,  COS2*SQRT_2,  -COS30*SQRT_2,-COS6*SQRT_2,  COS22*SQRT_2,  COS14*SQRT_2,-COS14*SQRT_2,-COS22*SQRT_2,  COS6*SQRT_2,  COS30*SQRT_2,-COS2*SQRT_2,  COS26*SQRT_2,  COS10*SQRT_2,-COS18*SQRT_2},
{  COS20*SQRT_2,-COS4*SQRT_2,  COS28*SQRT_2,  COS12*SQRT_2,-COS12*SQRT_2,-COS28*SQRT_2,  COS4*SQRT_2,-COS20*SQRT_2,-COS20*SQRT_2,  COS4*SQRT_2,-COS28*SQRT_2,-COS12*SQRT_2,  COS12*SQRT_2,  COS28*SQRT_2,-COS4*SQRT_2,  COS20*SQRT_2},
{  (-COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),-(COS22*COS24_SQRT_2+COS8_SQRT_2*COS10),  (COS24_SQRT_2*COS6+COS8_SQRT_2*COS26),  (COS24_SQRT_2*COS2-COS8_SQRT_2*COS30),-(COS24_SQRT_2*COS30+COS8_SQRT_2*COS2),  (COS8_SQRT_2*COS6-COS24_SQRT_2*COS26),  (COS8_SQRT_2*COS22-COS24_SQRT_2*COS10),-(COS24_SQRT_2*COS14+COS8_SQRT_2*COS18),  (COS24_SQRT_2*COS14+COS8_SQRT_2*COS18),  -(COS8_SQRT_2*COS22-COS24_SQRT_2*COS10),-(COS8_SQRT_2*COS6-COS24_SQRT_2*COS26),  (COS24_SQRT_2*COS30+COS8_SQRT_2*COS2),-(COS24_SQRT_2*COS2-COS8_SQRT_2*COS30),-(COS24_SQRT_2*COS6+COS8_SQRT_2*COS26),  (COS22*COS24_SQRT_2+COS8_SQRT_2*COS10),-(-COS24_SQRT_2*COS18+COS8_SQRT_2*COS14)},
{  COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT},
{  (COS18*COS8_SQRT_2-COS14*COS24_SQRT_2),-(COS10*COS24_SQRT_2+COS22*COS8_SQRT_2),  (COS24_SQRT_2*COS26+COS8_SQRT_2*COS6),-(COS2*COS8_SQRT_2-COS24_SQRT_2*COS30),  (COS30*COS8_SQRT_2+COS2*COS24_SQRT_2),  (COS6*COS24_SQRT_2-COS8_SQRT_2*COS26),-(COS10*COS8_SQRT_2-COS22*COS24_SQRT_2),  (COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),-(COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),  (COS10*COS8_SQRT_2-COS22*COS24_SQRT_2),  -(COS6*COS24_SQRT_2-COS8_SQRT_2*COS26),-(COS30*COS8_SQRT_2+COS2*COS24_SQRT_2),  (COS2*COS8_SQRT_2-COS24_SQRT_2*COS30),-(COS24_SQRT_2*COS26+COS8_SQRT_2*COS6),
(COS10*COS24_SQRT_2+COS22*COS8_SQRT_2),-(COS18*COS8_SQRT_2-COS14*COS24_SQRT_2)},
{  ((COS12-COS20)<<S_BIT),-((COS4-COS28)<<S_BIT),  ((COS4+COS28)<<S_BIT),-((COS12+COS20)<<S_BIT),  ((COS12+COS20)<<S_BIT),-((COS4+COS28)<<S_BIT),  ((COS4-COS28)<<S_BIT),-((COS12-COS20)<<S_BIT),-((COS12-COS20)<<S_BIT),  ((COS4-COS28)<<S_BIT),-((COS4+COS28)<<S_BIT),  ((COS12+COS20)<<S_BIT),-((COS12+COS20)<<S_BIT),  ((COS4+COS28)<<S_BIT),-((COS4-COS28)<<S_BIT),  ((COS12-COS20)<<S_BIT)},
{  (COS14-COS18)<<S_BIT,-(COS10-COS22)<<S_BIT,  (COS6-COS26)<<S_BIT,-(COS2-COS30)<<S_BIT,  (COS2+COS30)<<S_BIT,-(COS6+COS26)<<S_BIT,  (COS10+COS22)<<S_BIT,-(COS14+COS18)<<S_BIT,  (COS14+COS18)<<S_BIT,-(COS10+COS22)<<S_BIT,  (COS6+COS26)<<S_BIT,-(COS2+COS30)<<S_BIT,  (COS2-COS30)<<S_BIT,-(COS6-COS26)<<S_BIT,  (COS10-COS22)<<S_BIT,  -(COS14-COS18)<<S_BIT}
};
DCT_32x32[32][32]  =  {
{  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT},
{  COS16_SQRT_2*COS17  +  COS16_SQRT_2*COS15,  COS13*COS16_SQRT_2  +  COS19*COS16_SQRT_2,  COS16_SQRT_2*COS21  +  COS16_SQRT_2*COS11,  COS16_SQRT_2*COS9  +  COS16_SQRT_2*COS23,  COS16_SQRT_2*COS25  +  COS16_SQRT_2*COS7,  COS16_SQRT_2*COS5  +  COS16_SQRT_2*COS27,  COS16_SQRT_2*COS29  +  COS16_SQRT_2*COS3,  COS1*COS16_SQRT_2  +  COS31*COS16_SQRT_2,  COS1*COS16_SQRT_2  -  COS16_SQRT_2*COS31,  COS16_SQRT_2*COS3  -  COS29*COS16_SQRT_2,  COS5*COS16_SQRT_2  -  COS16_SQRT_2*COS27,  COS16_SQRT_2*COS7  -  COS25*COS16_SQRT_2,  COS9*COS16_SQRT_2  -  COS16_SQRT_2*COS23,  COS16_SQRT_2*COS11  -  COS21*COS16_SQRT_2,  COS13*COS16_SQRT_2  -  COS16_SQRT_2*COS19,  COS16_SQRT_2*COS15  -  COS17*COS16_SQRT_2,  COS17*COS16_SQRT_2  -  COS16_SQRT_2*COS15,  COS16_SQRT_2*COS19  -  COS13*COS16_SQRT_2,  COS21*COS16_SQRT_2  -  COS16_SQRT_2*COS11,  COS16_SQRT_2*COS23  -  COS9*COS16_SQRT_2,  COS25*COS16_SQRT_2  -  COS16_SQRT_2*COS7,  COS16_SQRT_2*COS27  -  COS5*COS16_SQRT_2,  COS29*COS16_SQRT_2  -  COS16_SQRT_2*COS3,  COS16_SQRT_2*COS31  -  COS1*COS16_SQRT_2,  -  COS1*COS16_SQRT_2  -  COS31*COS16_SQRT_2,  -  COS16_SQRT_2*COS29  -  COS16_SQRT_2*COS3,  -  COS16_SQRT_2*COS5  -  COS16_SQRT_2*COS27,  -  COS16_SQRT_2*COS25  -  COS16_SQRT_2*COS7,  -  COS16_SQRT_2*COS9  -  COS16_SQRT_2*COS23,  -  COS16_SQRT_2*COS21  -  COS16_SQRT_2*COS11,  -  COS13*COS16_SQRT_2  -  COS19*COS16_SQRT_2,  -  COS16_SQRT_2*COS17  -  COS16_SQRT_2*COS15},
{  (COS14+COS18)<<S_BIT,  (COS10+COS22)<<S_BIT,  (COS6+COS26)<<S_BIT,  (COS2+COS30)<<S_BIT,  (COS2-COS30)<<S_BIT,  (COS6-COS26)<<S_BIT,  (COS10-COS22)<<S_BIT,  (COS14-COS18)<<S_BIT,  -(COS14-COS18)<<S_BIT,-(COS10-COS22)<<S_BIT,-(COS6-COS26)<<S_BIT,-(COS2-COS30)<<S_BIT,-(COS2+COS30)<<S_BIT,-(COS6+COS26)<<S_BIT,-(COS10+COS22)<<S_BIT,-(COS14+COS18)<<S_BIT,-(COS14+COS18)<<S_BIT,-(COS10+COS22)<<S_BIT,-(COS6+COS26)<<S_BIT,-(COS2+COS30)<<S_BIT,-(COS2-COS30)<<S_BIT,-(COS6-COS26)<<S_BIT,-(COS10-COS22)<<S_BIT,  -(COS14-COS18)<<S_BIT,  (COS14-COS18)<<S_BIT,  (COS10-COS22)<<S_BIT,  (COS6-COS26)<<S_BIT,  (COS2-COS30)<<S_BIT,  (COS2+COS30)<<S_BIT,  (COS6+COS26)<<S_BIT,  (COS10+COS22)<<S_BIT,  (COS14+COS18)<<S_BIT},
{  COS12_SQRT_2*COS15  +  COS17*COS20_SQRT_2,  COS13*COS4_SQRT_2  +  COS19*COS28_SQRT_2,  COS4_SQRT_2*COS11  -  COS21*COS28_SQRT_2,  COS12_SQRT_2*COS9  -  COS20_SQRT_2*COS23,  COS20_SQRT_2*COS7  -  COS12_SQRT_2*COS25,  COS5*COS28_SQRT_2  -  COS4_SQRT_2*COS27,  -  COS29*COS4_SQRT_2  -  COS3*COS28_SQRT_2,  -  COS1*COS20_SQRT_2  -  COS12_SQRT_2*COS31,  COS31*COS20_SQRT_2  -  COS1*COS12_SQRT_2,  COS29*COS28_SQRT_2  -  COS4_SQRT_2*COS3,  -  COS4_SQRT_2*COS5  -  COS28_SQRT_2*COS27,  -  COS12_SQRT_2*COS7  -  COS25*COS20_SQRT_2,  -  COS12_SQRT_2*COS23  -  COS9*COS20_SQRT_2,  -  COS21*COS4_SQRT_2  -  COS11*COS28_SQRT_2,  COS13*COS28_SQRT_2  -  COS4_SQRT_2*COS19,  COS20_SQRT_2*COS15  -  COS12_SQRT_2*COS17,  COS12_SQRT_2*COS17  -  COS20_SQRT_2*COS15,  COS4_SQRT_2*COS19  -  COS13*COS28_SQRT_2,  COS21*COS4_SQRT_2  +  COS11*COS28_SQRT_2,  COS12_SQRT_2*COS23  +  COS9*COS20_SQRT_2,  COS12_SQRT_2*COS7  +  COS25*COS20_SQRT_2,  COS4_SQRT_2*COS5  +  COS28_SQRT_2*COS27,  COS4_SQRT_2*COS3  -  COS29*COS28_SQRT_2,  COS1*COS12_SQRT_2  -  COS31*COS20_SQRT_2,  COS1*COS20_SQRT_2  +  COS12_SQRT_2*COS31,  COS29*COS4_SQRT_2  +  COS3*COS28_SQRT_2,  COS4_SQRT_2*COS27  -  COS5*COS28_SQRT_2,  COS12_SQRT_2*COS25  -  COS20_SQRT_2*COS7,  COS20_SQRT_2*COS23  -  COS12_SQRT_2*COS9,  COS21*COS28_SQRT_2  -  COS4_SQRT_2*COS11,  -  COS13*COS4_SQRT_2  -  COS19*COS28_SQRT_2,  -  COS12_SQRT_2*COS15  -  COS17*COS20_SQRT_2},
{  ((COS12+COS20)<<S_BIT),  ((COS4+COS28)<<S_BIT),  ((COS4-COS28)<<S_BIT),  ((COS12-COS20)<<S_BIT),-((COS12-COS20)<<S_BIT),-((COS4-COS28)<<S_BIT),-((COS4+COS28)<<S_BIT),-((COS12+COS20)<<S_BIT),-((COS12+COS20)<<S_BIT),-((COS4+COS28)<<S_BIT),-((COS4-COS28)<<S_BIT),-((COS12-COS20)<<S_BIT),  ((COS12-COS20)<<S_BIT),  ((COS4-COS28)<<S_BIT),  ((COS4+COS28)<<S_BIT),  ((COS12+COS20)<<S_BIT),  ((COS12+COS20)<<S_BIT),  ((COS4+COS28)<<S_BIT),  ((COS4-COS28)<<S_BIT),  ((COS12-COS20)<<S_BIT),-((COS12-COS20)<<S_BIT),-((COS4-COS28)<<S_BIT),-((COS4+COS28)<<S_BIT),-((COS12+COS20)<<S_BIT),-((COS12+COS20)<<S_BIT),-((COS4+COS28)<<S_BIT),-((COS4-COS28)<<S_BIT),-((COS12-COS20)<<S_BIT),  ((COS12-COS20)<<S_BIT),  ((COS4-COS28)<<S_BIT),  ((COS4+COS28)<<S_BIT),  ((COS12+COS20)<<S_BIT)},
{  (COS17*COS4  -  COS15*COS28)  +  (COS17*COS28  +  COS4*COS15),  (COS12*COS13  +  COS20*COS19)  +  (COS12*COS19  -  COS13*COS20),  (COS12*COS21  +  COS20*COS11)  -  (COS12*COS11  -  COS21*COS20),  (COS4*COS23  +  COS9*COS28)  -  (COS4*COS9  -  COS28*COS23),  (COS25*COS4  -  COS7*COS28)  -  (COS25*COS28  +  COS4*COS7),  (COS12*COS27  -  COS5*COS20)  -  (COS12*COS5  +  COS20*COS27),  -  (COS12*COS29  +  COS20*COS3)  -  (COS12*COS3  -  COS29*COS20),  -  (COS1*COS4  -  COS31*COS28)  -  (COS1*COS28  +  COS4*COS31),  (COS1*COS28  +  COS4*COS31)  -  (COS1*COS4  -  COS31*COS28),  (COS12*COS29  +  COS20*COS3)  -  (COS12*COS3  -  COS29*COS20),  (COS12*COS5  +  COS20*COS27)  +  (COS12*COS27  -  COS5*COS20),  (COS25*COS4  -  COS7*COS28)  +  (COS25*COS28  +  COS4*COS7),  (COS4*COS9  -  COS28*COS23)  +  (COS4*COS23  +  COS9*COS28),  (COS12*COS21  +  COS20*COS11)  +  (COS12*COS11  -  COS21*COS20),  (COS12*COS13  +  COS20*COS19)  -  (COS12*COS19  -  COS13*COS20),  (COS17*COS28  +  COS4*COS15)  -  (COS17*COS4  -  COS15*COS28),  (COS17*COS4  -  COS15*COS28)  -  (COS17*COS28  +  COS4*COS15),  (COS12*COS19  -  COS13*COS20)  -  (COS12*COS13  +  COS20*COS19),  -  (COS12*COS21  +  COS20*COS11)  -  (COS12*COS11  -  COS21*COS20),  -  (COS4*COS9  -  COS28*COS23)  -  (COS4*COS23  +  COS9*COS28),  -  (COS25*COS4  -  COS7*COS28)  -  (COS25*COS28  +  COS4*COS7),  -  (COS12*COS5  +  COS20*COS27)  -  (COS12*COS27  -  COS5*COS20),  (COS12*COS3  -  COS29*COS20)  -  (COS12*COS29  +  COS20*COS3),  (COS1*COS4  -  COS31*COS28)  -  (COS1*COS28  +  COS4*COS31),  (COS1*COS4  -  COS31*COS28)  +  (COS1*COS28  +  COS4*COS31),  (COS12*COS29  +  COS20*COS3)  +  (COS12*COS3  -  COS29*COS20),  (COS12*COS5  +  COS20*COS27)  -  (COS12*COS27  -  COS5*COS20),  (COS25*COS28  +  COS4*COS7)  -  (COS25*COS4  -  COS7*COS28),  (COS4*COS9  -  COS28*COS23)  -  (COS4*COS23  +  COS9*COS28),  (COS12*COS11  -  COS21*COS20)  -  (COS12*COS21  +  COS20*COS11),  -  (COS12*COS13  +  COS20*COS19)  -  (COS12*COS19  -  COS13*COS20),  -  (COS17*COS4  -  COS15*COS28)  -  (COS17*COS28  +  COS4*COS15)},
{  (COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),  (COS10*COS8_SQRT_2-COS22*COS24_SQRT_2),  (COS6*COS24_SQRT_2-COS8_SQRT_2*COS26),-(COS30*COS8_SQRT_2+COS2*COS24_SQRT_2),-(COS2*COS8_SQRT_2-COS24_SQRT_2*COS30),-(COS24_SQRT_2*COS26+COS8_SQRT_2*COS6),-(COS10*COS24_SQRT_2+COS22*COS8_SQRT_2),-(COS18*COS8_SQRT_2-COS14*COS24_SQRT_2),  (COS18*COS8_SQRT_2-COS14*COS24_SQRT_2),  (COS10*COS24_SQRT_2+COS22*COS8_SQRT_2),  (COS24_SQRT_2*COS26+COS8_SQRT_2*COS6),  (COS2*COS8_SQRT_2-COS24_SQRT_2*COS30),  (COS30*COS8_SQRT_2+COS2*COS24_SQRT_2),  -(COS6*COS24_SQRT_2-COS8_SQRT_2*COS26),-(COS10*COS8_SQRT_2-COS22*COS24_SQRT_2),-(COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),-(COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),-(COS10*COS8_SQRT_2-COS22*COS24_SQRT_2),  -(COS6*COS24_SQRT_2-COS8_SQRT_2*COS26),  (COS30*COS8_SQRT_2+COS2*COS24_SQRT_2),  (COS2*COS8_SQRT_2-COS24_SQRT_2*COS30),  (COS24_SQRT_2*COS26+COS8_SQRT_2*COS6),  (COS10*COS24_SQRT_2+COS22*COS8_SQRT_2),  (COS18*COS8_SQRT_2-COS14*COS24_SQRT_2),-(COS18*COS8_SQRT_2-COS14*COS24_SQRT_2),-(COS10*COS24_SQRT_2+COS22*COS8_SQRT_2),-(COS24_SQRT_2*COS26+COS8_SQRT_2*COS6),-(COS2*COS8_SQRT_2-COS24_SQRT_2*COS30),-(COS30*COS8_SQRT_2+COS2*COS24_SQRT_2),  (COS6*COS24_SQRT_2-COS8_SQRT_2*COS26),  (COS10*COS8_SQRT_2-COS22*COS24_SQRT_2),  (COS24_SQRT_2*COS18+COS8_SQRT_2*COS14)},
{  COS17*COS24_SQRT_2  +  COS8_SQRT_2*COS15,  COS13*COS8_SQRT_2  -  COS19*COS24_SQRT_2,  COS11*COS24_SQRT_2  -  COS21*COS8_SQRT_2,  -  COS8_SQRT_2*COS23  -  COS9*COS24_SQRT_2,  -  COS25*COS24_SQRT_2  -  COS8_SQRT_2*COS7,  COS27*COS24_SQRT_2  -  COS5*COS8_SQRT_2,  COS29*COS8_SQRT_2  -  COS3*COS24_SQRT_2,  COS1*COS24_SQRT_2  +  COS8_SQRT_2*COS31,  COS1*COS8_SQRT_2  -  COS31*COS24_SQRT_2,  COS29*COS24_SQRT_2  +  COS8_SQRT_2*COS3,  COS5*COS24_SQRT_2  +  COS8_SQRT_2*COS27,  COS25*COS8_SQRT_2  -  COS7*COS24_SQRT_2,  COS24_SQRT_2*COS23  -  COS8_SQRT_2*COS9,  -  COS21*COS24_SQRT_2  -  COS8_SQRT_2*COS11,  -  COS13*COS24_SQRT_2  -  COS8_SQRT_2*COS19,  COS15*COS24_SQRT_2  -  COS17*COS8_SQRT_2,  COS17*COS8_SQRT_2  -  COS15*COS24_SQRT_2,  COS13*COS24_SQRT_2  +  COS8_SQRT_2*COS19,  COS21*COS24_SQRT_2  +  COS8_SQRT_2*COS11,  COS8_SQRT_2*COS9  -  COS24_SQRT_2*COS23,  COS7*COS24_SQRT_2  -  COS25*COS8_SQRT_2,  -  COS5*COS24_SQRT_2  -  COS8_SQRT_2*COS27,  -  COS29*COS24_SQRT_2  -  COS8_SQRT_2*COS3,  COS31*COS24_SQRT_2  -  COS1*COS8_SQRT_2,  -  COS1*COS24_SQRT_2  -  COS8_SQRT_2*COS31,  COS3*COS24_SQRT_2  -  COS29*COS8_SQRT_2,  COS5*COS8_SQRT_2  -  COS27*COS24_SQRT_2,  COS25*COS24_SQRT_2  +  COS8_SQRT_2*COS7,  COS8_SQRT_2*COS23  +  COS9*COS24_SQRT_2,  COS21*COS8_SQRT_2  -  COS11*COS24_SQRT_2,  COS19*COS24_SQRT_2  -  COS13*COS8_SQRT_2,  -  COS17*COS24_SQRT_2  -  COS8_SQRT_2*COS15},
{  COS8_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT},
{  COS17*COS8_SQRT_2  +  COS15*COS24_SQRT_2,  COS8_SQRT_2*COS19  -  COS13*COS24_SQRT_2,  COS21*COS24_SQRT_2  -  COS8_SQRT_2*COS11,  -  COS8_SQRT_2*COS9  -  COS24_SQRT_2*COS23,  -  COS25*COS8_SQRT_2  -  COS7*COS24_SQRT_2,  COS5*COS24_SQRT_2  -  COS8_SQRT_2*COS27,  COS8_SQRT_2*COS3  -  COS29*COS24_SQRT_2,  COS1*COS8_SQRT_2  +  COS31*COS24_SQRT_2,  COS1*COS24_SQRT_2  -  COS8_SQRT_2*COS31,  -  COS29*COS8_SQRT_2  -  COS3*COS24_SQRT_2,  -  COS5*COS8_SQRT_2  -  COS27*COS24_SQRT_2,  COS25*COS24_SQRT_2  -  COS8_SQRT_2*COS7,  COS8_SQRT_2*COS23  -  COS9*COS24_SQRT_2,  COS21*COS8_SQRT_2  +  COS11*COS24_SQRT_2,  COS13*COS8_SQRT_2  +  COS19*COS24_SQRT_2,  COS8_SQRT_2*COS15  -  COS17*COS24_SQRT_2,  COS17*COS24_SQRT_2  -  COS8_SQRT_2*COS15,  -  COS13*COS8_SQRT_2  -  COS19*COS24_SQRT_2,  -  COS21*COS8_SQRT_2  -  COS11*COS24_SQRT_2,  COS9*COS24_SQRT_2  -  COS8_SQRT_2*COS23,  COS8_SQRT_2*COS7  -  COS25*COS24_SQRT_2,  COS5*COS8_SQRT_2  +  COS27*COS24_SQRT_2,  COS29*COS8_SQRT_2  +  COS3*COS24_SQRT_2,  COS8_SQRT_2*COS31  -  COS1*COS24_SQRT_2,  -  COS1*COS8_SQRT_2  -  COS31*COS24_SQRT_2,  COS29*COS24_SQRT_2  -  COS8_SQRT_2*COS3,  COS8_SQRT_2*COS27  -  COS5*COS24_SQRT_2,  COS25*COS8_SQRT_2  +  COS7*COS24_SQRT_2,  COS8_SQRT_2*COS9  +  COS24_SQRT_2*COS23,  COS8_SQRT_2*COS11  -  COS21*COS24_SQRT_2,  COS13*COS24_SQRT_2  -  COS8_SQRT_2*COS19,  -  COS17*COS8_SQRT_2  -  COS15*COS24_SQRT_2},
{  (COS24_SQRT_2*COS14+COS8_SQRT_2*COS18),  (COS8_SQRT_2*COS22-COS24_SQRT_2*COS10),-(COS8_SQRT_2*COS6-COS24_SQRT_2*COS26),-(COS24_SQRT_2*COS30+COS8_SQRT_2*COS2),-(COS24_SQRT_2*COS2-COS8_SQRT_2*COS30),  (COS24_SQRT_2*COS6+COS8_SQRT_2*COS26),  (COS22*COS24_SQRT_2+COS8_SQRT_2*COS10),  (-COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),-(-COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),-(COS22*COS24_SQRT_2+COS8_SQRT_2*COS10),-(COS24_SQRT_2*COS6+COS8_SQRT_2*COS26),  (COS24_SQRT_2*COS2-COS8_SQRT_2*COS30),  (COS24_SQRT_2*COS30+COS8_SQRT_2*COS2),  (COS8_SQRT_2*COS6-COS24_SQRT_2*COS26),  -(COS8_SQRT_2*COS22-COS24_SQRT_2*COS10),-(COS24_SQRT_2*COS14+COS8_SQRT_2*COS18),-(COS24_SQRT_2*COS14+COS8_SQRT_2*COS18),  -(COS8_SQRT_2*COS22-COS24_SQRT_2*COS10),  (COS8_SQRT_2*COS6-COS24_SQRT_2*COS26),  (COS24_SQRT_2*COS30+COS8_SQRT_2*COS2),  (COS24_SQRT_2*COS2-COS8_SQRT_2*COS30),-(COS24_SQRT_2*COS6+COS8_SQRT_2*COS26),-(COS22*COS24_SQRT_2+COS8_SQRT_2*COS10),-(-COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),  (-COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),  (COS22*COS24_SQRT_2+COS8_SQRT_2*COS10),  (COS24_SQRT_2*COS6+COS8_SQRT_2*COS26),-(COS24_SQRT_2*COS2-COS8_SQRT_2*COS30),-(COS24_SQRT_2*COS30+COS8_SQRT_2*COS2),-(COS8_SQRT_2*COS6-COS24_SQRT_2*COS26),  (COS8_SQRT_2*COS22-COS24_SQRT_2*COS10),  (COS24_SQRT_2*COS14+COS8_SQRT_2*COS18)},
{  COS17*COS28_SQRT_2  +  COS4_SQRT_2*COS15,  COS13*COS20_SQRT_2  -  COS12_SQRT_2*COS19,  -  COS12_SQRT_2*COS21  -  COS20_SQRT_2*COS11,  COS28_SQRT_2*COS23  -  COS4_SQRT_2*COS9,  COS25*COS4_SQRT_2  -  COS7*COS28_SQRT_2,  COS12_SQRT_2*COS5  +  COS20_SQRT_2*COS27,  COS12_SQRT_2*COS3  -  COS29*COS20_SQRT_2,  -  COS1*COS28_SQRT_2  -  COS4_SQRT_2*COS31,  COS31*COS28_SQRT_2  -  COS1*COS4_SQRT_2,  -  COS12_SQRT_2*COS29  -  COS20_SQRT_2*COS3,  COS5*COS20_SQRT_2  -  COS12_SQRT_2*COS27,  COS25*COS28_SQRT_2  +  COS4_SQRT_2*COS7,  COS4_SQRT_2*COS23  +  COS9*COS28_SQRT_2,  COS21*COS20_SQRT_2  -  COS12_SQRT_2*COS11,  -  COS12_SQRT_2*COS13  -  COS20_SQRT_2*COS19,  COS15*COS28_SQRT_2  -  COS17*COS4_SQRT_2,  COS17*COS4_SQRT_2  -  COS15*COS28_SQRT_2,  COS12_SQRT_2*COS13  +  COS20_SQRT_2*COS19,  COS12_SQRT_2*COS11  -  COS21*COS20_SQRT_2,  -  COS4_SQRT_2*COS23  -  COS9*COS28_SQRT_2,  -  COS25*COS28_SQRT_2  -  COS4_SQRT_2*COS7,  COS12_SQRT_2*COS27  -  COS5*COS20_SQRT_2,  COS12_SQRT_2*COS29  +  COS20_SQRT_2*COS3,  COS1*COS4_SQRT_2  -  COS31*COS28_SQRT_2,  COS1*COS28_SQRT_2  +  COS4_SQRT_2*COS31,  COS29*COS20_SQRT_2  -  COS12_SQRT_2*COS3,  -  COS12_SQRT_2*COS5  -  COS20_SQRT_2*COS27,  COS7*COS28_SQRT_2  -  COS25*COS4_SQRT_2,  COS4_SQRT_2*COS9  -  COS28_SQRT_2*COS23,  COS12_SQRT_2*COS21  +  COS20_SQRT_2*COS11,  COS12_SQRT_2*COS19  -  COS13*COS20_SQRT_2,  -  COS17*COS28_SQRT_2  -  COS4_SQRT_2*COS15},
{  COS12*SQRT_2,-COS28*SQRT_2,-COS4*SQRT_2,-COS20*SQRT_2,  COS20*SQRT_2,  COS4*SQRT_2,  COS28*SQRT_2,-COS12*SQRT_2,-COS12*SQRT_2,  COS28*SQRT_2,  COS4*SQRT_2,  COS20*SQRT_2,-COS20*SQRT_2,-COS4*SQRT_2,-COS28*SQRT_2,  COS12*SQRT_2,  COS12*SQRT_2,-COS28*SQRT_2,-COS4*SQRT_2,-COS20*SQRT_2,  COS20*SQRT_2,  COS4*SQRT_2,  COS28*SQRT_2,-COS12*SQRT_2,-COS12*SQRT_2,  COS28*SQRT_2,  COS4*SQRT_2,  COS20*SQRT_2,-COS20*SQRT_2,-COS4*SQRT_2,-COS28*SQRT_2,  COS12*SQRT_2},
{((COS12-COS20)*COS15+(COS12+COS20)*COS17),-((COS28-COS4)*COS19+(COS4+COS28)*COS13),-((COS4+COS28)*COS11-(COS28-COS4)*COS21),-(-(COS12-COS20)*COS9+(COS12+COS20)*COS23),  (-(COS12-COS20)*COS25+(COS12+COS20)*COS7),  (-(COS28-COS4)*COS5+(COS4+COS28)*COS27),-(-(COS28-COS4)*COS3-(COS4+COS28)*COS29),-((COS12-COS20)*COS31+(COS12+COS20)*COS1),-((COS12-COS20)*COS1-(COS12+COS20)*COS31),  (-(COS28-COS4)*COS29+(COS4+COS28)*COS3),  ((COS28-COS4)*COS27+(COS4+COS28)*COS5),-((COS12-COS20)*COS7+(COS12+COS20)*COS25),-((COS12-COS20)*COS23+(COS12+COS20)*COS9),  -(-(COS28-COS4)*COS11-(COS4+COS28)*COS21),  (-(COS28-COS4)*COS13+(COS4+COS28)*COS19),  (-(COS12-COS20)*COS17+(COS12+COS20)*COS15),-(-(COS12-COS20)*COS17+(COS12+COS20)*COS15),-(-(COS28-COS4)*COS13+(COS4+COS28)*COS19),  (-(COS28-COS4)*COS11-(COS4+COS28)*COS21),  ((COS12-COS20)*COS23+(COS12+COS20)*COS9),  ((COS12-COS20)*COS7+(COS12+COS20)*COS25),-((COS28-COS4)*COS27+(COS4+COS28)*COS5),-(-(COS28-COS4)*COS29+(COS4+COS28)*COS3),  ((COS12-COS20)*COS1-(COS12+COS20)*COS31),  ((COS12-COS20)*COS31+(COS12+COS20)*COS1),  (-(COS28-COS4)*COS3-(COS4+COS28)*COS29),-(-(COS28-COS4)*COS5+(COS4+COS28)*COS27),-(-(COS12-COS20)*COS25+(COS12+COS20)*COS7),  (-(COS12-COS20)*COS9+(COS12+COS20)*COS23),  ((COS4+COS28)*COS11-(COS28-COS4)*COS21),  ((COS28-COS4)*COS19+(COS4+COS28)*COS13),-((COS12-COS20)*COS15+(COS12+COS20)*COS17)},
{  COS14*SQRT_2,-COS22*SQRT_2,-COS6*SQRT_2,  COS30*SQRT_2,  COS2*SQRT_2,  COS26*SQRT_2,-COS10*SQRT_2,-COS18*SQRT_2,  COS18*SQRT_2,  COS10*SQRT_2,-COS26*SQRT_2,-COS2*SQRT_2,  -COS30*SQRT_2,  COS6*SQRT_2,  COS22*SQRT_2,-COS14*SQRT_2,-COS14*SQRT_2,  COS22*SQRT_2,  COS6*SQRT_2,  -COS30*SQRT_2,-COS2*SQRT_2,-COS26*SQRT_2,  COS10*SQRT_2,  COS18*SQRT_2,-COS18*SQRT_2,-COS10*SQRT_2,  COS26*SQRT_2,  COS2*SQRT_2,  COS30*SQRT_2,-COS6*SQRT_2,-COS22*SQRT_2,  COS14*SQRT_2},
{  SQRT_2*COS15,  -SQRT_2*COS19,  -SQRT_2*COS11,  SQRT_2*COS23,  SQRT_2*COS7,  -SQRT_2*COS27,  -SQRT_2*COS3,  SQRT_2*COS31,  SQRT_2*COS1,  SQRT_2*COS29,  -SQRT_2*COS5,  -SQRT_2*COS25,  SQRT_2*COS9,  SQRT_2*COS21,  -SQRT_2*COS13,  -SQRT_2*COS17,  SQRT_2*COS17,  SQRT_2*COS13,  -SQRT_2*COS21,  -SQRT_2*COS9,  SQRT_2*COS25,  SQRT_2*COS5,  -SQRT_2*COS29,  -SQRT_2*COS1,  -SQRT_2*COS31,  SQRT_2*COS3,  SQRT_2*COS27,  -SQRT_2*COS7,  -SQRT_2*COS23,  SQRT_2*COS11,  SQRT_2*COS19,  -SQRT_2*COS15},
{  COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,-COS16_SQRT_2<<S_BIT,  COS16_SQRT_2<<S_BIT},
{  SQRT_2*COS17,  -SQRT_2*COS13,  -SQRT_2*COS21,  SQRT_2*COS9,  SQRT_2*COS25,  -SQRT_2*COS5,  -SQRT_2*COS29,  SQRT_2*COS1,  -SQRT_2*COS31,  -SQRT_2*COS3,  SQRT_2*COS27,  SQRT_2*COS7,  -SQRT_2*COS23,  -SQRT_2*COS11,  SQRT_2*COS19,  SQRT_2*COS15,  -SQRT_2*COS15,  -SQRT_2*COS19,  SQRT_2*COS11,  SQRT_2*COS23,  -SQRT_2*COS7,  -SQRT_2*COS27,  SQRT_2*COS3,  SQRT_2*COS31,  -SQRT_2*COS1,  SQRT_2*COS29,  SQRT_2*COS5,  -SQRT_2*COS25,  -SQRT_2*COS9,  SQRT_2*COS21,  SQRT_2*COS13,  -SQRT_2*COS17},
{  COS18*SQRT_2,-COS10*SQRT_2,-COS26*SQRT_2,  COS2*SQRT_2,  -COS30*SQRT_2,-COS6*SQRT_2,  COS22*SQRT_2,  COS14*SQRT_2,-COS14*SQRT_2,-COS22*SQRT_2,  COS6*SQRT_2,  COS30*SQRT_2,-COS2*SQRT_2,  COS26*SQRT_2,  COS10*SQRT_2,-COS18*SQRT_2,-COS18*SQRT_2,  COS10*SQRT_2,  COS26*SQRT_2,-COS2*SQRT_2,  COS30*SQRT_2,  COS6*SQRT_2,-COS22*SQRT_2,-COS14*SQRT_2,  COS14*SQRT_2,  COS22*SQRT_2,-COS6*SQRT_2,  -COS30*SQRT_2,  COS2*SQRT_2,-COS26*SQRT_2,-COS10*SQRT_2,  COS18*SQRT_2},
{  (-(COS12-COS20)*COS17+(COS12+COS20)*COS15),-(-(COS28-COS4)*COS13+(COS4+COS28)*COS19),  -(-(COS28-COS4)*COS11-(COS4+COS28)*COS21),  ((COS12-COS20)*COS23+(COS12+COS20)*COS9),-((COS12-COS20)*COS7+(COS12+COS20)*COS25),-((COS28-COS4)*COS27+(COS4+COS28)*COS5),  (-(COS28-COS4)*COS29+(COS4+COS28)*COS3),  ((COS12-COS20)*COS1-(COS12+COS20)*COS31),-((COS12-COS20)*COS31+(COS12+COS20)*COS1),  (-(COS28-COS4)*COS3-(COS4+COS28)*COS29),  (-(COS28-COS4)*COS5+(COS4+COS28)*COS27),-(-(COS12-COS20)*COS25+(COS12+COS20)*COS7),-(-(COS12-COS20)*COS9+(COS12+COS20)*COS23),  ((COS4+COS28)*COS11-(COS28-COS4)*COS21),-((COS28-COS4)*COS19+(COS4+COS28)*COS13),-((COS12-COS20)*COS15+(COS12+COS20)*COS17),  ((COS12-COS20)*COS15+(COS12+COS20)*COS17),  ((COS28-COS4)*COS19+(COS4+COS28)*COS13),-((COS4+COS28)*COS11-(COS28-COS4)*COS21),  (-(COS12-COS20)*COS9+(COS12+COS20)*COS23),  (-(COS12-COS20)*COS25+(COS12+COS20)*COS7),-(-(COS28-COS4)*COS5+(COS4+COS28)*COS27),-(-(COS28-COS4)*COS3-(COS4+COS28)*COS29),  ((COS12-COS20)*COS31+(COS12+COS20)*COS1),-((COS12-COS20)*COS1-(COS12+COS20)*COS31),-(-(COS28-COS4)*COS29+(COS4+COS28)*COS3),  ((COS28-COS4)*COS27+(COS4+COS28)*COS5),  ((COS12-COS20)*COS7+(COS12+COS20)*COS25),-((COS12-COS20)*COS23+(COS12+COS20)*COS9),  (-(COS28-COS4)*COS11-(COS4+COS28)*COS21),  (-(COS28-COS4)*COS13+(COS4+COS28)*COS19),-(-(COS12-COS20)*COS17+(COS12+COS20)*COS15)},
{  COS20*SQRT_2,-COS4*SQRT_2,  COS28*SQRT_2,  COS12*SQRT_2,-COS12*SQRT_2,-COS28*SQRT_2,  COS4*SQRT_2,-COS20*SQRT_2,-COS20*SQRT_2,  COS4*SQRT_2,-COS28*SQRT_2,-COS12*SQRT_2,  COS12*SQRT_2,  COS28*SQRT_2,-COS4*SQRT_2,  COS20*SQRT_2,  COS20*SQRT_2,-COS4*SQRT_2,  COS28*SQRT_2,  COS12*SQRT_2,-COS12*SQRT_2,-COS28*SQRT_2,  COS4*SQRT_2,-COS20*SQRT_2,-COS20*SQRT_2,  COS4*SQRT_2,-COS28*SQRT_2,-COS12*SQRT_2,  COS12*SQRT_2,  COS28*SQRT_2,-COS4*SQRT_2,  COS20*SQRT_2},
{  COS17*COS4_SQRT_2  -  COS15*COS28_SQRT_2,  -  COS12_SQRT_2*COS13  -  COS20_SQRT_2*COS19,  COS12_SQRT_2*COS11  -  COS21*COS20_SQRT_2,  COS4_SQRT_2*COS23  +  COS9*COS28_SQRT_2,  -  COS25*COS28_SQRT_2  -  COS4_SQRT_2*COS7,  COS5*COS20_SQRT_2  -  COS12_SQRT_2*COS27,  COS12_SQRT_2*COS29  +  COS20_SQRT_2*COS3,  COS31*COS28_SQRT_2  -  COS1*COS4_SQRT_2,  COS1*COS28_SQRT_2  +  COS4_SQRT_2*COS31,  COS12_SQRT_2*COS3  -  COS29*COS20_SQRT_2,  -  COS12_SQRT_2*COS5  -  COS20_SQRT_2*COS27,  COS25*COS4_SQRT_2  -  COS7*COS28_SQRT_2,  COS4_SQRT_2*COS9  -  COS28_SQRT_2*COS23,  -  COS12_SQRT_2*COS21  -  COS20_SQRT_2*COS11,  COS12_SQRT_2*COS19  -  COS13*COS20_SQRT_2,  COS17*COS28_SQRT_2  +  COS4_SQRT_2*COS15,  -  COS17*COS28_SQRT_2  -  COS4_SQRT_2*COS15,  COS13*COS20_SQRT_2  -  COS12_SQRT_2*COS19,  COS12_SQRT_2*COS21  +  COS20_SQRT_2*COS11,  COS28_SQRT_2*COS23  -  COS4_SQRT_2*COS9,  COS7*COS28_SQRT_2  -  COS25*COS4_SQRT_2,  COS12_SQRT_2*COS5  +  COS20_SQRT_2*COS27,  COS29*COS20_SQRT_2  -  COS12_SQRT_2*COS3,  -  COS1*COS28_SQRT_2  -  COS4_SQRT_2*COS31,  COS1*COS4_SQRT_2  -  COS31*COS28_SQRT_2,  -  COS12_SQRT_2*COS29  -  COS20_SQRT_2*COS3,  COS12_SQRT_2*COS27  -  COS5*COS20_SQRT_2,  COS25*COS28_SQRT_2  +  COS4_SQRT_2*COS7,  -  COS4_SQRT_2*COS23  -  COS9*COS28_SQRT_2,  COS21*COS20_SQRT_2  -  COS12_SQRT_2*COS11,  COS12_SQRT_2*COS13  +  COS20_SQRT_2*COS19,  COS15*COS28_SQRT_2  -  COS17*COS4_SQRT_2},
{  (-COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),-(COS22*COS24_SQRT_2+COS8_SQRT_2*COS10),  (COS24_SQRT_2*COS6+COS8_SQRT_2*COS26),  (COS24_SQRT_2*COS2-COS8_SQRT_2*COS30),-(COS24_SQRT_2*COS30+COS8_SQRT_2*COS2),  (COS8_SQRT_2*COS6-COS24_SQRT_2*COS26),  (COS8_SQRT_2*COS22-COS24_SQRT_2*COS10),-(COS24_SQRT_2*COS14+COS8_SQRT_2*COS18),  (COS24_SQRT_2*COS14+COS8_SQRT_2*COS18),  -(COS8_SQRT_2*COS22-COS24_SQRT_2*COS10),-(COS8_SQRT_2*COS6-COS24_SQRT_2*COS26),  (COS24_SQRT_2*COS30+COS8_SQRT_2*COS2),-(COS24_SQRT_2*COS2-COS8_SQRT_2*COS30),-(COS24_SQRT_2*COS6+COS8_SQRT_2*COS26),  (COS22*COS24_SQRT_2+COS8_SQRT_2*COS10),-(-COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),-(-COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),  (COS22*COS24_SQRT_2+COS8_SQRT_2*COS10),-(COS24_SQRT_2*COS6+COS8_SQRT_2*COS26),-(COS24_SQRT_2*COS2-COS8_SQRT_2*COS30),  (COS24_SQRT_2*COS30+COS8_SQRT_2*COS2),-(COS8_SQRT_2*COS6-COS24_SQRT_2*COS26),  -(COS8_SQRT_2*COS22-COS24_SQRT_2*COS10),  (COS24_SQRT_2*COS14+COS8_SQRT_2*COS18),-(COS24_SQRT_2*COS14+COS8_SQRT_2*COS18),  (COS8_SQRT_2*COS22-COS24_SQRT_2*COS10),  (COS8_SQRT_2*COS6-COS24_SQRT_2*COS26),-(COS24_SQRT_2*COS30+COS8_SQRT_2*COS2),  (COS24_SQRT_2*COS2-COS8_SQRT_2*COS30),  (COS24_SQRT_2*COS6+COS8_SQRT_2*COS26),-(COS22*COS24_SQRT_2+COS8_SQRT_2*COS10),  (-COS24_SQRT_2*COS18+COS8_SQRT_2*COS14)},
{  COS8_SQRT_2*COS15  -  COS17*COS24_SQRT_2,  -  COS13*COS8_SQRT_2  -  COS19*COS24_SQRT_2,  COS21*COS8_SQRT_2  +  COS11*COS24_SQRT_2,  COS9*COS24_SQRT_2  -  COS8_SQRT_2*COS23,  COS25*COS24_SQRT_2  -  COS8_SQRT_2*COS7,  COS5*COS8_SQRT_2  +  COS27*COS24_SQRT_2,  -  COS29*COS8_SQRT_2  -  COS3*COS24_SQRT_2,  COS8_SQRT_2*COS31  -  COS1*COS24_SQRT_2,  COS1*COS8_SQRT_2  +  COS31*COS24_SQRT_2,  COS29*COS24_SQRT_2  -  COS8_SQRT_2*COS3,  COS5*COS24_SQRT_2  -  COS8_SQRT_2*COS27,  COS25*COS8_SQRT_2  +  COS7*COS24_SQRT_2,  -  COS8_SQRT_2*COS9  -  COS24_SQRT_2*COS23,  COS8_SQRT_2*COS11  -  COS21*COS24_SQRT_2,  COS8_SQRT_2*COS19  -  COS13*COS24_SQRT_2,  -  COS17*COS8_SQRT_2  -  COS15*COS24_SQRT_2,  COS17*COS8_SQRT_2  +  COS15*COS24_SQRT_2,  COS13*COS24_SQRT_2  -  COS8_SQRT_2*COS19,  COS21*COS24_SQRT_2  -  COS8_SQRT_2*COS11,  COS8_SQRT_2*COS9  +  COS24_SQRT_2*COS23,  -  COS25*COS8_SQRT_2  -  COS7*COS24_SQRT_2,  COS8_SQRT_2*COS27  -  COS5*COS24_SQRT_2,  COS8_SQRT_2*COS3  -  COS29*COS24_SQRT_2,  -  COS1*COS8_SQRT_2  -  COS31*COS24_SQRT_2,  COS1*COS24_SQRT_2  -  COS8_SQRT_2*COS31,  COS29*COS8_SQRT_2  +  COS3*COS24_SQRT_2,  -  COS5*COS8_SQRT_2  -  COS27*COS24_SQRT_2,  COS8_SQRT_2*COS7  -  COS25*COS24_SQRT_2,  COS8_SQRT_2*COS23  -  COS9*COS24_SQRT_2,  -  COS21*COS8_SQRT_2  -  COS11*COS24_SQRT_2,  COS13*COS8_SQRT_2  +  COS19*COS24_SQRT_2,  COS17*COS24_SQRT_2  -  COS8_SQRT_2*COS15},
{  COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,-COS24_SQRT_2<<S_BIT,  COS8_SQRT_2<<S_BIT,-COS8_SQRT_2<<S_BIT,  COS24_SQRT_2<<S_BIT},
{  COS17*COS8_SQRT_2  -  COS15*COS24_SQRT_2,  -  COS13*COS24_SQRT_2  -  COS8_SQRT_2*COS19,  COS21*COS24_SQRT_2  +  COS8_SQRT_2*COS11,  COS24_SQRT_2*COS23  -  COS8_SQRT_2*COS9,  COS7*COS24_SQRT_2  -  COS25*COS8_SQRT_2,  COS5*COS24_SQRT_2  +  COS8_SQRT_2*COS27,  -  COS29*COS24_SQRT_2  -  COS8_SQRT_2*COS3,  COS1*COS8_SQRT_2  -  COS31*COS24_SQRT_2,  -  COS1*COS24_SQRT_2  -  COS8_SQRT_2*COS31,  COS29*COS8_SQRT_2  -  COS3*COS24_SQRT_2,  COS5*COS8_SQRT_2  -  COS27*COS24_SQRT_2,  -  COS25*COS24_SQRT_2  -  COS8_SQRT_2*COS7,  COS8_SQRT_2*COS23  +  COS9*COS24_SQRT_2,  COS11*COS24_SQRT_2  -  COS21*COS8_SQRT_2,  COS19*COS24_SQRT_2  -  COS13*COS8_SQRT_2,  COS17*COS24_SQRT_2  +  COS8_SQRT_2*COS15,  -  COS17*COS24_SQRT_2  -  COS8_SQRT_2*COS15,  COS13*COS8_SQRT_2  -  COS19*COS24_SQRT_2,  COS21*COS8_SQRT_2  -  COS11*COS24_SQRT_2,  -  COS8_SQRT_2*COS23  -  COS9*COS24_SQRT_2,  COS25*COS24_SQRT_2  +  COS8_SQRT_2*COS7,  COS27*COS24_SQRT_2  -  COS5*COS8_SQRT_2,  COS3*COS24_SQRT_2  -  COS29*COS8_SQRT_2,  COS1*COS24_SQRT_2  +  COS8_SQRT_2*COS31,  COS31*COS24_SQRT_2  -  COS1*COS8_SQRT_2,  COS29*COS24_SQRT_2  +  COS8_SQRT_2*COS3,  -  COS5*COS24_SQRT_2  -  COS8_SQRT_2*COS27,  COS25*COS8_SQRT_2  -  COS7*COS24_SQRT_2,  COS8_SQRT_2*COS9  -  COS24_SQRT_2*COS23,  -  COS21*COS24_SQRT_2  -  COS8_SQRT_2*COS11,  COS13*COS24_SQRT_2  +  COS8_SQRT_2*COS19,  COS15*COS24_SQRT_2  -  COS17*COS8_SQRT_2},
{  (COS18*COS8_SQRT_2-COS14*COS24_SQRT_2),-(COS10*COS24_SQRT_2+COS22*COS8_SQRT_2),  (COS24_SQRT_2*COS26+COS8_SQRT_2*COS6),-(COS2*COS8_SQRT_2-COS24_SQRT_2*COS30),  (COS30*COS8_SQRT_2+COS2*COS24_SQRT_2),  (COS6*COS24_SQRT_2-COS8_SQRT_2*COS26),-(COS10*COS8_SQRT_2-COS22*COS24_SQRT_2),  (COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),-(COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),  (COS10*COS8_SQRT_2-COS22*COS24_SQRT_2),  -(COS6*COS24_SQRT_2-COS8_SQRT_2*COS26),-(COS30*COS8_SQRT_2+COS2*COS24_SQRT_2),  (COS2*COS8_SQRT_2-COS24_SQRT_2*COS30),-(COS24_SQRT_2*COS26+COS8_SQRT_2*COS6),  (COS10*COS24_SQRT_2+COS22*COS8_SQRT_2),-(COS18*COS8_SQRT_2-COS14*COS24_SQRT_2),-(COS18*COS8_SQRT_2-COS14*COS24_SQRT_2),  (COS10*COS24_SQRT_2+COS22*COS8_SQRT_2),-(COS24_SQRT_2*COS26+COS8_SQRT_2*COS6),  (COS2*COS8_SQRT_2-COS24_SQRT_2*COS30),-(COS30*COS8_SQRT_2+COS2*COS24_SQRT_2),  -(COS6*COS24_SQRT_2-COS8_SQRT_2*COS26),  (COS10*COS8_SQRT_2-COS22*COS24_SQRT_2),-(COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),  (COS24_SQRT_2*COS18+COS8_SQRT_2*COS14),-(COS10*COS8_SQRT_2-COS22*COS24_SQRT_2),  (COS6*COS24_SQRT_2-COS8_SQRT_2*COS26),  (COS30*COS8_SQRT_2+COS2*COS24_SQRT_2),-(COS2*COS8_SQRT_2-COS24_SQRT_2*COS30),  (COS24_SQRT_2*COS26+COS8_SQRT_2*COS6),-(COS10*COS24_SQRT_2+COS22*COS8_SQRT_2),  (COS18*COS8_SQRT_2-COS14*COS24_SQRT_2)},
{  (COS17*COS28  +  COS4*COS15)  -  (COS17*COS4  -  COS15*COS28),  (COS12*COS19  -  COS13*COS20)  -  (COS12*COS13  +  COS20*COS19),  (COS12*COS21  +  COS20*COS11)  +  (COS12*COS11  -  COS21*COS20),  -  (COS4*COS9  -  COS28*COS23)  -  (COS4*COS23  +  COS9*COS28),  (COS25*COS4  -  COS7*COS28)  +  (COS25*COS28  +  COS4*COS7),  -  (COS12*COS5  +  COS20*COS27)  -  (COS12*COS27  -  COS5*COS20),  (COS12*COS29  +  COS20*COS3)  -  (COS12*COS3  -  COS29*COS20),  (COS1*COS4  -  COS31*COS28)  -  (COS1*COS28  +  COS4*COS31),  -  (COS1*COS4  -  COS31*COS28)  -  (COS1*COS28  +  COS4*COS31),  (COS12*COS29  +  COS20*COS3)  +  (COS12*COS3  -  COS29*COS20),  (COS12*COS27  -  COS5*COS20)  -  (COS12*COS5  +  COS20*COS27),  (COS25*COS28  +  COS4*COS7)  -  (COS25*COS4  -  COS7*COS28),  (COS4*COS23  +  COS9*COS28)  -  (COS4*COS9  -  COS28*COS23),  (COS12*COS11  -  COS21*COS20)  -  (COS12*COS21  +  COS20*COS11),  (COS12*COS13  +  COS20*COS19)  +  (COS12*COS19  -  COS13*COS20),  -  (COS17*COS4  -  COS15*COS28)  -  (COS17*COS28  +  COS4*COS15),  (COS17*COS4  -  COS15*COS28)  +  (COS17*COS28  +  COS4*COS15),  -  (COS12*COS13  +  COS20*COS19)  -  (COS12*COS19  -  COS13*COS20),  (COS12*COS21  +  COS20*COS11)  -  (COS12*COS11  -  COS21*COS20),  (COS4*COS9  -  COS28*COS23)  -  (COS4*COS23  +  COS9*COS28),  (COS25*COS4  -  COS7*COS28)  -  (COS25*COS28  +  COS4*COS7),  (COS12*COS5  +  COS20*COS27)  -  (COS12*COS27  -  COS5*COS20),  -  (COS12*COS29  +  COS20*COS3)  -  (COS12*COS3  -  COS29*COS20),  (COS1*COS4  -  COS31*COS28)  +  (COS1*COS28  +  COS4*COS31),  (COS1*COS28  +  COS4*COS31)  -  (COS1*COS4  -  COS31*COS28),  (COS12*COS3  -  COS29*COS20)  -  (COS12*COS29  +  COS20*COS3),  (COS12*COS5  +  COS20*COS27)  +  (COS12*COS27  -  COS5*COS20),  -  (COS25*COS4  -  COS7*COS28)  -  (COS25*COS28  +  COS4*COS7),  (COS4*COS9  -  COS28*COS23)  +  (COS4*COS23  +  COS9*COS28),  -  (COS12*COS21  +  COS20*COS11)  -  (COS12*COS11  -  COS21*COS20),  (COS12*COS13  +  COS20*COS19)  -  (COS12*COS19  -  COS13*COS20),  (COS17*COS4  -  COS15*COS28)  -  (COS17*COS28  +  COS4*COS15)},
{  ((COS12-COS20)<<S_BIT),-((COS4-COS28)<<S_BIT),  ((COS4+COS28)<<S_BIT),-((COS12+COS20)<<S_BIT),  ((COS12+COS20)<<S_BIT),-((COS4+COS28)<<S_BIT),  ((COS4-COS28)<<S_BIT),-((COS12-COS20)<<S_BIT),-((COS12-COS20)<<S_BIT),  ((COS4-COS28)<<S_BIT),-((COS4+COS28)<<S_BIT),  ((COS12+COS20)<<S_BIT),-((COS12+COS20)<<S_BIT),  ((COS4+COS28)<<S_BIT),-((COS4-COS28)<<S_BIT),  ((COS12-COS20)<<S_BIT),  ((COS12-COS20)<<S_BIT),-((COS4-COS28)<<S_BIT),  ((COS4+COS28)<<S_BIT),-((COS12+COS20)<<S_BIT),  ((COS12+COS20)<<S_BIT),-((COS4+COS28)<<S_BIT),  ((COS4-COS28)<<S_BIT),-((COS12-COS20)<<S_BIT),-((COS12-COS20)<<S_BIT),  ((COS4-COS28)<<S_BIT),-((COS4+COS28)<<S_BIT),  ((COS12+COS20)<<S_BIT),-((COS12+COS20)<<S_BIT),  ((COS4+COS28)<<S_BIT),-((COS4-COS28)<<S_BIT),  ((COS12-COS20)<<S_BIT)},
{  COS12_SQRT_2*COS17  -  COS20_SQRT_2*COS15,  COS13*COS28_SQRT_2  -  COS4_SQRT_2*COS19,  COS21*COS4_SQRT_2  +  COS11*COS28_SQRT_2,  -  COS12_SQRT_2*COS23  -  COS9*COS20_SQRT_2,  COS12_SQRT_2*COS7  +  COS25*COS20_SQRT_2,  -  COS4_SQRT_2*COS5  -  COS28_SQRT_2*COS27,  COS4_SQRT_2*COS3  -  COS29*COS28_SQRT_2,  COS31*COS20_SQRT_2  -  COS1*COS12_SQRT_2,  COS1*COS20_SQRT_2  +  COS12_SQRT_2*COS31,  -  COS29*COS4_SQRT_2  -  COS3*COS28_SQRT_2,  COS4_SQRT_2*COS27  -  COS5*COS28_SQRT_2,  COS20_SQRT_2*COS7  -  COS12_SQRT_2*COS25,  COS20_SQRT_2*COS23  -  COS12_SQRT_2*COS9,  COS4_SQRT_2*COS11  -  COS21*COS28_SQRT_2,  -  COS13*COS4_SQRT_2  -  COS19*COS28_SQRT_2,  COS12_SQRT_2*COS15  +  COS17*COS20_SQRT_2,  -  COS12_SQRT_2*COS15  -  COS17*COS20_SQRT_2,  COS13*COS4_SQRT_2  +  COS19*COS28_SQRT_2,  COS21*COS28_SQRT_2  -  COS4_SQRT_2*COS11,  COS12_SQRT_2*COS9  -  COS20_SQRT_2*COS23,  COS12_SQRT_2*COS25  -  COS20_SQRT_2*COS7,  COS5*COS28_SQRT_2  -  COS4_SQRT_2*COS27,  COS29*COS4_SQRT_2  +  COS3*COS28_SQRT_2,  -  COS1*COS20_SQRT_2  -  COS12_SQRT_2*COS31,  COS1*COS12_SQRT_2  -  COS31*COS20_SQRT_2,  COS29*COS28_SQRT_2  -  COS4_SQRT_2*COS3,  COS4_SQRT_2*COS5  +  COS28_SQRT_2*COS27,  -  COS12_SQRT_2*COS7  -  COS25*COS20_SQRT_2,  COS12_SQRT_2*COS23  +  COS9*COS20_SQRT_2,  -  COS21*COS4_SQRT_2  -  COS11*COS28_SQRT_2,  COS4_SQRT_2*COS19  -  COS13*COS28_SQRT_2,  COS20_SQRT_2*COS15  -  COS12_SQRT_2*COS17},
{  (COS14-COS18)<<S_BIT,-(COS10-COS22)<<S_BIT,  (COS6-COS26)<<S_BIT,-(COS2-COS30)<<S_BIT,  (COS2+COS30)<<S_BIT,-(COS6+COS26)<<S_BIT,  (COS10+COS22)<<S_BIT,-(COS14+COS18)<<S_BIT,  (COS14+COS18)<<S_BIT,-(COS10+COS22)<<S_BIT,  (COS6+COS26)<<S_BIT,-(COS2+COS30)<<S_BIT,  (COS2-COS30)<<S_BIT,-(COS6-COS26)<<S_BIT,  (COS10-COS22)<<S_BIT,  -(COS14-COS18)<<S_BIT,  -(COS14-COS18)<<S_BIT,  (COS10-COS22)<<S_BIT,-(COS6-COS26)<<S_BIT,  (COS2-COS30)<<S_BIT,-(COS2+COS30)<<S_BIT,  (COS6+COS26)<<S_BIT,-(COS10+COS22)<<S_BIT,  (COS14+COS18)<<S_BIT,-(COS14+COS18)<<S_BIT,  (COS10+COS22)<<S_BIT,-(COS6+COS26)<<S_BIT,  (COS2+COS30)<<S_BIT,-(COS2-COS30)<<S_BIT,  (COS6-COS26)<<S_BIT,-(COS10-COS22)<<S_BIT,  (COS14-COS18)<<S_BIT},
{  COS16_SQRT_2*COS15  -  COS17*COS16_SQRT_2,  COS16_SQRT_2*COS19  -  COS13*COS16_SQRT_2,  COS16_SQRT_2*COS11  -  COS21*COS16_SQRT_2,  COS16_SQRT_2*COS23  -  COS9*COS16_SQRT_2,  COS16_SQRT_2*COS7  -  COS25*COS16_SQRT_2,  COS16_SQRT_2*COS27  -  COS5*COS16_SQRT_2,  COS16_SQRT_2*COS3  -  COS29*COS16_SQRT_2,  COS16_SQRT_2*COS31  -  COS1*COS16_SQRT_2,  COS1*COS16_SQRT_2  +  COS31*COS16_SQRT_2,  -  COS16_SQRT_2*COS29  -  COS16_SQRT_2*COS3,  COS16_SQRT_2*COS5  +  COS16_SQRT_2*COS27,  -  COS16_SQRT_2*COS25  -  COS16_SQRT_2*COS7,  COS16_SQRT_2*COS9  +  COS16_SQRT_2*COS23,  -  COS16_SQRT_2*COS21  -  COS16_SQRT_2*COS11,  COS13*COS16_SQRT_2  +  COS19*COS16_SQRT_2,  -  COS16_SQRT_2*COS17  -  COS16_SQRT_2*COS15,  COS16_SQRT_2*COS17  +  COS16_SQRT_2*COS15,  -  COS13*COS16_SQRT_2  -  COS19*COS16_SQRT_2,  COS16_SQRT_2*COS21  +  COS16_SQRT_2*COS11,  -  COS16_SQRT_2*COS9  -  COS16_SQRT_2*COS23,  COS16_SQRT_2*COS25  +  COS16_SQRT_2*COS7,  -  COS16_SQRT_2*COS5  -  COS16_SQRT_2*COS27,  COS16_SQRT_2*COS29  +  COS16_SQRT_2*COS3,  -  COS1*COS16_SQRT_2  -  COS31*COS16_SQRT_2,  COS1*COS16_SQRT_2  -  COS16_SQRT_2*COS31,  COS29*COS16_SQRT_2  -  COS16_SQRT_2*COS3,  COS5*COS16_SQRT_2  -  COS16_SQRT_2*COS27,  COS25*COS16_SQRT_2  -  COS16_SQRT_2*COS7,  COS9*COS16_SQRT_2  -  COS16_SQRT_2*COS23,  COS21*COS16_SQRT_2  -  COS16_SQRT_2*COS11,  COS13*COS16_SQRT_2  -  COS16_SQRT_2*COS19,  COS17*COS16_SQRT_2  -  COS16_SQRT_2*COS15},
};
再び図３を参照すれば、段階３２０で、変換部１２０は、整数値を有する元素から構成されたＮポイントＤＣＴ行列を利用して、ＮポイントＤＣＴを行う。
【００４６】
段階３３０で、変換部１２０は、スケーリング・ファクタを利用して、ＮポイントＤＣＴ結果値に係わるデスケーリングを行う。スケーリング・ファクタを利用してスケーリングされた整数値を有するＮポイントＤＣＴ行列と、原ＮポイントＤＣＴ行列とを利用した結果値の差を補償するためには、スケーリングされた整数値を有するＮポイントＤＣＴ行列を利用した変換結果値を、さらにデスケーリングしなければならない。本発明の一実施形態によるスケーリングされたＮポイントＤＣＴ行列の各元素は、原ＮポイントＤＣＴ行列の各元素に、スケーリング・ファクタの二乗値を乗じた値に対応するので、デスケーリング過程は、変換行列結果値をＳ＾２の値で割ることによって遂行される。前述のように、Ｓ＿ＢＩＴをｌｏｇ２Ｓと定義すれば、デスケーリング過程は、２＊Ｓ＿ＢＩＴほど、ＮポイントＤＣＴによる結果値を右向きシフト（＞＞）することによって遂行される。かような右向きシフト（＞＞）を介したデスケーリング過程は、変換部１２０で遂行される代わりに、量子化部１３０で遂行される量子化過程と統合される。具体的には、変換係数値に対して適用される量子化ステップ（Ｑstep）値を、２＊Ｓ＿ＢＩＴほど右向きシフト（＞＞）した値、すなわち、量子化ステップ（Ｑstep）値をＳ＾２の値で割った新たな量子化ステップを利用して量子化を行うことによって、量子化過程に統合されてデスケーリング過程が遂行される。
【００４７】
前述の整数値を有する元素から構成されたＮポイントＤＣＴ行列は、以下の図４に記載されたようなフローチャートで具現される。
【００４８】
図４は、本発明の一実施形態による３２，１６，８及び４ポイントＤＣＴ過程を再構成したフローチャートであり、図５は、図４のフローチャートに図示された各演算構成要素について説明するための参照図である。図４で、点線で表示された図面符号４１０は、１６ポイントＤＣＴのフローチャート、図面符号４２０は、８ポイントＤＣＴのフローチャート、図面符号４３０は、４ポイント一次元変換のフローチャートを示す。
【００４９】
図４のフローチャートは、前述の本発明の一実施形態による整数値を有する元素から構成されたＮポイントＤＣＴ行列によって具現されたものである。具体的には、Ｘ０ないしＸ３１は、３２ポイントＤＣＴの入力値を示し、Ｙ０ないしＹ３１は、３２ポイントＤＣＴによる結果値である。一方、Ｙ０ないしＹ３１を入力値であると仮定すれば、Ｘ０ないしＸ３１は、３２ポイントＩＤＣＴの出力値になる。すなわち、Ｘ０ないしＸ３１は、３２ポイントＤＣＴの入力値を示すと同時に、３２ポイントＩＤＣＴの出力値である。３２ポイントＤＣＴ時のデータ処理方向は、左側から右側であり、３２ポイントＩＤＣＴ時のデータ処理方向は、右側から左側である。
【００５０】
図４に図示された各演算記号の意味について、図５を参照して説明する。
【００５１】
図５を参照すれば、図面符号５１０で表示された演算は、中間値Ｘ，Ｙ（Ｘ，Ｙは、実数）に対して、Ｕ＝Ｃ１＊Ｘ−Ｃ０＊Ｙ（Ｃ０及びＣ１は、既定の実数）及びＶ＝Ｃ０＊Ｘ＋Ｃ１＊Ｙによって、結果値Ｕ，Ｖ（Ｕ，Ｖは、実数）を獲得する演算である。Ｃ０がｃｏｓθ、Ｃ１がｓｉｎθである場合、図面符号５１０の演算は、結局、中間値Ｘ，Ｙで構成された（Ｘ，Ｙ）をθほど回転した（Ｕ，Ｖ）を出力する回転変換に該当する。
【００５２】
かような回転変換演算過程は、Ｕ値を計算するとき、２回の乗算過程、Ｖ値を計算するとき、２回の乗算過程が含まれ、全４回の乗算過程が遂行される。本発明の一実施形態による変換部１２０は、かような図面符号５１０で表示された回転変換演算を行うとき、以下のように、Ｔ（Ｔは、実数）を計算した後、Ｃ１及びＣ０を利用して獲得されたＣ１＿ｐ＿Ｃ０及びＣ１＿ｍ＿Ｃ０と、入力されたＸ値及びＹ値とをそれぞれ乗じ、Ｔを加えるか、あるいは減算することによって、Ｕ，Ｖを計算する変更された演算を行う。Ｃ１＿ｐ＿Ｃ０＝Ｃ１＋Ｃ０及びＣ１＿ｍ＿Ｃ０＝Ｃ１−Ｃ０である。
【００５３】
Ｔ＝Ｃ０＊（Ｘ＋Ｙ）；Ｕ＝Ｃ１＿ｐ＿Ｃ０＊Ｘ−Ｔ；Ｖ＝Ｔ＋Ｃ１＿ｍ＿Ｃ０＊Ｙ
このように回転変換演算を、前記演算で置き換えて遂行される場合、Ｔ，Ｕ及びＶの値を計算する過程それぞれに対して、一回ずつの乗算過程が遂行されるので、総３回の乗算演算が必要である。従って、かような代替演算過程を遂行することによって、既存４回の乗算演算を３回に減らすことができる。かような代替演算過程によるとき、加算演算や減算演算の回数は増加するが、かような加算演算及び減算演算は、演算複雑度が乗算演算に比べてはるかに低いので、乗算演算の回数を低減させる方が有利である。
【００５４】
一方、Ｃ１及びＣ０は、図示された＃ｎによって決定される値であり、前述のように、Ｃ０がｃｏｓθ、Ｃ１がｓｉｎθとするとき、Ｃ０によって、Ｃ１の値が決定され、前述の表１に基づいて、図５の＃ｎによって利用されるＣ０、Ｃ１＿ｐ＿Ｃ０及びＣ１＿ｍ＿Ｃ０の値は、以下の表２の通りである。
【００５５】
【表２】
2014523673.tif 000017
表２の値に基づいて、図４の図面符号４４０の演算を行う過程を例示する。
【００５６】
図７Ａないし図７Ｃは、図４の図面符号４４０による演算過程について説明するための図面である。
【００５７】
図７Ａを参照すれば、図面符号４４０に図示された演算過程で入力される中間値を、それぞれＸ１，Ｘ２，Ｘ３，Ｘ４、出力値を、Ｙ１，Ｙ２，Ｙ３，Ｙ４と定義する。図７Ａに図示された演算過程（４４０）は、図７Ｂに図示された演算過程、及び図７Ｃに図示された演算過程を含む。
【００５８】
図７Ｂを参照すれば、変換部１２０は、以下のアルゴリズムによって、中間値Ｘ１及びＸ４に係わる演算を遂行し、Ｙ１及びＹ４を出力する。
【００５９】
｛Ｔ＝Ｃ０＊（Ｘ１＋Ｘ４）；Ｕ＝Ｃ１＿ｐ＿Ｃ０＊Ｘ１−Ｔ；Ｖ＝Ｔ＋Ｃ１＿ｍ＿Ｃ０＊Ｘ４｝
表２を参照すれば、Ｃ０、Ｃ１＿ｐ＿Ｃ０及びＣ１＿ｍ＿Ｃ０の値として、Ｃ０＝ＣＯＳ２０、Ｃ１＿ｐ＿Ｃ０＝ＣＯＳ２０＋ＣＯＳ１２、Ｃ１＿ｍ＿Ｃ０＝−ＣＯＳ２０＋ＣＯＳ１２値が利用される（＃２である場合）。
【００６０】
同様に、図７Ｃを参照すれば、変換部１２０は、以下のアルゴリズムによって、中間値Ｘ２及びＸ３に係わる演算を遂行し、Ｙ２及びＹ３を出力する。
【００６１】
｛Ｔ＝Ｃ０＊（Ｘ２＋Ｘ３）；Ｕ＝Ｃ１＿ｐ＿Ｃ０＊Ｘ２−Ｔ；Ｖ＝Ｔ＋Ｃ１＿ｍ＿Ｃ０＊Ｘ３｝
表２を参照すれば、Ｃ０、Ｃ１＿ｐ＿Ｃ０及びＣ１＿ｍ＿Ｃ０の値として、Ｃ０＝ＣＯＳ２８、Ｃ１＿ｐ＿Ｃ０＝−ＣＯＳ２８＋ＣＯＳ４、Ｃ１＿ｍ＿Ｃ０＝−ＣＯＳ２８＋ＣＯＳ４値が利用される（＃３である場合）。
【００６２】
前述の図７Ａないし図７Ｃに例示されているように、図４に図示された図面符号５１０の演算過程が、表２に図示された＃ｎによるパラメータを利用して遂行される。
【００６３】
また、図５を参照すれば、図面符号５２０は、中間値Ｘ，Ｙを加えるか減算してＵ，Ｖを出力する演算であり、図面符号５３０は、中間値Ｘを、所定ビット（Ｓ＿ＢＩＴ）ほど左向きシフト（＜＜）する演算であり、図面符号５４０は、中間値Ｘを所定ビット（２＊Ｓ＿ＢＩＴ）ほど左向きシフト（＜＜）する演算であり、図面符号５５０は、中間値Ｘの自乗根を出力する演算であり、図面符号５６０は、減算演算、図面符号５７０は、加算演算を示す。
【００６４】
前述の本発明の一実施形態による変換部１２０での３２ポイントＤＣＴ過程は、以下のようなアルゴリズムを介して具現される。
{
E[16],O[16];
EE[8],EO[8];
EEE[4],EEO[4];
EEEE[2],EEEO[2];
for  (k=0;k<16;k++)
{
E[k]  =  block[k]  +  block[31-k];
O[k]  =  block[k]  -  block[31-k];
}  
/*  EE  and  EO  */
for  (k=0;k<8;k++)
{
EE[k]  =  E[k]  +  E[15-k];
EO[k]  =  E[k]  -  E[15-k];
}
/*  EEE  and  EEO  */
for  (k=0;k<4;k++)
{
EEE[k]  =  EE[k]  +  EE[7-k];
EEO[k]  =  EE[k]  -  EE[7-k];
}
/*  EEEE  and  EEEO  */
EEEE[0]  =  EEE[0]  +  EEE[3];
EEEO[0]  =  EEE[0]  -  EEE[3];
EEEE[1]  =  EEE[1]  +  EEE[2];
EEEO[1]  =  EEE[1]  -  EEE[2];
xBoxE2  (  EEEE,  EEEE);
xBoxO2  (  EEEO,  EEEO);
xBoxO4  (  EEO  ,  EEO);
xBoxO8  (  EO  ,  EO);
xBoxO16(  O    ,  O);
coeff[  0]  =  EEEE[0];
coeff[16]  =  EEEE[1];
coeff[  8]  =  EEEO[0];
coeff[24]  =  EEEO[1];
coeff[  4]  =  EEO[0];
coeff[12]  =  EEO[1];
coeff[20]  =  EEO[2];
coeff[28]  =  EEO[3];
coeff[  2]  =  EO[0];
coeff[  6]  =  EO[1];
coeff[10]  =  EO[2];
coeff[14]  =  EO[3];
coeff[18]  =  EO[4];
coeff[22]  =  EO[5];
coeff[26]  =  EO[6];
coeff[30]  =  EO[7];
coeff[  1]  =  O[  0];
coeff[  3]  =  O[  1];
coeff[  5]  =  O[  2];
coeff[  7]  =  O[  3];
coeff[  9]  =  O[  4];
coeff[11]  =  O[  5];
coeff[13]  =  O[  6];
coeff[15]  =  O[  7];
coeff[17]  =  O[  8];
coeff[19]  =  O[  9];
coeff[21]  =  O[10];
coeff[23]  =  O[11];
coeff[25]  =  O[12];
coeff[27]  =  O[13];
coeff[29]  =  O[14];
coeff[31]  =  O[15];
}
前記アルゴリズムに含まれたサブルーチンは、以下の通りである。
【００６５】
xBoxE2(  Int*  Ein,  Int*  Eout)
{
Int  EE[2];
EE[0]  =  Ein[0]+Ein[1];
EE[1]  =  Ein[0]-Ein[1];
Eout[0]  =  (EE[0]<<12);
Eout[1]  =  (EE[1]<<12);
}
xBoxO2(  Int*  Oin,  Int*  Oout)
{
Givens(Oin[0],Oin[1],Oout[1],Oout[0],5312,7616,-3008);
}
xBoxO4(  Int*  Oin,  Int*  Oout)
{
Int  iStage[4][3];
Givens(Oin[0],Oin[3],iStage  [0][0],iStage  [3][0],36,89,17);
Givens(Oin[1],Oin[2],iStage  [1][0],iStage  [2][0],12,75,51);
iStage  [0][1]  =  iStage  [0][0]+iStage  [2][0];
iStage  [1][1]  =  iStage  [0][0]-iStage  [2][0];
iStage  [2][1]  =  iStage  [3][0]-iStage  [1][0];
iStage  [3][1]  =  iStage  [3][0]+iStage  [1][0];
Oout[0]  =  ((iStage  [0][1]+iStage  [3][1])<<6);
Oout[1]  =  iStage  [1][1]*90;
Oout[2]  =  iStage  [2][1]*90;
Oout[3]  =  ((iStage  [0][1]-iStage  [3][1])<<6);
}
xBoxO8(  Int*  Oin,  Int*  Oout)
{
Int  iStage16[8][4];
Givens(Oin[0],Oin[7],iStage16[7][0],iStage16[0][0],41,90,8);
Givens(Oin[6],Oin[1],iStage16[1][0],iStage16[6][0],56,86,-26);
Givens(Oin[2],Oin[5],iStage16[5][0],iStage16[2][0],19,80,42);
Givens(Oin[4],Oin[3],iStage16[3][0],iStage16[4][0],64,70,-58);
iStage16[0][1]  =iStage16[0][0]  +  iStage16[3][0];
iStage16[1][1]  =iStage16[1][0]  +  iStage16[2][0];
iStage16[2][1]  =iStage16[1][0]  -  iStage16[2][0];
iStage16[3][1]  =iStage16[0][0]  -  iStage16[3][0];
Stage16[4][1]  =iStage16[4][0]  +  iStage16[7][0];
iStage16[5][1]  =iStage16[5][0]  +  iStage16[6][0];
iStage16[6][1]  =iStage16[5][0]  -  iStage16[6][0];
iStage16[7][1]  =iStage16[4][0]  -  iStage16[7][0];
iStage16[0][2]  =iStage16[0][1]  +  iStage16[6][1];
iStage16[1][2]  =iStage16[1][1]  +  iStage16[7][1];
iStage16[2][2]  =iStage16[2][1]  +  iStage16[3][1];
iStage16[3][2]  =iStage16[2][1]  -  iStage16[3][1];
iStage16[4][2]  =iStage16[4][1]  +  iStage16[5][1];
iStage16[5][2]  =iStage16[4][1]  -  iStage16[5][1];
iStage16[6][2]  =iStage16[0][1]  -  iStage16[6][1];
iStage16[7][2]  =iStage16[1][1]  -  iStage16[7][1];
Givens(iStage16[0][2],iStage16[1][2],iStage16[0][3],iStage16[1][3],83,119,-47);
Givens(iStage16[7][2],iStage16[6][2],iStage16[6][3],iStage16[7][3],36,119,47);
iStage16[3][3]  =  (iStage16[4][2]  +  iStage16[3][2])<<6;
iStage16[4][3]  =  (iStage16[4][2]  -  iStage16[3][2])<<6;
iStage16[2][3]  =  iStage16[2][2]*90;
iStage16[5][3]  =  iStage16[5][2]*90;
Oout[0]  =  iStage16[4][3];
Oout[1]  =  iStage16[0][3];
Oout[2]  =  iStage16[7][3];
Oout[3]  =  iStage16[5][3];
Oout[4]  =  iStage16[2][3];
Oout[5]  =  iStage16[6][3];
Oout[6]  =  iStage16[1][3];
Oout[7]  =  iStage16[3][3];
}
xBoxO16(  Int*  Oin,  Int*  Oout)
{
Int  iStage32[22][5];
Givens(Oin[15],Oin[  0],iStage32[  0][0],iStage32[15][0],47,90,-4);
Givens(Oin[  1],Oin[14],iStage32[14][0],iStage32[  1][0],38,89,13);
Givens(Oin[13],Oin[  2],iStage32[2][0],iStage32[13][0],55,88,-22);
Givens(Oin[  3],Oin[12],iStage32[12][0],iStage32[  3][0],27,85,31);
Givens(Oin[11],Oin[  4],iStage32[4][0],iStage32[11][0],60,82,-38);
Givens(Oin[  5],Oin[10],iStage32[10][0],iStage32[  5][0],16,78,46);
Givens(Oin[  9],Oin[  6],iStage32[  6][0],iStage32[9][0],63,72,-54);
Givens(Oin[  7],Oin[  8],iStage32[  8][0],iStage32[  7][0],3,67,61);
iStage32[  0][1]  =iStage32[  0][0]  +iStage32[  7][0];
iStage32[  1][1]  =iStage32[  1][0]  +iStage32[  6][0];
iStage32[  2][1]  =iStage32[  2][0]  +iStage32[  5][0];
iStage32[  3][1]  =iStage32[  3][0]  +iStage32[  4][0];
iStage32[  4][1]  =iStage32[  3][0]  -iStage32[  4][0];
iStage32[  5][1]  =iStage32[  2][0]  -iStage32[  5][0];
iStage32[  6][1]  =iStage32[  1][0]  -iStage32[  6][0];
iStage32[  7][1]  =iStage32[  0][0]  -iStage32[  7][0];
iStage32[  8][1]  =iStage32[  8][0]  +iStage32[15][0];
iStage32[  9][1]  =iStage32[  9][0]  +iStage32[14][0];
iStage32[10][1]  =iStage32[10][0]  +   iStage32[13][0];
iStage32[11][1]  =iStage32[11][0]  +   iStage32[12][0];
iStage32[12][1]  =iStage32[11][0]  -   iStage32[12][0];
iStage32[13][1]  =iStage32[10][0]  -   iStage32[13][0];
iStage32[14][1]  =iStage32[  9][0]  -iStage32[14][0];
iStage32[15][1]  =iStage32[  8][0]  -iStage32[15][0];
iStage32[  0][2]  =iStage32[  0][1]  +iStage32[12][1];
iStage32[  1][2]  =iStage32[  1][1]  +iStage32[13][1];
iStage32[  2][2]  =iStage32[  2][1]  +iStage32[14][1];
iStage32[  3][2]  =iStage32[  3][1]  +iStage32[15][1];
iStage32[  4][2]  =iStage32[  4][1]  +iStage32[  7][1];
iStage32[  5][2]  =iStage32[  5][1]  +iStage32[  6][1];
iStage32[  6][2]  =iStage32[  5][1]  -iStage32[  6][1];
iStage32[  7][2]  =iStage32[  4][1]  -iStage32[  7][1];
iStage32[  8][2]  =iStage32[  8][1]  +iStage32[11][1];
iStage32[  9][2]  =iStage32[  9][1]  +iStage32[10][1];
iStage32[10][2]  =iStage32[  9][1]  -iStage32[10][1];
iStage32[11][2]  =iStage32[  8][1]  -iStage32[11][1];
iStage32[12][2]  =iStage32[  0][1]  -iStage32[12][1];
iStage32[13][2]  =iStage32[  1][1]  -iStage32[13][1];
iStage32[14][2]  =iStage32[  2][1]  -iStage32[14][1];
iStage32[15][2]  =iStage32[  3][1]  -iStage32[15][1];
Givens(iStage32[  3][2],iStage32[  0][2],iStage32[15][4],iStage32[  0][4],50,125,25);
Givens(iStage32[2][2],iStage32[1][2],iStage32[17][4],iStage32[16][4],18,107,71);
Givens(iStage32[  3][2],iStage32[  0][2],iStage32[  3][3],iStage32[  0][3],36,89,17);
Givens(iStage32[  2][2],iStage32[  1][2],iStage32[  2][3],iStage32[  1][3],12,75,51);
iStage32[  4][3]  =  iStage32[  4][2]  +  iStage32[10][2];
iStage32[  5][3]  =  iStage32[  5][2]  +  iStage32[11][2];
iStage32[  6][3]  =  iStage32[  6][2]  +  iStage32[  7][2];
iStage32[  7][3]  =  iStage32[  6][2]  -  iStage32[  7][2];
iStage32[  8][3]  =  iStage32[  8][2]  +  iStage32[  9][2];
iStage32[  9][3]  =  iStage32[  8][2]  -  iStage32[  9][2];
iStage32[10][3]  =  iStage32[  4][2]  -  iStage32[10][2];
iStage32[11][3]  =  iStage32[  5][2]  -  iStage32[11][2];
Givens(iStage32[12][2],iStage32[15][2],iStage32[12][3],iStage32[15][3],12,75,51);
Givens(iStage32[13][2],iStage32[14][2],iStage32[13][3],iStage32[14][3],36,89,17);
Givens(iStage32[12][2],iStage32[15][2],iStage32[18][4],iStage32[19][4],18,107,71);
Givens(iStage32[13][2],iStage32[14][2],iStage32[20][4],iStage32[21][4],50,125,25);
Givens(iStage32[  5][3],iStage32[  4][3],iStage32[  5][4],iStage32[4][4],36,119,47);
Givens(iStage32[11][3],iStage32[10][3],iStage32[11][4],iStage32[10][4],36,119,47);
iStage32[  2][4]  =  -iStage32[  0][3]  +  iStage32[  2][3];
iStage32[  3][4]  =  -iStage32[  1][3]  +  iStage32[  3][3];
iStage32[  6][4]  =  90*iStage32[  6][3]  ;
iStage32[  7][4]  =  (  iStage32[  7][3]  +     iStage32[  8][3])<<6;
iStage32[  8][4]  =  (-iStage32[  7][3]  +      iStage32[  8][3])<<6;  
iStage32[  9][4]  =  90*iStage32[  9][3]  ;
iStage32[13][4]  =  iStage32[12][3]  -  iStage32[13][3];
iStage32[14][4]  =  iStage32[14][3]  +  iStage32[15][3];
Oout[  0]  =    iStage32[  8][4];
Oout[  1]  =  -  iStage32[  0][4]  -  iStage32[17][4];
Oout[  2]  =  -iStage32[13][4]  +  iStage32[14][4];  
Oout[  3]  =  -  iStage32[10][4];      
Oout[  4]  =  iStage32[  5][4];
Oout[  5]  =  -  iStage32[18][4]  -  iStage32[20][4];      
Oout[  6]  =  -iStage32[  3][4]  +  iStage32[  2][4];
Oout[  7]  =  iStage32[  6][4];
Oout[  8]  =  iStage32[  9][4];
Oout[  9]  =  iStage32[  3][4]  +  iStage32[  2][4];
Oout[10]  =  -  iStage32[21][4]  +  iStage32[19][4];      
Oout[11]  =  -iStage32[  4][4];
Oout[12]  =  -  iStage32[11][4];
Oout[13]  =  -iStage32[13][4]  -  iStage32[14][4];
Oout[14]  =  -  iStage32[16][4]  -  iStage32[15][4];
Oout[15]  =  -iStage32[  7][4];
}
一方、本発明の一実施形態によれば、表１及び表２に図示されたパラメータ値や整数値を有するＮポイントＤＣＴ行列の元素は、あらかじめ計算され、テーブル形態などにあらかじめ保存され、変換部１２０は、かようなあらかじめ計算されて保存されたパラメータ値や整数値を有するＮポイントＤＣＴ行列の元素を利用して、変換を行うことができる。
【００６６】
図８は、本発明の一実施形態による映像逆変換装置の構成を示したブロック図である。図８を参照すれば、本発明の一実施形態による映像復号化装置８００は、エントロピ復号化部８１０、逆量子化部８２０、逆変換部８３０及び予測部８４０を含む。
【００６７】
エントロピ復号化部８１０は、入力ビットストリームから、復号化される現在ブロックの予測モード情報、参照ピクチャ情報及び残差情報を抽出する。
【００６８】
逆量子化部８２０は、エントロピ復号化部８１０でエントロピ復号化された量子化された変換係数を逆量子化する。
【００６９】
逆変換部８３０は、逆量子化された変換係数を逆変換する。逆変換の結果、ブロック単位に係わる残差値が復元される。特に、本発明の一実施形態による逆変換部８３０は、前述の図１の変換部１２０に対応する逆変換過程を遂行する。すなわち、逆変換部８３０は、ＮポイントＩＤＣＴに利用される逆変換行列を構成する元素を、所定のスケーリング・ファクタを利用してスケーリングし、整数値を有する元素から構成されたＮポイントＩＤＣＴ行列を生成し、生成されたＮポイントＩＤＣＴ行列を利用して、ＮポイントＩＤＣＴを行う。また、本発明の一実施形態による逆変換部８３０は、原ＮポイントＩＤＣＴ行列による結果値との差を考慮し、スケーリングされた元素を利用したＮポイントＩＤＣＴの結果値に対して、さらにスケーリング・ファクタを利用したデスケーリングを行うことができる。スケーリング過程及びデスケーリング過程は、スケーリング・ファクタが２の指数乗の値を有する場合、シフト演算（＞＞，＜＜）で具現される。デスケーリング過程は、逆変換過程以後に遂行されるか、逆量子化段階で遂行される逆量子化過程に統合される。
【００７０】
予測部８４０は、インター予測またはイントラ予測を介して、現在ブロックの予測値を生成し、生成された予測値は、逆変換部８３０で復元された残差と加えられ、現在ブロックが復元される。
【００７１】
以下、図８の逆変換部８３０で遂行される逆変換過程について具体的に説明する。逆変換部８３０で遂行される逆変換過程は、図１の変換部１２０で遂行される変換過程と同様に、逆変換部８３０は、前述の数式（２）で定義されたＮポイントＩＤＣＴ行列の（ｋ，ｎ）番目の元素Ｂｋｎに含まれた
【００７２】
【数１３】
2014523673.tif 000018
成分をスケーリングし、整数値で置き換え、整数値である元素から構成されたＮポイントＩＤＣＴ行列を獲得し、獲得された整数値である元素から構成されたＮポイントＩＤＣＴ行列を利用して、周波数逆変換を行う。
【００７３】
図９は、本発明の一実施形態による映像逆変換方法を示したフローチャートである。
【００７４】
図８及び図９を参照すれば、段階９１０で、逆変換部８３０は、ＮポイントＩＤＣＴ行列を構成する各元素に、所定のスケーリング・ファクタＳを乗じた後で四捨五入し、整数値を有する元素を獲得する。
【００７５】
前述のように、ＮポイントＩＤＣＴ行列は、
【００７６】
【数１４】
2014523673.tif 000019
である成分を含む。変換部８３０は、かような
【００７７】
【数１５】
2014523673.tif 000020
に所定のスケーリング・ファクタＳを乗じた後で四捨五入し、整数値を獲得する。前述のように、ＮポイントＩＤＣＴ行列に含まれた
【００７８】
【数１６】
2014523673.tif 000021
を整数値に変換した元素は、ｉｎｔ（ｃｏｓ（（２ｎ＋１）ｋ）＊ｓｑｒｔ（２．０）＊Ｓ）と表現され、かような整数値に変換された元素ｉｎｔ（ｃｏｓ（（２ｎ＋１）ｋ）＊ｓｑｒｔ（２．０）＊Ｓ）を、ＣＯＳ＿（（２ｎ＋１）ｋ）＿ＳＱＲＴ＿２と示すと定義し、逆変換段階でも、表１で定義されたパラメータをそのまま利用することができる。
【００７９】
逆変換部８３０は、このように、ＮポイントＩＤＣＴ行列の元素に、スケーリング・ファクタＳを乗じた後で四捨五入した値を、さらにスケーリング・ファクタＳを利用して、左向きシフト演算（＜＜）を行う。Ｓ＿ＢＩＴをｌｏｇ２Ｓと定義すれば、逆変換部８３０は、ＣＯＳ＿（（２ｎ＋１）ｋ）＿ＳＱＲＴ＿２を、さらにＳ＿ＢＩＴほど左向きシフト（＜＜）し、ＮポイントＩＤＣＴ行列を獲得する。本発明の一実施形態による逆変換部８３０は、ＮポイントＩＤＣＴ行列の元素にＳを乗じた後で四捨五入した値に、さらにＳを乗じることによって、結果として、Ｓ＾２ほどＮポイントＩＤＣＴ行列の元素をスケーリングすることになる。かようなスケーリング過程を介して獲得されたＮポイントＩＤＣＴ行列ＩＤＣＴ＿ＮｘＮ［Ｎ］［Ｎ］は、前述のＮポイントＤＣＴ行列ＤＣＴ＿ＮｘＮ［Ｎ］［Ｎ］との逆行列関係または転置関係を利用して獲得される。
【００８０】
再び図９を参照すれば、段階９２０で、逆変換部８３０は、整数値を有する元素から構成されたＮポイントＩＤＣＴ行列を利用して、ＮポイントＩＤＣＴを行う。
【００８１】
段階９３０で、逆変換部８３０は、スケーリング・ファクタを利用して、ＮポイントＩＤＣＴ結果値に係わるデスケーリングを行う。スケーリング・ファクタを利用してスケーリングされた整数値を有するＮポイントＩＤＣＴ行列と、原ＮポイントＩＤＣＴ行列とを利用した結果値の差を補償するためには、スケーリングされた整数値を有するＮポイントＩＤＣＴ行列を利用した逆変換結果値を、さらにデスケーリングしなければならない。本発明の一実施形態によるスケーリングされたＮポイントＩＤＣＴ行列の各元素は、原ＮポイントＩＤＣＴ行列の各元素に、スケーリング・ファクタの二乗値を乗じた値に対応するので、デスケーリング過程は、逆変換行列結果値をＳ＾２の値で割ることによって遂行される。前述のようにＳ＿ＢＩＴをｌｏｇ２Ｓと定義すれば、デスケーリング過程は、２＊Ｓ＿ＢＩＴほど、ＮポイントＩＤＣＴによる結果値を右向きシフト（＞＞）することによって遂行される。かような右向きシフト（＞＞）を介したデスケーリング過程は、逆変換部８３０で遂行される代わりに、逆量子化部８２０で遂行される逆量子化過程と統合される。具体的には、逆量子化過程で適用される量子化ステップ（Ｑstep）値を、２＊Ｓ＿ＢＩＴほど右向きシフト（＞＞）した値、すなわち、量子化ステップ（Ｑstep）値をＳ＾２の値で割った新たな量子化ステップを利用して逆量子化を行うことによって、逆量子化過程に統合されてデスケーリング過程が遂行される。
【００８２】
前述の整数値を有する元素から構成されたＮポイントＩＤＣＴ行列は、図１０に記載されたようなフローチャートで具現される。
【００８３】
図１０は、本発明の一実施形態による３２，１６，８及び４ポイントＩＤＣＴ過程を再構成したフローチャートである。図１０に図示された各演算構成要素の動作は、前述の図５のようである。図１０で、点線で表示された図面符号１０１０は、１６ポイントＩＤＣＴのフローチャート、図面符号１０２０は、８ポイントＩＤＣＴのフローチャート、図面符号１０３０は、４ポイントＩＤＣＴのフローチャートを示す。
【００８４】
図１０のフローチャートは、本発明の一実施形態による整数値を有する元素から構成されたＮポイントＩＤＣＴ行列によって具現されたものである。具体的には、Ｙ０ないしＹ３１は、３２ポイントＩＤＣＴの入力値を示し、Ｘ０ないしＸ３１は、３２ポイントＩＤＣＴによる結果値である。
【００８５】
前述の図４のように、図１０に含まれた回転変換演算過程は、Ｔを計算した後、Ｃ１及びＣ０を利用して獲得されたＣ１＿ｐ＿Ｃ０及びＣ１＿ｍ＿Ｃ０と、入力されたＸ値及びＹ値とをそれぞれ乗じ、Ｔを加えるか減算することによってＵ，Ｖを計算する変更された演算を介して遂行される。Ｃ１＿ｐ＿Ｃ０＝Ｃ１＋Ｃ０及びＣ１＿ｍ＿Ｃ０＝Ｃ１−Ｃ０である。
【００８６】
Ｔ＝Ｃ０＊（Ｘ＋Ｙ）；Ｕ＝Ｃ１＿ｐ＿Ｃ０＊Ｘ−Ｔ；Ｖ＝Ｔ＋Ｃ１＿ｍ＿Ｃ０＊Ｙ
Ｃ１及びＣ０は、図示された＃ｎによって決定される値であり、前述のように、Ｃ０がｃｏｓθ、Ｃ１がｓｉｎθとするとき、Ｃ０によってＣ１の値が決定され、前述の表１に基づいて、図１０の＃ｎによって、逆変換過程で利用されるＣ０、Ｃ１＿ｐ＿Ｃ０及びＣ１＿ｍ＿Ｃ０の値は、以下の表３の通りである。
【００８７】
【表３】
2014523673.tif 000022
以上、本発明は、たとえ限定された実施形態と図面とによって説明したとしても、本発明が、前記の実施形態に限定されるものではなく、それらは、本発明が属する分野で当業者であるならば、かような記載から多様な修正及び変形が可能であろう。従って、本発明の思想は、特許請求の範囲によってのみ把握されなければならず、それと均等であるか、あるいは等価的な変形は、いずれも本発明思想の範疇に属するものである。また、本発明によるシステムは、コンピュータで読み取り可能な記録媒体に、コンピュータで読み取り可能なコードでもって具現することが可能である。コンピュータで読み取り可能な記録媒体は、コンピュータ・システムによって読み取り可能なデータが保存される全ての種類の記録装置を含む。記録媒体の例としては、ＲＯＭ（read-only  memory）、ＲＡＭ（random-access  memory）、ＣＤ（compact  disc）−ＲＯＭ、磁気テープ、フロッピー（登録商標）ディスク、光データ保存装置などを含む。また、コンピュータで読み取り可能な記録媒体は、ネットワークに連結されたコンピュータ・システムに分散され、分散方式で、コンピュータで読み取り可能なコードが保存されて実行される。
【図１】
2014523673.tif 000023
【図２】
2014523673.tif 000024
【図３】
2014523673.tif 000025
【図４】
2014523673.tif 000026
【図５】
2014523673.tif 000027
【図６】
2014523673.tif 000028
【図７ａ】
2014523673.tif 000029
【図７ｂ】
2014523673.tif 000030
【図７ｃ】
2014523673.tif 000031
【図８】
2014523673.tif 000032
【図９】
2014523673.tif 000033
【図１０】
2014523673.tif 000034
【国際調査報告】
2014523673.tif 000035
2014523673.tif 000036
2014523673.tif 000037
2014523673.tif 000038