基于FPGA NiosII的MPEG-4視頻播放器設(shè)計(jì)
AC系數(shù)的反量化要用到兩個(gè)加權(quán)矩陣,分別用于內(nèi)部子塊和非內(nèi)部子塊。用戶也可以使用自定義的量化矩陣。如果用QDCT表示輸入已量化的AC系數(shù),用DCT表示反量化后的AC系數(shù),那么AC系數(shù)的IQ變換公式如下:
式中,quantiser_scale為0~112之間的兩組數(shù)值,分別對(duì)應(yīng)不同的比特流控制狀態(tài)。但是在本系統(tǒng)采用的XviDCodec版本中,比特流控制功能并沒有得到實(shí)現(xiàn),所以這里quantiser_scale的取值固定。
反量化得到的結(jié)果通過飽和化,使其限制在[-2048,+2047]之間。
IQ在FPGA上按照?qǐng)D3的框圖進(jìn)行硬件實(shí)現(xiàn)。
2.1.2 反離散余弦變換
IDCT是DCT的逆過程,用于還原DCT系數(shù)矩陣。
IDCT過程可由下面的公式描述:
將8元的輸入向量[X0,X1,X2,X3,X4,X5,X6,X7]分成奇元素[X1,X3,X5,X7]和偶元素[Xo,X2,X4,X6],8×8矩陣則用2個(gè)4×4矩陣來代替,奇元素和偶元素分別與這2個(gè)矩陣v和u相乘,生成2個(gè)4×4向量p和q,通過加減向量p和q,可得到輸出向量x。
算法可以表示成下面的公式:
基于8×8矩陣的IDCT算法,在FPGA上按照?qǐng)D4所示的結(jié)構(gòu)加以硬件實(shí)現(xiàn)。
2.1.3 運(yùn)動(dòng)補(bǔ)償
運(yùn)動(dòng)補(bǔ)償是一種大量、單調(diào)的運(yùn)算。為了能實(shí)現(xiàn)運(yùn)動(dòng)補(bǔ)償,采用了多級(jí)、多個(gè)運(yùn)算單元并行流水運(yùn)算的方式,如圖5所示。
評(píng)論