離散コサイン変換

離散コサイン変換で フーリエ級数と同様のシミュレーション を実施します. 離散コサイン変換はJPEGなど,
広く用いられています. ここでは変換そのものを体感しましょう.

原信の選択

定数 頂点
2頂点 3頂点
台形 傾斜
ランダム

離散コサイン変換の実行


0th
1st, 2nd 3rd, 4th
5th, 6th 7th

スペクトルの合成

0 ⇒

解説

本プログラムでは8点の離散コサイン変換を実行します. 原信のデータ系列\(Y\), 離散コサイン変換\(H_n\)とすれば
スペクトル系列\(S\)の算出は(1)となります\(\left(n=8\right)\).

\(\large{S=H_n Y} \qquad (1)\)
\(\large{ Y= \begin{bmatrix} y\left(0\right) \\ y\left(1\right) \\ y\left(2\right) \\ \vdots \\ y\left(n-1\right) \\ \end{bmatrix} }\)

離散コサイン変換\(H_n\)(\(n×n\)行列)の各行は基底の係数列です. DCTには4種あり, \(H_n\)の要素\(H_n\left(k, j\right)\)と逆変換
の要素\(H_n^{-1}\left(k, j\right)\)は(2)〜(7)で定義されます(\(k,j\): 行, 列のインデックス).

DCT-T

\(\large{H_n\left(k, j\right)=H_n^{-1}\left(k, j\right)}\) \(\large{=\sqrt \frac{2}{n-1} c_1(k) c_1(j) \cos \left(\pi \frac{kj}{n-1} \right)} \qquad (2)\)

DCT-U

\(\large{H_n\left(k, j\right)}\) \(\large{=\sqrt \frac{2}{n} c(k) \cos \left(\pi \frac{k(2j+1)}{2n} \right)} \qquad (3)\)
\(\large{H_n^{-1}\left(k, j\right)}\) \(\large{=\sqrt \frac{2}{n} c(j) \cos \left(\pi \frac{(2k+1)j}{2n} \right)} \qquad (4)\)

DCT-V

\(\large{H_n\left(k, j\right)}\) \(\large{=\sqrt \frac{2}{n} c(j) \cos \left(\pi \frac{(2k+1)j}{2n} \right)} \qquad (5)\)
\(\large{H_n^{-1}\left(k, j\right)}\) \(\large{=\sqrt \frac{2}{n} c(k) \cos \left(\pi \frac{k(2j+1)}{2n} \right)} \qquad (6)\)

DCT-W

\(\large{H_n\left(k, j\right)=H_n^{-1}\left(k, j\right)}\) \(\large{=\sqrt \frac{2}{n} \cos \left(\pi \frac{(2k+1)(2j+1)}{4n} \right)} \qquad (7)\)


\(\left(0 \leqq k \lt n, \quad 0 \leqq j \lt n\right)\)

\(\large{c_1\left(i\right)= \begin{eqnarray} \left\{ \begin{array}{l} \frac{1}{\sqrt 2} \qquad (i=0,n-1) \\ 1 \qquad (0 \lt i \lt n-1) \\ \end{array} \right. \end{eqnarray} }\)
\(\large{c\left(i\right)= \begin{eqnarray} \left\{ \begin{array}{l} \frac{1}{\sqrt 2} \qquad (i=0,n) \\ 1 \qquad (0 \lt i \lt n) \\ \end{array} \right. \end{eqnarray} }\)

通常, DCT-Uが使われ, DCT-UとDCT-Vは行と列が入れ換えられた形式で互いに変換, 逆変換の関係となります.
他に, \(y(0)\)と\(y(7)\)で出現する段差は\(c_1(i),c(i)\)によるものです. 変換と逆変換にある係数\(\sqrt \frac{2}{n}\)ですが, 変換と
逆変換で元の信号の大きさに戻るのであれば, 変換時の係数を\(1\)とし逆変換時の係数は\(2/n\), あるいはこの逆と
しても構いません. 変換対としては係数の積が\(2/n\)であれば任意の組み合わせが可能ですが, 通常, 上記のように
変換, 逆変換のいずれも\(\sqrt \frac{2}{n}\)として利用します.