一種基于RLE和LZW的優化比特文件壓縮與解壓縮方法,通過對FPGA配置比特文件進行數據格式分析,摳出比特文件的頭部控制字,從真實配置數據開始,采用游長為4的RLE編碼進行初步壓縮,再進行LZW壓縮進一步提升壓縮率。解壓縮時為壓縮的逆過程,先進行LZW解壓縮還原出中間數據,再對不包含頭部控制字的數據部分進行RLE解壓縮,還原出原始的FPGA配置比特文件。該方法綜合考慮了壓縮/解壓縮的時間和壓縮率,與Xilinx自帶的壓縮工具比較,與單純應用RLE算法,單純應用LZW算法比較,實現了壓縮率與壓縮速度的雙贏。解決了Xilinx先進型號FPGA配置比特文件過大的問題,節省了存儲芯片的開銷,為FPGA在軌重構技術提供了關鍵技術支撐。
【技術實現步驟摘要】
本專利技術涉及一種基于RLE和LZW的優化比特文件壓縮與解壓縮方法,屬于通信中比特文件壓縮與解壓縮
技術介紹
隨著星上應用復雜度的增加,對星上數據處理能力的要求也越來越高,采用的FPGA型號也隨著應用復雜度的提升而不得不采用更高等級的器件。這些先進型號的FPGA由于功能的更為強大,所對應的比特文件也變得更大,配置一片V5130T的FPGA的比特文件較V4SX55增長了大約3倍左右,這就意味著應用一片V5FPGA需要過去3倍的存儲資源來存儲配置比特,這對星上有限的資源來說無疑是個問題,必須要采取一定的壓縮方法來降低存儲資源。而且必須滿足以下要求:1)必須無損的還原比特文件,對比特流進行解壓縮要求能夠準確地恢復出原數據;2)壓縮率要高,壓縮解壓縮時間要短。針對這個問題及以上兩點要求,提出了一種基于RLE和LZW的優化比特文件壓縮與解壓縮方法,以實現高速高壓縮率的比特文件壓縮解壓縮。數據壓縮通常包括有損壓縮和無損壓縮兩種。有損壓縮是有失真的壓縮,不可逆的,信息會受到損失。無損壓縮是無失真的壓縮,壓縮過程中去除數據中的冗余度,解壓后不丟失任何信息,與壓縮前完全一致。無損壓縮通常用于文本、程序、重要數據的壓縮,它能保證完全地恢復原始數據。對比特流進行壓縮要求能夠準確地恢復出原數據,因此需要選用無損壓縮技術對比特文件進行壓縮和解壓縮來解決配置比特數據的傳輸和存儲問題。經典的無損壓縮算法主要有:基于統計模式的算法,如香農編碼、霍夫曼編碼、算術編碼等;基于字典模式的算法,如LZ系列算法;還有一些其它的算法,如游程編碼、JPEG-LS算法、JPEG2000的DEM算法、BWT算法等。綜合考慮設計復雜度和壓縮效率,字典模式的算法較統計模式的算法更適合用于比特文件壓縮。國內外目前針對比特文件壓縮主要采用的壓縮方法是字典式壓縮或者采用游程編碼技術壓縮。Xilinx自己的壓縮工具采用字典式的LZ77方法進行比特文件壓縮。通過后面的實驗數據可以看出,Xilinx壓縮的比特文件壓縮率并不高。
技術實現思路
本專利技術解決的技術問題為:克服現有技術不足,提供一種基于RLE和LZW的優化比特文件壓縮與解壓縮方法,在快速壓縮和高壓縮率的要求下,本專利技術通過對比特文件數據結構進行分析,適應性的優化改進了RLE算法,并結合LZW方法進一步提升壓縮率,設計了一種基于RLE和LZW的優化比特文件壓縮/解壓縮方法,該方法通過對比特文件數據結構的分析,創造性的根據比特文件特點優化了RLE算法;在應用優化RLE算法的基礎上,為了進一步提升壓縮率,創造性地將優化后的RLE算法并與LZW算法結合,應用于比特文件壓縮解壓縮。該方法節省了存儲資源,提高了計算效率,壓縮及解壓縮的設計實現,驗證了方法的正確性、有效性、高效性和可行性。本專利技術解決的技術方案為:一種基于RLE和LZW的優化比特文件壓縮方法,包括步驟如下:步驟一:FPGA配置比特文件由多部分數據組成,包含頭部控制字、數據和命令字,其中,數據和命令字格式都是以四字節為一個單位,摳除FPGA配置比特文件的頭部控制字;初始化RLE中的游長計數器;將RLE的游程長度根據步驟一所述比特文件數據特點設置為4;初始化LZW的壓縮字典,使字典包含所有可能的根,所述根為單一詞條;設置前綴pre_char,令當前前綴pre_char為空;步驟二:設置字符串pre_string;將步驟一中摳除頭部控制字的FPGA配置比特文件的第一個字符串賦給字符串pre_string;所述摳除頭部控制字的FPGA配置比特文件為被壓縮文件;步驟三:將被壓縮文件進行壓縮,步驟如下:(1)判斷被壓縮文件中是否有字符串需要壓縮,如果沒有字符串需要壓縮,則先輸出字符串pre_string,再輸出游長計數器的值,進入步驟四;(2)如果有字符串需要壓縮,設置當前字符串current_string,令當前字符串current_string等于字符流中的下一個字符串;(3)判斷pre_string與current_string是否一致:如果pre_string與current_string一致,游長計數器加1,判斷游長計數器值是否計到255;如果游長計數器值計到255,先輸出pre_string,再輸出游長計數器值,令游長計數器值為1,讀取待壓縮文件的未壓縮的字符串給pre_string,返回步驟三如果游長計數器值未計到255,返回步驟三;如果pre_string與current_string不一致,輸出pre_string,輸出游長計數器值,將此時current_string賦給pre_string,返回步驟三;步驟四:設定當前字符current_char,按照步驟三(1)輸出順序,將輸出依次排列成新的字符流,讀取該字符流中的第一個字符賦給current_char;步驟五:判斷pre_char與current_char依次排列組成的詞條是否在字典中:如果在字典中,將pre_char與current_char依次排列組成的詞條賦給pre_char;如果未在字典中,則輸出當前前綴pre_char的碼字,添加pre_char與current_char依次排列組成的詞條到字典中,將current_char的值賦給pre_char;步驟六:判斷新的字符流中是否還有字符需要壓縮,如果有字符需要壓縮,將需要壓縮的第一個字符賦給current_char,返回步驟五;如果沒有字符需要壓縮,輸出當前前綴pre_char的碼字,完成壓縮。LZW的壓縮字典用于存儲壓縮過程中產生的詞條。游長計數器,從1開始計數,即讀取第一個字符串時計1,能夠在遇到連續重復出現的字符串時每次加1,直到出現不同的字符串時,能夠輸出游長計數器的值,還原初值1;游長計數器的值為1-255,達到255時還原1。初始化LZW的壓縮字典的索引值為1-4096。一種基于RLE和LZW的優化比特文件解壓縮方法,包括步驟如下:步驟一:初始化解壓縮字典,使字典包含所有可能的根,所述根為單一詞條;步驟二:設置變量pw,讀取待解壓縮數據流中第一個碼流,賦值給pw,以pw為索引查詢解壓縮字典,讀取該索引對應的詞條,設置字符串變量pre_char,將pw表示的索引對應的詞條賦給pre_char,并輸出pre_char;步驟三:設置變量cw,繼續讀取待解壓縮數據中的下一個碼流,賦值給cw,判斷在字典中是否有cw表示的索引對應的詞條,如果有cw表示的索引對應的詞條,輸出cw表示的索引對應的詞條,即cw表示的索引對應的字符串數據,設置變量current_char,將cw表示的索引對應的字符串數據賦值給current_char,設置字符變量pc,將pre_char賦值給pc,設置字符變量cc,將current_char對應的詞條的第一個字符賦給cc,將pc和cc依次排列組成的字符串添加到解壓縮字典中;如果沒有cw表示的索引對應的詞條,將pre_char的值賦給pc,將current_char的第一個字符賦給cc,輸出pc和cc依次排列組成的字符串數據,并添加pc和cc依次排列組成的字符串數據到字典中;步驟四:判斷待解壓縮數據流中是否還有數據需要解壓縮,如果還有數據需要解壓縮,返回步驟三;如果沒有數據需要解壓縮,將步驟三本文檔來自技高網...

