999精品在线视频,手机成人午夜在线视频,久久不卡国产精品无码,中日无码在线观看,成人av手机在线观看,日韩精品亚洲一区中文字幕,亚洲av无码人妻,四虎国产在线观看 ?

基于軟硬件協同設計的Huffman解碼模塊

2011-03-28 01:52:50劉華劉衛東邢文峰
電子設計工程 2011年16期

劉華,劉衛東,2,邢文峰

(1.中國海洋大學信息科學與工程學院,山東青島266100;2.海信電器股份有限公司山東青島266071;3.青島海信信芯科技有限公司山東青島266071)

MP3全稱是MPEG-1 Audio Layer-3,是一種音頻文件的壓縮標準,是有損壓縮。MPEG音頻層根據壓縮質量和編碼復雜程度劃分為3層,即Layer1、Layer2、Layer3,分別對應MP1、MP2、MP3這3種音頻文件,并根據不同的用途,使用不同層次的編碼。MPEG音頻編碼的層次越高,編碼器越復雜,壓縮率也越高,在音質沒有明顯損失的情況下,MP1和MP2的壓縮率分別為4:1和6:1-8:1,而MP3的壓縮率則高達10:1-12:1。MP3是根據心理聲學模型,利用人耳聽覺特性進行音頻壓縮[1-2]。對音頻文件盡量壓縮同時盡量保持好的音質。

1 MP3解碼簡介

1.1 MP3解碼幀的格式

MP3的編碼格式是以一幀為單位的,每幀的數據是獨立的。壓縮后MP3數據也是以一幀為單位的。每幀分為兩個顆粒度,每一顆粒度在解碼時也是相對獨立的,每一顆粒度由576個PCM采樣數據組成,即每幀由1 152個PCM采樣數據組成。每一幀的比特數是不一定的,每一幀的比特數=(采樣數×比特率)/采樣率。采樣率有44.1 kHz,48 kHz,32 kHz 3種情況,比特率的范圍是從32 kb/s到320 kb/s[3]。

每一幀數據包括4部分:幀頭(4個字節)、冗余校驗數據(2個字節)、音頻數據、輔助數據。

幀頭信息包括同步信息、版本、層、CRC校驗、位率索引、采樣率索引、空白字、私有標志、立體聲模式、保留位、版權標志、原始媒體和強調方式等。音頻數據包括幀邊數據和主數據。

幀邊信息主要用來為解碼當前幀的比特流和為頻點數據轉換到時域數據提供信息,包括主數據的開始位置,私有位,兩個顆粒度共有選擇信息,主數據位數,大值,全局增益,比例因子壓縮,窗切換標志,塊類型,混合塊標志,表選擇,子塊增益,預標志,區域0計數,區域1計數等。

Mpeg1 layer 3的流的主數據格式如圖1所示:

圖1 主數據結構圖Fig.1 Diagram of MP3 data

小值區是量化后頻點的絕對值不超過1的區域,即只有-1,0,+1共3種量化系數,剩下的為大值區。

1.2 MP3解碼原理

1.2.1 MP3解碼流程圖

圖2 MP3解碼一幀數據的流程圖Fig.2 Flow chart of decoding one frame of MP3

1.2.2 MP3解碼過程

由圖2可知,MP3解碼過程主要包括找同步頭、解頭邊信息和CRC校驗、解碼縮放因子、解碼Huffman數據、反量化、重排序、立體聲解碼、混淆縮減、IMDCT變換、頻率反轉、合成多相濾波器,最后輸出PCM采樣數據。以下簡述MP3解碼的步驟[4]。

