離散コサイン変換
X k = 1 2 x 0 + ∑ n = 1 N − 2 x n cos ( π N − 1 n k ) + ( − 1 ) k 2 x N − 1 {\displaystyle X_{k}={\frac {1}{2}}x_{0}+\sum _{n=1}^{N-2}x_{n}\cos \!\left({\frac {\pi }{N-1}}nk\right)+{\frac {(-1)^{k}}{2}}x_{N-1}}
フーリエ変換や他の類似の変換と同じように式全体にかかる定数係数にはばらつきがあり、文献やライブラリによっては、DFTとの対応からこの式を 2 倍したものや、逆変換との対称性から {2/(N−1)} 倍したものによって定義している場合もあるので注意を要する。また、x0 と xN−1 の項を 2 倍し、対応して X0 と XN−1 を 2 倍していることもある。
上記の公式を直接使うと、計算量は O(N) となるが、高速フーリエ変換 (FFT) と同様の技法を使って、計算量を O(N logN) に減らせる。また、計算量 O(N) の事前処理と事後処理を加えることで、FFTそのものを使ってもDCTを計算できる。
当然ながら、ふつうは、最も効率がいいのはDCT専用のアルゴリズムであり、FFTはそれに及ばない(例外については後述する)。とはいうものの、DCTに特化したアルゴリズム(少なくとも2の冪乗個のデータに関しては、現在知られている中で最も計算量の少ないものを含め)は通常、FFTのアルゴリズムと密接に関連している。というのも、DCTは本質的には偶である実数データに対するDFTであるから、高速DCTのアルゴリズムの設計には、FFTを元にして、データの対称性に基づき冗長な計算を減らすことができる。この設計は自動化もできる (Frigo & Johnson, 2005)。クーリー・テューキーのアルゴリズム(英語版)に基づくものが最も一般的だが、FFTのアルゴリズムならこれに限らず何でも用いることができる。たとえば、ウィノグラードのアルゴリズム (Winograd algorithm) を用いると、加算の回数が増える代わりに乗算の回数を最小化することができ、一般的には効率があがる。同様なアルゴリズムは Feig & Winograd (1992) によってもDCT向きに提唱されている。
DCTは、有限数列を、余弦関数数列 cos(nk) を基底とする一次結合(つまり、適切な周波数と振幅のコサインカーブの和)の係数に変換する。余弦関数は実数に対しては実数を返すので、実数列に対してはDCT係数も実数列となる。
これは、離散フーリエ変換 (DFT: discrete Fourier transform) が、実数に対しても複素数を返す exp(ink) を使うため、実数列に対しても複素数列となるのと大きな違いである。なお、DFTも偶関数数列に対しては実係数を返す、つまりコサイン成分のみとなるが、DCTはy軸で折り返して偶関数化してDFTすることと等価であり、実際にそう計算することが多い。
DCTでは、係数が実数になる上、特定の成分への集中度があがる。JPEGなどの画像圧縮、AACやMP3、ATRACといった音声圧縮、デジタルフィルタ等広い範囲で用いられている。
逆変換を逆離散コサイン変換(英: inverse discrete cosine transform (IDCT))と呼ぶ。