第零章 前言

MP3 ( MPEG I Audio Layer 3 )是大家而熟能詳的一種音樂格式,此聲音壓縮技術近年橫掃全球,但由於大部分壓縮及解壓縮工作,都是利用軟體來處理,可攜性不佳。之前以帶領學弟將 MP3 Decoder 成功的 Real Time 的實現在 TI-C6x ( TMS320C6201 ) 的單晶片上。

本專題將利用C6X實現 MP3 Decoder 達到Real Time的經驗與基礎,再進一步的想要利用更低功率( Low Power )更有經濟化( Low Cost )的數位訊號處理C54x ( TMS320C54 ),來達到MP3解壓縮、播放的角色,並要求達到Real-time的境界,等於是把個人電腦中的CPU以及音效卡結合起來,以更小的體積、更低的價格來做同樣的功能。

下圖便是我們想要做的整個系統的略圖。

 

 

 

 

 

 

第一章 MP3 壓縮原理

第一節 MP3的壓縮原理

MPEG-1的標準中,將聲音訊號的壓縮標準分為三個層級,分別是MPEG LAYER 1MPEG LAYER 2MPEG LAYER 3。影音光碟就有採用LAYER 2的標準,至於MP3 就是MPEG LAYER3的產物了。進一步說,MP3就是把現在的CD音樂檔,以壓縮的方式儲存,透過CPU強大的運算能力,以軟體解壓縮的方式,就可以在電腦上聽到好聽的音樂了。至於這其中的壓縮效果有多好?我們可以如此計算,普通的CD音樂大約是以44.1khz的頻率、十六位元取樣,平均每分鐘音樂就要花掉 44100×16×2stereo×60的容量,大約是十MB的儲存空間。以目前每片光碟650MB的容量來說,一片CD的儲存量約在六十五到七十五分鐘之間。

MP3就是將這些樂曲透過壓縮的方式,增加更多的儲存量。由於MP3的壓縮比大約在十到十二倍之間,一分鐘的樂曲透過MP3壓縮,只要一 MB左右的儲存空間,換言之每片光碟可以儲存六百五十到七百五十分鐘的音樂,更重要的是,即使壓縮比如此驚人,音樂的品質依然直追CD,因為利用人類聽覺遮蔽的緣故,以現在一般個人電腦CPU的速度解壓MP3時,人類聽覺沒辦法分辨壓縮後有所不同,讓使用者不須為了追求高容量,而犧牲了聽的品質。

MPEG/audio 的壓縮,其Sampling rate可分為3244.148kHz,支援的聲道有monophonicdual-monophonicstereo modejoint-stero modeError detectionCRC error detection code還有Ancillary data。其主要是利用人類聽覺系統在某些情況下,會產生聽覺的mask而無法分辨出量化的雜訊,根據實驗亦發現人類聽覺有一個極限,也就是人類所能聽到的聲音頻率約為20Hz20kHz之間,critical band並不能完整呈現出人類聽覺系統的聽覺特性,因為人類聽覺系統依據頻率來分辨聲音能量,所以任何頻率的雜訊遮罩只和其限定頻寬內附近的信號能量有關。MPEG/audio將聲音信號分配成接近critical bandsubband,然後依據每一個subband的聽覺量化雜訊程度來量化。最有效的壓縮,即是將不需要的聽覺量化雜訊移除。也就是我們可以將一大部份人類聽覺系統所無法察覺的資料移除,以減少資料檔案達到壓縮的效果。

它利用到了人耳遮蔽效應,將人耳聽不到或不易辨認部份省去,只針對我們可辨認的音頻作壓縮,因此可以減少壓縮的量,使壓縮後的檔案變得很小。

首先經過時間跟頻率的mapping,再經過psychoacoustic model的處理,最後再經過量化及編碼等步驟而達成壓縮的目的。詳細的流程圖如圖一。

當然,解壓縮的過程便是壓縮過程的相反程序。接著我們先討論關於 MP3 檔案標頭的表示。

 

 

第二節 MP3 Bitstream

MP3 主要的位元資料格式主要如圖二。

每一個欄位的意義與其數字分別解釋如下

