新四季網

用fpga實現klt變換的方法

2023-06-23 07:13:21

專利名稱:用fpga實現klt變換的方法
技術領域:
本發明屬於數位訊號處理技術領域,涉及圖像壓縮編碼的實現方法,可應用於通過硬體實現圖像壓縮編碼的變換部分。
背景技術:
圖像壓縮編碼的主要步驟是首先將圖像劃分成多個宏塊,然後以宏塊為單位進行模式預測、變換、量化以及熵編碼。模式預測是根據當前宏塊上方和左方的宏塊的重構像素值來計算預測像素值的。實際像素值與預測值的差稱作殘差,殘差數據仍然存在著可以開發的相關性。KLT作為一種依賴於數據特性的最優變換,與其它變換方法相比,它根據圖像殘差特性離線訓練出的變換矩陣,能夠更充分發掘殘差數據中存在的規律性和相關性,從而提高壓縮性能,所以目前在數位訊號處理及通信中得到了越來越廣泛的應用。但是KLT變換要進行複雜的矩陣乘法運算且變換係數大,在要求實時處理及延時較小的高性能圖像壓縮變換硬體系統中,KLT變換成為瓶頸。採用傳統的執行方法在FPGA上進行KLT變換,會導致運算效率低,佔用資源大以及數據吞吐率小,因此有必要從FPGA硬體實現的角度出發,發明一種快速高效的實現KLT 變換的方法。

發明內容
本發明的目的在於克服上述已有技術的不足,提出一種用FPGA實現KLT變換的方法,從而滿足圖像壓縮編碼實時性和高性能的要求。為實現上述目的,本發明提出如下兩種技術方案技術方案1.用FPGA實現一維KLT變換的方法,包括如下步驟(1. 1)將大小為4X4的圖像殘差矩陣按行展成一維列向量,離線訓練後得到大小為16 X 16的KLT矩陣,將它們存儲在FPGA中的8個雙埠 RAM中;(1. 2)控制8個雙埠 RAM的埠,在每個時鐘周期內將每個RAM的地址同時加 1,並令兩個輸出端同時輸出,使每個時鐘周期內讀出變換矩陣的一個行向量;(1.3)將殘差列向量的係數和讀出的變換矩陣行向量的係數同時送入FPGA中的 "DSP48E單元」進行乘加運算,即可得到變換結果向量中的一個係數;(1.4)重複步驟(1.2)和(1.3),即從RAM中讀出變換矩陣下一行的係數與殘差列向量的係數進行乘加運算,直到變換結果向量的16個數據計算完畢。技術方案2.用FPGA實現二維KLT變換的方法,包括如下步驟(2. 1)對大小為16X16的圖像殘差矩陣X進行離線訓練,得到大小為16X16的 KLT行變換矩陣R和大小為16 X 16的KLT列變換矩陣C,將行變換矩陣R存儲在第一組的8 個雙埠 RAM中,記為RAM1,將列變換矩陣C存儲在第二組的8個雙埠 RAM中,記為RAM2 ;(2. 2)控制存儲行變換矩陣R的RAM1的地址端,並令RAM1的輸出端同時輸出數據,使每個時鐘周期內讀出行變換矩陣R的一個列向量;(2.3)將殘差矩陣X行向量的係數與讀出的行變換矩陣R列向量的係數同時送入 FPGA中的「DSP48E單元」進行乘加運算,得到的結果為中間矩陣M的係數,該中間矩陣M的係數以行的順序串行輸出;(2.4)開闢一個新的雙埠 RAM,記為RAMm,將輸出的中間矩陣M的係數從RAMm的 A埠寫入,當256個係數全部寫入完畢,產生一個脈衝指示信號;(2. 5)在步驟(2. 4)產生的脈衝信號指示下,控制存儲中間矩陣M的RAMm的B埠地址端,使該中間矩陣M的係數按列的順序串行讀出;(2. 6)在步驟(2. 4)產生的脈衝信號指示下,控制存儲列變換矩陣C的RAM2的地址端,並令RAM2的輸出端同時輸出數據,使每個時鐘周期內讀出列變換矩陣C的一個列向量;(2. 7)將由步驟(2. 5)產生的中間矩陣M的係數和由步驟(2. 6)產生的列變換矩陣C列向量的係數同時送入FPGA中的「DSP48E單元」進行乘累加運算,得到最終的變換結果矩陣,該矩陣在每17個時鐘周期內輸出一個列向量。本發明與現有技術相比具有以下優點 第一,本發明將數據量龐大的KLT變換矩陣通過初始化存儲在雙埠 RAM組中,有效減少了查找表的使用,提高了讀取變換矩陣係數的速度。第二,本發明對一維KLT變換採用直接乘加的方式,對二維KLT變換採用先乘加、再乘累加的方式,將運算部分用FPGA中的「DSP48E單元」處理,提高了運算速率,且在 「DSP48E」單元內對電路進行流水化處理,減少了 FPGA中其它資源使用,提升了系統的工作頻率。


