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