(57)【要約】【課題】ビデオデータに適用されるフォワード変換演算および逆変換演算を実行する間に要求される乗算の個数を減少化させる新たなデータ処理装置および方法を提供する。【解決手段】変換回路がＮ個の入力値を受け取り、その入力値の空間領域と周波数領域との間の変換を表すＮ個の出力値を生成するための一連の演算を実行する。ベース回路は変換回路により生成された４以上のＭ個の内部入力値を受け取り、ハンケル行列によるＭ個の内部入力値の行列積に等価であるベース演算を実行するよう構成される。この配列のそれぞれの要素は係数を指定し、ベース演算の実行は、変換回路に戻すためのＭ個の内部出力値を生成する。変換回路は、一連の演算を実行する間、Ｎ個の入力値から複数セットのＭ個の内部入力値を生成することと、複数セットのＭ個の内部出力値を生成するために各セットのＭ個の内部入力値をベース回路に提供することと、複数セットのＭ個の内部出力値からＮ個の出力値を導出する。【選択図】図４
2014241585.tif 000002
【特許請求の範囲】
【請求項１】
ビデオデータ処理時に空間領域と周波数領域との間の変換を実行するためのデータ処理装置であって、
Ｎ個の入力値を受け取り、前記Ｎ個の入力値の前記空間領域と前記周波数領域との間の前記変換を表すＮ個の出力値を生成するための一連の演算を実行するよう構成された変換回路と、
前記変換回路により生成されたＭ個（ただしＭは４以上）の内部入力値を受け取り、前記変換回路に戻すためのＭ個の内部出力値を生成するために、係数ｃの配列を含み且つ
ｃ０ ｃ１ ｃ２ …ｃＭ−１
ｃ１ ｃ２ ｃ３ …ｃＭ
ｃ２ ｃ３ ｃ４ … ｃＭ＋１
…
ｃＭ−１ ｃＭ ｃＭ＋１ … ｃ２Ｍ−２
の形を有する行列による前記Ｍ個の内部入力値の行列積に等価であるベース演算を実行するためのベース回路と
を備え、
前記変換回路は、前記一連の演算を実行する間、前記Ｎ個の入力値から複数セットの前記Ｍ個の内部入力値を生成することと、複数セットの前記Ｍ個の内部出力値を生成するために各セットのＭ個の内部入力値を前記ベース回路に提供することと、前記複数セットのＭ個の内部出力値からＮ個の出力値を導出することと、を行うよう構成される、
データ処理装置。
【請求項２】
係数ｃの配列を含む前記行列はハンケル行列であり、
前記ベース回路は、前記係数ｃ０からｃ２Ｍ−２に割り当てられた前記値に関わらず、前記ハンケル行列による前記Ｍ個の内部入力値の行列積に等価である前記ベース演算を実行するよう構成される、
請求項１に記載のデータ処理装置。
【請求項３】
空間領域と周波数領域との間で実行される前記変換は離散コサイン変換である、請求項１に記載のデータ処理装置。
【請求項４】
前記変換回路が、
Ｋ個のグループの入力値を生成するために、前記受け取られたＮ個の入力値を並べ替えるよう構成された並べ替え回路であって、Ｋ＝Ｎ／Ｍであり、したがって各グループはＭ個のメンバーを有し、各メンバーは前記受け取られたＮ個の入力値のうちの１つである、並べ替え回路と、
各セットの前記Ｍ個の内部入力値を生成するために、選択されたグループからの対応するメンバーに対して加算演算および減算演算のうちの少なくとも１つを実行するよう構成された加算器回路と
を備える、請求項１〜請求項３のいずれか1項に記載のデータ処理装置。
【請求項５】
前記変換回路が、
Ｎ個の中間出力値を生成するために、前記ベース回路により生成された前記複数セットの前記Ｍ個の内部出力値に対して加算演算および減算演算のうちの少なくとも１つを実行するよう構成された、追加的加算器回路
をさらに備える、請求項４に記載のデータ処理装置。
【請求項６】
前記変換回路が、
シフトされた中間出力値を生成するために、前記Ｎ個の中間出力値に対してシフト演算を実行するよう構成されたシフト回路
をさらに備える、請求項５に記載のデータ処理装置。
【請求項７】
前記シフト演算が飽和演算を含む、請求項６に記載のデータ処理装置。
【請求項８】
前記変換回路が、
前記Ｎ個の出力値を生成するために、前記Ｎ個のシフトされた中間出力値を並べ替えるよう構成された、追加的並べ替え回路
をさらに備える、請求項６または請求項７に記載のデータ処理装置。
【請求項９】
各セットのＭ個の内部入力値に対して、前記ベース演算の実行時に前記ベース回路により用いられる対応するセットの係数値を生成するよう構成された係数生成回路をさらに備える、請求項１〜請求項８のいずれか１項に記載のデータ処理装置。
【請求項１０】
前記空間領域から前記周波数領域へのフォワード変換および前記周波数領域から前記空間領域への逆変換のうちの１つを実行するよう構成された、請求項１〜請求項９のいずれか１項に記載のデータ処理装置。
【請求項１１】
各セットのＭ個の内部入力値に対して前記係数生成回路により生成された前記対応するセットの係数値が、データ処理装置がフォワード変換を実行するよう構成されているかまたは逆変換を実行するよう構成されているかに関わらず、同一である、請求項９に従属する場合の請求項１０に記載のデータ処理装置。
【請求項１２】
前記変換回路が前記ベース回路に提供するための追加的セットのＭ個の内部入力値を生成するようさらに構成され、前記ベース回路が、離散コサイン変換行列による前記追加的セットのＭ個の内部入力値の行列積に等価である離散コサイン変換演算を実行することにより、前記追加的セットのＭ個の内部入力値に対して離散コサイン変換を実行するよう構成された、請求項３に従属する場合の請求項１〜請求項１１のいずれか１項に記載のデータ処理装置。
【請求項１３】
前記ビデオデータのエンコードを実行する間はフォワード離散コサイン変換を実行するよう構成され、前記ベース回路が、前記複数セットのＭ個の内部入力値に対する前記ベース演算の実行の後にフォワード離散変換演算を前記離散コサイン変換演算として実行するよう構成された、請求項１２に記載のデータ処理装置。
【請求項１４】
前記ビデオデータのデコードを実行する間は逆離散コサイン変換を実行するよう構成され、前記ベース回路が、前記複数セットのＭ個の内部入力値に対する前記ベース演算の実行の前に逆離散変換演算を前記離散コサイン変換演算として実行するよう構成された、請求項１２に記載のデータ処理装置。
【請求項１５】
ＮはＭの倍数である、請求項１〜請求項１４のいずれか１項に記載のデータ処理装置。
【請求項１６】
Ｎは２の累乗である、請求項１５に記載のデータ処理装置。
【請求項１７】
Ｍ＝４である、請求項１〜請求項１６のいずれか１項に記載のデータ処理装置。
【請求項１８】
前記加算器回路が、各セットの前記Ｍ個の内部入力値を生成するために、前記加算演算および減算演算のうちの少なくとも１つを並列的に実行するためのＭ個のレーンの並列処理を提供するＳＩＭＤ回路として構成される、請求項４に従属する場合の請求項１〜請求項１７のいずれか１項に記載のデータ処理装置。
【請求項１９】
前記追加的加算器回路が、前記ベース回路により生成された各セットの前記Ｍ個の内部出力値に対して加算演算および減算演算のうちの前記少なくとも１つを並列的に実行するためのＭ個のレーンの並列処理を提供するＳＩＭＤ回路として構成される、請求項５に従属する場合の請求項１〜請求項１８のいずれか１項に記載のデータ処理装置。
【請求項２０】
Ｎ個のデータ値のそれぞれの行およびそれぞれの列に対して前記空間領域と前記周波数領域との間の前記変換を別個に実行することにより、Ｎ×Ｎの配列のデータ値を含むビデオデータブロックに対する演算を実行するよう構成され、
前記行および前記列のそれぞれに対して前記ベース回路により実行される乗算の合計数が、
３ｎ−１＋３ｎ−２＋…＋９＋Ｚ（ただしＺは≦９であり、Ｎ＝２ｎである）である、
請求項１〜請求項１９のいずれか１項に記載のデータ処理装置。
【請求項２１】
現在選択されたビデオ規格に応じて各セットのＭ個の内部入力値に対して前記ベース回路に供給される前記対応するセットの前記係数を設定することを前記係数生成回路に対して行わせることにより、異なるビデオ規格をサポートするよう構成可能である、請求項９に従属する場合の請求項１〜請求項２０のいずれか１項に記載のデータ処理装置。
【請求項２２】
ビデオデータ処理時に空間領域と周波数領域との間の変換を実行する方法であって、
Ｎ個の入力値を受け取り、前記Ｎ個の入力値の前記空間領域と前記周波数領域との間の前記変換を表すＮ個の出力値を生成するための一連の演算を実行するために、変換回路を用いることと、
前記変換回路により生成されたＭ個（ただしＭは４以上）の内部入力値を受け取り、前記変換回路に戻すためのＭ個の内部出力値を生成するために、係数ｃの配列を含み且つ
ｃ０ ｃ１ｃ２ …ｃＭ−１
ｃ１ ｃ２ｃ３ …ｃＭ
ｃ２ ｃ３ｃ４ … ｃＭ＋１
…
ｃＭ−１ ｃＭｃＭ＋１ … ｃ２Ｍ−２
の形を有する行列による前記Ｍ個の内部入力値の行列積に等価であるベース演算を実行するために、ベース回路を用いることと
を含み、
前記変換回路による前記一連の演算が、
前記Ｎ個の入力値から複数セットの前記Ｍ個の内部入力値を生成することと、
複数セットの前記Ｍ個の内部出力値を生成するために、各セットのＭ個の内部入力値を前記ベース回路に提供することと、
前記複数セットのＭ個の内部出力値から前記Ｎ個の出力値を導出することと
を含む、
方法。
【請求項２３】
ビデオデータ処理時に空間領域と周波数領域との間の変換を実行するためのデータ処理装置であって、
Ｎ個の入力値を受け取り、前記Ｎ個の入力値の前記空間領域と前記周波数領域との間の前記変換を表すＮ個の出力値を生成するための一連の演算を実行するための変換手段と、
前記変換手段により生成されたＭ個（ただしＭは４以上）の内部入力値を受け取り、前記変換手段に戻すためのＭ個の内部出力値を生成するために、係数ｃの配列を含み且つ
ｃ０ ｃ１ｃ２ …ｃＭ−１
ｃ１ ｃ２ｃ３ …ｃＭ
ｃ２ ｃ３ｃ４ … ｃＭ＋１
…
ｃＭ−１ ｃＭｃＭ＋１ … ｃ２Ｍ−２
の形を有する行列による前記Ｍ個の内部入力値の行列積に等価であるベース演算を実行するためのベース回路手段と
を備え、
前記変換手段が、前記一連の演算を実行する間、前記Ｎ個の入力値から複数セットの前記Ｍ個の内部入力値を生成し、複数セットの前記Ｍ個の内部出力値を生成するために各セットのＭ個の内部入力値を前記ベース回路手段に提供し、前記複数セットのＭ個の内部出力値から前記Ｎ個の出力値を導出する、
データ処理装置。
【発明の詳細な説明】
【技術分野】
【０００１】
本発明はビデオデータ処理時に空間領域と周波数領域との間の変換を実行するための技術に関する。係る変換は通常、ビデオエンコーダおよびビデオデコーダの両方により実行される。ここで、ビデオエンコーダは、ビデオ信号を空間領域から周波数領域に変換するために、フォワード変換を実行し、ビデオデコーダは、エンコードされた信号を周波数領域から空間領域に戻すよう変換するために、対応する逆変換を実行する。
【背景技術】
【０００２】
信号を空間領域と周波数領域との間で変換するために様々な変換が知られている。一般的に用いられる変換は離散コサイン変換である。現代のビデオエンコーダおよびビデオデコーダは、多数のビデオ規格（例えばＭＰＥＧ２、ＭＰＥＧ４、Ｈ．２６３、Ｈ．２６４ハイプロファイル、ＶＰ８、ＶＣ−１など）に準拠してビデオのエンコード演算およびデコード演算を実行することが要求され得る。ビデオのエンコード処理およびデコード処理のうちで特に計算が集約される部分が変換演算の実行であることは知られている。
【０００３】
ビデオのエンコードおよびデコードは通常、８×８ブロックのピクセルデータをもとにして行われてきた。ここで、４つの８×８ブロックのルマ（Ｙ）データおよび２つの８×８ブロックのクロマ（ＣｂおよびＣｒ）データは所与のマクロブロックのビデオデータを表す。変換演算はそれぞれのマクロブロックに対する６つの８×８ブロックの全部について実行され、その結果、６つの変換された出力８×８ブロックが生成される。
【０００４】
近年に至るまでは、比較的小さい変換演算（例えば上述の例における８×８変換など）だけが必要とされてきた。しかし高精細ビデオの導入とともに、より新しいビデオ規格（例えばＨＥＶＣ規格など）が登場し、そのために変換演算はより大きい配列上（例えば１６×１６および３２×３２など）で行われることが要求されるようになった。サイズがより小さい変換を効果的に実行するために開発された多くの技術が係るより大きい変換に拡張可能ではないことはすでに知られている。
【０００５】
離散コサイン変換（ＤＣＴ）の例について特に考えると、様々な論文においてより大きいＤＣＴについて研究がなされ、反復的な乗算が許可される（すなわち、１つの乗算の結果が追加的な乗算への入力として供給される）場合、係る大きいＤＣＴが高速フーリエ変換（ＦＦＴ）スタイルの方法により効率的に実装されることを可能にする技術が開発されてきた。例えば、ＦｅｉｇおよびＷｉｎｏｇｒａｄによる、“Ｏｎ  ｔｈｅ  Ｍｕｌｔｉｐｌｉｃａｔｉｖｅ  Ｃｏｍｐｌｅｘｉｔｙ  ｏｆ  Ｄｉｓｃｒｅｔｅ  Ｃｏｓｉｎｅ  Ｔｒａｎｓｆｏｒｍｓ”，  ＩＥＥＥ  Ｔｒａｎｓ  Ｉｎｆｏｒｍａｔｉｏｎ  Ｔｈｅｏｒｙ，  Ｖｏｌｕｍｅ  ３８，  Ｎｏ．  ４，  １９９２年７月、および“Ｆａｓｔ  Ａｌｇｏｒｉｔｈｍｓ  ｆｏｒ  ｔｈｅ  Ｄｉｓｃｒｅｔｅ  Ｃｏｓｉｎｅ  Ｔｒａｎｓｆｏｒｍ”，  ＩＥＥＥ  Ｔｒａｎｓ  Ｓｉｇｎａｌ  Ｐｒｏｃｅｓｓｉｎｇ，  Ｖｏｌｕｍｅ  ４０，  Ｎｏ．  ９，  １９９２年９月をタイトルとする２つの論文では、必要とされる乗法演算の回数を減少させるＤＣＴを最適化するための可能なアルゴリズムが論じられている。しかし、全般的に、これらの技術は、特により大きい変換サイズに対しては、前述の反復的な乗算を要求する。
【０００６】
しかし、ビデオ処理では特定画像の内容が以前の画像から予測されるため、ビデオ規格では、少なくともデコード演算の出力がビットイグザクトであることが多くの場合要求される。ＨＥＶＣ規格の具体例を取ると、デコードの間に実行される逆変換演算は、整数乗算を用いる基準固定点バージョンの変換の出力に正確に合致するよう実装されなければならない。結果として、反復的乗算を（通常、シフト演算と組み合わせて）使用する既知の最適化技術は、丸め誤差が導入されるために、用いることはできない。
【０００７】
係る反復的な乗算に対する必要性を回避し、それによりビットイグザクトな結果が要求される場合に使用可能である既知の技術においては、要求される乗算演算の回数を減少させるために反復的（Ａ＋Ｂ，Ａ−Ｂ）バタフライが使用される。３２×３２変換の例について考えると、最適化をまったく行わない場合、係る変換は各１次元の変換に対して３２×３２個、すなわち１０２４個の乗算を要求するであろう。係る既知のバタフライ技術を使用すると、その特定のシナリオに対する乗算の個数は３４２に減少される。
【０００８】
それにも関わらず、依然として相当な個数の乗算が実行され、この個数の乗算が各１次元の変換毎に反復されなければならない。例えば、ビデオのエンコードおよびデコードでは通常、２次元ＤＣＴが使用され、したがってＨＥＶＣ規格を使用する事例では、処理される各ブロックのビデオデータは３２×３２個のデータ値の配列からなり得る。通常、２次元離散コサイン変換は、配列の各行および各列に対して適用される一連の１次元変換を実行することにより実装される。したがって上述の事例は、配列の各行をカバーするための３２個の１次元変換の実行と、引き続き列のそれぞれをカバーするための３２個の１次元変換の実行と、を含むであろう。したがって、前述した特定のバタフライ技術によれば、６４個の１次元変換が各ブロックのビデオデータに対して要求され、各１次元変換は３４２個の乗算演算を要求するであろう。
【発明の概要】
【発明が解決しようとする課題】
【０００９】
より高い性能およびより低いエリアコストのビデオエンコーダおよびデコーダを提供することが継続的に望まれている。したがって、ビデオデータに適用されるフォワード変換演算および逆変換演算を実行する間に要求される乗算の個数を減少化させることが望まれるであろう。この望みは、より新しいビデオ規格（例えばＨＥＶＣ規格など）によりサポートされる変換のサイズが増大化されるにつれて、より切実なものとなりつつある。
【課題を解決するための手段】
【００１０】
第１の態様の観点からは、本発明は、ビデオデータ処理時に空間領域と周波数領域との間の変換を実行するためのデータ処理装置を提供し、このデータ処理装置は、Ｎ個の入力値を受け取り、前記Ｎ個の入力値の空間領域と周波数領域との間の変換を表すＮ個の出力値を生成するための一連の演算を実行するよう構成された変換回路と、変換回路に戻すためのＭ個の内部出力値を生成するために、変換回路により生成されたＭ個（ただしＭは４以上である）の内部入力値を受け取り、係数ｃの配列を含み且つ
ｃ０ ｃ１ ｃ２ …ｃＭ−１
ｃ１ ｃ２ ｃ３ …ｃＭ
ｃ２ ｃ３ ｃ４ … ｃＭ＋１
…
ｃＭ−１ ｃＭ ｃＭ＋１ … ｃ２Ｍ−２
の形を有する行列による前記Ｍ個の内部入力値の行列積に等価であるベース演算を実行するよう構成されたベース回路と、を備え、変換回路は、前記一連の演算を実行する間、Ｎ個の入力値から複数セットの前記Ｍ個の内部入力値を生成することと、複数セットの前記Ｍ個の内部出力値を生成するために各セットのＭ個の内部入力値を前記ベース回路に提供することと、前記複数セットのＭ個の内部出力値からＮ個の出力値を導出することと、を行うよう構成される。
【００１１】
本発明によれば、データ処理装置はベース回路を反復的に使用するよう構成される。なおベース回路は、係数ｃの配列を含み且つ
ｃ０ｃ１ ｃ２ …ｃＭ−１
ｃ１ｃ２ ｃ３ …ｃＭ
ｃ２ｃ３ ｃ４ … ｃＭ＋１
…
ｃＭ−１ｃＭ ｃＭ＋１ … ｃ２Ｍ−２
の形を有する行列によるＭ個の内部入力値の行列積に等価であるベース演算を実行するよう構成される。
【００１２】
Ｍは４以上であり、１つの実施例においてＭは４に等しい。変換回路は、複数セットのＭ個の内部入力値を生成するために、最初に提供されたＭ個の入力値に操作を加える。なおここで、各セットのＭ個の内部入力値はベース回路に通される。したがって、ベース回路は変換回路により生成された各セットのＭ個の内部入力値に対して反復的に使用される。次に変換回路はＮ個の出力値を、ベース回路により生成された複数セットのＭ個の内部出力値から導出する。
【００１３】
本発明の上述の技術はしばしば、２次元変換を実装するために、一連の１次元変換に対して反復的に用いられるであろう。それぞれの１次元変換に対して、１セットのＮ個の入力値がデータ処理装置の変換回路に入力されるであろう。本発明によれば、各セットのＭ個の内部入力値は、特定の提供されたセットのＮ個の入力値に対して１回だけベース回路に通され、ベース回路により生成された内部出力値のいずれもが、ベース回路により実行される乗算の後続の反復に対する入力として用いられることはない。したがって、本発明に係る装置を用いるならば反復的な乗算は実行されず、したがってこのことにより、本装置はＨＥＶＣビデオ規格などの現代の規格に要求されるビットイグザクトな結果を生成することが可能である。
【００１４】
ベース回路内で用いられる特定の形の行列は、通常の対角線に対して斜交する対角線上の要素（すなわち正に傾斜する対角線上の要素）がすべて等しくなっている正方行列であり、ハンケル行列としても知られる。本発明の発明者らは、現代のビデオ処理基準により要求されるより大きい変換に対してさえも、空間領域と周波数領域との間の要求される変換が、ハンケル行列を用いて、より小さいサイズの反復的な行列積を可能にする様式で因数分解されることを見出した。
【００１５】
ベース回路により実行されるベース演算は、上述した形のハンケル行列のいかなる特定の事例も処理することができ、したがって係数ｃ０〜ｃ２Ｍ−２に割り当てられた値に関わらずハンケル行列によるＭ個の内部入力値の行列積に等価である演算を実行することができる。したがって、例えば、ベース回路は、たとえ係数ｃ０〜ｃ２Ｍ−２の全部が異なる値を有したとしても、および／またはこれらの係数の全部がベース回路に提供されるＭ個の内部入力値の各セットに対して異なったとしても、要求される演算を実行することができる。
【００１６】
さらに、本発明の技術はエンコードおよびデコードの両方に対して用いられ得、異なるサイズのＮに対して容易に拡張される。
【００１７】
上述の構成により、空間領域と周波数領域との間でＮ個の入力値を変換するために要求される乗算の個数における顕著な減少化が可能であることが見出された。例えば、新しいＨＥＶＣビデオ規格により要求される前述の３２点の変換について考えると、本発明の技術によれば、ＨＥＶＣ標準ソフトウェアにより用いられる部分的バタフライ手法と比較して約１／３の乗算の個数が要求されることが見出された。ＨＥＶＣ標準ソフトウェア（ｈｔｔｐ：／／ｒ２ｄ２ｎ３ｐｏ．ｔｉｓｔｏｒｙ．ｃｏｍ／６１においてＨＭ−８．０としても知られる）は論文標準（ｐａｐｅｒ  Ｓｔａｎｄａｒｄ）に対する標準的実装として用いられる標準Ｃコード実装である。
【００１８】
空間領域と周波数領域との間で実行される変換は様々な形を取り得るが、しかし１つの実施形態では、離散コサイン変換である。
【００１９】
変換回路が、ベース回路に提供される各セットのＭ個の内部入力値が生成されるよう構成されることができる方法は多数存在する。一方、１つの実施形態において変換回路は並べ替え回路を備え、並べ替え回路は、Ｋ個のグループの入力値を生成するために、受け取られたＮ個の入力値を並べ替えるよう構成される。なお、Ｋ＝Ｎ／Ｍであり、したがって各グループはＭ個のメンバーを有し、各メンバーは前記受け取られたＮ個の入力値のうちの１つである。次に加算器回路は、各セットの前記Ｍ個の内部入力値を生成するために、選択されたグループからの対応するメンバーに対して加算演算および減算演算のうちの少なくとも１つを実行するよう構成される。
【００２０】
並べ替え回路により実行される実際の並べ替えは、装置が空間領域から周波数領域へのフォワード変換を実行するために、または周波数領域から空間領域への逆変換を実行するために用いられているかに依存するであろう。同様に、加算器回路により実行される加算演算および減算演算は、フォワード変換が実行されているかまたは逆変換が実行されているかに応じて異なるであろう。
【００２１】
変換回路がＮ個の出力値を複数セットのＭ個の内部出力値から導出するよう構成される様式は、実施形態に応じて変動し得る。一方、１つの実施形態において、変換回路は、Ｎ個の中間出力値を生成するためにベース回路により生成された複数セットの前記Ｍ個の内部出力値に対して加算演算および減算演算のうちの少なくとも１つを実行するよう構成された、追加的加算器回路をさらに備える。加算器回路および追加的加算器回路により実行される加算／減算は、装置がフォワード変換を実行するために、または逆変換を実行するために用いられているかに依存するであろう。
【００２２】
１つの実施形態において、変換回路は、シフトされた中間出力値を生成するためにＮ個の中間出力値に対してシフト演算を実行するよう構成されたシフト回路をさらに備える。シフト演算は、様々なセットのＭ個の内部入力値に対してベース回路の反復的演算が実行された後、Ｎ個の中間出力値が生成された後に、１回だけ実行されることに注意すべきである。このことは、結果が正確であること保証するように作用する。１回シフトされた値は出力され、循環されない（他の関連する１次元変換のために入力値を形成するかもしれない場合を除く）。
【００２３】
１つの実施形態において、シフト演算は飽和演算を含む。再び、シフト演算の場合と同様に、飽和演算も１回だけ実行される。
【００２４】
１つの実施形態において、変換回路は、前記Ｎ個の出力値を生成するためにＮ個のシフトされた中間出力値を並べ替えるよう構成された追加的並べ替え回路をさらに備える。追加的並べ替え回路により実行される並べ替えは、Ｎ個の入力値に対して並べ替え回路により実行された並べ替えに依存するであろう。
【００２５】
１つの実施形態において、この装置は、各セットのＭ個の内部入力値に対して、ベース演算を実行するときにベース回路により用いられる対応するセットの係数値を生成するよう構成された係数生成回路をさらに備える。したがって、このセットの係数値は、ベース回路の各反復に対して設定されることができる。
【００２６】
前述のようにこの装置は、空間領域から周波数領域へのフォワード変換または周波数領域から空間領域への逆変換を実行するために用いられることができる。１つの実施形態において、この装置は、フォワード変換の実行または逆変換の実行の間で切り替えが可能となるよう構成可能である。
【００２７】
１つの特定の実施形態において、各セットのＭ個の内部入力値に対して係数生成回路により生成された対応するセットの係数値は、データ処理装置がフォワード変換を実行するよう構成されているかまたは逆変換を実行するよう構成されているかに関わらず、同一である。したがって、並べ替え回路、加算器回路、追加的加算器回路、および追加的並べ替え回路の動作は、この装置がフォワード変換を実行しているかまた逆変換を実行しているかに応じて変更されるであろうが、ベース回路の基本的演算は不変であり、この装置が同一のビデオ規格に準拠して動作すると仮定すると、正確に同一の係数が係数生成回路により生成される。
【００２８】
様々な実施形態に係る装置が前述のベース演算の複数反復を実行する一方で、通常は、小さい変換、特にＭ×Ｍの変換を実行することが依然として必要とされるであろう。したがって、１つの実施形態において、変換回路は、ベース回路に提供するための追加的セットのＭ個の内部入力値を生成するようさらに構成され、ベース回路は、離散コサイン変換行列による前記追加的セットのＭ個の内部入力値の行列積に等価である離散コサイン変換演算を実行することにより、前記追加的セットのＭ個の内部入力値に対して離散コサイン変換を実行するよう構成される。
【００２９】
１つの特定の実施形態において、データ処理装置は、ビデオデータのエンコードを実行する間にフォワード離散コサイン変換を実行するよう構成され、ベース回路は、前記複数セットのＭ個の内部入力値に対するベース演算の実行の後にフォワード離散変換演算を離散コサイン変換演算として実行するよう構成される。
【００３０】
それとは対比的に、データ処理装置がビデオデータのデコードを実行する間に逆離散コサイン変換を実行するよう構成されている場合、ベース回路は、前記複数セットのＭ個の内部入力値に対してベース演算を実行する前に逆離散変換演算を離散コサイン変換演算として実行するよう構成される。
【００３１】
Ｎの値は実施形態に応じて変動し得る。１つの実施形態においてＮはＭの倍数である。１つの特定の実施形態においてＮは２の累乗に制約される。
【００３２】
前述のように、Ｍは４以上であり得、１つの実施形態においてＭは４に等しく設定される。したがって、係る実施形態において、実行される全部の乗算は、Ｎのサイズに関わりなく４×４行列に対するものである。
【００３３】
加算器回路は様々な方法で構成されることができるが、しかし１つの実施形態において加算器回路は、各セットの前記Ｍ個の内部入力値を生成するために前記加算演算および減算演算のうちの少なくとも１つを並列的に実行するためのＭ個のレーンの並列処理を提供するＳＩＭＤ回路として構成される。
【００３４】
同様に、１つの実施形態において、追加的加算器回路は、ベース回路により生成された各セットの前記Ｍ個の内部出力値に対して前記加算演算および減算演算のうちの少なくとも１つを並列的に実行するためのＭ個のレーンの並列処理を提供するＳＩＭＤ回路として構成され得る。
【００３５】
上述のように、空間領域と周波数領域との間でＮ個の入力値を変換するために要求される乗算の個数は、上述の実施形態に係る技術を用いると、顕著に減少化される。１つの特定の実施形態において、データ処理装置は、空間領域と周波数領域との間の前記変換をＮ個のデータ値の各行および各行に対して別個に実行することにより、Ｎ×Ｎ配列のデータ値を含むビデオデータブロックに対して動作するよう構成され、各前記行および各前記列に対して前記ベース回路により実行される乗算の総数は３ｎ−１＋３ｎ−２＋…＋９＋Ｚである（ただしＺは≦９であり、Ｎ＝２ｎである）。Ｚの値は単一のＭ×Ｍ離散コサイン変換を実行するために要求される乗算の個数に依存し、３２×３２配列（すなわちＮ＝３２）上で動作するよう構成され且つＭ＝４である１つの特定的な実装において、６つの乗算が単一の４×４離散コサイン変換に対して要求される（すなわちＺ＝６）ことが見出された。上記の式から、これにより１２３個の乗算が要求されることとなる。これは、前述の部分的バタフライ手法により要求されるであろう乗算の個数の約１／３である。
【００３６】
上述の実施形態に係る装置は顕著な柔軟性を提供することが見出されている。同一の装置がフォワード変換および逆変換の両方を実行するよう構成されることが可能であるばかりか、それに加えてこの装置は異なるビデオ規格をサポートするよう構成され得る。特に、１つの実施形態において、この装置は、現在選択されたビデオ規格に応じて各セットのＭ個の内部入力値に対してベース回路に供給される対応するセットの係数を設定することを係数生成回路に行わせることにより、異なるビデオ規格をサポートするよう構成可能である。
【００３７】
第２の態様の観点からは、本発明は、ビデオデータ処理時に空間領域と周波数領域との間の変換を実行するための方法を提供し、この方法は、Ｎ個の入力値を受け取り、前記Ｎ個の入力値の空間領域と周波数領域との間の変換を表すＮ個の出力値を生成するための一連の演算を実行するために変換回路を用いることと、変換回路により生成されたＭ個（ただしＭは４以上である）の内部入力値を受け取り、変換回路に戻すためのＭ個の内部出力値を生成するために、係数ｃの配列を含み且つ
ｃ０ ｃ１ ｃ２ …ｃＭ−１
ｃ１ ｃ２ ｃ３ …ｃＭ
ｃ２ ｃ３ ｃ４ … ｃＭ＋１
…
ｃＭ−１ ｃＭ ｃＭ＋１ … ｃ２Ｍ−２
の形を有する行列による前記Ｍ個の内部入力値の行列積に等価であるベース演算を実行するためにベース回路を用いることと、を含み、変換回路による前記一連の演算の実行は、Ｎ個の入力値から複数セットの前記Ｍ個の内部入力値を生成することと、複数セットの前記Ｍ個の内部出力値を生成するためにベース回路に各セットのＭ個の内部入力値を提供することと、前記複数セットのＭ個の内部出力値からＮ個の出力値を導出することと、を含む。
【００３８】
第３の態様の観点からは、本発明は、ビデオデータ処理時に空間領域と周波数領域との間の変換を実行するためのデータ処理装置を提供し、このデータ処理装置は、Ｎ個の入力値を受け取り、前記Ｎ個の入力値の空間領域と周波数領域との間の変換を表すＮ個の出力値を生成するための一連の演算を実行するための変換手段と、変換手段に戻すためのＭ個の内部出力値を生成するために、変換手段により生成されたＭ個（ただしＭは４以上である）の内部入力値を受け取り、係数ｃの配列を含み且つ
ｃ０ ｃ１ ｃ２ …ｃＭ−１
ｃ１ ｃ２ ｃ３ …ｃＭ
ｃ２ ｃ３ ｃ４ … ｃＭ＋１
…
ｃＭ−１ ｃＭ ｃＭ＋１ … ｃ２Ｍ−２
の形を有する行列による前記Ｍ個の内部入力値の行列積に等価であるベース演算を実行するためのベース回路手段と、を備え、変換手段は、前記一連の演算を実行する間、Ｎ個の入力値から複数セットの前記Ｍ個の内部入力値を生成し、複数セットの前記Ｍ個の内部出力値を生成するために各セットのＭ個の内部入力値をベース回路手段に提供し、前記複数セットのＭ個の内部出力値からＮ個の出力値を導出する。
【００３９】
本発明について、以下の添付の図面において示される本発明の実施形態を参照しつつ、単なる例として、さらに詳細に説明する。
【図面の簡単な説明】
【００４０】
【図１】いかにしてビデオデータのフレームが既知の技術にしたがってブロック毎の様式で処理されるかを示す概略図である。
【図２】既知の手法に係る１次元ＤＣＴ変換演算を示す図である。
【図３Ａ】Ｎ×Ｎ行列を、一連のより小さい線形相関行列と単一のより小さい逆ＤＣＴ行列とにより、これらの行列に対する入力および出力に様々な加算演算および減算演算が実行される状態で、実装するために、いかにしてＮ×Ｎ逆ＤＣＴ変換行列が１つの実施形態にしたがって因数分解されるかを示す図である。
【図３Ｂ】Ｎ×Ｎ行列を、一連のより小さい線形相関行列と単一のフォワードＤＣＴ行列とにより、これらの行列に対する入力および出力に様々な加算演算および減算演算が実行される状態で、実装するために、いかにしてＮ×ＮフォワードＤＣＴ変換行列が１つの実施形態にしたがって因数分解されるかを示す図である。
【図４】受け取られたＮ個の入力値に対して空間領域と周波数領域との間の変換を実行するための１つの実施形態に係るデータ処理装置内に提供される構成要素を概略的に示すブロック図である。
【図５】１つの実施形態に係る図４の加算器回路および追加的加算器回路内に提供される構成要素の概略図である。
【図６Ａ】１つの実施形態にしたがって１セットのＮ個の入力値を処理するために図４の回路により実行されるステップを示すフローチャートである。
【図６Ｂ】１つの実施形態にしたがって１セットのＮ個の入力値を処理するために図４の回路により実行されるステップを示すフローチャートである。
【発明を実施するための形態】
【００４１】
図１はビデオデータのフレーム１０を示す。なおこのフレームはブロック１５の配列であり、各ブロックはデータ値２０のＮ×Ｎ配列を含む。それぞれのデータ値は通常、複数ビット（例えば１６ビット）のデータを含むであろう。入力ビデオデータに対してエンコード演算が実行されるときは、そのデータを空間領域から周波数領域に変換するために、それぞれの係るブロック１５に２次元変換演算が実行されるであろう。通常、フォワード離散コサイン変換（ＦＤＣＴ）演算が係るエンコードを実行するために実行されるであろう。同様に、ビデオデータのエンコードされたフレームをデコードするときは、受け取られたエンコードされた信号を周波数領域から空間領域に変換するために、それぞれのブロックに２次元逆離散コサイン変換（ＩＤＣＴ）演算が実行されるであろう。
【００４２】
実際、２次元ＤＣＴ演算は一連の１次元ＤＣＴ演算により実行される。例えば、通常は、１次元ＤＣＴ演算が行のそれぞれに対して実行され、それによりいくつかの中間結果が生成され、引き続き、対応する一連の１次元ＤＣＴ演算がこれらの中間結果のそれぞれの列に対して実行される。したがって、Ｎ×Ｎブロックに対して、要求される２次元ＤＣＴ演算を実装するために２Ｎ個の１次元ＤＣＴ演算が実行される必要があることとなる。
【００４３】
図２は、入力値ｘ０〜ｘＮ−１５０の行または列に対して実行される標準的な１次元ＤＣＴ演算を概略的に示す。これらのＮ個の入力値５０に、Ｎ×Ｎ行列の係数値を含むＮ×Ｎ行列６０が掛けられる。図２に概略的に示すように、それぞれの行における係数に対して対応する入力値が掛けられ、それらの乗算結果が合計されて、関連する出力値が作られる。このようにしてＮ個の出力値Ｘ０〜ＸＮ−１７０が生成されるであろう。
【００４４】
それぞれの１次元変換演算に対して多量の乗算が実行されなければならないことが、図２から理解されるであろう。例えば、Ｎが３２である場合を考えると、それぞれの１次元変換演算は３２×３２個の乗算、すなわち１０２４個の乗算を要求するであろう。前述のように、既知のバタフライ技術は乗算の個数を減少させるために用いられることができる。特にＮが３２である場合を再び考えると、既知のバタフライ技術を用いると乗算の個数を３４２に減少させることができる。しかし、ビットイグザクトな結果を達成しつつ、それぞれの１次元変換演算を実行するために要求される乗算の個数をさらに減少化させることが望まれるであろう。
【００４５】
図３Ａは、Ｎ×ＮのＩＤＣＴ行列を一連のより小さい行列に細分化することを可能にするために、逆変換演算に対して説明される実施形態にしたがって採用される因数分解手法を概略的に示す。特に、説明される実施形態によればＮ×ＮのＩＤＣＴ行列１００は効果的に行列１１０により置き換えられる。なお行列１１０は行列１００よりも大きい（すなわち対角線がより長い）が、非ゼロ要素をより少なく含み、通常、行列１１０におけるより多くの係数値は実際にゼロである。行列１１０を通る対角線経路に沿って、いくつかのより小さいＭ×Ｍ行列が定義される。この具体例では、Ｍは４に等しいと仮定され、図示のように一連のＬ４行列１２０が提供され、各Ｌ４行列は前述の形のハンケル行列（すなわち通常の対角線に対して斜交する対角線上の要素がすべて等しくなっている線形相関行列）である。Ｌ４行列１２０の１例における係数の実際値は通常、Ｌ４行列の他の例における値とは異なるであろう。
【００４６】
図示のように、最初のＩＤＣＴ（Ｔ４）行列１３０が提供され、この行列１３０は４×４のサイズのＩＤＣＴ行列である。説明される実施形態に係る装置内に提供されるベース回路は、行列１１０の上部左側における行列から始まるこれらの定義された４×４行列の例１３０および１２０を用いて行列積を反復的に実行するために用いられることができる。しかしベース回路に提供されるＭ個の内部入力値は、供給されるＮ個の入力値に基づいてそれぞれの反復に対して別個に導出されなければならない。図４を参照して後に検討するように、これは、Ｋ個のグループの入力値を生成するために受け取られたＮ個の入力値を並べ替える並べ替え回路を用いることにより達成される。なおここでＫ＝Ｎ／Ｍであり、したがって各グループはＭ個のメンバーを有し、各メンバーは受け取られたＮ個の入力値のうちの１つである。さらに、次に加算器回路は、各セットのＭ個の内部入力値を生成するために、選択されたグループからの対応するメンバーに対して一連の加算演算および減算演算を実行するために用いられる。実行されなければならない要求される加算演算および減算演算は、図３Ａに示す０および＋／−１の行列１０５内で定義される。同様に、ベース回路により生成される内部出力値は、Ｎ個の入力値のＩＤＣＴに対応するＮ個の出力値を生成するために用いられる前に、操作を必要とする。特に、図４を参照して後に検討するように、追加的加算器回路はベース回路により生成された複数セットのＭ個の内部出力値に対して一連の加算演算および減算演算を実行するために用いられる。なおここで、０および＋／−１の値の行列１１５が、要求される加算演算および減算演算を指定する。
【００４７】
図３Ｂは、いかにして同一の基本的な因数分解手法がフォワードＤＣＴ演算を実行するために用いられることができるかを示す。特に、Ｎ×ＮのＦＤＣＴ行列１４０は、同様の構成のより小さいＭ×Ｍ（この場合４×４）の行列を含む行列１５０に効果的に細分化される。特に、一連のＬ４行列１２０が再び提供されるが、この事例では、ＦＤＣＴ４×４（Ｆ４）行列１６０が図３ＡのＩＤＣＴ４×４（Ｔ４）行列１３０に代わって提供される。加えて、図３Ａの例ではＴ４行列の積がベース回路による最初の反復として実行される一方で、ベース回路はＦ４行列の積１６０を最終反復として実行する。再び、０および＋／−１の値の行列１４５が、それぞれの反復に対してベース回路に提供される内部入力値を生成するときに加算器回路により実行される加算演算および減算演算を定義するために用いられ、同様に、０および＋／−１の行列１５５がベース回路により生成される内部出力値を処理するために用いられる追加的加算器回路により要求される加算演算および減算演算を指定するために用いられる。
【００４８】
図３Ａおよび図３Ｂに示す様々な行列の相対的サイズを考え、次に元の行列１００および１４０がＮ×Ｎであると仮定し、さらにＮ＝２ｎ＝４×２ｎ−２であるならば、行列１１０または１５０の幅は４×（３ｎ−３＋３ｎ−４＋…＋３＋１＋１）である。Ｎ＝３２である具体例を考えると、ｎ＝５となり、したがって行列１１０または１５０の幅は４×（９＋３＋１＋１）すなわち５６となる。したがって、行列１１０および１５０のそれぞれは５６×５６の行列となるであろう。その事例では、行列１０５および１４５は３２（横）×５６（縦）となり、行列１１５および１５５は５６（横）×３２（縦）となるであろう。
【００４９】
図４は１つの実施形態に係るデータ処理装置内に提供される構成要素を示すブロック図である。並べ替え回路２００は、各セットのＮ個の入力値を受け取るよう構成され、内部格納器２０５内に格納されるＫ個のグループの入力値を作るために、これらのＮ個の入力値に対して並べ替えを実行するよう構成される。ＫはＮ／Ｍに等しく、したがってそれぞれのグループはＭ個のメンバーを有する。ここで各メンバーは受け取られたＮ個の入力値のうちの１つである。したがって例えばＮが３２でありＭが４である場合、格納器２０５内に８個のグループが存在することであろう。
【００５０】
次に加算器回路２１０が、ベース回路２１５（本明細書ではＬＭ回路とも呼称される）に提供される各セットのＭ個の内部入力値を生成するために用いられる。加算器回路は、選択されたグループからの対応するメンバーに対して演算を行うよう構成され、したがって１つの反復において、選択されたいくつかのグループからのメンバー０に対して演算を実行し得、他の反復ではいくつかのグループからのメンバー１に対して演算を実行し得る。図３Ａおよび図３Ｂを参照して前述したように、行列１０５および１２５は、任意の特定の反復に対して要求される加算演算および減算演算を判定するために、加算器回路により参照される。
【００５１】
逆変換が実行される図３Ａの事例を考えると、第１反復の間、加算器回路は、Ｍ×ＭのＩＤＣＴ行列を形成するＴＭ行列を用いて行列積が実行されるＭ個の内部入力値を生成することが理解されるであろう。図３Ａの具体例に対して、Ｍは４であると仮定され、したがって第１反復の間に加算器回路２１０により生成されるＭ個の内部入力値に対して、ベース回路２１５を用いてＴ４行列１３０による行列積が行われるであろう。係数生成回路２２０はＴ４行列１３０内に含まれる係数の値を生成する。次にベース回路２１５はＭ個の内部出力値を生成するために要求される行列積演算を実行し、このＭ個の内部出力値は追加的加算器回路２２５に導かれるであろう。次に、追加的加算器回路は、格納器２３０内に格納される中間出力値を生成するために行列１１５により定義される加算演算および減算演算を実行する。これらの中間出力値は、Ｋ個のグループの中間出力値を形成すると考えられ得る。ここで再び、各グループはＭ個のメンバーを有し、各メンバーは中間出力値のうちの１つである。格納器２３０は、全部の反復が実行されるときまでに格納器２３０がＮ個の中間出力値の全部によりポピュレートされるよう、ポピュレートされる。
【００５２】
図３Ａの例に戻ると、小さい４×４のＩＤＣＴ変換が実行される第１反復の後、次に一連の行列積が、生成されたセットのＭ個の内部入力値を、様々な線形相関行列１２０により乗算するために、複数の反復にわたって実行されるであろう。図３Ａにおいて、これらの線形相関行列のそれぞれは４×４のハンケル行列の形を取る。それぞれの反復に対して、加算器回路２１０は、各セットの内部入力値を生成するときに実行される適切な加算演算および減算演算を判定するために、行列１０５を参照するであろう。係数生成回路２２０はそれぞれの反復に対して適切な係数値を生成するであろう。同様に、追加的加算器回路２２５は、各反復の間にベース回路により生成される内部出力値に対して実行される適切な加算演算および減算演算を判定するために、行列１１５を参照するであろう。
【００５３】
要求される反復の全部が実行されたときには、格納器２３０はすでにＮ個の内部出力値によりポピュレートされていて、これらの内部出力値はシフトおよび飽和回路２３５に通され、その回路において、シフトおよび飽和演算が、シフトおよび飽和された中間出力値を生成するために、実行される。シフトおよび飽和演算はＮ個の中間出力値の全部が生成された後に１回だけ実行され、これは結果がビットイグザクトであることを保証するように作用し、特に処理を実行する間に複数段階でシフトおよび飽和演算を反復的に実行することにより導入されるであろう丸め誤差が回避されることに注意すべきである。
【００５４】
次にシフトおよび飽和された中間出力値は追加的並べ替え回路２４０に通され、追加的並べ替え回路２４０は、要求されるＮ個の出力値を生成するために、Ｎ個のシフトおよび飽和された中間出力値を並べ替えるよう構成される。追加的並べ替え回路２４０により実行される並べ替えは、入力値に対して並べ替え回路２００により実行された並べ替えに依存する。
【００５５】
図４の回路は、ビデオデータをエンコードする間は空間領域から周波数領域にそのデータを変換するためのフォワード変換を実行するか、またはデータをデコードする間は周波数領域から空間領域にそのデータを変換するための逆変換を実行するよう、構成され得る。並べ替え回路２００および追加的並べ替え回路２４０により実行される並べ替えは、装置がフォワード変換または逆変換を実行するために用いられているかに依存するであろう。同様に、加算器回路２１０および追加的加算器回路２２５により実行される加算演算および減算演算は、フォワード変換が実行されているかまたは逆変換が実行されているかに応じて異なるであろう。
【００５６】
係数生成回路２２０は、逆変換演算を実行するときにはＴ４行列１３０に対する係数を生成する必要があり、またはフォワード変換を実行するときにはＦ４行列１４０に対する係数を生成する必要があるであろう。しかしＬ４行列１２０のそれぞれの例に対して生成される係数は、いくつかの場合（例えば、より大きいＨＥＶＣ行列に対して。そこでは、フォワード行列は逆行列の入れ換えである）において、装置をフォワード変換と逆変換との実行の間で再構成するとき、不変である。したがって、複数反復のＬ４行列積を実行すると、ベース回路の実行はこれらの場合において不変であり、正確に同一の係数が係数生成回路２２０により生成される。
【００５７】
この装置は様々なビデオ規格を実装するためにも用いられることができる。一方、係数生成回路２２０により生成される係数は異なるビデオ規格の間で変動するであろう。それとは対比的に、並べ替え回路２００、加算器回路２１０、追加的加算器回路２２５、および追加的並べ替え回路２４０の基本的演算は通常、ビデオ規格が変わっても影響されることはない。
【００５８】
図５は１つの実施形態に係る加算器回路２１０および追加的加算器回路２２５内に提供される構成要素を示す。この事例ではＭは４に等しいものと仮定される。したがって、Ｋ個のグループのＭ個の入力値が図４の格納器２０５内に格納されたときには、各グループは４つのメンバーを有することが理解されるであろう。この事例において、格納器２０５は、加算器回路２１０の一部を形成すると考えられ、４つのレジスタバンクＶＢ０  ３００、ＶＢ１  ３０５、ＶＢ２  ３１０、およびＶＢ３  ３１５を備え、各レジスタバンクは、グループのそれぞれからの対応するメンバーを格納するための十分なレジスタを有する。したがって、Ｎが３２である例を考えると、８つのグループが存在し、各グループは４つのメンバーを有する。レジスタバンク３００、３０５、３１０、３１５のそれぞれは、８つのグループのそれぞれからの対応するメンバーが格納されることができるよう、８つのレジスタを提供するであろう。
【００５９】
並べ替え回路２００により生成された並べ替えられた入力値は通常、ＲＡＭ内にバッファされ、次に連続的にｉｎ０およびｉｎ１入力を介して（サイクル毎に２つのデータ値）並べ替えられた順序で関連するレジスタバンク３００、３０５、３１０、３１５にロードされる。
【００６０】
対応する２入力加算器３２０、３２５、３３０、３３５はレジスタバンク３００、３０５、３１０、３１５のそれぞれに関連付けられた状態で提供され、図示の実施形態では、各クロックサイクルの間に、これらの加算器のうちの２つはＬ４回路３４０に提供するための内部入力値を生成するために用いられ、その一方で他の２の加算器は所望により、関連付けられたレジスタバンク内に戻るよう供給されて格納される中間値を生成するために用いられ得る。Ｌ４回路３４０により実行される各行列積に対して、４つの内部入力値が要求され、したがって、Ｌ４回路３４０により実行される各行列積に対して要求される入力を生成するために２つのクロックサイクルが費やされる。
【００６１】
１つの実施形態において、様々な加算器回路３２０、３２５、３３０、３３５は、Ｌ４回路３４０により処理される４点の変換へと３２点の変換を細分化するためにバタフライ演算およびカラツバ再帰を実行する。
【００６２】
加算器回路２１０により実行される演算は、この実施形態では、次にＬ４回路３４０の演算が４つのパイプラインステージＰ１からＰ４を占有する状態で、第１パイプラインステージＰ０内で実行される。次に、追加的加算器回路２２５は第６パイプラインステージＰ５を占有する。図示のように、Ｌ４回路３４０の最終ステージはサイクル毎に２つの内部出力値を生成し、これらの内部出力値はレジスタ３４５および３５０内に一時的に格納される。次に、レジスタ３４５内に格納されたそれぞれの値は適切な方法で加算器回路３７５または加算器回路３８０に提供されるであろう。同様に、レジスタ３５０内に格納されたそれぞれの値は適切な方法で加算器回路３８５または加算器回路３９０に提供されるであろう。最初、加算器回路３７５、３８０、３８５、３９０はこれらの値を、関連付けられたレジスタバンクＷＢ０  ３５５、ＷＢ１  ３６０、ＷＢ２  ３６５、およびＷＢ３  ３７０に戻すであろう。次に、加算器回路３７５、３８０、３８５、３９０は、４点Ｌ４変換出力から３２点変換出力を再構築するためにバタフライ演算およびカラツバ再帰を使用し、処理の後のステージにおいて、このことの結果として、２つのレジスタバンク３９２および３９４はＮ個の中間出力値でポピュレートされることとなるであろう。
【００６３】
全部の積がＬ４回路により実行されると、レジスタ３９２および３９４の内容はＮ個の中間出力値を表すであろう。次に、これらの値は、シフトおよび飽和された中間出力値を生成するためのシフトおよび飽和回路３９６および３９８を通るよう導かれ、次に、このシフトおよび飽和された中間出力値は、Ｎ個の出力値に対して要求される最終的な順序に戻るようこれらの値を並べ替えるための追加的並べ替え回路２４０に導かれることができる。
【００６４】
図５の回路は、４の倍数である入力値の個数をサポートするために用いられることができ、１つの特定の実施形態において、入力値の個数は、Ｎ個の入力値が４つの入力値、８個の入力値、１６個の入力値、３２個の入力値、その他となるよう、２の累乗に限定される。Ｎが実際に４に設定される場合は、図５に示すように、バイパス経路が、加算器回路３２０、３２５、３３０、３３５および追加的加算器回路３７５、３８０、３８５、３９０の周りに提供され得る。したがってこの最適化は、ＮがＭに設定されたとき回路を通る低レイテンシ経路を可能にする。しかし、パイプライン経路Ｐ６のシフトおよび飽和ステージは全部の変換サイズに対して依然として用いられるであろう。
【００６５】
複数の加算器回路３２０、３２５、３３０、３３５は、４セットの加算／減算を実行するために並列的に動作するよう、ＳＩＭＤの様式で配列され得る。しかし、１つの実施形態において、加算器回路Ｄ０  ３２０およびＤ２  ３３０の動作は、第１サイクルでは、加算器回路３２０および３３０だけが用いられてＬ４回路に提供するための２つの内部入力値を生成し、一方、次のサイクルでは加算器回路３２５および３３５がＬ４回路に提供するための２つの追加的内部入力値を生成するために用いられるよう、加算器回路３２５および３３５の動作に対して交互配列される。その第２サイクルの間、加算器３２０および３３０が再び用いられるが、第２サイクルでは、それぞれのレジスタバンク３００および３１０に戻るよう導かれるための中間値を生成するであろう。次のサイクルにおいて、加算器３２０および３３０がＬ４回路に内部入力値を提供し、加算器３２５および３３５がそれぞれのレジスタバンク３０５および３１５に戻るよう導かれるための中間値を生成する状態で、４つの加算器の全部が再び用いられ得る。これは、サイクル毎に２つの内部入力値をＬ４回路３４０に提供する一方で並列的に中間的な加算および減算が実行されることを可能にするための、効果的な機構を提供する。出力加算器回路３７５、３８０、３８５、３９０は、ＳＩＭＤ加算演算および減算演算を実行するために同様の様式で構成され得る。
【００６６】
１つの実施形態において、それぞれの提供される入力値は１６ビットのサイズであり、レジスタバンク３００、３０５、３１０、３１５は、加算器回路３２０、３２５、３３０、３３５により実行される加算により生成され得るより大きいサイズのオペランドを収容するために、１８ビットの入力および出力を有する。したがって加算器回路３２０、３２５、３３０、３３５も１８ビットの入力および出力を有する。追加的加算器回路２２５内で、レジスタバンク３５５、３６０、３６５、３７０および加算器回路３７５、３８０、３８５、３９０のそれぞれは、１つの実施形態において、Ｌ４回路３４０内で実行される乗算の結果として生成され得るサイズの内部出力値を収容するために、３２ビットの入力および出力の幅を有する。シフトおよび飽和回路３９６および３９８の動作は、レジスタバンク３９２および３９４から受け取られた関連する３２ビットの入力を取り、１６ビットの出力（すなわち、入力値と同一サイズの出力値）を作る。
【００６７】
図６Ａおよび図６Ｂは１つの実施形態に係る図４の回路の動作を示すフローチャートを提供する。ステップ４００において、Ｎ個の入力値が並べ替え回路２００に提供され、引き続きステップ４０５において、Ｋ個のグループのＭ個の値を作るために並べ替えが実行される（並べ替えは、装置がＦＤＣＴまたはＩＤＣＴを実行するよう構成されるかどうかに依存する）。ステップ４１０において、装置がＩＤＣＴを実行するよう構成されているかどうかが判定される。ＩＤＣＴを実行するよう構成されている場合、処理はステップ４１５に進行し、ステップ４１５において、加算器回路２１０が、ＩＤＣＴ演算が実行されるＭ個の内部入力値を生成するために用いられる。ステップ４２０において、これらのＭ個の内部入力値は、適切な係数値が係数生成回路２２０により提供されたＭ×ＭのＩＤＣＴ行列を用いて行列積を実行するためにベース回路２１５に通される。
【００６８】
次に処理はステップ４２５に進行し、ステップ４２５において、加算器回路２１０は、ハンケル行列による乗算が行われる複数セットのＭ個の内部入力値を生成するために、格納器２０５内の選択されたグループからの対応するメンバーに対して加算演算および減算演算を実行するために用いられる。次にステップ４３０において、各セットの内部入力値は、複数反復の行列積をハンケル行列（ＬＭ線形相関行列とも呼称される）を用いて実行するために、連続的にベース回路２１５に通される。前述のように、係数生成回路２２０は通常、それぞれの反復に対して別個のセットの係数値を生成するであろう。
【００６９】
次に処理はステップ４３５に進行し、ステップ４３５においてＦＤＣＴが実行されているかが判定される。ＦＤＣＴが実行されていない場合、次に処理は直接にステップ４５０に進行する。逆にＦＤＣＴが実行されている場合には、図６Ａに示すようにステップ４１５および４２０はバイパスされ、それに代わってステップ４２５および４３０の実行に引き続きステップ４４０および４４５が次に実行されるであろう。特にステップ４４０において、加算器回路２１０が、Ｍ×ＭのＦＤＣＴ行列を用いてＦＤＣＴ行列積が実行されるＭ個の内部入力値を生成するために用いられる。その後、ステップ４４５において、これらのＭ個の内部入力値はベース回路２１５に通され、次にベース回路２１５は要求される行列積を、ＦＤＣＴ行列を用いて実行する。再び、係数生成回路２２０はＭ×ＭのＦＤＣＴ行列のための適切な係数値を生成する。
【００７０】
ステップ４４５に引き続き、またはＩＤＣＴが実行されている場合には直接的にステップ４３５の後に、処理はステップ４５０に進行し、ステップ４５０において、追加的加算器回路が、Ｎ個の中間出力値を作るために、ベース回路２１５により生成された複数セットのＭ個の内部出力値に対して加算演算および／または減算演算を実行するために用いられる。図６Ｂでは、ステップ４５０はベース回路により実行されるベース演算の全部の反復が実行された後に実行されるものとして示されるが、代替的な実施形態では、追加的加算器回路は、各セットのＭ個の内部出力値に対して、それらの値がベース回路により生成される都度、動作し得ることが理解されるであろう。
【００７１】
ステップ４５０が実行されたならば、格納器２３０はＮ個の中間出力値を含むであろう。ステップ４５５において、シフトおよび飽和回路２３５は、シフトおよび飽和された中間出力値を生成するためにシフトおよび飽和演算を中間出力値に適用する。次に、追加的並べ替え回路２４０はＮ個の出力値を生成するために、シフトおよび飽和回路２３５により提供された出力値を並べ替えるための追加的並べ替え演算を実行する。この時点で、Ｎ個の出力値はＮ個の入力値のビットイグザクトな変換を表すであろう。追加的並べ替え回路２４０により実行される実際の並べ替えは、ＦＤＣＴが実行されているかまたはＩＤＣＴが実行されているかに依存するであろう。
【００７２】
上述の実施形態の機構を用いることにより、現代のビデオ規格（例えばＨＥＶＣ規格など）により要求されるビットイグザクトな結果を保持しつつ、それぞれの１次元変換に対して要求される乗算の個数の顕著な減少化が可能であることが見出された。この技術はエンコードおよびデコードのために用いられ得、Ｎの異なるサイズに拡張可能である。１つの実施形態において、それぞれの１次元変換に対してベース回路２１５により実行される乗算の合計数は３ｎ−１＋３ｎ−２＋…＋９＋Ｚである。ただしＺは≦９であり、Ｎ＝２ｎである。Ｚの値は単一のＭ×Ｍ離散コサイン変換を実行するために要求される乗算の個数に依存し、３２×３２配列（すなわちＮ＝３２）上で動作するよう構成され且つＭ＝４である１つの特定的な実装において、６つの乗算が単一の４×４離散コサイン変換に対して要求される（すなわちＺ＝６）ことが見出された。上記の式から、１２３個の乗算が要求されることとなる。これは、既知の部分的バタフライ手法により要求されるであろう乗算の個数の約１／３である。
【００７３】
要求されるＬＭ行列の反復回数は上述の式から直接的に導かれ得る。特に、Ｍが４に等しく、したがって複数反復のＬ４行列積がベース回路により実行される事例に対して、９個の乗算がそれぞれのＬ４行列積を実装するために要求される。Ｎが３２である場合、上述のように１２３個の乗算が要求されるとき、これは単一の４×４の離散コサイン変換を実行するために要求される６つの乗算を含む。したがって、１１７個の乗算がＬ４行列積の乗算を実装するために要求され、特に、１３反復のＬ４行列が存在し、それぞれが９個の乗算を要求するであろう。
【００７４】
特定の実施形態に関する以下の追加情報が提供される。
【００７５】
逆変換アルゴリズムの説明
このセクションでは、Ｎ点の逆離散コサイン変換演算に対して要求される演算をいかにして計算するかについて説明する。なお点の個数は２の累乗である。まず予測が以下の式
【数１】
2014241585.tif 000003
【数２】
2014241585.tif 000004
のように定義される。
【００７６】
次に、Ｎ点の逆離散コサイン変換ＴＮ（ｃ０，…，ｃＮ−１）は、
【数３】
2014241585.tif 000005
により与えられる行ｉ、列ｊにおける要素を有する行列により定義され得る。実際には、係数ｃｉはｃ（ｋ）＝ｃｏｓ（ｋπ／２Ｎ）の概算された整数または小数の推定値であるが、特定の値を有する係数には依存せず、単に行列が上記の形を有するのみである。以下の行列
【数４】
2014241585.tif 000006
は、小さいＮに対するＴＮを示す。入力ベクトルｘおよび出力ベクトルｙは式ｙ＝ＴＮｘにより関連付けられる。
【００７７】
次に、以下の式
ｑＮ（ｋ）＝ｐ２Ｎ（３ｋ）  これは１と２Ｎ−１との間の奇数である。  （式１）
ｔＮ（ｋ）＝ｓ２Ｎ（３ｋ）                                          （式２）
のように、さらに定義される。２つの並べ替え、ＰＮおよびＱＮは次の式
【数５】
2014241585.tif 000007
【数６】
2014241585.tif 000008
のように定義される。
【００７８】
並べ替えＰＮは線形ベクトルに対する符号付き並べ替えである（パターンをより明らかにするために、説明は複数の行にわたり分割される）。並べ替えＱＮは符号を変化させることなく値の順序を変更することである。
【００７９】
入力出力および係数値を並べ替えること、すなわち
【数７】
2014241585.tif 000009
により、
【数８】
2014241585.tif 000010
となるような新しい並べ替えられた変換
【数９】
2014241585.tif 000011
が与えられる。ハンケル行列がさらに、次の式
【数１０】
2014241585.tif 000012
のように定義されるならば、第１の関係（Ｒ１）は、次の式
【数１１】
2014241585.tif 000013
のようになり、第２の関係（Ｒ２）は、次の式
【数１２】
2014241585.tif 000014
のようになる。関係（Ｒ１）は
【数１３】
2014241585.tif 000015
を
【数１４】
2014241585.tif 000016
およびＬＮ／２に減少させ、引き続きＮ個の加算および減算が行われる。
【００８０】
関係（Ｒ２）はＬＮをＮ／２個の加算に減少させ、引き続きＬＮ／２による３つの乗算の後、引き続きＮ個の加算が行われる。これは係数の減算を含まないが、係数は一定であると仮定され、減算された係数値は予め計算され得る。
【００８１】
Ｎ＝２ｎ≧８に対して、関係（Ｒ１）および（Ｒ２）を反復することは、再帰的に
【数１５】
2014241585.tif 000017
を加算に減少させ、引き続き
【数１６】
2014241585.tif 000018
による１つの乗算とＬ４の形の行列による（３ｎ−３＋…＋１）個の乗算とが行われ、引き続き加算および減算が行われる。
【００８２】
逆変換例
このセクションは、いかにして前のセクションの理論をＮ＝１６の実際的なケースに適用するかについて説明する。
【００８３】
次の入力ベクトルから始めると、次の式
【数１７】
2014241585.tif 000019
は、次の式
【数１８】
2014241585.tif 000020
のように並べ替えられる。並べ替えられたベクトルは、次の式
【数１９】
2014241585.tif 000021
のように、それぞれ４つの要素の４つのグループまたはベクトルに分割される。同様に、これらの係数は次の式
【数２０】
2014241585.tif 000022
のように並べ替えおよびグループ化がなされる。出力ベクトルは次の４つの並べ替えられたグループ、すなわち
【数２１】
2014241585.tif 000023
に分割される。関係Ｒ１を適用することにより、次の式
【数２２】
2014241585.tif 000024
が与えられる。関係Ｒ１およびＲ２を適用することにより次の式
【数２３】
2014241585.tif 000025
が与えられる。これは、並べ替えを１つの
【数２４】
2014241585.tif 000026
および４つのＬ４の演算に減少させる。
【００８４】
フォワード変換アルゴリズムの説明
次に、Ｎ点の逆離散コサイン変換ＴＮ（ｃ０，…，ｃＮ−１）＝ＮＴＮ−１は、次の式
【数２５】
2014241585.tif 000027
により与えられる行ｉ、列ｊにおける要素を有する行列により定義され得る。
【数２６】
2014241585.tif 000028
と定義し、入力並べ替えおよび出力並べ替えを交換し、関係（Ｒ１）を反転させると、関係（Ｒ３）が次の式
【数２７】
2014241585.tif 000029
のように得られる。Ｎ＝２ｎ≧８に対して、関係（Ｒ３）および（Ｒ２）を反復することは、再帰的に
【数２８】
2014241585.tif 000030
を加算および減算に減少させ、引き続き
【数２９】
2014241585.tif 000031
による１つの乗算とＬ４の形の行列による（３ｎ−３＋…＋１）個の乗算とが行われ、引き続き加算が行われる。この関係は同様に逆変換の例にも適用され得る。
【００８５】
実装例
以下のＣコード例は、逆変換ＴＮおよびフォワード変換ＦＮを、それぞれ関数ｆａｃｔ＿ｉｄｃｔ＿１ｄ＿ｉ１６（）および関数ｆａｃｔ＿ｆｄｃｔ＿１ｄ＿ｉ１６（）において実装する。
【００８６】
／＊  予測ｐ（）を計算する
＊
＊  ｐ（２×ｋ×ｎ＋ｒ）＝ｒ            ０＜＝ｒ＜ｎである場合
＊                        ２×ｎ−ｒ    ｎ＜＝ｒ＜２×ｎである場合
＊／
ｓｔａｔｉｃ  ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｐ＿ｎ（ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｋ，  ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｎ）
｛
ｋ＝ｋ％（２×ｎ）；
ｉｆ  （ｋ＞＝ｎ）
｛
ｋ＝２×ｎ−ｋ；
｝
ｒｅｔｕｒｎ  ｋ；
｝
／＊  符号ｓ（）を計算する
＊
＊  ｓ（４×ｋ×ｎ＋ｒ）＝＋１    ０≦ｒ＜ｎまたは３×ｎ＜ｒ＜４×ｎである場合
＊                        ０      ｒ＝＝ｎまたはｒ＝＝３×ｎである場合
＊                        −１    ｎ＜ｒ＜２×ｎである場合
＊／
ｓｔａｔｉｃ  ｉｎｔ  ｓ＿ｎ（ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｋ，  ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｎ）
｛
ｉｎｔ  ｓ＝＋１；
ｋ＝ｋ％（４×ｎ）；
ｉｆ  （ｋ＝＝ｎ  ｜｜  ｋ＝＝３×ｎ）
｛
ｓ＝０；
｝
ｅｌｓｅ  ｉｆ  （ｋ＞＝ｎ  ＆＆  ｋ＜３×ｎ）
｛
ｓ＝−１；
｝
ｒｅｔｕｒｎ  ｓ；
｝
／＊  線形相関
＊
＊  ｙ［ｉ］＝ｘ［０］×ｃ［ｉ］＋…＋ｘ［ｎ−１］×ｃ［ｉ＋ｎ−１］
＊
＊  ｎ×ｎの相関は再帰により４×４の演算に細分化される。
＊／
ｓｔａｔｉｃ  ｖｏｉｄ  Ｌ＿ｎ（
ｉｎｔ３２＿ｔ  ＊ｙ，                ／／出力（ｎ個の要素）
ｃｏｎｓｔ  ｉｎｔ３２＿ｔ  ＊ｘ，    ／／入力（ｎ個の要素）
ｃｏｎｓｔ  ｉｎｔ３２＿ｔ  ＊ｃ，    ／／係数（２×ｎ−１個の要素）
ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｎ          ／／サイズ
）
｛
ａｓｓｅｒｔ（ｎ＞＝４）；
ｉｆ  （ｎ＝＝４）
｛
／＊  Ｌ４を９個の乗算で実装する
＊  係数は事前計算され得る
＊／
ｉｎｔ３２＿ｔ  ｖ０＝（ｘ［０］＋ｘ［１］）×（ｃ［１］−ｃ［３］）；
ｉｎｔ３２＿ｔ  ｖ１＝（ｘ［２］＋ｘ［３］）×（ｃ［５］−ｃ［３］）；
ｉｎｔ３２＿ｔ  ｖ２＝（ｘ［０］＋ｘ［１］＋ｘ［２］＋ｘ［３］）×ｃ［３］；
ｉｎｔ３２＿ｔ  ｗ０＝ｖ０＋ｖ２；
ｉｎｔ３２＿ｔ  ｗ１＝ｖ１＋ｖ２；
ｖ０＝ｘ［０］×（（ｃ［０］−ｃ［２］）−（ｃ［１］−ｃ［３］））；
ｖ１＝ｘ［２］×（（ｃ［４］−ｃ［２］）−（ｃ［５］−ｃ［３］））；
ｖ２＝（ｘ［０］＋ｘ［２］）×（ｃ［２］−ｃ［３］）；
ｙ［０］＝ｗ０＋ｖ０＋ｖ２；
ｙ［２］＝ｗ１＋ｖ１＋ｖ２；
ｖ０＝ｘ［１］×（（ｃ［２］−ｃ［４］）−（ｃ［１］−ｃ［３］））；
ｖ１＝ｘ［３］×（（ｃ［６］−ｃ［４］）−（ｃ［５］−ｃ［３］））；
ｖ２＝（ｘ［１］＋ｘ［３］）×（ｃ［４］−ｃ［３］）；
ｙ［１］＝ｗ０＋ｖ０＋ｖ２；
ｙ［３］＝ｗ１＋ｖ１＋ｖ２；
｝
ｅｌｓｅ  ／＊  ｎ＞４  ＊／
｛
ｉｎｔ３２＿ｔ  ｘ２［ＭＡＸ＿ＩＴＲＡＮＳ＿ＳＩＺＥ／４］；
ｉｎｔ３２＿ｔ  ｃ０［ＭＡＸ＿ＩＴＲＡＮＳ＿ＳＩＺＥ／２］；
ｉｎｔ３２＿ｔ  ｃ１［ＭＡＸ＿ＩＴＲＡＮＳ＿ＳＩＺＥ／２］；
ｉｎｔ３２＿ｔ  ｙ２［ＭＡＸ＿ＩＴＲＡＮＳ＿ＳＩＺＥ／４］；
ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｉ；
ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｎ２＝ｎ＞＞１；
／＊  再帰の前に加算減算  ＊／
ｆｏｒ  （ｉ＝０；  ｉ＜ｎ２；  ｉ＋＋）
｛
ｘ２［ｉ］＝ｘ［ｉ］＋ｘ［ｎ２＋ｉ］；
｝
／＊  係数は事前計算され得る  ＊／
ｆｏｒ  （ｉ＝０；  ｉ＜ｎ−１；  ｉ＋＋）
｛
ｃ０［ｉ］＝ｃ［ｉ］−ｃ［ｎ２＋ｉ］；
ｃ１［ｉ］＝ｃ［ｎ＋ｉ］−ｃ［ｎ２＋ｉ］；
｝
／＊ 再帰 ＊／
Ｌ＿ｎ（ｙ２，ｘ２，ｃ＋ｎ２，ｎ２）；    ／／  ｘ［ｉ］＋ｘ［（ｎ／２）＋ｉ］に対してＬ４
Ｌ＿ｎ（ｙ，ｘ，ｃ０，ｎ２）；            ／／  ｘ［ｉ］に対してＬ４
Ｌ＿ｎ（ｙ＋ｎ２，ｘ＋ｎ２，ｃ１，ｎ２）；／／  ｘ［（ｎ／２）＋ｉ］に対してＬ４
／＊  再帰後に追加的な加算／減算  ＊／
ｆｏｒ  （ｉ＝０；  ｉ＜ｎ２；  ｉ＋＋）
｛
ｙ［ｉ］＝ｙ［ｉ］＋ｙ２［ｉ］；
ｙ［ｎ２＋ｉ］＝ｙ［ｎ２＋ｉ］＋ｙ２［ｉ］；
｝
｝
｝
／＊  行列Ｔ〜＿ｎ（ｃ）を並べ替えられた入力および出力を用いて計算する  ＊／
ｓｔａｔｉｃ  ｖｏｉｄ  ＴＴ＿ｎ（
ｉｎｔ３２＿ｔ  ＊ｙ，              ／／  出力
ｃｏｎｓｔ  ｉｎｔ３２＿ｔ  ＊ｘ，  ／／  入力
ｃｏｎｓｔ  ｉｎｔ３２＿ｔ  ＊ｃ，  ／／  係数
ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｎ        ／／サイズ
）
｛
／＊  因数分解されたバージョン  ＊／
ａｓｓｅｒｔ（ｎ＞＝４）；
ｉｆ  （ｎ＝＝４）
｛
／＊  ６つの乗算における４点ＩＤＣＴ  ＊／
ｉｎｔ３２＿ｔ  ｖ０，ｖ１，ｖ２；
ａｓｓｅｒｔ（ｃ［０］＝＝ｃ［１］）；
ｖ０＝ｘ［２］×ｃ［２］；
ｖ１＝ｘ［３］×ｃ［３］；
ｖ２＝（ｘ［０］＋ｘ［１］）×ｃ［０］；
ｙ［０］＝ｖ２＋ｖ０＋ｖ１；
ｙ［２］＝ｖ２−ｖ０−ｖ１；
ｖ０＝ｘ［２］×ｃ［３］；
ｖ１＝ｘ［３］×ｃ［２］；
ｖ２＝（ｘ［０］−ｘ［１］）×ｃ［０］；
ｙ［１］＝ｖ２＋ｖ０−ｖ１；
ｙ［３］＝ｖ２−ｖ０＋ｖ１；
｝
ｅｌｓｅ  ／＊  ｎ＞４  ＊／
｛
ｉｎｔ３２＿ｔ  ｃ１［ＭＡＸ＿ＩＴＲＡＮＳ＿ＳＩＺＥ］；  ／／拡張された相関
ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｉ；
ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｎ２  ＝  ｎ＞＞１；
／＊  係数は事前計算され得る  ＊／
ｆｏｒ  （ｉ＝０；  ｉ＜ｎ２；  ｉ＋＋）
｛
ｃ１［ｉ］＝ｃ［ｎ２＋ｉ］；
ｃ１［ｎ２＋ｉ］＝−ｃ１［ｉ］；
｝
／＊ 再帰 ＊／
ＴＴ＿ｎ（ｙ，ｘ，ｃ，ｎ２）；
Ｌ＿ｎ（ｙ＋ｎ２，ｘ＋ｎ２，ｃ１，ｎ２）；
／＊  再帰後に追加的な加算／減算  ＊／
ｆｏｒ  （ｉ＝０；  ｉ＜ｎ２；  ｉ＋＋）
｛
ｉｎｔ３２＿ｔ  ｙ０＝ｙ［ｉ］；
ｉｎｔ３２＿ｔ  ｙ１＝ｙ［ｉ＋ｎ２］；
ｙ［ｉ］＝ｙ０＋ｙ１；
ｙ［ｉ＋ｎ２］＝ｙ０−ｙ１；
｝
｝
｝
／＊  行列Ｆ〜＿ｎ（ｃ）を並べ替えられた入力および出力を用いて計算する  ＊／
ｓｔａｔｉｃ  ｖｏｉｄ  ＦＦ＿ｎ（
ｉｎｔ３２＿ｔ  ＊ｙ，              ／／出力
ｉｎｔ３２＿ｔ  ＊ｘ，              ／／入力（バタフライにより変更）
ｃｏｎｓｔ  ｉｎｔ３２＿ｔ  ＊ｃ，  ／／係数
ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｎ        ／／サイズ
）
｛
／＊  因数分解されたバージョン  ＊／
ａｓｓｅｒｔ（ｎ＞＝４）；
ｉｆ  （ｎ＝＝４）
｛
／＊  ６つの乗算における４点ＦＤＣＴ  ＊／
ｉｎｔ３２＿ｔ  ｖ０，ｖ１，ｖ２；
ａｓｓｅｒｔ（ｃ［０］＝＝ｃ［１］）；
ｖ０＝（ｘ［０］−ｘ［２］）×ｃ［２］；
ｖ１＝（ｘ［１］−ｘ［３］）×ｃ［３］；
ｖ２＝（ｘ［０］＋ｘ［１］＋ｘ［２］＋ｘ［３］）×ｃ［０］；
ｙ［０］＝ｖ２；
ｙ［２］＝ｖ０＋ｖ１；
ｖ０＝（ｘ［０］−ｘ［２］）×ｃ［３］；
ｖ１＝（ｘ［１］−ｘ［３］）×ｃ［２］；
ｖ２＝（ｘ［０］−ｘ［１］＋ｘ［２］−ｘ［３］）×ｃ［０］；
ｙ［１］＝ｖ２；
ｙ［３］＝ｖ０−ｖ１；
｝
ｅｌｓｅ  ／＊  ｎ＞４  ＊／
｛
ｉｎｔ３２＿ｔ  ｃ１［ＭＡＸ＿ＩＴＲＡＮＳ＿ＳＩＺＥ］；  ／／拡張された相関
ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｉ；
ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｎ２  ＝  ｎ＞＞１；
／＊  係数は事前計算され得る  ＊／
ｆｏｒ  （ｉ＝０；  ｉ＜ｎ２；  ｉ＋＋）
｛
ｃ１［ｉ］＝ｃ［ｎ２＋ｉ］；
ｃ１［ｎ２＋ｉ］＝−ｃ１［ｉ］；
｝
／＊  再帰の前に加算減算  ＊／
ｆｏｒ  （ｉ＝０；  ｉ＜ｎ２；  ｉ＋＋）
｛
ｉｎｔ３２＿ｔ  ｘ０＝ｘ［ｉ］；
ｉｎｔ３２＿ｔ  ｘ１＝ｘ［ｉ＋ｎ２］；
ｘ［ｉ］＝ｘ０＋ｘ１；
ｘ［ｉ＋ｎ２］＝ｘ０−ｘ１；
｝
／＊ 再帰 ＊／
ＦＦ＿ｎ（ｙ，ｘ，ｃ，ｎ２）；
Ｌ＿ｎ（ｙ＋ｎ２，ｘ＋ｎ２，ｃ１，ｎ２）；
｝
｝
／＊  因数分解された１次元線形整数ＩＤＣＴ  ＊／
ｖｏｉｄ  ｆａｃｔ＿ｉｄｃｔ＿１ｄ＿ｉ１６
（
ｉｎｔ１６＿ｔ  ＊ｙ，                    ／／出力
ｃｏｎｓｔ  ｉｎｔ１６＿ｔ  ＊ｘ，        ／／入力
ｃｏｎｓｔ  ｉｎｔ１６＿ｔ  ＊ｃ，        ／／係数
ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｎ              ／／サイズ
ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｓｈｉｆｔ，    ／／右シフト
ｉｎｔ３２＿ｔ  Ｒ                        ／／丸め
）
｛
ｉｎｔ３２＿ｔ  Ｙ［ＭＡＸ＿ＩＴＲＡＮＳ＿ＳＩＺＥ］；
ｉｎｔ３２＿ｔ  Ｘ［ＭＡＸ＿ＩＴＲＡＮＳ＿ＳＩＺＥ］；
ｉｎｔ３２＿ｔ  Ｃ［ＭＡＸ＿ＩＴＲＡＮＳ＿ＳＩＺＥ］；
ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｉ；
ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｋ；
ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｍ；
ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｑ；
ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｐ；
ｉｎｔ  ｓ；
／＊  入力に符号付き並べ替えを適用する  ＊／
Ｘ［０］＝ｘ［０］；
Ｃ［０］＝ｃ［０］；
ｍ＝ｎ／２；
ｆｏｒ  （ｋ＝１；ｋ＜ｎ；ｋ＝ｋ＜＜１，ｍ＝ｍ＞＞１）
｛
ｑ＝１；
ｆｏｒ  （ｉ＝０；ｉ＜ｋ；ｉ＋＋）
｛
ｐ＝ｍ×ｐ＿ｎ（ｑ，２×ｋ）；
ｓ＝ｓ＿ｎ（ｑ，２×ｋ）；
Ｘ［ｋ＋ｉ］＝（ｓ＞０）？ｘ［ｐ］：−ｘ［ｐ］；
Ｃ［ｋ＋ｉ］＝（ｓ＞０）？ｃ［ｐ］：−ｃ［ｐ］；
ｑ＝（ｑ×３）％（８×ｎ）；
｝
｝
／＊  並べ替えられた変換Ｔ〜＿ｎを計算する  ＊／
ＴＴ＿ｎ（Ｙ，Ｘ，Ｃ，ｎ）；  ／／  ＸおよびＹが変更されたことに注意
／＊  出力に（符号なし）並べ替えを適用する  ＊／
ｑ＝１；
ｆｏｒ  （ｉ＝０；ｉ＜ｎ；ｉ＋＋）
｛
ｐ＝ｐ＿ｎ（ｑ，  ２×ｎ）＞＞１；
ｙ［ｐ］＝（Ｙ［ｉ］＋Ｒ）＞＞ｓｈｉｆｔ；
ｑ＝（ｑ×３）％（８×ｎ）；
｝
｝
／＊  因数分解された１次元線形整数ＦＤＣＴ  ＊／
ｖｏｉｄ  ｆａｃｔ＿ｆｄｃｔ＿１ｄ＿ｉ１６
（
ｉｎｔ１６＿ｔ  ＊ｙ，                ／／出力
ｃｏｎｓｔ  ｉｎｔ１６＿ｔ  ＊ｘ，    ／／入力
ｃｏｎｓｔ  ｉｎｔ１６＿ｔ  ＊ｃ，    ／／係数
ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｎ          ／／サイズ
ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｓｈｉｆｔ，／／右シフト
ｉｎｔ３２＿ｔ  Ｒ                    ／／丸め
）
｛
ｉｎｔ３２＿ｔ  Ｙ［ＭＡＸ＿ＩＴＲＡＮＳ＿ＳＩＺＥ］；
ｉｎｔ３２＿ｔ  Ｘ［ＭＡＸ＿ＩＴＲＡＮＳ＿ＳＩＺＥ］；
ｉｎｔ３２＿ｔ  Ｃ［ＭＡＸ＿ＩＴＲＡＮＳ＿ＳＩＺＥ］；
ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｉ；
ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｋ；
ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｍ；
ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｑ；
ｕｎｓｉｇｎｅｄ  ｉｎｔ  ｐ；
ｉｎｔ  ｓ；
／＊  入力に（符号なし）並べ替えを適用する  ＊／
ｑ＝１；
ｆｏｒ  （ｉ＝０；ｉ＜ｎ；ｉ＋＋）
｛
ｐ＝ｐ＿ｎ（ｑ，  ２×ｎ）＞＞１；
Ｘ［ｉ］＝ｘ［ｐ］；
ｑ＝（ｑ×３）％（８×ｎ）；
｝
／＊  係数に符号付き並べ替えを適用する  ＊／
Ｃ［０］＝ｃ［０］；
ｍ＝ｎ／２；
ｆｏｒ  （ｋ＝１；ｋ＜ｎ；ｋ＝ｋ＜＜１，ｍ＝ｍ＞＞１）
｛
ｑ＝１；
ｆｏｒ  （ｉ＝０；ｉ＜ｋ；ｉ＋＋）
｛
ｐ＝ｍ×ｐ＿ｎ（ｑ，２×ｋ）；
ｓ＝ｓ＿ｎ（ｑ，２×ｋ）；
Ｃ［ｋ＋ｉ］＝（ｓ＞０）？ｃ［ｐ］：−ｃ［ｐ］；
ｑ＝（ｑ×３）％（８×ｎ）；
｝
｝
／＊  並べ替えられた変換Ｆ〜＿ｎを計算する  ＊／
ＦＦ＿ｎ（Ｙ，Ｘ，Ｃ，ｎ）；
／＊  出力に符号付き並べ替えを適用する  ＊／
ｙ［０］＝（Ｙ［０］＋Ｒ）＞＞ｓｈｉｆｔ；
ｍ＝ｎ／２；
ｆｏｒ  （ｋ＝１；ｋ＜ｎ；ｋ＝ｋ＜＜１，ｍ＝ｍ＞＞１）
｛
ｑ＝１；
ｆｏｒ  （ｉ＝０；ｉ＜ｋ；ｉ＋＋）
｛
ｐ＝ｍ×ｐ＿ｎ（ｑ，２×ｋ）；
ｓ＝ｓ＿ｎ（ｑ，２×ｋ）；
ｉｎｔ３２＿ｔ  ｙｙ＝（ｓ＞０）？Ｙ［ｋ＋ｉ］：−Ｙ［ｋ＋ｉ］；
ｙ［ｐ］＝（ｙｙ＋Ｒ）＞＞ｓｈｉｆｔ；
ｑ＝（ｑ×３）％（８×ｎ）；
｝
｝
｝
【００８７】
上述の実施形態から、係る実施形態は、異なるサイズのＮに対してフォワード変換および逆変換の両方を実行するための拡大可能な機構を提供し、それにより変換を実行するために要求される乗算の個数に顕著な減少化がもたらされることと、係る実施形態はビットイグザクトな結果を作ることと、が理解されるであろう。
【００８８】
本発明の特定の実施形態について本明細書で説明してきたが、本発明がそれらの特定の実施形態に限定されないこと、および多数の改変例が本発明の範囲から逸脱することなく可能であることは明白であろう。例えば、以下の従属請求項の特徴の様々な組み合わせは、本発明の範囲から逸脱することなく、独立請求項の特徴と組み合わせることが可能である。
【図１】
2014241585.tif 000032
【図２】
2014241585.tif 000033
【図３Ａ】
2014241585.tif 000034
【図３Ｂ】
2014241585.tif 000035
【図４】
2014241585.tif 000036
【図５】
2014241585.tif 000037
【図６Ａ】
2014241585.tif 000038
【図６Ｂ】
2014241585.tif 000039
【外国語明細書】
2014241585000001.pdf