圖1為本發明實現一維KLT變換的步驟示意圖;圖2為本發明實現二維KLT變換的步驟示意圖;圖3為本發明的一維KLT變換與二維KLT變換的乘加運算原理示意圖;圖4為本發明的二維KLT變換的乘累加運算原理示意圖。
具體實施例方式以下參照附圖對本發明做進一步詳細描述實施例1 參照圖1,本發明對大小為4X4的圖像殘差塊採用一維KLT變換,包括如下步驟步驟A,將大小為4X4的圖像殘差矩陣按行展成一維列向量,離線訓練後得到大小為16 X 16的KLT矩陣,將它們存儲在FPGA中的8個雙埠 RAM中。步驟B,控制8個雙埠 RAM的埠,在每個時鐘周期內將每個RAM的地址同時加 1,並令兩個輸出端同時輸出,使每個時鐘周期內讀出變換矩陣的一個行向量。步驟C,將殘差列向量的係數和讀出的變換矩陣行向量的係數同時送入FPGA中的 「DSP48E單元」進行乘加運算。參照圖3,本步驟的具體實現如下
(Ca)將變換矩陣行向量的係數如 Ei15與殘差列向量的係數bQ b15同時送入 "DSP48E單元」內部的輸入寄存器組REGin中保存;(Cb)從輸入寄存器組REGin中取出徹 a15與bQ b15,並將它們對應相乘,得到 16個乘積ρ。 p15保存至寄存器組REGmul中;(Ce)從寄存器組REGmul中取出Ptl P15分成4組,對每組的4個數求和,得到4個和值% S4,保存至寄存器組REGadd中;(Cd)從寄存器組REGadd中取出% s4,將它們再次相加,得到和值sum,將sum經過一級輸出寄存器REG。ut後輸出,sum即為最終變換結果向量的一個係數。步驟D,重複步驟B和步驟C,即從RAM中讀出變換矩陣下一行的係數與殘差列向量的係數進行乘加運算,直到變換結果向量的16個數據計算完畢。實施例2 參照圖2,本發明對大小為16X 16的圖像殘差塊採用二維KLT變換,包括如下步驟步驟1,對大小為16X16的圖像殘差矩陣X進行離線訓練,得到大小為16X16的 KLT行變換矩陣R和大小為16 X 16的KLT列變換矩陣C,將行變換矩陣R存儲在第一組的8 個雙埠 RAM中,記為RAM1,將列變換矩陣C存儲在第二組的8個雙埠 RAM中,記為RAM2。步驟2,控制存儲行變換矩陣R的RAM1的地址端,並令RAM1的輸出端同時輸出數據,使每個時鐘周期內讀出行變換矩陣R的一個列向量,其中控制RAM1地址端的步驟是 在每個時鐘周期內對RAM1的地址加1,重複進行16個時鐘周期;在下一個時鐘周期內保持 RAM1的地址不變;依此重複進行16次。步驟3,將殘差矩陣X行向量的係數與讀出的行變換矩陣R列向量的係數同時送入 FPGA中的『『DSP48E單元」進行乘加運算,得到的結果為中間矩陣M的係數,該中間矩陣M的係數以行的順序串行輸出。參照圖3,本步驟的具體實現如下(3a)將殘差塊X第1行的係數與行變換矩陣R第1列的係數同時送入「DSP48E單元」內部的輸入寄存器組REGin中保存;(3b)從輸入寄存器組REGin中取出殘差矩陣X行向量的係數與行變換矩陣R列向量的係數,並將它們對應相乘,得到16個乘積P(l p15,保存至寄存器組REGmul中;(3c)從寄存器組REGmul中取出Pci P15,分成4組,對每組4個數求和,得到4個和值% s4,保存至寄存器組REGadd中;(3d)從寄存器組REGadd中取出% 、並將它們再次相加,得到和值sum,將該sum 經過一級輸出寄存器REG。ut後輸出,sum即為中間矩陣M的一個係數;(3e)保持殘差矩陣X第1行的係數在輸入寄存器組REGin中不變,並將行變換矩陣R第2列的係數送入輸入寄存器組REGin中保存,重複步驟(3b) 步驟(3d)直至行變換矩陣R第16列的係數被送入至輸入寄存器組REGin中;(3f)將殘差矩陣X第2行的係數與行變換矩陣R第1列的係數同時送入輸入寄存器組REGin中保存,重複步驟(3b) 步驟(3e)直至殘差塊X第16行的係數與行變換矩陣 R第16列的係數被同時送入輸入寄存器組REGin中。步驟4,開闢一個新的雙埠 RAM,記為RAMm,將輸出的中間矩陣M的係數從RAMm的A埠寫入,當256個係數全部寫入完畢,產生一個脈衝指示信號。步驟5,在步驟4產生的脈衝信號指示下,控制存儲中間矩陣M的RAMm的B埠地址端,使該中間矩陣M的係數按列的順序串行讀出本步驟中控制RAMm的B埠地址端的方法是(5a)設定RAMm的B埠的地址初始值為0 ;(5b)在每個時鐘周期內對地址加17,重複進行16個時鐘周期;(5c)在下一個時鐘周期內保持地址不變;(5d)在下一個時鐘周期內將地址減254,即跳轉到保存下一列第一個數據的地址;(5e)將步驟(5b) 步驟(5d)重複16次。步驟6,在步驟4產生的脈衝信號指示下,控制存儲列變換矩陣C的RAM2的地址端,並令RAM2的輸出端同時輸出數據,使每個時鐘周期內讀出列變換矩陣C的一個列向量, 其中控制RAM2地址端的步驟是在每個時鐘周期內對RAM2的地址加1,重複進行16個時鐘周期;在下一個時鐘周期內保持RAM2的地址不變;依此重複進行16次。步驟7,將由步驟5產生的中間矩陣M的係數和由步驟6產生的列變換矩陣C的係數同時送入FPGA中的「DSP48E單元」進行乘累加運算,得到最終的變換結果矩陣,該矩陣在每17個時鐘周期內輸出一個列向量。參照圖4,本步驟的具體實現如下(7a)將按列串行輸出的中間矩陣M的係數mk,k = 0,1,...25516 = 0,分別與列變換矩陣C第1列的係數Cu C1^相乘,結果記為CMu CM1M ;(7b)在下一個時鐘周期內將中間矩陣M的係數mk+1分別與列變換矩陣C第2列的係數(3cm C15il相乘,並將該16個乘積與CMcia CM15il對應相加,所得結果記為CMcm CM15a ;(7c)重複步驟(7b)直到中間矩陣M的係數mk+15分別與列變換矩陣C第16列的係數C(1,15 C15,5相乘,所得的16個乘積與CMcm4 CM15,14對應相加完畢為止,得到的CMtl, 15 CM15,15即為最終變換結果矩陣的一個列向量。以上僅為本發明的一個具體實例,不構成對本發明的任何限制,顯然在本發明的思想下,可做出不同修改與變更,但這些均在本發明的保護之列。
權利要求
1.一種用FPGA實現一維KLT變換的方法,包括如下步驟(1. 1)將大小為4X4的圖像殘差矩陣按行展成一維列向量,離線訓練後得到大小為 16 X 16的KLT矩陣,將它們存儲在FPGA中的8個雙埠 RAM中;(1.2)控制8個雙埠RAM的埠,在每個時鐘周期內將每個RAM的地址同時加1,並令兩個輸出端同時輸出,使每個時鐘周期內讀出變換矩陣的一個行向量;(1.3)將殘差列向量的係數和讀出的變換矩陣行向量的係數同時送入FPGA中的 "DSP48E單元」進行乘加運算,即可得到變換結果向量中的一個係數;(1.4)重複步驟(1.2)和(1.3),即從RAM中讀出變換矩陣下一行的係數與殘差列向量的係數進行乘加運算,直到變換結果向量的16個數據計算完畢。
2.一種用FPGA實現二維KLT變換的方法,包括如下步驟(2. 1)對大小為16X16的圖像殘差矩陣X進行離線訓練,得到大小為16X16的KLT行變換矩陣R和大小為16X16的KLT列變換矩陣C,將行變換矩陣R存儲在第一組的8個雙埠 RAM中,記為RAM1,將列變換矩陣C存儲在第二組的8個雙埠 RAM中,記為RAM2 ;(2. 2)控制存儲行變換矩陣R的RAM1的地址端,並令RAM1的輸出端同時輸出數據,使每個時鐘周期內讀出行變換矩陣R的一個列向量;(2. 3)將殘差矩陣X行向量的係數與讀出的行變換矩陣R列向量的係數同時送入FPGA 中的「DSP48E單元」進行乘加運算,得到的結果為中間矩陣M的係數,該中間矩陣M的係數以行的順序串行輸出;(2.4)開闢一個新的雙埠 RAM,記為RAMm,將輸出的中間矩陣M的係數從RAMm的A埠寫入,當256個係數全部寫入完畢,產生一個脈衝指示信號;(2. 5)在步驟(2. 4)產生的脈衝信號指示下,控制存儲中間矩陣M的RAMm的B埠地址端,使該中間矩陣M的係數按列的順序串行讀出;(2. 6)在步驟(2. 4)產生的脈衝信號指示下,控制存儲列變換矩陣C的RAM2的地址端, 並令RAM2的輸出端同時輸出數據,使每個時鐘周期內讀出列變換矩陣C的一個列向量;(2. 7)將由步驟(2. 5)產生的中間矩陣M的係數和由步驟(2. 6)產生的列變換矩陣C 列向量的係數同時送入FPGA中的「DSP48E單元」進行乘累加運算,得到最終的變換結果矩陣,該矩陣在每17個時鐘周期內輸出一個列向量。
3.根據權利要求1所述的用FPGA實現一維KLT變換的方法,其中步驟(1. 所述的將殘差列向量的係數和讀出的變換矩陣行向量的係數同時送入FPGA中的「DSP48E單元」進行乘加運算,按照如下步驟進行(1. 3a)將變換矩陣行向量的係數與殘差列向量的係數同時送入「DSP48E單元」內部的輸入寄存器組REGin中保存;(1. 3b)從輸入寄存器組REGin中取出變換矩陣行向量的係數與殘差列向量的係數,並將它們對應相乘,得到16個乘積,保存至寄存器組REGmul中;(1.3c)從寄存器組REGmul中取出16個乘積,分成4組,對每組的4個數求和,得到4個和值,保存至寄存器組REGadd中;(1. 3d)從寄存器組REGadd中取出被保存的4個和值再次相加,得到1個和值,並將該和值經過一級輸出寄存器REG。ut後輸出。
4.根據權利要求2所述的用FPGA實現二維KLT變換的方法,其中步驟(2.2)所述的控制存儲行變換矩陣R的RAM1的地址端,按照如下步驟進行(2. 2a)在每個時鐘周期內對RAM1的地址加1,重複進行16個時鐘周期; (2. 2b)在下一個時鐘周期內保持RAM1的地址不變; (2. 2c)重複步驟(2. 2a) 步驟(2. 2b) 16次。
5.根據權利要求2所述的用FPGA實現二維KLT變換的方法,其中步驟(2.3)所涉及的乘加運算,按照如下步驟進行(2. 3a)將殘差矩陣X第1行係數與行變換矩陣R第1列的係數同時送入「DSP48E單元」內部的輸入寄存器組REGin中保存;(2. 3b)從輸入寄存器組REGin中取出殘差矩陣X行向量的係數與行變換矩陣R列向量的係數,並將它們對應相乘,得到16個乘積,保存至寄存器組REGmul中;(2. 3c)從寄存器組REGmul中取出16個乘積,分成4組,對每組4個數求和,得到4個和值,保存至寄存器組REGadd中;(2. 3d)從寄存器組REGadd中取出被保存的4個和值再次相加,得到1個和值,並將該和值經過一級輸出寄存器REG。ut後輸出;(2. 3e)保持殘差矩陣X第1行的係數在輸入寄存器組REGin中不變,並將行變換矩陣 R第2列的係數送入輸入寄存器組REGin中保存,重複步驟(2. 3b) 步驟(2. 3d)直至行變換矩陣R第16列的係數被送入至輸入寄存器組REGin中;(2. 3f)將殘差矩陣X第2行的係數與行變換矩陣R第1列的係數同時送入輸入寄存器組REGin中保存,重複步驟(2. 3b) 步驟(2. 3e)直至殘差塊X第16行的係數與行變換矩陣R第16列的係數被同時送入輸入寄存器組REGin中。
6.根據權利要求2所述的用FPGA實現二維KLT變換的方法,其中步驟(2.5)所述的控制存儲中間矩陣M的RAMm的B埠地址端,按照如下步驟進行(2. 5a)設定RAMm的B埠的地址初始值為0 ;(2. 5b)在每個時鐘周期內對地址加17,重複進行16個時鐘周期;(2. 5c)在下一個時鐘周期內保持地址不變;(2. 5d)在下一個時鐘周期內將地址減254,即跳轉到保存下一列第一個數據的地址; (2. 5e)重複步驟(2. 5b) 步驟(2. 5d) 16次。
7.根據權利要求2所述的用FPGA實現二維KLT變換的方法,其中步驟(2.6)所述的控制存儲列變換矩陣C的RAM2的地址端,按照如下步驟進行(2. 6a)在每個時鐘周期內對RAM2的地址加1,重複進行16個時鐘周期; (2. 6b)在下一個時鐘周期內保持RAM2的地址不變; (2. 6c)重複步驟(2. 6a) 步驟(2. 6b) 16次。
8.根據權利要求2所述的用FPGA實現二維KLT變換的方法,其中步驟(2.7)所涉及的乘累加運算,按照如下步驟進行(2. 7a)將按列串行輸出的中間矩陣M的係數mk,k = 0,1,. . . 255且16 = 0,分別與列變換矩陣C第1列的係數Cthtl C15itl相乘,結果記為CM" CM1M ;(2. 7b)在下一個時鐘周期內將中間矩陣M的係數mk+1分別與列變換矩陣C第2列的係數Ccm c15a相乘,並將該16個乘積與CMchl CM15il對應相加,所得結果記為CMchl CM15,(2. 7c)重複步驟(2. 7b)直到中間矩陣M的係數mk+15分別與列變換矩陣C第16列的係數C(1,15 C15,15相乘,所得的16個乘積與CMihl4 CM15,14對應相加完畢為止,得到的CMtl, 15 CM15,15即為最終變換結果矩陣的一個列向量。
全文摘要
本發明公開一種用FPGA實現KLT變換的方法。包括一維KLT變換和二維KLT變換,一維KLT變換的步驟是將變換矩陣存儲在雙埠RAM組中;利用「DSP48E單元」完成KLT變換矩陣的係數與殘差矩陣的係數的乘加運算並輸出結果。二維KLT變換的步驟是(1)將行變換矩陣R與列變換矩陣C存儲在雙埠RAM中;(2)利用「DSP48E單元」完成殘差矩陣X的係數與行變換矩陣R的係數的乘加運算,得到中間矩陣M;(3)利用「DSP48E單元」完成中間矩陣M的係數與列變換矩陣C的係數的乘累加運算並輸出結果。本發明減少了其它資源的使用,提升了系統的速度和數據吞吐率,可應用於圖像壓縮編碼技術中。
文檔編號H04N7/26GK102447898SQ201110249279
公開日2012年5月9日 申請日期2011年8月26日 優先權日2011年8月26日
發明者張犁, 曾凡平, 李甫, 楊子龍, 王娟, 石光明, 邱雲輝 申請人:西安電子科技大學

同类文章

一種新型多功能組合攝影箱的製作方法

一種新型多功能組合攝影箱的製作方法【專利摘要】本實用新型公開了一種新型多功能組合攝影箱,包括敞開式箱體和前攝影蓋,在箱體頂部設有移動式光源盒,在箱體底部設有LED脫影板,LED脫影板放置在底板上;移動式光源盒包括上蓋,上蓋內設有光源,上蓋部設有磨沙透光片,磨沙透光片將光源封閉在上蓋內;所述LED脫影

壓縮模式圖樣重疊檢測方法與裝置與流程

本發明涉及通信領域,特別涉及一種壓縮模式圖樣重疊檢測方法與裝置。背景技術:在寬帶碼分多址(WCDMA,WidebandCodeDivisionMultipleAccess)系統頻分復用(FDD,FrequencyDivisionDuplex)模式下,為了進行異頻硬切換、FDD到時分復用(TDD,Ti

個性化檯曆的製作方法

專利名稱::個性化檯曆的製作方法技術領域::本實用新型涉及一種檯曆,尤其涉及一種既顯示月曆、又能插入照片的個性化檯曆,屬於生活文化藝術用品領域。背景技術::公知的立式檯曆每頁皆由月曆和畫面兩部分構成,這兩部分都是事先印刷好,固定而不能更換的。畫面或為風景,或為模特、明星。功能單一局限性較大。特別是畫

一種實現縮放的視頻解碼方法

專利名稱:一種實現縮放的視頻解碼方法技術領域:本發明涉及視頻信號處理領域,特別是一種實現縮放的視頻解碼方法。背景技術: Mpeg標準是由運動圖像專家組(Moving Picture Expert Group,MPEG)開發的用於視頻和音頻壓縮的一系列演進的標準。按照Mpeg標準,視頻圖像壓縮編碼後包

基於加熱模壓的纖維增強PBT複合材料成型工藝的製作方法

本發明涉及一種基於加熱模壓的纖維增強pbt複合材料成型工藝。背景技術:熱塑性複合材料與傳統熱固性複合材料相比其具有較好的韌性和抗衝擊性能,此外其還具有可回收利用等優點。熱塑性塑料在液態時流動能力差,使得其與纖維結合浸潤困難。環狀對苯二甲酸丁二醇酯(cbt)是一種環狀預聚物,該材料力學性能差不適合做纖

一種pe滾塑儲槽的製作方法

專利名稱:一種pe滾塑儲槽的製作方法技術領域:一種PE滾塑儲槽一、 技術領域 本實用新型涉及一種PE滾塑儲槽,主要用於化工、染料、醫藥、農藥、冶金、稀土、機械、電子、電力、環保、紡織、釀造、釀造、食品、給水、排水等行業儲存液體使用。二、 背景技術 目前,化工液體耐腐蝕貯運設備,普遍使用傳統的玻璃鋼容

釘的製作方法

專利名稱:釘的製作方法技術領域:本實用新型涉及一種釘,尤其涉及一種可提供方便拔除的鐵(鋼)釘。背景技術:考慮到廢木材回收後再加工利用作業的方便性與安全性,根據環保規定,廢木材的回收是必須將釘於廢木材上的鐵(鋼)釘拔除。如圖1、圖2所示,目前用以釘入木材的鐵(鋼)釘10主要是在一釘體11的一端形成一尖

直流氧噴裝置的製作方法

專利名稱:直流氧噴裝置的製作方法技術領域:本實用新型涉及ー種醫療器械,具體地說是ー種直流氧噴裝置。背景技術:臨床上的放療過程極易造成患者的局部皮膚損傷和炎症,被稱為「放射性皮炎」。目前對於放射性皮炎的主要治療措施是塗抹藥膏,而放射性皮炎患者多伴有局部疼痛,對於止痛,多是通過ロ服或靜脈注射進行止痛治療

新型熱網閥門操作手輪的製作方法

專利名稱:新型熱網閥門操作手輪的製作方法技術領域:新型熱網閥門操作手輪技術領域:本實用新型涉及一種新型熱網閥門操作手輪,屬於機械領域。背景技術::閥門作為流體控制裝置應用廣泛,手輪傳動的閥門使用比例佔90%以上。國家標準中提及手輪所起作用為傳動功能,不作為閥門的運輸、起吊裝置,不承受軸向力。現有閥門

用來自動讀取管狀容器所載識別碼的裝置的製作方法

專利名稱:用來自動讀取管狀容器所載識別碼的裝置的製作方法背景技術:1-本發明所屬領域本發明涉及一種用來自動讀取管狀容器所載識別碼的裝置,其中的管狀容器被放在循環於配送鏈上的文檔匣或託架裝置中。本發明特別適用於,然而並非僅僅專用於,對引入自動分析系統的血液樣本試管之類的自動識別。本發明還涉及專為實現讀