離散餘弦變換是與傅立葉變換相關的一種變換，類似於離散傅立葉變換，但是隻使用實數。離散餘弦變換相當於一個長度大概是它兩倍的離散傅立葉變換，這個離散傅立葉變換是對一個實偶函式進行的（因為一個實偶函式的傅立葉變換仍然是一個實偶函式），在有些變形裡面需要將輸入或者輸出的位置移動半個單位（DCT 有 8 種標準型別，其中 4 種是常見的）。 最常用的一種離散餘弦變換的型別是下面給出的第二種型別，通常我們所說的離散餘弦變換指的就是這種。它的逆，也就是下面給出的第三種類型，通常相應的被稱為「反離散餘弦變換」，「逆離散餘弦變換」或者「IDCT」。 有兩個相關的變換，一個是離散正弦變換，它相當於一個長度大概是它兩倍的實奇函式的離散傅立葉變換；另一個是改進的離散餘弦變換，它相當於對交疊的資料進行離散餘弦變換。 應用 離散餘弦變換，尤其是它的第二種型別，經常被訊號處理和影像處理使用，用於對訊號和影像進行有損資料壓縮。這是由於離散餘弦變換具有很強的「能量集中」特性：大多數的訊號資訊（包括聲音和影像）往往集中在離散餘弦變換後的低頻部分，而且當訊號具有接近馬爾可夫過程的統計特性時，離散餘弦變換的去相關性接近於 KL 變換（變換 它具有最優的去相關性）的效能。 例如，在影像編碼標準 JPEG 與視訊編碼標準 MJPEG 和 MPEG 的各個標準中都使用了離散餘弦變換。在這些標準制中都使用了二維的第二種型別離散餘弦變換，並將結果進行量化之後進行熵編碼。這時對應第二種型別離散餘弦變換中的 n 通常是 8，並用該公式對每個 8x8 塊的每行進行變換，然後每列進行變換。得到的是一個 8x8 的變換系數矩陣。其中（00）位置的元素就是直流分量，矩陣中的其他元素根據其位置表示不同頻率的交流分量。 一個類似的變換，改進的離散餘弦變換被用在高階音訊編碼、Vorbis 和 MP3 音訊壓縮當中。 離散餘弦變換也經常被用來使用譜方法來解偏微分方程，這時候離散餘弦變換的不同的變數對應著陣列兩端不同的奇 偶邊界條件。 常見應用 音訊訊號處理 音訊編碼、音訊資料壓縮（有損和無損）、環繞聲、迴音消除、音位辨識、時域混疊消除法（TDAC） 數位音訊 數位廣播 數位聲音廣播（DAB） 語音處理 語音編碼、語音辨識、語音活性檢測（VAD） 數位電話 VoIP、行動電話、視訊通話 生物辨識技術 指紋定向、臉部辨識系統、生物辨識浮水印、掌紋辨識 人臉檢測 形式化定義 形式上來看，離散餘弦變換是一個線性的可逆函式 FRnrightarrow Rn 其中 R 是實數集，或者等價的說一個 n times n 的方陣。離散餘弦變換有幾種變形的形式， 它們都是根據下面的某一個公式把 n 個實數 x_0ldots x_n1 變換到另外 n 個實數 f_0ldots f_n1 的操作。 DCTI f_m frac 12 x_0 1m x_n1 sum_k1n2 x_k cos left frac pin1 m k right 有些人認為應該將 x_0 和 x_n1 乘以 sqrt 2，相應的將 f_0 和 f_n1 乘以 frac 1sqrt 2。這樣做的結果是這種 DCTI 矩陣變為了正交矩陣（再乘一個係數的話），但是這樣就不能直接和一個實偶離散傅立葉變換對應了。 一個 n5 的對實數 abcde 的 DCTI 型變換等價於一個 8 點的對實數 abcdedcb（偶對稱）的 DFT 變換，結果再除以 2（對應的，DCTIIDCTIV 相對等價的 DFT 有一個半個抽樣的位移）。需要指出的是，DCTI 不適用於 n2 的情況（其它的 DCT 型別都適用於所有的整數 n）。 所以，DCTI 暗示的邊界條件是：x_k 相對於 k0 點偶對稱，並且相對於 kn1 點偶對稱； 對 f_m 的情況也類似。 DCTII f_m sum_k0n1 x_k cos left frac pin m left kfrac 12right right DCTII 大概是最常用的一種形式，通常直接被稱為 DCT。 有些人更進一步的將 f_0 再乘以 frac 1sqrt 2（參見下面的 DCTIII 型的對應修改）。這將使得 DCTII 成為正交矩陣（再乘一個係數的話），但是這樣就不能直接和一個有半個抽樣位移的實偶離散傅立葉變換對應了。 所以，DCTII 暗示的邊界條件是：x_k 相對於 kfrac 12 點偶對稱，並且相對於 knfrac 12 點奇對稱； 對 f_m 相對於 m0 點偶對稱，並且相對於 mn 點奇對稱。 DCTIII f_m frac 12 x_0 sum_k1n1 x_k cos left frac pin left mfrac 12right k right 因為這是 DCTII 的逆變換（再乘一個係數的話），這種變形通常被簡單的稱為逆離散餘弦變換。 有些人更進一步的將 x_0 再乘以 sqrt 2（參見上面的 DCTII 型的對應修改），這將使得 DCTIII 成為正交矩陣（再乘一個係數的話），但是這樣就不能直接和一個結果有半個抽樣位移的實偶離散傅立葉變換對應了。 所以，DCTIII 暗示的邊界條件是：x_k 相對於 k0 點偶對稱，並且相對於 kn 點奇對稱； 對 f_m 相對於 mfrac 12 點偶對稱，並且相對於 mnfrac 12 點偶對稱。 DCTIV f_m sum_k0n1 x_k cos left frac pin left mfrac 12right left kfrac 12right right DCTIV 對應的矩陣是正交矩陣（再乘一個係數的話）。 一種 DCTIV 的變形，將不同的變換的資料重疊起來，被稱為改進的離散餘弦變換。 DCTIV 暗示的邊界條件是：x_k 相對於 kfrac 12 點偶對稱，並且相對於 knfrac 12 點奇對稱；對 f_m 類似。 DCT VVIII 上面提到的 DCT IIV 是和偶數階的實偶 DFT 對應的。原則上，還有四種 DCT 變換（Martucci 1994）是和奇數階的實偶 DFT 對應的，它們在分母中都有一個 nfrac 12 的係數。但是在實際應用中，這幾種變型很少被用到。 最平凡的和奇數階的實偶 DFT 對應的 DCT 是 1 階的 DCT（1 也是奇數），可以說變換 只是乘上一個係數 a 而已，對應於 DCTV 的長度為 1 的狀況。 反變換 DCTI 的反變換是把 DCTI 乘以係數 frac 2n1。 DCTIV 的反變換是把 DCTIV 乘以係數 frac 2n。 DCTII 的反變換是把 DCTIII 乘以係數 frac 2n，反之亦然。 和離散傅立葉變換類似，變化前面的歸一化係數僅僅是常規而已，改變這個係數並不改變變換的性質。例如，有些人喜歡在 DCTII 變換的前面乘以 sqrt frac 2n，這樣反變換從形式上就和變換更相似，而不需要另外的歸一化係數。 計算 儘管直接使用公式進行變換需要進行 O n2 次操作，但是和快速傅立葉變換類似，我們有複雜度為 O n log n 的快速演算法，這就是常常被稱做蝶形變換的一種分解演算法。另外一種方法是透過快速傅立葉變換來計算 DCT，這時候需要 O n 的預操作和後操作。 以下簡單介紹兩種利用 DFT 來計算 DCTII 的方法 方法一 Rao R K Yip P 1990 Discrete Cosine Transform Algorithms Advantages Applications 1st ed Academic Press 令輸入訊號為 x n n01N1 並將 y n 以 x n 在 2N12 處對稱表示 即 y nleftbegin matrix x n mbox if n01N1 x 2Nn1 mbox if nNN12N1 end matrixright 此時令 W_2N 表示 efrac j2pi2N 則 y n 之 DFT 為 Y m Sigma_n02N1 y n W_2Nnm 將 Y m 做以下化簡 begin align Y m sum_n0N1 y n W_2Nnm sum_nN2N1 y n W_2Nnm sum_n0N1 y n W_2Nnm sum_nN2N1 x 2Nn1 W_2Nnm sum_n0N1 y n W_2Nnm sum_n0N1 x n W_2N2Nn1 m sum_n0N1 x nW_2NnmW_2Nn1 m m012N1 end align 此時兩側同乘 frac 12 W_2Nm2 可得 frac 12 W_2Nm2 Y m sum_n0N1 x ncos 2n1frac mpi2N m01N1 此時右式即為欲求之 DCT 轉換，而左式可藉由 2N 點數的 DFT 來計算，使用快速演演算法的情況下，運算之時間複雜度為 O NlogN 方法二 On the Computation of the Discrete Cosine Transform 1978 June 1 IEEE Journals Magazine IEEE Xplore httpsieeexploreieeeorgdocument1094144 第二個方法由 Narasimha 與 Peterson 在 1978 年提出，此方法係藉由巧妙的編排 y n 來達成，首先令 y nx 2n 並且 y N1nx 2n1 n01frac N21 此時 X m 可化簡為 X m sum_n0N21 y ncos frac 4n1 mpi2N sum_n0N21 y Nn1cos frac 4n3 mpi2N m01N1 令第二項之 n 改為 nN1n，則兩式可合併為 X msum_n0N1 y ncos frac 4n1 mpi2N m01N1 右側為對 y n 之 N 點的 scaled DFT 因此，X mRe Z m，其中 Z mW_4Nm Y mW_4Nmsum_n0N1 y n W_Nnm m01N1 其中 Y m 是對 y n 之 N 點的 DFT，並且可以簡單的驗證 Z m 具有如下性質 Z NmjZ m 而因 y n 為實數輸入， 因此欲求之 X m Re Z m ， X Nm Im Z m m01frac N2 在使用 FFT 快速演演算法的情況下，運算之時間複雜度同樣為 O NlogN 但此方法較方法一直接運算 2N 點數的 DFT 快上約 2 倍。 參考 K R Rao and P Yip 離散餘弦變換：演算法、優點和應用（Discrete Cosine Transform Algorithms Advantages Applications） Academic Press Boston 1990 A V Oppenheim R W Schafer and J R Buck 時間離散訊號處理 DiscreteTime Signal Processing second edition PrenticeHall New Jersey 1999 S A Martucci 對稱卷積和離散正弦餘弦變換 Symmetric convolution and the discrete sine and cosine transforms IEEE Trans Sig Processing SP42 10381051 1994 Matteo Frigo and Steven G Johnson FFTW httpwwwfftworg 一個免費的 C 語言庫 GPL，可以計算 DCTIIV 的 1 維到多維的任意大小的變換 M Frigo and S G Johnson FFTW3 的設計和實現， Proceedings of the IEEE 93 2 216231 2005 On the Computation of the Discrete Cosine Transform 1978 June 1 IEEE Journals Magazine IEEE Xplore httpsieeexploreieeeorgdocument1094144 外部連結 離散餘弦變換 Category 數字訊號處理 Category 數學分析 Category 變換編碼