Header

參考附錄A

CRC:

Header 中如果宣告包含 CRC 碼,則在有16 bit check code。反之在Header 中指出沒有包含 CRC 碼,則在 Header 後便緊接著 Side information

Side Information

如果為 Signal channel 則有 17 byte ( 136 bit )information,若為雙聲道則將會有 34 byte ( 256 bit ) information 。而這些資料流的訊息( Side information 存放了該選擇哪一個 table 作為解碼的 table以及跳出的位元代表法。 (ESC-bit “linbits”)

Main data

主要資料存放的地方。但是其資料流也包含了 Main data 何處結束或是資料何處開始的指標以及長度的資料。

這些為MP3 資料的格式。在程式的編寫方面可以參考附錄B的解碼流程圖。

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

 

第二章 TMS320C54x 簡介

第一節 硬體介紹

如圖三,為TMSC5402 DSP 的圖示。我們可以知道裡面主要擁有

  1. 16 K words on-chip SRAM
  2. Two McBSPs
  3. 6-channel DMA interfacing with Host Port and McBSPs
  4. 100MIPS
  5. Fixed Point Processor

 

第二節 特殊指令的介紹

  1. Symmertric FIR Filter ( 指令為 FIRS )

  2.  

     

    可以將兩的數相加後乘另一個數,只需一個 Cycle

    例如:

    y= a0 * ( x(0) + x(7) ) ………..得到y 只需要一個 Cycle

    這樣的指令將有助於我們在做 MDCT , DCT 時可減低Clock 數。

  3. Polynomial evaluation ( 指令為 POLY )

  4.  

     

    可以用於多項式的算法。這樣將可以減低我們計算 sine or cos 值時所需要的 clock 數。

  5. Code book search ( 指令有 STRCD , SACCD,SRCCD )
這是為在做Code book search 所可以利用的指令。
 
 
第三章 實驗(模擬)過程與結果

方法一.

Float Point運算改為 Fixed Point 運算

因為 C54x Fixed Point processor 。但是MP3 卻是一個使 Float Point 的程式過程。其中不管是 MDCT 或是DCT scale , quantion 的方式都是以浮點作為運算。,雖然它也可以模擬floating point的運算,但是速度上卻會慢了很多。因此便要利用先左移然後運算後在右移的方式。把程式改寫成為適合用於 Fixed Point 運算。

 

 

 

 

 

 

 

 

這樣的方法就可以在程式中都使用 Fixed Point 的運算了。

 

結果:

利用上述的方法所運算處理的速度將會是浮點運算時間的數十倍快。但是使用這樣的方法卻會犧牲了音質。但這樣的音質大概能為一般人所接受,在圖五可以看出兩個分別使用 Floating Point Fixed Point 所得結果的聲音的波形。我們可以看得出兩者的波形確實相差不遠。

 

 

圖六

方法二.

在模擬的過程中發現一項很好玩得事情。如果在 .mp3 的檔案中有資料錯誤時。則後面的 Frame 都會解錯!

經過研讀後才發現, MPEG/Layer III main data 可能會有彼此相依的情形發生。如圖六。

結果:

main data 可以放在前一個 Frame 或是之前Frame 裡面。因此如果有一個 Frame 發生了錯誤,不能夠一下子就把這個 Frame 丟掉,因為這將會造成資料的遺失。應該在確定此 Frame 並沒有在被其他 main data

才可以丟棄。

 

 

 

 

 

 

 

 

 

 

第四章 結論與心得

這次的 C54x 儀器拿到的比較晚,所以並還不能完全的可以將整個的 MP3 Decoder 實現在晶片上執行。不過我想從拿到儀器到現在也花了不少工夫。

因為C54x 的許多C語言的定義與一般我們寫的VC 定義有很大的出入,如表二。

再加上程式中常常利用C的語法來取一個一個的bit。這使用了大量的左移或是右移。如果宣告的形態不同,將造成許多的錯誤。致力於這個地方已經得到結果了,現在已經可以利用 VC 相對的位元數模擬 C5x 相同位元數可以執行的程式了。

但因為在使用 C54x 並還為非常的熟習,因此仍有許多奇奇怪怪的 Bug 至今還為解決。但我想在暑假的時間可以再好好的將這些 Bug 解決後,便可以利用其 C54x 單晶片的特性將以加速,以其可以達到 Real Time 的速度。

 

 

 

 

 

 

 

 

 

 

 

 

附錄A:

MPEG/Audio Header

MPEG 對於 Audio 的資料有著很細微的規定。它一共分三個層級(Layer 1Layer 2 Layer 3),每個層級所用的解碼運算法以及解碼器的設置都不一樣。所以,它的檔頭資料就變得很重要。以下就大略的解釋一下 MPEG-1 定義的 Audio FrameHeader Information

MPEG-1 Audio Frame Header bit 為單位,順序定義如表一。

一檔頭位元配置表


Bit

位置

Bit number
代表意義
分別表示的代表意義
0-11 12 bit 同步字元 1111 1111 1111
12 1 bit 演算法flag 1:MPEG-1 0: 保留
13-14 2 bit Layer flag 11layer I 10layer II 

01layer III 00:保留

15 1 bit 糾錯flag 1:未添加多餘度

0:添加了錯誤碼保護多餘度

16-19 4 bits 碼率 flag 

( 與立體聲,聯合立體聲,雙通道,單通道等具體編碼模式無關 )

索引 Layer

I

Layer II Layer III
0000 Free for-mat Free for-mat Free for-mat
0001 32 32 32
0010 64 48 40
0011 96 56 48
0100 128 64 56
0101 160 80 64
0110 192 96 80
0111 224 112 96
1000 256 128 112
1001 288 160 128
1010 320 192 160
1011 352 224 192
1100 384 256 224
1101 416 320 256
1110 448 384 320
20-21 2 bit 取樣頻率 0044.1 kHz 0148 kHz 1032 kHz 11:保留
22 1 bit 緩衝flag 1 frame內包含將平均碼率調至取樣率的附加 Slot ( layer I 4 bytes layerII layer III 1 bytes,僅用於 44.1 kHz 取樣率

0 不包含:

23 1 bit 專用位元 留待私用( 此位元將來 ISO 也不用 )
24-25 2 bit 模式 flag 00:立體聲 01 聯合立體聲 ( layer Ilayer II 為強度立體聲, layer III 可以為和差立體聲 ) 10 2 channel 11 1 channel
26-27 2 bit 模式擴充 僅用於聯合立體聲模式。

layer Ilayer II,指示哪些子帶用強度立體聲編碼 ( 其餘為立體聲編碼 )

004-31 018-31 

1012-31 1116-31 

layer III,若上面的 flag 採用聯合立體聲編碼方法,那這兩個 bits 就用來指出是採用哪一種立體聲編碼。而強度立體聲及和差立體聲的頻帶範圍則隱含在演算法中。

索引 強度立體聲編碼 和差立體聲編碼
00 No No
01 Yes no
10 No Yes
11 Yes Yes
28 1 bit 版權 flag 0:無版權要求

1:有版權保護

29 1 bit 原版 flag 0bit stream 是複製的

1bit stream 是原始的

30-31 2 bit 加重標識 指示應用哪一種去加重措施。

00:編碼時未加重

0150/15 微秒加重

10:保留

11 CCITTJ.17

以下我們來看一個例子,假設我們開啟某個MP3檔案,其檔頭為:

FF FB 90 44 00 00 .............

我們先將它轉成二進位格式

1111 1111 1111 1011 1001 0000 0100 0100 0000 0000 ..............

再對照表一,我們就可以很明白的看出這個mp3 file的基本資訊。

1111 1111 1111 是同步字元,1011 表示是 MPEG-1layer III encoding,未添加任何糾錯資料,1001 表示這個檔案是以 128 kbps sample 的,1001 則說明了檔案 sample rate 32 kHz0000 表示是立體聲模式,0100 表示無版權的原始檔案,編碼時未加重。

 

附錄B

MP3資料格式與解碼流程:

根據 MP3 Encoder 所利用的數個壓縮原理,我們的解碼過程可以縮是利用壓縮的相反方向來進行的。