【技術保護點】
一種基于RLE和LZW的優化比特文件壓縮方法,其特征在于:包括步驟如下:步驟一:FPGA配置比特文件由多部分數據組成,包含頭部控制字、數據和命令字,其中,數據和命令字格式都是以四字節為一個單位,摳除FPGA配置比特文件的頭部控制字;初始化RLE中的游長計數器;將RLE的游程長度根據步驟一所述比特文件數據特點設置為4;初始化LZW的壓縮字典,使字典包含所有可能的根,所述根為單一詞條;設置前綴pre_char,令當前前綴pre_char為空;步驟二:設置字符串pre_string;將步驟一中摳除頭部控制字的FPGA配置比特文件的第一個字符串賦給字符串pre_string;所述摳除頭部控制字的FPGA配置比特文件為被壓縮文件;步驟三:將被壓縮文件進行壓縮,步驟如下:(1)判斷被壓縮文件中是否有字符串需要壓縮,如果沒有字符串需要壓縮,則先輸出字符串pre_string,再輸出游長計數器的值,進入步驟四;(2)如果有字符串需要壓縮,設置當前字符串current_string,令當前字符串current_string等于字符流中的下一個字符串;(3)判斷pre_string與current_string是否一致:如果pre_string與current_string一致,游長計數器加1,判斷游長計數器值是否計到255;如果游長計數器值計到255,先輸出pre_string,再輸出游長計數器值,令游長計數器值為1,讀取待壓縮文件的未壓縮的字符串給pre_string,返回步驟三如果游長計數器值未計到255,返回步驟三;如果pre_string與current_string不一致,輸出pre_string,輸出游長計數器值,將此時current_string賦給pre_string,返回步驟三;步驟四:設定當前字符current_char,按照步驟三(1)輸出順序,將輸出依次排列成新的字符流,讀取該字符流中的第一個字符賦給current_char;步驟五:判斷pre_char與current_char依次排列組成的詞條是否在字典中:如果在字典中,將pre_char與current_char依次排列組成的詞條賦給pre_char;如果未在字典中,則輸出當前前綴pre_char的碼字,添加pre_char與current_char依次排列組成的詞條到字典中,將current_char的值賦給pre_char;步驟六:判斷新的字符流中是否還有字符需要壓縮,如果有字符需要壓縮,將需要壓縮的第一個字符賦給current_char,返回步驟五;如果沒有字符需要壓縮,輸出當前前綴pre_char的碼字,完成壓縮。...
【技術特征摘要】
1.一種基于RLE和LZW的優化比特文件壓縮方法,其特征在于:包括步驟如下:步驟一:FPGA配置比特文件由多部分數據組成,包含頭部控制字、數據和命令字,其中,數據和命令字格式都是以四字節為一個單位,摳除FPGA配置比特文件的頭部控制字;初始化RLE中的游長計數器;將RLE的游程長度根據步驟一所述比特文件數據特點設置為4;初始化LZW的壓縮字典,使字典包含所有可能的根,所述根為單一詞條;設置前綴pre_char,令當前前綴pre_char為空;步驟二:設置字符串pre_string;將步驟一中摳除頭部控制字的FPGA配置比特文件的第一個字符串賦給字符串pre_string;所述摳除頭部控制字的FPGA配置比特文件為被壓縮文件;步驟三:將被壓縮文件進行壓縮,步驟如下:(1)判斷被壓縮文件中是否有字符串需要壓縮,如果沒有字符串需要壓縮,則先輸出字符串pre_string,再輸出游長計數器的值,進入步驟四;(2)如果有字符串需要壓縮,設置當前字符串current_string,令當前字符串current_string等于字符流中的下一個字符串;(3)判斷pre_string與current_string是否一致:如果pre_string與current_string一致,游長計數器加1,判斷游長計數器值是否計到255;如果游長計數器值計到255,先輸出pre_string,再輸出游長計數器值,令游長計數器值為1,讀取待壓縮文件的未壓縮的字符串給pre_string,返回步驟三如果游長計數器值未計到255,返回步驟三;如果pre_string與current_string不一致,輸出pre_string,輸出游長計數器值,將此時current_string賦給pre_string,返回步驟三;步驟四:設定當前字符current_char,按照步驟三(1)輸出順序,將輸出依次排列成新的字符流,讀取該字符流中的第一個字符賦給current_char;步驟五:判斷pre_char與current_char依次排列組成的詞條是否在字典中:如果在字典中,將pre_char與current_char依次排列組成的詞條賦給pre_char;如果未在字典中,則輸出當前前綴pre_char的碼字,添加pre_char與current_char依次排列組成的詞條到字典中,將current_char的值賦給pre_char;步驟六:判斷新的字符流中是否還有字符需要壓縮,如果有字符需要壓縮,將需要壓縮的第一個字符賦給current_char,返回步驟五;如果沒有字符需要壓縮,輸出當前前綴pre_char的碼字,完成壓縮。2.根據權利要求1所述的一種基...
【專利技術屬性】
技術研發人員:楊玉辰,周國昌,賴曉玲,袁雅婧,高翔,
申請(專利權)人:西安空間無線電技術研究所,
類型:發明
國別省市:陜西;61
還沒有人留言評論。發表了對其他瀏覽者有用的留言會獲得科技券。