Motion JPEG視頻壓縮IP核的設計與實(shí)現
引言
本文引用地址:http://dyxdggzs.com/article/84771.htm隨著(zhù)多媒體技術(shù)及通信技術(shù)的快速發(fā)展,在嵌入式平臺上實(shí)現連續圖像壓縮的需求已變得日益廣泛。常用的系統結構是獨立處理器配和專(zhuān)用圖像壓縮芯片或者是只用一個(gè)高主頻的數字信號處理器完成主要功能。但隨著(zhù)大規模集成電路技術(shù)的發(fā)展及市場(chǎng)對產(chǎn)品低成本的要求不斷提高,一種新的在嵌入式平臺上實(shí)現連續圖像壓縮的系統結構正逐步成為上述兩種系統結構的替代者。這種新的結構就是Altera公司提出的基于A(yíng)valon總線(xiàn)的SOPC結構。SOPC結構可以把處理器,圖像壓縮IP核,通訊單元及控制單元集成到一塊FPGA芯片上。較之以往的結構,不但極大地節約了系統資源和成本,更是減少了系統的復雜度。尤其是可以用硬件電路實(shí)現軟件處理極為耗時(shí)的運算功能,使得在低主頻,低功耗的嵌入式平臺上實(shí)現連續圖像實(shí)時(shí)壓縮變?yōu)榭赡?。連續圖像壓縮IP核也成為整個(gè)SOPC系統的一個(gè)關(guān)鍵部件?,F有的MPEG系列,H26X系列IP核對FPGA的芯片資源及性能要求極高,難以滿(mǎn)足系統對低成本,低功耗的要求。所以設計一個(gè)適合低成本,低功耗的FPGA芯片的視頻壓縮IP核變得極為重要。這即要求壓縮算法的復雜度不能太高,又要求有適當的壓縮效果,Motion JPEG算法恰好滿(mǎn)足上述要求。
1.Motion JPEG壓縮算法簡(jiǎn)介
Motion JPEG是一種基于靜態(tài)圖像JPEG壓縮標準的動(dòng)態(tài)圖像壓縮標準,壓縮時(shí)將連續圖像的每一個(gè)幀視為一幅靜止圖像進(jìn)行壓縮,從而可以生成序列化運動(dòng)圖像。壓縮時(shí)不對幀間的時(shí)間冗余進(jìn)行壓縮,雖然降低了壓縮比,但也同時(shí)降低了復雜度,易于硬件電路實(shí)現。Motion JPEG標準所根據的算法是基于離散余弦變換和熵編碼,關(guān)鍵技術(shù)有二維離散余弦變換、量化、差分編碼、霍夫曼編碼和游程編碼等。單幀的處理過(guò)程如下圖所示。
2.IP核的結構設計
2.1二維離散余弦變換模塊
二維離散余弦變換是由一維離散余弦變換衍生而來(lái)的,所以可以用兩個(gè)級聯(lián)的一維離散余弦變換實(shí)現。實(shí)現時(shí)要注意第一級一維離散余弦變換模塊產(chǎn)生的結果不能直接作為第二級一維離散余弦變換模塊的輸入量,而是等到第一級一維離散余弦變換模塊產(chǎn)生的結果形成一個(gè)8×8的矩陣后,對這個(gè)8×8的矩陣做轉置處理,再把轉置后得到的矩陣按行掃描的順序輸出,這時(shí)輸出的數據才能作為第二級一維離散余弦變換模塊的輸入量。
二維離散余弦變換模塊處理的對象是8×8的像素矩陣,來(lái)自其前一級模塊預處理模塊。預處理模塊一個(gè)時(shí)鐘周期只能輸出一個(gè)數據,為了滿(mǎn)足二維離散余弦變換模塊中第一級一維離散余弦變換模塊一次運算需要8個(gè)輸入數據的要求,利用一個(gè)串行轉并行模塊,把每個(gè)時(shí)鐘周期內預處理模塊輸出的一個(gè)數據緩存起來(lái),當數據湊滿(mǎn)8個(gè)后再一次傳給二維離散余弦變換模塊。
二維離散余弦變換模塊輸出的數據是8×8的二維離散余弦系數矩陣,傳遞給其后一級模塊量化模塊。量化模塊一個(gè)時(shí)鐘周期只能接收一個(gè)數據,為了滿(mǎn)足二維離散余弦變換模塊中第二級一維離散余弦變換模塊一次運算產(chǎn)生8個(gè)輸出數據的條件,使用一個(gè)并行轉串行模塊,把每隔8個(gè)時(shí)鐘周期二維離散余弦變換模塊輸出一次的8個(gè)數據緩存起來(lái),在等待下一次二維離散余弦變換模塊輸出數據的8個(gè)時(shí)鐘周期的等待隔內,把數據串行傳給量化模塊。
2.1.1第一級一維離散余弦變換模塊
根據一維離散余弦變換的定義和cos函數的互補對稱(chēng)性,參考Weiping Li提出的Skew Circular Convolution的概念,能夠使一維離散余弦變換達到非常精簡(jiǎn)的硬件架構。但是考慮到處理的對像是連續幀這個(gè)條件,速度就成為主要因素,因此沒(méi)有完全依照其提出的方法,而是適當的增加電路面積來(lái)夠造新的11階全流水線(xiàn)結構,從而獲得最大的運算速度。處理過(guò)程可劃分為4個(gè)階段。
階段1:消耗3個(gè)時(shí)鐘周期,完成8位有符號數的加減運算,結果為9位有符號數。
階段2:消耗2個(gè)時(shí)鐘周期,完成9位有符號數的固定系數乘法,因為乘的系數是小數,所以要把小數轉換為二進(jìn)制表示。
階段2中的乘法操作是用EP2C35芯片中的28個(gè)嵌入式乘法單元實(shí)現的。EP2C35芯片中共有70個(gè)嵌入式乘法單元,一個(gè)嵌入式乘法單元可以實(shí)現兩個(gè) 9位數的乘法,兩個(gè)嵌入式乘法單元并聯(lián)可以實(shí)現兩個(gè)大于9位小于18位數的乘法。根據這一特性,假如在階段1中實(shí)現乘法會(huì )因輸入量是8位而浪費了一個(gè)嵌入式乘法單元的全部能力,假如在階段3或階段4中實(shí)現乘法又會(huì )因輸入量或系數中每個(gè)元素的長(cháng)度大于9位而耗用兩個(gè)嵌入式乘法單元去完成一個(gè)乘法操作,又很不經(jīng)濟。所以在階段2中實(shí)現乘法操作是最為合理的,階段2的輸入量為9位,恰好耗用一個(gè)個(gè)嵌入式乘法單元。這也同時(shí)要求乘法中的固定系數的位數為9位,位數的過(guò)多或過(guò)少都不能充分利用芯片上的硬件資源。
linux操作系統文章專(zhuān)題:linux操作系統詳解(linux不再難懂)
評論