版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)
文檔簡介
上海大學(xué)2014?2015學(xué)年冬季學(xué)期研究生實驗報告課程名稱:DSP技術(shù)及其應(yīng)用課程編號:07S009005題目:MP3語音壓縮的DS以計與實現(xiàn)研究生:學(xué)號:評語:成績:任課教師:評閱日期:MP3語音壓縮的DSP設(shè)計與實現(xiàn)2014年12月25日一、實驗要求與目的1、實驗要求:對單聲道、采樣率、16位量化精度的音頻信號進行壓縮,實現(xiàn)*mp3格式的數(shù)據(jù)結(jié)構(gòu)。2、實驗?zāi)康模菏煜ふ莆誐atlabR2010a軟件的使用,及音頻信號的采集與處理;學(xué)習(xí)掌握C語言,并熟悉掌握VS2013的仿真與調(diào)試;熟悉掌握軟件的仿真與調(diào)試;熟悉掌握PCM、WAV以及MP3等音頻信號的數(shù)據(jù)結(jié)構(gòu);熟悉掌握MP3壓縮的原理;二、實驗設(shè)備與環(huán)境本實驗采用的硬件環(huán)境為:宏基筆記本電腦,2.2GHzPentium(R)Dual-CoreCPU,i3處理器,2.00G內(nèi)存,32位Windows7操作系統(tǒng)。使用的軟件有:MatlabR2010aMicrosoftVisualStudio2013以及。其中在中,仿真目標芯片選型為:Genericdevice-->GenericC64xxDeviceo三、整體實驗方案設(shè)計本實驗主要包括以下三個部分:〔1〕Matlab錄音:在Matlab平臺,利用其自帶的波形記錄函數(shù)wavecord函數(shù)錄制單通道、16位分辨率、采樣率為44.1K音頻信號,并保存為wav格式音頻文件〔10秒〕;〔2〕Matlab壓縮:在Matlab平臺,利用lamb工具,即mp3write函數(shù),對音頻進行mp3壓縮〔僅作為CCS的參考〕?!?〕CCS〔VS2013〕壓縮:1、利用fread函數(shù)讀取WAV文件,并解析其頭部信息;2、利用fread函數(shù)讀取一幀MP3對應(yīng)的576個PCM數(shù)據(jù)(1152個采樣值);3、對576個PCM數(shù)據(jù)進行多相濾波器,將其分成32個頻寬大小相同的子頻帶,即變換為18*32個樣本數(shù)據(jù)。4、進行MDCT變換,將分成的32個子帶信號進一步細分,產(chǎn)生32*18=576個頻線輸出。5、對MDCT輸出的信號,經(jīng)過失真控制環(huán)和量化率控制環(huán),即量化器的處理,最終實現(xiàn)信號的非線性量化。6、由霍夫曼編碼(Huffmancode)做最后壓縮處理,壓縮后得到一個記錄每個符號代表的字符申的編碼表以及一連申由符號組成的信息內(nèi)容,該編碼方式可以節(jié)約20%的空間。7、將編碼后的數(shù)據(jù)打包成MP3幀格式,并實現(xiàn)比特流數(shù)據(jù)輸出。四、實驗原理1、音頻信號基本知識聲音的數(shù)字化過程主要包括四個過程〔如下圖〕:〔1〕采樣,對振幅隨時間連續(xù)變化的模擬信號波形按一定的時間間隔取出樣值,形成在時間上不連續(xù)的脈沖序列;〔2〕量化,將模擬信號的幅度,在動態(tài)范圍內(nèi)劃分為相等間隔的假設(shè)干層次,把采樣輸出的信號電平按照四舍五入的原則歸入最靠近的量值?!?〕編碼,把采樣、量化所得的量值變換為二進制數(shù)碼的過程稱為編碼?!?〕壓縮,依據(jù)聲音信息中存在著多種冗余信息、聽覺器官的不敏感性以及采樣的標本中存在著相關(guān)性,對編碼后的二進制信號進行壓縮。,■!器部SSH量&4踵千毗馨圖、聲音數(shù)字化流程在對模擬音頻信號進行采樣量化編碼后,將得到數(shù)字音頻。數(shù)字音頻的質(zhì)量取決丁采樣頻率、量化位數(shù)和聲道數(shù)三個因素〔如表1所示〕01)米樣頻率米樣頻率是指一秒鐘時間內(nèi)米樣的次數(shù)。米樣頻率與聲音頻率之間有一定的關(guān)系,根據(jù)奈奎斯特理論,只有米樣頻率局丁聲首信號最局頻率的兩倍時,才能把數(shù)字信號表示的聲音復(fù)原成為原來的聲音。通常聲音信號最高頻率約為,則采樣頻率取至少為kHz在本實驗中,我們采用的是CD的采樣標準,即.2)量化位數(shù)量化位數(shù)也稱“量化精度”,是描述每個采樣點數(shù)值的二進制位數(shù)。例如,8位量化位數(shù)表示每個采樣值可以用2的8次方,即256個不同的量化值之一來表示,而16位量化位數(shù)表示每個采樣值可以用2的16次方,即65536個不同的量化值之一來表示。量化噪聲則是指某個采樣時間點的模擬值和最近的量化值之間的差,誤差最大可以到達離散間距的一半。一般量化位數(shù)越大,量化噪聲越小。在本實驗中,我們采用的是16位的量化精度。3)聲道數(shù)聲音通道的個數(shù)稱為聲道數(shù),是指一次采樣所記錄產(chǎn)生的聲音波形個數(shù)。記錄聲音
時,如果每次生成一個聲波數(shù)據(jù),稱為單聲道;每次生成兩個聲波數(shù)據(jù),稱為雙聲道〔立體聲〕。隨著聲道數(shù)的增加,所占用的存儲容量也成倍增加。本實驗,為了降低語音文件的大小,以及實驗的難度采用單聲道。表1、數(shù)字音頻質(zhì)量的技術(shù)參數(shù)表米樣頻率量化位數(shù)聲道數(shù)含義每秒鐘抽取聲波幅度樣木的次數(shù)每個采樣點用多少二進制位表示數(shù)據(jù)范圍使用聲音通道的個數(shù)特點米樣頻率越高、聲音質(zhì)重越好、數(shù)據(jù)重也越大量化位數(shù)越多、音質(zhì)越好、數(shù)據(jù)重也越大立體聲比單聲道的表現(xiàn)力豐富,但數(shù)據(jù)量翻倍常用值11.02522.05和44.1k8位、16位單聲道、立體聲2、WAV音頻信號結(jié)構(gòu)WAV文件格式是一種由微軟和舊M聯(lián)合開發(fā)的用丁音頻數(shù)字存儲的標準,它采用RIFF文件格式結(jié)構(gòu),非常接近丁AIFF和IFF格式。其由文件頭和數(shù)據(jù)體兩大部分組成,其中文件頭乂分為RIFF/WAV文件標識段和聲音數(shù)據(jù)格式說明段兩部分,而數(shù)據(jù)體主要包含以脈沖編碼調(diào)制〔PCM〕格式表示的樣本。WAV文件的由四個部分組成:表2、WAV文件結(jié)構(gòu)RIFFWAVEChunkID='RIFF'RiffType='WAVE'FormatChunkID='fmt'FactChunk(optional)ID='fact'DataChunkID='data'表3、RIFFWAVEChunk結(jié)構(gòu)名稱長度內(nèi)容ID4Bytes'RIFF'Size4BytesFileLen-8,整個文件大小-8Type4Bytes'WAVE'表4、FormatChunk結(jié)構(gòu)名稱長度內(nèi)容備注ID4Bytes'fmt'Size4Bytes18/16(有無附加信息)本結(jié)構(gòu)大小〔除ID,Size〕FormatTag2Bytes通常0x0001編碼方式Channels2Bytes1--單聲道;2--雙聲道立體聲聲道數(shù)目SamplesPerSec4Bytes米樣頻率AvgBytesPerSec4Bytes每秒所需字節(jié)數(shù)BlockAlign2Bytes數(shù)據(jù)塊對齊單位BitsPerSample2Bytes每個采樣需要的位bit數(shù)2Bytes(Size來判斷〕表5、FactChunk(optional)結(jié)構(gòu)〔可選〕
長度ID4Bytes'fact'Size4Bytes數(shù)值為4data4Bytes6、DataChunk名稱長度內(nèi)容ID4Bytes'data'Size4Bytes數(shù)據(jù)區(qū)大小data4Bytes數(shù)據(jù)區(qū),真正存儲數(shù)據(jù)的地方7、PCM樣本1樣本28位單聲道0聲道0聲道8位立體聲0聲道〔左〕1聲道〔右〕0聲道〔左〕1聲道〔右〕16位單聲道0聲道低字節(jié)0聲道高字節(jié)0聲道低字節(jié)0聲道高字節(jié)16位立體聲0聲道左低字節(jié)0聲道左高字節(jié)1聲道右低字節(jié)1聲道右高字節(jié)~WAVE文件的每個樣本值包含在一個整數(shù)~i中,i度長度為容納指定樣本長度所需的最小字節(jié)數(shù)。首先存儲低有效字節(jié),表示樣本幅度的位放在i的高有效位上,剩下的位置為0,這樣8位和16位的PCM波形樣本的數(shù)據(jù)大小如下所示表8、PCM波形樣本大小數(shù)據(jù)格式最大值8位PCMunsignedint225016PCMint32767-327673、MP3音頻信號結(jié)構(gòu)MP3的全稱為MPEG1Layer-3音頻文件,由幀(frame)構(gòu)成,幀乂是MP3文件的最小組成單元。MPEG音頻文件是MPEG1標準中的聲音部分,也叫MPEG音頻層,它根據(jù)壓縮質(zhì)量和編碼復(fù)雜程度劃分為三層,即Layer-1、Layer2、Layer3,且分別對應(yīng)MP1、MP2、MP3這三種聲音文件,并根據(jù)不同的用途,使用不同層次的編碼。MPEG音頻編碼的層次越高,編碼器越復(fù)雜,壓縮率也越高。MP1和MP2的壓縮率分別為4:1和6:1-8:1,而MP3的壓縮率則高達10:1---12:1。MP3采取了感官編碼技術(shù)';即編碼時先對音頻文件進行頻譜分析,然后用過濾器濾掉噪音電平,接著通過量化的方式將剩下的每一位打散排列,最后形成具有較高壓縮比的MP3文件,并使壓縮后的文件在回放時能夠到達比較接近原音源的聲音效果。MP3文件乂三個部分組成,分別是:TAG_V2(ID3V2),Frame,TAG_V1(ID3V1)。表9MP3文件結(jié)構(gòu)ID3V2包含了作者,作曲,專輯等信息,長度不固定,擴展了ID3V1的信息量。一系歹0的幀,個數(shù)由文件大小和幀長決定。每個Frame的長度可能不固定,F(xiàn)rame也可能固定,由位率bitrate決定。每個Frame乂分為幀頭和數(shù)據(jù)實體兩部分,幀頭記錄了mp3的位率,采樣率,版本等信息,每個幀之間相互獨立。ID3V1包含了作者,作曲,專輯等信息,長度為128Byte。每個Frame都有一個幀頭Frameheader長度4Byte〔32bit〕。頭部最前面的11位總是被設(shè)置為1并稱它為“幀同步”。因此,可以搜索整個文件以確定第一次出現(xiàn)連續(xù)11個被設(shè)置為1的地方,然后讀整個頭部并檢測值是否正確。幀頭后面可能有兩個字節(jié)的CRC校驗,這兩個字節(jié)的存在與否取決丁Frameheade^S息的第16bit:假設(shè)為0則幀頭后面無校驗;否則有校驗,校驗長度為2個字節(jié)。緊跟在Frameheade后面的是幀的實體數(shù)據(jù),其具體格式如下表所示:表10MP3幀結(jié)構(gòu)FrameheaderCRC〔free〕Main_Data4Byte02Byte4、MP3音頻壓縮算法MP3的編碼框圖如下圖。從整體來看,MP3編碼算法流程刻大致分為:時頻映射(包括子帶濾波器組和MDCT)和量化編碼(包括比特和比例因子分配和哈夫曼編碼)等兩大功能模塊。計算都十分復(fù)雜,實現(xiàn)MP3編碼的關(guān)鍵也在丁這兩個功能模塊。在MP3編碼中,輸入的數(shù)字音頻信號〔即PCM采樣信號〕進入子帶濾波器組后,被分成32個子帶信號,MDCT〔改良離散余弦變換)〕把子帶的輸出在頻域里進一步地細分成18個頻線,這樣共產(chǎn)生576個頻線?!布僭O(shè)采用心理聲學(xué)模型來計算子帶信號的信掩比的方式,即根據(jù)這些信掩比決定分配給576個頻線的比特數(shù),則在比特分配的過程可以實現(xiàn)可變步長量化〕接著再對頻線進行定長量化,量化后的樣值,再經(jīng)過無失真的哈夫曼編碼,以提高編碼效率,并與比特分配和量化產(chǎn)生的邊信息一起組成一幀數(shù)據(jù)。MP3編碼的一幀數(shù)據(jù)包括兩個組,每組有576個頻線和與他們相關(guān)的邊信息,邊信息被存儲在每一幀的幀頭中。對這樣一幀一幀組成的比特流,MP3解碼器可以獨立的進行解碼,而不需要額外的信息了。1〕混合濾波器組混合濾波器組包括子帶濾波器組和MDCT兩部分。子帶濾波器組編碼完成樣本信號從時域到頻域的映射,并將規(guī)定格式的數(shù)字音頻信號〔假設(shè)采樣頻率是44.1kHz,樣本量化為16位,則編碼比特率為16*44100bit/s〕分解成32個子帶輸出。子帶分析濾波器組的32個子帶是等帶寬的,而由心理聲學(xué)模型得出的臨界帶寬則不是等帶寬的,所以分析濾波器的帶寬與人耳聽覺上的臨界頻帶劃分并不匹配。為了使得進行編碼的各比例因子帶與臨界頻帶相匹配,需要對每個子帶信號做MDCT變換,從而提供更精細的頻率分辨率。將子帶濾波器組的輸出送到MDCT濾波器組后,每組將細分為18條頻線,共產(chǎn)生576條頻線,這對處理穩(wěn)態(tài)信號能獲得最大的編碼增益。子帶濾波器由32個FIR型BPF組成,每個BPF的長度為512點。因此實際上是用一個32X512的變換矩陣C將輸入序列{Xi}中的連續(xù)512個數(shù)據(jù)點所構(gòu)成的輸入欠量X,變換成一個具有32個分量的輸出欠量S。其中S的32個數(shù)據(jù)點SK按子帶頻率從低到高的順序排列。將PCM采樣音頻信號以32個為一組輸入一個長度為512的X向量緩沖區(qū),構(gòu)造一個具有512個元素的欠量空間X;然后用欠量C對X加窗,得到欠量乙其中Ci在標準中給出;512維欠量Z被分成8個64維欠量Yi,然后將8個欠量相加得到欠量Y;最后對進行變換從而得到32個子帶信號。子帶濾波器組對不同塊類型的輸出有不同的計算矩陣(已在MPEG-I標準中給出),即不同的窗口類型:長窗、開始窗、結(jié)束窗和短窗。對子帶濾波器組的輸出加窗后,再進行MDCT變換,這樣可以有效的控制前回聲2〕量化編碼在MPEG-I標準中用一個三層迭代的循環(huán)模型〔如圖〕,對經(jīng)過MDCT后輸出的樣本進行比特分配和量化。最高一級稱為幀循環(huán),它首先復(fù)位所有的迭代變量,計算能夠提供應(yīng)每節(jié)數(shù)據(jù)的最大比特數(shù),然后調(diào)用外層迭代模型;外層迭代模型首先調(diào)用內(nèi)層迭代循環(huán),內(nèi)層迭代循環(huán)對輸入欠量進行量化,通過遞增量化步長使量化輸出能夠在一定的比特位數(shù)限制之內(nèi)被編碼。然后確定哈夫曼編碼表的選擇,并對量化頻譜進行哈夫曼編碼。哈夫曼編碼對量化的最大值有限制,MPEG-I規(guī)定最大值不超過8191。所以要判斷所有的量化值是否超過限定,如果超過最大限制,內(nèi)層迭代循環(huán)遞增量化步長,重新量化。然后確定哈夫曼編碼的位數(shù),使其所占的比特數(shù)小丁由幀循環(huán)計算出的每節(jié)編碼所能提供的最大比特數(shù),否則也要增加量化步長重新量化。如果經(jīng)過量化產(chǎn)生的噪聲過大,有可能導(dǎo)致樣本失真,無法被正確解碼,所以外層迭代循環(huán)根據(jù)內(nèi)層輸出來檢測每個比例因子頻段的量化噪。圖、三層迭代模型在內(nèi)層迭代中采用了哈夫曼編碼是為了消除信號中的冗余,提高編碼的效率。在MP3編碼標準中,提供了32個哈夫曼碼表用丁對量化后的信號進行哈夫曼編碼,使得編碼的碼率大大降低。哈夫曼表的選擇是根據(jù)量化值的最大值以及信號的統(tǒng)計特性來決定的。經(jīng)量化編碼的信號同邊信息一起組成一幀數(shù)據(jù),并以幀流的形式存儲或傳輸。五、實驗內(nèi)容與結(jié)果1、Matlab語音信號錄制本實驗原音頻數(shù)據(jù),利用Matlab軟件自帶wavrecord函數(shù)進行單聲道、44.1KHz采樣
率、16位量化精度語音錄制,wavwrite函數(shù)將錄制好的語音數(shù)據(jù)保存為wav音頻文件。錄制后,最終音頻文件保存為voice.wav音頻文件,大小為861KB[882,044^節(jié)〕?!?〕函數(shù)y=wavrecord(time*fs,fs,1,'int16')輸入:time,音頻錄制時間,本實驗為10s;fs,采樣頻率,本實驗為44100KHz;1,通道數(shù),本實驗采用單通道;’int16',量化精度,本實驗采用16位量化精度;輸出:y,輸出采樣數(shù)據(jù),大小為<441000*1int16>?!?〕函數(shù)wavwrite(y,fs,16,'voice.wav')y:錄制好的語音信號,大?。?41000*1int16>;fs:采樣頻率,44100KHZ;16:量化精度,16位;'voice.wav':保存的音頻文件名。/*"RIFF"*//*文件大小=頭大小(36)+數(shù)據(jù)長度*//*"WAVE"*//*"RIFF"*//*文件大小=頭大小(36)+數(shù)據(jù)長度*//*"WAVE"*//*"fmt"*//*fmtchunk的長度=16*//*MSPCM=1*//*通道數(shù)*//*采樣率*//*bytespersecond=samp_rate*byte_samp*//*blockalign(bytespersample)*//*bitspersample*//*"data"*//*數(shù)據(jù)長度(bytes)*/structwave_header{—charriff[4];unsignedintsize;charwave[4];charfmt[4];unsignedintfmt_len;unsignedshorttag;unsignedshortchannels;unsignedintsamp_rate;unsignedintbyte_rate;unsignedshortbyte_samp;unsignedshortbit_samp;chardata[4];unsignedintlength;}header;CCS5.5讀取到的頭信息如下圖:wave='WAVE';fmt='fmt.f,t_len=16;tag=1;其中riff='RIFF';size=882036;channels=1;samp_rate=44100byte_rate=88200;byte_samp=2wave='WAVE';fmt='fmt.f,t_len=16;tag=1;的7LO£HDC>nsinxzUlCb£K9C2AfEC■rW小項網(wǎng)政**n5R*111ckgF]Ch£KK^FfDWI2|ctarFChdKCIAFEI—倒chflrFCMSG^FEImig—d虹MQOZdFRI*,wwvtrKad.OvOOOQgCW(nC'26FM?*ID1ctBrW(MXKkjAFHillwhirA?*inVCMXW^FHl*inthi*ECWC&WPjcKan|^AMM中g(shù)CMXK"跑FS*|CHcha*I域泌泗**lil5m防PIchart□NmCOAFfAH-間charCMXC2AflF=-?imlJen?*dg*-e-d&16田炳■依M<喝d曲E1CtaooojemifMiigrwdHhcriiMflOWDdJ!wniigndntOiDQC^EMM>lk也左M4^5igr-tdktBBLZffi]cuxx:Hral2uwigrf-ii哧5WMWBOOC■S忡3v£KO2B£ilDQi£?C血MS*|O|M—rdma;昌m,CbfSKJflDLl**raichirtOCWBnMDIcharBff"kragthupiignidntBB2000chfncjflDjjcWfflcN*T7]MQQW7V如wHoW>0F?-□對應(yīng)WAV原始PCM數(shù)據(jù)在CCS5.5中,定義無符號整形buff數(shù)組來存儲從WAV中的原始PCM數(shù)據(jù),對丁單聲道音頻,這里數(shù)組大小為576;對丁雙聲道音頻,這里數(shù)組大小為1152。unsignedint*wave_get(void){—intn,p;staticunsignedintbuff[samp_per_frame];/尿樣數(shù)據(jù)緩存空間n=config.mpeg.samples_per_frame>>(2-config.wave.channels);實際所采樣數(shù)p=fread(buff,sizeof(unsignedint),(short)n,config.wave.file);〃讀取WAV中的音頻數(shù)if(!p)〃對應(yīng)單通道,高576位為0;return0;else{for(;p<n;p++)buff[p]=0;returnbuff;}4MP3幀壓縮處理這獲取WAV音頻中的PCM信號后,接下來就是對數(shù)據(jù)進行壓縮編碼處理。具體包括以下幾個部分。多相濾波多相濾波器組的作用是將聲音信號分成32個頻寬大小相同的子頻帶,即將輸入的576個樣本數(shù)據(jù),變換為18*32個樣本數(shù)據(jù)。但這32個子頻帶對音頻壓縮的效果并不好,因此通過加入混合多相MDCT的處理來改善信號的失真。voidL3_window_filter_subband(unsignedint**buffer,ints[SBLIMIT],intk)staticintoff[2];inty[64],s1,s2;inti,j;/*用新的32個樣本數(shù)據(jù)替換舊的樣本數(shù)據(jù)*/if(config.mpeg.channels==1)(for(i=15;i>=0;i--)(x[k][(2*i)+off[k]+1]=(**buffer)<<16;x[k][(2*i)+off[k]]=((*(*buffer)++)>>16)<<16;}}/*平移樣本到合適的窗口位置*/for(i=HAN_SIZE;i--;)(z[i]=mul(x[k][(i+off[k])&(HAN_SIZE-1)],ew[i]);}off[k]=(off[k]+480)&(HAN_SIZE-1);/*offsetismodulo(HAN_SIZE)*//*子窗口的數(shù)據(jù)樣本*/for(i=64;i--;)for(j=8,y[i]=0;j--;)y[i]+=z[i+(j<<6)];/*結(jié)合子樣本用于簡單矩陣計算*/for(i=0;i<16;i++)y[i+17]+=y[15-i];for(i=0;i<15;i++)y[i+33]-=y[63-i];/*簡化的多相濾波器矩陣乘法*/for(i=16;i--;)for(j=0,s[i]=0,s[31-i]=0;j<32;j+=2)(s1=mul(fl[i][j],y[j+16]);s2=mul(fl[i][j+1],y[j+17]);s[i]+=s1+s2;s[31-i]+=s1-s2;}}混合多相MDCT(ModifiedDiscreteCosineTransform修飾離散余弦變換)MDCT有18個通道,將分成的32個子帶信號進一步細分,產(chǎn)生32*18=576的頻線輸出。MDCT的特點是即使不經(jīng)量化也不會產(chǎn)生失真;將子帶的信號進一步細分到頻譜上,便于提供較好的分析和效果;在編碼時,能消除多相濾波器組產(chǎn)生的疊頻效應(yīng),增加解壓后的復(fù)原效果。voidL3_mdct_sub(intsb_sample[2][3][18][SBLIMIT],intmdct[2][2][samp_per_frame2])(int(*mdct_enc)[18];intch,gr,band,j,k;intmdct_in[36];intbu,bd,*m;for(gr=0;gr<config.mpeg.granules;gr++)for(ch=config.mpeg.channels;ch--;){/*setuppointertothepartofmdct_freqwe'reusing*/mdct_enc=(int(*)[18])mdct_freq[gr][ch];/*Compensateforinversionintheanalysisfilter*/for(band=1;band<=31;band+=2)for(k=1;k<=17;k+=2)sb_sample[ch][gr+1][k][band]*=-1;/*Performimdctof18previoussubbandsamples+18currentsubbandsamples*/for(band=32;band--;){for(k=18;k--;){mdct_in[k]=sb_sample[ch][gr][k][band];mdct_in[k+18]=sb_sample[ch][gr+1][k][band];}/*CalculationoftheMDCTfor(k=18;k--;){m=&mdct_enc[band][k];for(j=36,*m=0;j--;)*m+=mul(mdct_in[j],cos_l[k][j]);}}/*Performaliasingreductionbutterfly*/for(band=31;band--;)for(k=8;k--;){bu=muls(mdct_enc[band][17-k],cs[k])+muls(mdct_enc[band+1][k],ca[k]);bd=muls(mdct_enc[band+1][k],cs[k])-muls(mdct_enc[band][17-k],ca[k]);mdct_enc[band][17-k]=bu;mdct_enc[band+1][k]=bd;}}/*Savelatestgranule'ssubbandsamplestobeusedinthenextmdctcall*/for(ch=config.mpeg.channels;ch--;)for(j=18;j--;)for(band=32;band--;)sb_sample[ch][0][j][band]=sb_sample[ch][config.mpeg.granules][j][band];失真控制環(huán)對MDCT輸出的信號,經(jīng)過失真控制環(huán)和量化率控制環(huán),即量化器的處理,最終實現(xiàn)對信號進行量化。voidL3_iteration_loop(intmdct_freq_org[2][2][samp_per_frame2],L3_side_info_t*side_info,intl3_enc[2][2][samp_per_frame2],intmean_bits){_reservoir=main_data_begin<<3;/*calculatereservoirattheframestart*/side_info->main_data_begin=main_data_begin;/*setnextframesbackpointer*/for(gr=0;gr<config.mpeg.granules;gr++)for(ch=config.mpeg.channels;ch--;){/*setuppointers*/ix=l3_enc[gr][ch];xr=mdct_freq_org[gr][ch];gi=&side_info->gr[gr].ch[ch].tt;/*calculateabsoluteandmaximum*/for(i=cutoff,xrmax=0;i--;)if(xrmax<(xrabs[i]=abs(xr[i])))xrmax=xrabs[i];/*calculatetheavailablebitsforthemaindata*/extra_bits=reservoir>>1;/*simplescheme,givehalfeachtime*/reservoir-=extra_bits;max_bits=mean_bits+extra_bits;if(max_bits>PART_2_3_LIMIT){reservoir+=max_bits-PART_2_3_LIMIT;max_bits=PART_2_3_LIMIT;}/*quantizethespectrumunlessallspectralvalueszero*/if(xrmax)gi->part2_3_length=inner_loop(ix,max_bits,gi);reservoir+=max_bits-gi->part2_3_length;/*adjustforunusedbits*/gi->global_gain=gi->quantizerStepSize+89;/*restoresignofquantizedspectralvalues*/for(i=0;i<cutoff;i++)if(xr[i]<0)ix[i]*=-1;}/*Sortoutreservoiratframeend,limitthesizeandstufftheexcess*/resv_max=DEC_BUFF_LIMIT-config.mpeg.bits_per_frame;if(resv_max>config.mpeg.resv_limit)resv_max=config.mpeg.resv_limit;elseif(resv_max<0)resv_max=0;main_data_begin=(reservoir<resv_max)?(reservoir>>3):(resv_max>>3);extra_bits=reservoir-(main_data_begin<<3);side_info->resv_drain=extra_bits;/*remainingbitstoancillarydata*/}一Huffman編碼量化好的數(shù)據(jù)變成一連申的系數(shù),由霍夫曼編碼(Huffmancode)做最后壓縮處理?;舴蚵幋a是將比較常見的字符用特定的符號表示,壓縮后得到一個記錄每個符號代表的字符申的編碼表以及一連申由符號組成的信息內(nèi)容,使用霍夫曼編碼可以節(jié)約20%的空問。staticintencodeMainData(intl3_enc[2][2][samp_per_frame2],L3_side_info_t*si)(一~~intgr,ch;bits=0;by=0;bi=8;main_[0]=0;/*Huffmancodesplusreservoirstuffing*/for(gr=0;gr<config.mpeg.granules;gr++)for(ch=0;ch<config.mpeg.channels;ch++)Huffmancodebits(l3_enc[gr][ch],&si->gr[gr].ch[ch].tt);/*encodespectrum*//*ancillarydata,usedforreservoirstuffingoverflow*/if(si->resv_drain){—intwords=si->resv_drain>>5;intremainder=si->resv_drain&31;/*padwithzeros*/while(words--)putbits(main_,0,32);if(remainder)putbits(main_,0,remainder);}returnbits>>3;}編碼MP3幀頭與邊信息每個Framed有一個幀頭Frameheader長度4Byte〔32bit〕。頭部最前面的11位總是被設(shè)置為1并稱它為“幀同步”.staticvoidencodeSideInfo(L3_side_info_t*si){intgr,ch,region;unsignedchar*sf=fifo[wr].side;/*header*/*sf=header[0];*(sf+1)=header[1];*(sf+2)=header[2]|(config.mpeg.padding<<1);*(sf+3)=header[3];*(sf+4)=0;bits=32;by=4;bi=8;/*sideinfo*/if(config.mpeg.type==MPEG1){putbits(sf,si->main_data_begin,9);putbits(sf,0,(config.mpeg.channels==2)?3:5);/*privatebits*/for(ch=0;ch<config.mpeg.channels;ch++)putbits(sf,0,4);/*scfsi*/for(gr=0;gr<2;gr++)for(ch=0;ch<config.mpeg.channels;ch++){gr_info*gi=&(si->gr[gr].ch[ch].tt);TOC\o"1-5"\h\zputbits(sf,gi->part2_3_length,12);putbits(sf,gi->big_values,9);putbits(sf,gi->global_gain,8);putbits(sf,0,5);/*scalefac_compress,windowswitchingflag*/for(region=0;region<3;region++)putbits(sf,gi->table_select[region],5);putbits(sf,gi->region0_count,4);putbits(sf,gi->region1_count,3);putbits(sf,0,2);/*preflag,scalefac_scale*/putbits(sf,gi->count1table_select,1);}_}fifo[wr].fr_len=(config.mpeg.bits_per_frame-bits)>>3;fifo[wr].si_len=bits>>3;/*bytesinsideinfo*/if(++wr==FIFO_SIZE)wr=0;/*pointtonextbuffer*/}六、實驗結(jié)果分析本實驗中壓縮原始音頻數(shù)據(jù)為:Matlab錄制的單聲道、44.1KHz采樣率、16位量化精度的WAV音頻信號,大小為862KB,時間為10秒鐘。然后分別利用Matlab、VS2013和DSP(CCS5.5)對音頻信號進行壓縮,最后保存為mp3格式音頻文件。音質(zhì)采用兩種方式〔Matlab語言和C語言〕進行音頻壓縮,都能夠保存音頻中原有的語音信息,且去除一定的噪聲,即兩種壓縮方式在音質(zhì)方面,效果相當(dāng)。壓縮時間比較兩種音頻壓縮方式,壓縮10秒鐘,441000個采樣數(shù)據(jù)。在Matlab中,壓縮花費的時間為1~2s;在VS2010〔C程序〕中,壓縮花費的時間為1~2s;而在CCS5.5〔C程序〕中,壓縮花費的時間為2~5分鐘s。由此可得出本程序中C編寫的MP3壓縮算法〔VS2013〕與Matlab中編寫的算法壓縮時間相當(dāng),而在CCS中壓縮的時間很長〔暫時沒有明白為什么〕。壓縮比采用兩種音頻壓縮方式,對10秒音頻數(shù)據(jù)進行壓縮。在Matlab中,壓縮后的音頻大小為79KB。在VS2010和CCS5.5中,壓縮后的音頻大小為??芍涸谌N編譯器中編寫的音頻MP3壓縮算法都到達了標準的MP3算法要求。七、實驗感悟本次實驗雖然經(jīng)歷了各種心酸,也遇到過各種困難,但在幾個禮拜的努力下,最終還是在CCS5.5中完成了MP3語音信號的壓縮。通過此次實驗,我真實的感受到自己以前知道的知識太少,熟悉的軟件不多,該學(xué)的東西太多太多。在本次實驗中,我使用到的軟件主要有:VS2013、MatlabR2010a和CCS5.5(其中我前面還分別嘗試了C5000和CSS3.3版本),編程的主要語言'是C語言'和Matlab語言做完實驗,回憶前面的歷程,總結(jié)遇到的困難有:1、對音頻知識了解不夠,不知如何下手不知道單通道、44.4KHZ采樣率、16位量化的語音錄制方法,最初采用語音錄制軟件實現(xiàn),后利用Matlab函數(shù)實現(xiàn)。不知道將采樣好的數(shù)據(jù)保存何種格式,然后乂是如何導(dǎo)入到CCS工程當(dāng)中。不知道WAV、MP3和PCM語音信號的格式,無法進行語音處理。2、不會CCS,導(dǎo)致程序由VS2013移植到C
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 2024版中外合資企業(yè)采購合同中英文一
- 2022年中考數(shù)學(xué)壓軸題專練:純函數(shù)的計算推理綜合問題(解析版)
- 2024年設(shè)施農(nóng)業(yè)種植技術(shù)服務(wù)合同
- 2024民營醫(yī)院與保險公司醫(yī)療責(zé)任保險合同書3篇
- 2024年餐飲業(yè)合資股權(quán)協(xié)議書
- 2024年給排水工程勞務(wù)分包合同全分析
- 勞務(wù)派遣的權(quán)利義務(wù)協(xié)議書
- 2024年股權(quán)交易補充協(xié)議:股東份額讓渡
- 2024版學(xué)校師生勞動協(xié)議范本版B版
- 2024年度文化創(chuàng)意產(chǎn)業(yè)擔(dān)保合同模板3篇
- 洗衣房工作人員崗位職責(zé)培訓(xùn)
- 廣東省深圳市光明區(qū)2022-2023學(xué)年五年級上學(xué)期數(shù)學(xué)期末試卷(含答案)
- XX小區(qū)春節(jié)燈光布置方案
- 《華為銷售人員培訓(xùn)》課件
- 《廣西壯族自治區(qū)房屋建筑和市政工程施工招標文件范本(2023年版)》
- 2024年化學(xué)螺栓錨固劑項目可行性研究報告
- 誠信講堂課件教學(xué)課件
- 2024年江蘇省普通高中學(xué)業(yè)水平信息技術(shù)綜合分析試卷(一)(含答案)
- 醫(yī)院培訓(xùn)課件:《乳腺癌解讀》
- 北京聯(lián)合大學(xué)《數(shù)據(jù)結(jié)構(gòu)》2023-2024學(xué)年期末試卷
- 醫(yī)療安全(不良)事件報告制度培訓(xùn)課件
評論
0/150
提交評論