DIY之樂:基于PIC32的以太網(wǎng)音箱設(shè)計案例,硬件框圖、器件選型、數(shù)據(jù)結(jié)構(gòu)、軟件流程
2相關(guān)技術(shù)和原理
2.1相關(guān)技術(shù)
2.1.1 MP3
MP3全稱是動態(tài)影像專家壓縮標(biāo)準音頻層面3(Moving Picture Experts Group Audio Layer III)。是當(dāng)今較流行的一種數(shù)字音頻編碼和有損壓縮格式,它設(shè)計用來大幅度地降低音頻數(shù)據(jù)量,而對于大多數(shù)用戶來說重放的音質(zhì)與最初的不壓縮音頻相比沒 有明顯的下降。它是在1991年由位于德國埃爾朗根的研究組織Fraunhofer-Gesellschaft的一組工程師發(fā)明和標(biāo)準化的。
使用PCM信號進行MP3壓縮時,以1152個PCM采樣值為單位,封裝成具有固定長度的MP3數(shù)據(jù)幀,幀是MP3文件的最小組成單位。在解碼時,利用數(shù)據(jù)幀里的信息就可以恢復(fù)出1152個PCM采樣值。這1152個采樣值被分為2個粒度組,每個粒度組包含576個采樣值。一個MP3數(shù)據(jù)幀分為5個部分:幀頭、CRC校驗值、邊信息、主數(shù)據(jù)、附加數(shù)據(jù)。
數(shù)據(jù)流的同步以及幀頭信息的讀取MP3數(shù)據(jù)流的同步以幀為單位,每一幀的幀頭都包含同步信息。這個同步信息是連續(xù)的12比特的‘1’組成。MP3音頻解碼過程中的第一步就是使解碼器與輸入數(shù)據(jù)流同步。在啟動解碼器后,可以通過搜索數(shù)據(jù)流中的12比特長的同步字來完成。在取得同步以后跟著的數(shù)據(jù)就是幀頭信息,包括采樣率、填充位、比特率等信息。
主數(shù)據(jù)的讀取在MP3編碼過程中使用了比特池技術(shù),所以當(dāng)前幀的主數(shù)據(jù)不一定全部都在當(dāng)前幀中,在解碼過程中,必須結(jié)合主數(shù)據(jù)開始指針的值來確定主數(shù)據(jù)的開始位置。主數(shù)據(jù)包含的數(shù)據(jù)有縮放因子、哈夫曼數(shù)據(jù)及附加數(shù)據(jù)。這些字段在主數(shù)據(jù)中有固定的格式。
哈夫曼解碼和反量化在MP3編碼過程中,根據(jù)心理聲學(xué)模型的輸出,對離散余弦變換的輸出樣本以粒度為單位進行的量化和分配,再對量化的結(jié)果進行哈夫曼編碼。量化和編碼主要是通過循環(huán)迭代完成的,循環(huán)模塊分為三層來描述,最高層為幀循環(huán),它調(diào)用外層迭代循環(huán),而外層迭代循環(huán)又調(diào)用內(nèi)層迭代循環(huán)。但在解碼過程中,哈夫曼解碼和反量化過程是分開實現(xiàn)的。每個粒度組的頻率線都是用不同的哈夫曼表來進行編碼的,因此在解碼過程中,需要采用不同的解碼方法。反量化頻譜過程就是基于所得到的哈夫曼解碼數(shù)據(jù),根據(jù)逆量化全縮放公式和幀邊信息,對于不同的窗類型采用不同的公式以恢復(fù)576個頻率線的真實值。
反量化過程中得出的頻譜值不是按相同順序排列的。在編碼的MDCT過程中,對于長窗產(chǎn)生的頻譜值先按子帶然后按頻率排列;對于短窗,產(chǎn)生的頻譜值按子帶、窗、頻率的順序排列。為了提供哈夫曼編碼效率,短窗中的數(shù)據(jù)被重新排列,按照子帶、頻率、窗的順序排列。解碼時,重排序及時將短窗中的頻譜值重新排列。同樣,在編碼的MDCT過程中,為了得到更好的頻域特性,對長窗對應(yīng)每個子帶進行了去混疊處理,為了得到正確的音頻信號,在解碼時必須對長窗對應(yīng)的子帶進行混疊重建。
逆向離散余弦變換主要是使用逆向離散余弦變換的公式,對反量化得出的信號進行變換。逆向離散余弦變換的計算十分復(fù)雜,為了提高效率,可以對計算做一些優(yōu)化。
頻率反轉(zhuǎn)和子帶合成頻率反轉(zhuǎn)是對逆向離散余弦變換的輸出值中的奇數(shù)號子帶(0到31號子帶中的1,3,5,...,31)中的奇數(shù)號樣本值(每個子帶中的 0到17號樣本值的1,3,5,...,17號樣本值)進行反相處理,用來補償編碼時為提高離散余弦變換效率而進行的頻率反轉(zhuǎn)。子帶合成濾波器將32個帶寬相等的子帶中的頻域信號反變換成時域信號。子帶合成是逆向離散余弦變換后的一個通道中32個子帶的樣值,經(jīng)過一系列的計算還原出32個PCM數(shù)字音頻信號的過程。子帶合成過程先將32個子帶樣值進行逆向離散余弦變換,生成64個中間值,將這64個中間值轉(zhuǎn)入到一個長為1024點的類似先進先出FIFO的緩存,再在這1024個值中抽取一半,構(gòu)成一個512個值的矢量,再進行加窗運算,最后將加窗結(jié)果進行疊加生成32個時域輸出。
DIY機械鍵盤相關(guān)社區(qū):機械鍵盤DIY
模擬信號相關(guān)文章:什么是模擬信號
數(shù)字通信相關(guān)文章:數(shù)字通信原理
評論