[an error occurred while processing this directive] [an error occurred while processing this directive]

DCT: 離散コサイン変換/逆変換

Jpeg や mp3 など、メディアの圧縮で必須になる技術です。 ここでは、変換と逆変換が対応している証明をします。

離散コサイン変換の定義

Web 上に 離散コサイン変換の式が色々出ているのですが、いくつかバリエーションがあってわかりにくいです。 ここでは、matlab のサイトに乗っているものを採用します。(変換、逆変換ともに係数 Ckが入るものです) まず、離散コサイン順変換です。

ここで、Ck は、次で定義されます。

次に、逆離散コサイン変換です。

ループ変数が n にしてあることに注意してください。この Ck は、上と同様の定義です。

順変換と逆変換が対応する証明

ここでは、上記の DCT と、逆DCT が対応することを、式変形で証明してみます。
FFT の変換/逆変換とよく似ていますが、ポイントは、Ckがうまく消えて、xn だけが残る部分です。
まずは、逆変換の式から始めます。

Xnに、順変換の式を代入してみます。

定数と Ckをくくり出します。

Σの順番を変えます。(Σの範囲がどちらも 0〜N-1 で独立しているので、変えても大丈夫です)

cos の積和変換公式を使って、cos のかけ算を足し算に変換します。

一応、cos の積和を復習しておきます。
まずはcos の加法定理二つです。

これを両辺足し算すると、積和の変換公式が得られます。


Ckを展開して除去します。Ckは k=0 の場合のみ値が異なるので、とりあえずk=0 の場合も1 として計算し、後から k=0 の場合の差分 (1/2) を引き算します。

n=0 の場合の値を計算すると、-1 になります。

さらに、k についてのΣは、以下のように計算できます。

前半の cos (m+n+1)*k*Π は、以下のように計算できます。


この値は、(m+n+1) が偶数のときは、ちょうと打ち消し合って0 になります。 (m+n+1) が奇数のときは、k=k0 の時と k=N-1-k0 の時とで、ちょうど符号が違う関係になっています。 なので、全部足すと、k=0 の時のみが残り、1になります。

こちらは (m+n+1) のケースとほぼ同じなのですが、m=n の場合のみ、どんな k に対しても cos の値が 1 となるので、合計値は N になります。
値を計算します。

最終的に、きれいに xn が残りました。

[an error occurred while processing this directive]