概念介紹
改進離散餘弦變換(Modified Discrete Cosine Transform , MDCT )是由離散餘弦變換(Discrete Cosine Transform , DCT)改進而來,Princen J和Bradley A於1986年首次提出雛形,這種線性矩陣變換改善了分塊變換必然存在的邊界噪聲,是時域混疊對消(Time Domain Aliasing Cancellation , TDAC)技術的主要組成部分。MDCT憑藉其在消除邊界噪聲、改善信號質量方面的優越性,作為一種良好的時頻分析工具,廣泛套用於各種寬頻高質量音頻框架中。
MDCT也是編解碼系統中計算複雜度最高的三大模組之一,與一般的DCT相比,MDCT是一種非對稱的變換形式。雖然它只是一種一維的變換,但其N點到N/2點、N/2點到N點的變換形式增加了算法的複雜度。MDCT是感知音頻編解碼標準框架中一個運算量比較大的模組,它的功能在於把編解碼過程中的樣本進行從時域到頻域、從頻域到時域的轉換,以便於編碼壓縮處理或者是可以使信號能夠實時的播放。在整個編解碼系統中,它們都具有很重要的地位,是運算量最複雜的模組之一。
定義
給定一維序列 ,而 表示其變換後得到的頻域序列。對於由M個採樣點構成的每一個塊組,可以只對M個實數值數據進行編碼。因此,仍然只有M個獨立的變換係數需要傳輸,50%重疊變換的編碼性能並未降低。這裡,不考慮窗函式及規一化係數,且N=2M,MDCT及其逆變換(IMDCT)簡化定義為:
特性
MDCT作為DCT的改進,它具有一些與離散餘弦變換不同的性質:
(1) MDCT不屬於正交變換,而由於其非正交特性,提高了變換效率。
(2) 不滿足帕斯瓦爾定理(Parseval’s theorem),當圖3-2中輸入信號 滿足:
n=0,1,...,N/2-1,。
MDCT得到的頻域係數為零,時間域的能量不等於頻域的能量。
(3)MDCT與其它的正交變換,如DFT、DCT、DST等一樣,具有能量聚集的特點,可以進行頻譜分析。
快速算法
在實際的硬體中,雖然MDCT的餘弦函式值可以通過查表的方式來解決,但是公式內的雙層嵌套循環仍然需要進行大量的計算處理,不適用於實時系統。為解決這個問題,採用了MDCT快速算法。MDCT快速算法的發展過程中,普遍採用了基於N/2點FFT、基於N/4點FFT,以及基於DCT的快速算法。
對於N點MDCT,直接實現時每個頻域值需N次乘法和(N-1)次加法,總直接計算複雜度為 次乘法,[(N-1)×N/2]次加法。隨視窗長度成平方級增加,並且需要龐大的存儲塊來作為查找表。
這三種算法中,基於DCT的運算量與基於FFT的運算量相當,但數據流向不規則,控制較複雜;利用N/2點FFT核計算N點MDCT時只用到了FFT變換結果的實部,造成一定的資源浪費;相對應地,採用N/4點FFT核的快速算法,則同時利用FFT複數結果的實部和虛部,提高了數據計算的效率。因而,對於2的整數次冪長度的MDCT計算普遍採用了基於N/4點的FFT。
直接算法
對於N點MDCT,遞歸實現時每個頻域值需N次乘法和〔N-1)次加法,總直接計算複雜度為 次乘法,[(N-1) xN/2]次加法。隨視窗長度成平方級增加,並且需要龐大的存儲塊來作為查找表,這不適用於實時系統。以MP3 "long“類型視窗為例,即N為36時,輸入44.1khz採樣的5khz和1khz雙弦信號的前36個採樣點為例,如圖1(a),利用MATILAB可以得到信號經過MDCT及其逆變換後的波形結果;圖1(b)是N為256時的輸入數據、MDCT及其逆變換結果波形,圖中可以明顯看出MDCT數據的低頻聚集特點。但是由於直接計算運算量太大,所以具體實現中很少使用。
基於FFT算法
FFT是提出最早,套用最廣泛也是最基本的快速算法。MDCT計算同其他所有DCT變換一樣,因為它們的變換基核餘弦函式cos(x)為指數函式exp(-jx)的實部,經過相應的預處理都可以由標準FFT算法來計算。可以採用N/2點或N/4點FFT核來實現MDCT的快速計算。然而,利用N/2點FFT核計算N點MDCT時只用到了FFT變換結果的實部,造成一定的資源浪費;相對應地,採用N/4點FFT核的快速算法,則同時利用結果的實部和虛部,提高了數據計算的利用率。
令
則對於 ,
因此,輸入序列 ,經過
(1) 複數序列: ,即次複數序列的實部和虛部分別為輸入序列的偶序列和奇序列數據,並且奇序列數據倒序取反。
(2) 預旋轉:
(3) N/4點FFT:
(4) 校正旋轉:
四個步驟後,最後分離實部和虛部,得到N/2點數據。
MDCT分別附加相應的預處理和後處理步驟,從而可以通過N/4點的Modified DFT(步驟2、3、4)實現了N點的MDCT。
基於FFT算法的MDCT快速算法最大的優點就是快速、效率高,基於N/4點FFT可將整個計算過程的僅需實數乘法和實數加法。但這種算法也有自身的局限:
第一,對輸入信號長度有一定的限制,如基2的FFT算法輸入數據長度必須滿足N=,而對於MP3,規定的數據塊長度N為36或12,顯然不是2的整數次冪,因而不能夠為MP3提供有效的算法。
第二,對資源的耗費大。FFT運算的基本單元是蝶形運算單元,1個基2蝶形運算由1個復乘和2個復加組成,而每個復乘法由2次實加法和4次實乘法完成,每個復加法由2次實加法完成,即共4次實乘法與6次實加法。由於採用同址計算,因此每個蝶形單元需要多個乘法器和加法器,若考慮到運算速度採用並列疊代或陣列處理,多個蝶形單元並行運算,資源的耗費則更多。
第三,控制較複雜。如何準確、快速的計算出地址,如何正確存取數據,如何正確控制計算流程,這些都影響著運算的正確運行,由於在FFT運算過程中需要混序或變址,以及大量的RAM、ROM,這些都使得控制較複雜。
基於DCT算法
基於DCT算法相對比於FFT,信號能量更加集中,且只需要實數計算,這些算法都是將輸入數據進行一定的預處理後,用DCT快速算法快速計算,最後再進行後處理,便可算出最終結果。
當M=N/2時,,套用三角函式的和差化積公式可得:
其中,n,k=0,1,...,M-1。
DCT的快速算法分為兩種:間接算法和直接算法。間接算法是利用DCT和DFT、 DHT等正交變換之間的關係,用DFT或DHT快速算法來計算DCT,最初的DCT快速算法基本上都是建立在FFT基礎上的。間接算法過程簡單,主要工作是處理算法間的轉換。直接算法包括DCT變換矩陣分解,遞歸算法兩種技術,不同之處在於矩陣分解是利用稀疏矩陣分解法將變換矩陣分解,而遞歸算法是由較低階DCT矩陣遞歸產生較高階DCT矩陣,可以說遞歸算法是分解算法的逆算法。這裡基於DCT的算法指的是基於DCT的直接算法。