找同步頭即找出幀頭在比特流中的位置,幀頭為12比特的“1111 1111 1111”即0xfff。頭、邊信息和縮放因子信息都是用于以后的解碼過程,包括一幀的特征信息(采樣率、比特率等)各個參數等,縮放因子主要用于Huffman數據進行反量化的過程。Huffman解碼過程是通過邊信息得到Huffman碼表,從而查到Huffman數據,此時的Huffman數據是576個頻率線。反量化過程根據縮放的公式和幀邊信息,對于不同的塊類型用不同的縮放公式以恢復576個頻率線量化前的值,此時還是頻域范圍內的數值。重排序是針對短塊進行的,經反量化后得到的頻率值不是按時間順序排列的,重排序就是將頻率值按時間順序重新排列,重排序按窗、子帶、頻帶順序進行排序。立體聲解碼是根據幀邊信息和立體聲解碼公式將每一聲道的真實的頻率值恢復出來。混淆縮減是對于長塊和混合塊的長塊部分來說的,用迭代運算去除兩個子帶頻帶之間的混迭現象。IMDCT變換經過IMDCT、加窗、疊加運算變換成時域內的值。頻率反轉是將頻率反轉的數值乘以-1進行反轉補償。合成多相濾波器是將32個子帶的樣值通過矩陣運算得出64個中間值,然后將這64個中間值放入一個長度為1024的FIFO緩沖區,經過抽取、加窗等運算得到最終的32個時域的信號值。

2 MP3解碼優化

MP3音頻解碼可以分為軟件實現和硬件實現兩種方式,軟件實現的優點是靈活,修改方便,研發速度快,缺點是解碼速度慢;硬件實現則剛好相反,優點是解碼速度快,缺點是成本高并且不夠靈活,設計好后不能再進行修改。軟硬件協同設計可以充分利用軟硬件各自的優點,使系統既有很高的運算能力,又不失靈活性[5-7]。

Huffman解碼模塊在MP3解碼整個過程占有較大的運算量,目前針對這一部分的優化思路較少,本文采用了軟硬件協同設計的方法來實現MP3的Huffman解碼模塊,采用新的硬件架構,增加一些特殊的寄存器,實現一些針對MP3Huffman解碼的特殊指令來優化Huffman解碼過程[8-9]。

2.1 寄存器介紹

增加的寄存器有MP3_HEAD,MP3_PTR,MP3_OFFSET,MP3_TS。下面說明一下各寄存器的作用。

MP3_HEAD輸入比特流寄存器,32比特,分為高低位兩部分,每部分16比特。解碼時從MP3_HEAD的高位讀取數據,當讀取的數據超過16比特時,就將低16位比特數據移動到高16位,然后從碼流里面再讀取16比特存入低16位。

MP3_PTR消耗比特流寄存器,存放MP3_HEAD中消耗的比特數目。

MP3_OFFSET偏移量寄存器,一是第一級table元素的偏移量,為得到表中所找的元素,二是下一級table的首地址,即table的偏移量。

MP3_TS取比特數目寄存器,第一級table元素的偏移量的比特數目。

2.2 結構體介紹

對Huffman的解碼是通過查Huffman表進行的,Huffman表是由分級的table組成,每一級table中元素的個數由編程者自己確定,如果在當前級的表(table)中沒有查到對應的Huffman碼值,就到下級表(table)中繼續查,直到查到Huffman碼值。每個Huffman表項有16 bit,共有3種情況:

1)find=1,且是大值

3個表項分別對應著下面huff聯合體中的3個結構體:

union huff{

struct{

unsigned short find:1;

unsigned short bits:4;

unsigned short x:5;

unsigned short y:5;

}big_value;

struct{

unsigned short find:1;

unsigned short bits:4;

unsigned short t:2;

unsigned short u:2;

unsigned short v:2;

unsigned short w:2;

}small_value;

struct{

unsigned short find:1;

unsigned short size:4;

unsigned short offset:11;

}not_find;

unsigned short find:1;

};

find是標志位,表示是否查找到Huffman碼值,find為1,即查找到Huffman碼值,find為零,即沒查到Huffman碼值;size表示從寄存器MP3_HEAD中取的比特數目;offset表示table的偏移量,指在table的首地址;bits表示在某一級table中查找到Huffman碼值,在這一級table中實際消耗的比特數目;x,y,t,u,v,w為Huffman碼值。

2.3 解碼程序

Huffman解碼的程序:

void huffdecode(unsigned short*input,unsigned short*output)

{

……

do

{

VLDdec(unsigned short&find,unsigned short*decode_table);

VLDin(unsigned short*input);

}while(!find);

……

if(是大值)

{

Output[i++]=x;

Output[i++]=y;

}

else

{

Output[i++]=t;

Output[i++]=u;

Output[i++]=v;

Output[i++]=w;

}

}

VLDdec是查表指令。decode_table是Huffman碼表的指針,指在第1級table的首地址。

VLDin負責向MP3_HEAD裝入新的碼流數據,input是1指針,指向碼流消耗的數據位置。

2.4 解碼流程圖

Huffman解碼流程圖如圖3所示。

圖3 Huffman解碼流程圖Fig.3 Flow chart of Huffman decoding

2.5 解碼過程分析

Huffman解碼過程分為兩部分,如下分析:

a)VLDdec(unsigned short&find,unsigned short*decode_table);

首先,要進行初始化,對應圖3中的初始化。

寄存器MP3_PTR,MP3_OFFSET分別置零,Huffman碼表確定第1級table的元素偏移量的比特數目是寄存器MP3_TS的初始化值,其值只有在查找第1級table的元素用到。從碼流中取32 bit的數據存入寄存器MP3_HEAD中,此時指針input移動32 bit。

其次,開始解碼。VLDdec的解碼如圖4所示:

圖4 VLDdec解碼圖Fig.4 Decoding diagram of VLDdec

decode_table指向Huffman碼表的首地址且指針是不移動的,從寄存器MP3_TS中得到需要從寄存器MP3_HEAD中取的比特數目,取得的比特數據存放在寄存器MP3_OFFSET中,用來求得元素的偏移量。首地址加上存放在寄存器MP3_OFFSET中的數據,得到所需查找的第1級table中的元素。

在該元素中,當find=1,即查找到Huffman碼值,若查找到的是大值,則為兩個值,分別為x,y;若查找到的是小值,則為4個值,分別為t,u,v,w。bits是在這一級table中實際消耗的比特數目,其值存放到寄存器MP3_PTR中。

在該元素中,當find=0,即在這一級table中沒找到Huffman碼值,則下一級table的首地址,由該元素中的offset給出,其首地址值存放到寄存器MP3_OFFSET中,再根據size給出的值,從寄存器MP3_HEAD中得到table中元素的偏移量值,首地址加上偏移量得到這一級table中要查找的元素,再看find的值依次循環下去直到查找到Huffman碼值,并且把消耗的MP3_HEAD的比特數目累加存在寄存器MP3_PTR中。

b)VLDin(unsigned short*input);

VLDin的解碼如圖5所示:

圖5 VLDin解碼圖Fig.5 Decoding diagram of VLDin

當解出一組Huffman碼值時,需要判斷是否要向寄存器MP3_HEAD中輸入新的碼流,當寄存器MP3_HEAD中消耗的比特數目大于等于16時,即寄存器MP3_PTR中的值大于等于16,則將寄存器MP3_HEAD中的低16位數據移動到高16位,然后從碼流中再讀取16比特數據存入MP3_HEAD中的低16位,使寄存器MP3_HEAD中始終保持大于等于16比特的有效數據,以便繼續解Huffman碼值。

上述的硬件架構同樣適用于WMA和AAC音頻格式的Huffman的解碼模塊。下面以WMA為例來說明。

WMA和MP3的Huffman解碼過程是一樣的,只是對應的編碼的碼字不一樣,MP3的Huffman的編碼過程是2個數一組或4個數一組編碼,WMA的Huffman的編碼過程是編碼成run、level。level是Huffman碼值,run是Huffman碼值是零的個數,在level之前。所以對本方案而言,WMA和MP3的不同在于Huffman碼表的table元素的不同。

3 實驗結果

Huffman查表過程中,一般最多會在第3級table中查找到。兩種實現方法運行對比結果如表1所示。表1中的純軟件運行周期是在ARM7軟件仿真平臺上進行并假定存儲器訪問延遲為零的情況下得出的結果。從表1可知,用軟硬件協同設計實現的Huffman解碼過程所用的系統周期大約是純軟件實現的五分之一,大大提高了解碼效率。

表1 運行結果Tab.1 The operation results

4 結束語

本文使用軟硬件協同設計方法,設計了音頻解碼模塊。結果表明不僅性能優于純軟件解碼,且設計過程較為簡化,對今后的數字音頻解碼優化設計具有一定的應用價值。

[1] 陸安江,張正平,岳忠義.一種基于ARM的MP3解碼優化設計[J].電子測量技術,2006,29(4):1-3.LU An-jiang,ZHANG Zheng-ping,YUE Zhong-yi.Optimizing design of MPEG-1 layer 3 decoding based on ARM[J].Electronic Measurement Technology,2006,29(4):1-3.

[2] [s.n.]ISO/IEC JTC1/SC29/WG11 MPEG,IS11172-3"Informati on Technology-Coding of Moving Pictures and Associated Audio for Digital Storage Media at up to About 1.5Mbit/s,Part 3:Audio"[EB/OL].(2011-05-12)[2011-06-01].http://dwanfangdata.com.cn/Extenal Resource-shdxx be2001z 10163.aspx.

[3] Andrew N.ARM嵌入式系統開發之軟件設計與優化[M].沈建華,譯.北京:北京航空航天大學出版社,2005.

[4] Patterson D A,Hennessy J L.計算機組成和設計[M].鄭緯民,譯.北京:清華大學出版社,2003.

[5] Heinrich M,Mark A D O.Horowitz.hardware/software codesign of the stanford Flash multiprocessor[J].Proceedings of the IEEE,1997,85(3):455-466.

[6] 劉晌,李東曉,姚慶棟,等.面向、HDTV解碼應用的RISC核的軟硬件協同設計[C]//中國電子學會電路與系統年會第16屆年會(ICCAS2001),寧波,2001:352-356.

[7] 戴杰.基于軟硬件協同的音頻解碼器研究與設計[M].天津:天津大學,2008:12-20.

[8] [s.n.]MP3解碼原理[EB/OL].(2010-12-10)[2011-06-03].http://wenku.baidu.com/view/649547 ec102d e2bd960588a5.html.

[9] 吳明暉.基于ARM的嵌入式系統開發與應用[M].北京:人民郵電出版社,2004.

主站蜘蛛池模板: 亚洲精品视频在线观看视频| 欧美19综合中文字幕| 国产丝袜第一页| 九九九久久国产精品| 亚洲中文字幕国产av| 成人精品亚洲| 欧美国产精品不卡在线观看| 日韩精品无码免费专网站| 亚洲婷婷六月| 99re视频在线| 国产69精品久久久久妇女| 亚洲中文精品人人永久免费| 国产成人禁片在线观看| 香蕉eeww99国产在线观看| 欧美在线黄| 久久免费成人| 毛片在线播放网址| 日韩一区精品视频一区二区| 秘书高跟黑色丝袜国产91在线| 97国产一区二区精品久久呦| 美女毛片在线| 日本高清在线看免费观看| 亚洲成人一区二区| 亚洲人成色在线观看| 丝袜高跟美脚国产1区| 午夜性爽视频男人的天堂| 久久国产精品嫖妓| 中文字幕在线不卡视频| 三区在线视频| AV网站中文| 国产区在线看| 精品国产福利在线| 美美女高清毛片视频免费观看| 亚洲女同欧美在线| 久久夜夜视频| 亚洲成aⅴ人在线观看| 亚洲不卡无码av中文字幕| 亚洲啪啪网| 丰满人妻久久中文字幕| 人妻夜夜爽天天爽| 国产在线欧美| 91久久精品国产| 成人精品亚洲| jizz国产视频| 丁香婷婷综合激情| 日本人妻一区二区三区不卡影院| 一本大道无码高清| 久久精品丝袜| 一本色道久久88| 成年片色大黄全免费网站久久| 71pao成人国产永久免费视频| 日本高清免费不卡视频| 国产精品护士| 亚洲第一成年网| 亚洲无码电影| 国产麻豆福利av在线播放 | 欧美高清国产| 99爱在线| 老司机午夜精品网站在线观看 | 真实国产乱子伦视频| 无码精品国产VA在线观看DVD| 久久人妻系列无码一区| 老司国产精品视频| 亚洲综合网在线观看| 久久香蕉国产线看观看亚洲片| 欧美激情二区三区| 久久久国产精品免费视频| 亚洲一区二区无码视频| 久久久久国产一级毛片高清板| 婷婷午夜影院| 美美女高清毛片视频免费观看| 99久久婷婷国产综合精| 最近最新中文字幕免费的一页| 久久精品波多野结衣| 精品人妻AV区| 久久特级毛片| 干中文字幕| 国产精品制服| 婷婷亚洲视频| 国产在线精品网址你懂的| hezyo加勒比一区二区三区| 国产日本一线在线观看免费|