本發(fā)明涉及數(shù)據(jù)處理領(lǐng)域,具體而言,涉及一種數(shù)據(jù)處理方法及裝置。
背景技術(shù):
當(dāng)前區(qū)間編碼以及算術(shù)編碼雖然能對數(shù)據(jù)進行一定程度的壓縮,但是其壓縮率并不高。
技術(shù)實現(xiàn)要素:
有鑒于此,本發(fā)明實施例提供了一種數(shù)據(jù)處理方法及裝置,以解決上述問題。
第一方面,本發(fā)明實施例提供的一種數(shù)據(jù)處理方法,所述方法包括:將一個非稀疏矩陣轉(zhuǎn)換為多個單元矩陣,其中,各個所述單元矩陣分別與所述非稀疏矩陣中的一個符號相對應(yīng),每個所述單元矩陣中元素1的位置與所述單元矩陣對應(yīng)的符號在預(yù)設(shè)順序表中的位置相對應(yīng),所述預(yù)設(shè)順序表是指將所述非稀疏矩陣中所有符號按照預(yù)設(shè)順序排列的表;將各個所述單元矩陣,按照預(yù)設(shè)消除規(guī)則處理后,分別形成對應(yīng)的多個二進制數(shù);分別將所述各個二進制數(shù)進行熵編碼,形成多個壓縮后的二進制數(shù);若所述壓縮后的二進制數(shù)中包括多個連續(xù)的1,將所述壓縮后的二進制數(shù)按照預(yù)設(shè)轉(zhuǎn)換規(guī)則進行轉(zhuǎn)換,獲得轉(zhuǎn)換后的二進制數(shù);將所述轉(zhuǎn)換后的二進制數(shù),按照預(yù)設(shè)編碼規(guī)則進行編碼,獲得編碼輸出。
第二方面,本發(fā)明實施例提供的一種數(shù)據(jù)處理裝置,所述裝置包括:第一轉(zhuǎn)換模塊,用于將一個非稀疏矩陣轉(zhuǎn)換為多個單元矩陣,其中,各個所述單元矩陣分別與所述非稀疏矩陣中的一個符號相對應(yīng),每個所述單元矩陣中元素1的位置與所述單元矩陣對應(yīng)的符號在預(yù)設(shè)順序表中的位置相對應(yīng),所述預(yù)設(shè)順序表是指將所述非稀疏矩陣中所有符號按照預(yù)設(shè)順序排列的表;消除模塊,用于將各個所述單元矩陣,按照預(yù)設(shè)消除規(guī)則處理后,分別形成對應(yīng)的多個二進制數(shù);第一編碼模塊,用于分別將所述各個二進制數(shù)進行熵編碼,形成多個壓縮后的二進制數(shù);第二轉(zhuǎn)換模塊,用于若所述壓縮后的二進制數(shù)中包括多個連續(xù)的1,將所述壓縮后的二進制數(shù)按照預(yù)設(shè)轉(zhuǎn)換規(guī)則進行轉(zhuǎn)換,獲得轉(zhuǎn)換后的二進制數(shù);第二編碼模塊,用于將所述轉(zhuǎn)換后的二進制數(shù),按照預(yù)設(shè)編碼規(guī)則進行編碼,獲得編碼輸出。
與現(xiàn)有技術(shù)相比,本發(fā)明實施例提供的一種數(shù)據(jù)處理方法及裝置,通過對由待編碼字符構(gòu)成的稀疏矩陣進行預(yù)處理,將其變成多個單元矩陣,并分別對各個單元矩陣按照消除規(guī)則,轉(zhuǎn)換為二進制數(shù),并分別對所述二進制數(shù)進行熵編碼獲得壓縮后的二進制數(shù),并對壓縮后的二進制數(shù)再次進行轉(zhuǎn)換,最終根據(jù)預(yù)設(shè)編碼規(guī)則進行編碼,使得編碼輸出進一步被壓縮,壓縮率變大,并且所述方法可以迭代實施,能夠取得更好的壓縮效果。
為使本發(fā)明的上述目的、特征和優(yōu)點能更明顯易懂,下文特舉較佳實施例,并配合所附附圖,作詳細(xì)說明如下。
附圖說明
為了更清楚地說明本發(fā)明實施例的技術(shù)方案,下面將對實施例中所需要使用的附圖作簡單地介紹,應(yīng)當(dāng)理解,以下附圖僅示出了本發(fā)明的某些實施例,因此不應(yīng)被看作是對范圍的限定,對于本領(lǐng)域普通技術(shù)人員來講,在不付出創(chuàng)造性勞動的前提下,還可以根據(jù)這些附圖獲得其他相關(guān)的附圖。
圖1是本發(fā)明實施例提供的一種服務(wù)器的方框圖。
圖2是本發(fā)明第一實施例提供的一種數(shù)據(jù)處理方法的流程圖。
圖3是本發(fā)明第一實施例提供的一種數(shù)據(jù)處理方法中步驟S320的部分流程圖。
圖4是本發(fā)明第一實施例提供的一種數(shù)據(jù)處理方法中步驟S340的部分流程圖。
圖5是本發(fā)明第一實施例提供的一種數(shù)據(jù)處理方法中步驟S350的部分流程圖。
圖6是本發(fā)明第二實施例提供的一種數(shù)據(jù)處理裝置的功能模塊示意圖。
具體實施方式
下面將結(jié)合本發(fā)明實施例中附圖,對本發(fā)明實施例中的技術(shù)方案進行清楚、完整地描述,顯然,所描述的實施例僅僅是本發(fā)明一部分實施例,而不是全部的實施例。通常在此處附圖中描述和示出的本發(fā)明實施例的組件可以以各種不同的配置來布置和設(shè)計。因此,以下對在附圖中提供的本發(fā)明的實施例的詳細(xì)描述并非旨在限制要求保護的本發(fā)明的范圍,而是僅僅表示本發(fā)明的選定實施例?;诒景l(fā)明的實施例,本領(lǐng)域技術(shù)人員在沒有做出創(chuàng)造性勞動的前提下所獲得的所有其他實施例,都屬于本發(fā)明保護的范圍。
應(yīng)注意到:相似的標(biāo)號和字母在下面的附圖中表示類似項,因此,一旦某一項在一個附圖中被定義,則在隨后的附圖中不需要對其進行進一步定義和解釋。同時,在本發(fā)明的描述中,術(shù)語“第一”、“第二”等僅用于區(qū)分描述,而不能理解為指示或暗示相對重要性。
如圖1所示,是服務(wù)器的方框示意圖。所述服務(wù)器包括數(shù)據(jù)處理裝置210、存儲器220、存儲控制器230、處理器240。
所述存儲器220、存儲控制器230、處理器240各元件相互之間直接或間接地電性連接,以實現(xiàn)數(shù)據(jù)的傳輸或交互。例如,這些元件相互之間可通過一條或多條通訊總線或信號線實現(xiàn)電性連接。所述數(shù)據(jù)處理裝置210包括至少一個可以軟件或固件(firmware)的形式存儲于所述存儲器中或固化在所述服務(wù)器200的操作系統(tǒng)(operating system,OS)中的軟件功能模塊。所述處理器240用于執(zhí)行存儲器220中存儲的可執(zhí)行模塊,例如所述數(shù)據(jù)處理裝置210包括的軟件功能模塊或計算機程序。
其中,存儲器220可以是,但不限于,隨機存取存儲器(Random Access Memory,RAM),只讀存儲器(Read Only Memory,ROM),可編程只讀存儲器(Programmable Read-Only Memory,PROM),可擦除只讀存儲器(Erasable Programmable Read-Only Memory,EPROM),電可擦除只讀存儲器(Electric Erasable Programmable Read-Only Memory,EEPROM)等。其中,存儲器220用于存儲程序,所述處理器240在接收到執(zhí)行指令后,執(zhí)行所述程序,前述本發(fā)明實施例任一實施例揭示的流過程定義的服務(wù)器所執(zhí)行的方法可以應(yīng)用于處理器中,或者由處理器實現(xiàn)。
處理器240可能是一種集成電路芯片,具有信號的處理能力。上述的處理器可以是通用處理器,包括中央處理器(Central Processing Unit,簡稱CPU)、網(wǎng)絡(luò)處理器(Network Processor,簡稱NP)等;還可以是數(shù)字信號處理器(DSP)、專用集成電路(ASIC)、現(xiàn)成可編程門陣列(FPGA)或者其他可編程邏輯器件、分立門或者晶體管邏輯器件、分立硬件組件。可以實現(xiàn)或者執(zhí)行本發(fā)明實施例中的公開的各方法、步驟及邏輯框圖。通用處理器可以是微處理器或者該處理器也可以是任何常規(guī)的處理器等。
圖2示出了本發(fā)明第一實施例提供的一種數(shù)據(jù)處理方法的流程圖,所述方法包括:
步驟S310,將一個非稀疏矩陣轉(zhuǎn)換為多個單元矩陣,其中,各個所述單元矩陣分別與所述非稀疏矩陣中的一個符號相對應(yīng),每個所述單元矩陣中元素1的位置與所述單元矩陣對應(yīng)的符號在預(yù)設(shè)順序表中的位置相對應(yīng),所述預(yù)設(shè)順序表是指將所述非稀疏矩陣中所有符號按照預(yù)設(shè)順序排列的表。
步驟S310的實施方式有多種,下面介紹一種,可以理解的是,并不局限于此。
實施步驟如下所述:
步驟1:設(shè)非稀疏矩陣P為有Lp個符號的集合,預(yù)設(shè)順序表Sp為非稀疏矩陣P的中所有符號按照預(yù)設(shè)順序排列的表,Pi∈P(i是小于等于Lp-1的含0自然數(shù)),i是符號Pi的序號。
步驟2:設(shè)Q是非稀疏矩陣P中符號所組成的長度h(h≥1)的所有序列的集合,SQ是集合中Q中元素按Sp表字典序排列的表,其長度為LSQ。當(dāng)h=1時,相當(dāng)于對數(shù)據(jù)的處理是以數(shù)據(jù)產(chǎn)生集合中的元素為單位進行的;當(dāng)h>1時,對數(shù)據(jù)的處理是按照數(shù)據(jù)產(chǎn)生集合中元素組成的長度為h的序列為單位進行的。
步驟3:設(shè)R為集合Q中元素產(chǎn)生的一個數(shù)據(jù)序列,其長度為LR。
步驟4:設(shè)C是m*n(m、n是正整數(shù))的矩陣,其每個元素Cij(i∈[0,m-1],j∈[0,n-1])是從R上按順序截取下來的長度為h的子序列,并按矩陣元素的順序排列在矩陣R中,因此有Cij∈Q。
步驟5:按SQ表的順序,從矩陣C中提取SQ表中元素SQ[k](k∈[0,LSQ-1])的單元矩陣C_SQ[k]。C_SQ[k]是m*n矩陣,且每個元素C_SQ[k]ij(i∈[0,m-1],j∈[0,n-1])的取值規(guī)則是:當(dāng)i∈[0,m-1],j∈[0,n-1],k∈[0,L_SQ-1],如果Cij=SQ[k]時,C_SQ[k]ij=1;否則C_SQ[k]ij=0。這樣,將矩陣C轉(zhuǎn)義成了LSQ個單元矩陣組。
步驟6:重復(fù)進行步驟(1)到(5)。如果在R的末尾時,其剩余長度不夠時,用“0”補足。
步驟S320,將各個所述單元矩陣,按照預(yù)設(shè)消除規(guī)則處理后,分別形成對應(yīng)的多個二進制數(shù)。
請參閱圖3,作為一種實施方式,所述預(yù)設(shè)消除規(guī)則包括:
步驟S321,將第一個所述單元矩陣按照順序掃描形成二進制數(shù),并將第一個所述單元矩陣記為已消除矩陣。
步驟S322,將第二個所述單元矩陣作為待消除矩陣;獲取已消除矩陣中元素1出現(xiàn)的位置,記為消除位置;根據(jù)所述消除位置,將所述待消除矩陣中對應(yīng)位置處的元素刪除;掃描所述待消除矩陣中剩余元素,形成二進制數(shù)。
步驟S323,將第二個所述單元矩陣記為已消除矩陣,并繼續(xù)處理下一個單元矩陣,直到所有單元矩陣處理完畢。
可以理解的是,按照順序獲取的單元矩陣中,第n個符號對應(yīng)的單元矩陣中出現(xiàn)符號1的位置會在后續(xù)的Lp-n個單元矩陣中一定會是0,所以,Lp-n個單元矩陣可以將前面出現(xiàn)過1的位置消除。
例如:256*256的原始矩陣中,存在256個元素(即0到255)。符號0對應(yīng)的單元矩陣,是256*256的原始矩陣中,出現(xiàn)符號0時,當(dāng)前位置置1;否則為0。那么符號1的單元矩陣,可以在去掉符號0以后提取出來的單元矩陣。
步驟S330,分別將所述各個二進制數(shù)進行熵編碼,形成多個壓縮后的二進制數(shù)。
其中,熵編碼的實施方式有多種,例如,哈夫曼編碼,算法編碼或者區(qū)間編碼等。
下面以算法編碼為例,進行說明:
在兩個輸入字符中,出現(xiàn)概率較大的為MPS(More Probable Symbol),MPS的概率為Pe;出現(xiàn)概率較小的為LPS(Less Probable Symbol),LPS的概率為Qe,Pe=1-Qe。如上述二進制化之后,0就是MPS,1是LPS;如果反過來進行二進制化,那么1就是MPS,0是LPS;
編碼時,設(shè)置兩個專用寄存器(C,A),C寄存器的值為編碼點(指針?biāo)柑?,初時化為0,即為區(qū)間的下限。A寄存器的值為子區(qū)間的寬度(該寬度恰好是已輸入符號串的概率),初時化為1,那么區(qū)間的上限就是C+A。
隨著被編碼數(shù)據(jù)源輸入,C和A的內(nèi)容按以下編碼規(guī)則修正:
當(dāng)?shù)透怕史朙PS到來時:C=C,A=AQe。
當(dāng)高概率符號MPS到來時:C=C+AQe,A=Ape=A(1-Qe)。
例:信源符號序列11011111
0為LPS:Qe=1/8=(0.001)b
1為MPS:Pe=7/8=(0.111)b
初始狀態(tài):C=0(子區(qū)間起始位置)A=1(子區(qū)間寬度)
(1)第1個符號1為MPS
C=C+AQe=0+1 0.001=0.001
A=APe=1 0.111=0.111
(2)第2個符號1仍為MPS
C=C+AQe=0.001+0.111 0.001=0.001111
A=APe=0.111 0.111=0.110001
(3)第3個符號0為LPS
C=C=0.001111
A=A Qe=0.110001 0.001=0.000110001
依次類推.最后獲得:
C=0.010001111110111100000001
A=0.000011001001000010111111
此時區(qū)間的尾為C+A=0.010101000111111111000000,編碼區(qū)間[C,C+A)
壓縮后的二進制數(shù)可以是最后一個編碼區(qū)間中的任意小數(shù)值,但為了取得最好的編碼效率,選擇的小數(shù)應(yīng)有最短的比特長度。上述示例中可取0.0101,即壓縮后的二進制數(shù)為0101。
步驟S340,若所述壓縮后的二進制數(shù)中包括多個連續(xù)的1,將所述壓縮后的二進制數(shù)按照預(yù)設(shè)轉(zhuǎn)換規(guī)則進行轉(zhuǎn)換,獲得轉(zhuǎn)換后的二進制數(shù)。
請參閱圖4,作為一種實施方式,所述預(yù)設(shè)轉(zhuǎn)換規(guī)則包括:
步驟S341,將第一標(biāo)簽的值設(shè)置為0,將第二標(biāo)簽的值設(shè)置為1。
步驟S342,將所述壓縮后的二進制數(shù)的第一位作為當(dāng)前待編碼字符。
步驟S343,若所述當(dāng)前待編碼字符為1,則所述待編碼字符對應(yīng)的編碼輸出為第二標(biāo)簽的值,并將所述第一標(biāo)簽與所述第二標(biāo)簽的值交換;若所述當(dāng)前待編碼字符為0,則所述待編碼字符對應(yīng)的編碼輸出為第一標(biāo)簽的值,所述第一標(biāo)簽與所述第二標(biāo)簽的值不變。
步驟S345,將所述當(dāng)前待編碼字符的下一字符作為當(dāng)前待編碼字符,對所述待編碼字符進行轉(zhuǎn)換,直到所述壓縮后的二進制數(shù)的字符全部轉(zhuǎn)換完成,獲得轉(zhuǎn)換后的二進制數(shù)。
例如:壓縮后的二進制數(shù)1011110010100001為例:
假設(shè)第一標(biāo)簽index_0=0,第二標(biāo)簽index_1=1,bit為當(dāng)前待編碼的二進制值,
若bit=1,則bit=index_1,index_1=0,index_0=1;
若bit=0,bit=index_0,index_0=0;index_1=1。
依次類推,將壓縮后的二進制數(shù)1011110010100001進行轉(zhuǎn)換后,獲得轉(zhuǎn)換后的二進制數(shù)為:1110001011110001。
進一步的,可以將所述轉(zhuǎn)換后的二進制數(shù),多次按照預(yù)設(shè)轉(zhuǎn)換規(guī)則,進行轉(zhuǎn)換并記錄轉(zhuǎn)換次數(shù)。
接上例,再按照上述同樣的方法將1110001011110001轉(zhuǎn)化為1001001110001001,此時1001001110001001串中不會出現(xiàn)連續(xù)4個以上出現(xiàn)0和1。此時,記錄轉(zhuǎn)化次數(shù)Times=2.
步驟S350,將所述轉(zhuǎn)換后的二進制數(shù),按照預(yù)設(shè)編碼規(guī)則進行編碼,獲得編碼輸出。
請參閱圖5,作為一種實施方式,所述預(yù)設(shè)編碼規(guī)則包括:
步驟S351,對初始編碼空間進行空間擴展得到擴展后的空間,根據(jù)所述轉(zhuǎn)換后的二進制數(shù)中的字符的靜態(tài)統(tǒng)計模型,對擴展后的初始編碼空間進行劃分,以獲得當(dāng)前待編碼字符對應(yīng)的編碼空間;
步驟S352,對所述當(dāng)前編碼字符對應(yīng)的編碼空間進行擴展,得到擴展后的編碼空間;根據(jù)所述字符的統(tǒng)計模型,對所述擴展后的編碼空間進行劃分,以獲得下一待編碼字符對應(yīng)的編碼空間;
步驟S353,將下一待編碼字符作為當(dāng)前待編碼字符,直到所述轉(zhuǎn)換后的二進制數(shù)中字符全部編碼完畢,獲得編碼結(jié)果;
步驟S354,將所述編碼結(jié)果、待編碼數(shù)據(jù)長度以及第一統(tǒng)計參數(shù)作為編碼輸出,所述第一統(tǒng)計參數(shù)為所述待編碼數(shù)據(jù)中包含1的個數(shù)。
例如:若轉(zhuǎn)化后的二進制數(shù)為1010000110010101000100010,將所述轉(zhuǎn)化后的二進制數(shù)按照預(yù)設(shè)編碼規(guī)則進行編碼,編碼步驟如下:
定義S表示符號集合;LS表示S集合符號個數(shù);那么每個符號出現(xiàn)的概率全部是按照進行計算,L當(dāng)前區(qū)間的下限;H當(dāng)前編碼區(qū)間的上限;R為當(dāng)前編碼區(qū)間大小,其中R=H-L;Len表示待壓縮數(shù)據(jù)的總長度。Rmax在初始編碼空間中是一個正整數(shù),在算術(shù)編碼中是1。
首先,初始化相關(guān)參數(shù),由于當(dāng)前的字符串中只有0和1,所以S∈{0,1},那么LS=2。定義Rmax=100000000000,可以理解的是Rmax取值可以相對較大,T0=Ls,fk=1,k∈[0,Ls)即f0=1,f1=1,H0=R0=Rmax、L0=0。設(shè)定α0=1.1這里采用靜態(tài)系數(shù),即αn=α0。Len=0(待編碼數(shù)據(jù)長度),Count=0(第一統(tǒng)計參數(shù),即所述待編碼數(shù)據(jù)中包含1的個數(shù))。對初始編碼空間進行擴展得到擴展后的空間R0=Rmax*α0=110000000000。根據(jù)所述字符的靜態(tài)統(tǒng)計模型,對擴展后的初始編碼空間進行劃分,得到
U′0=[0,54999999999],U′1=[55000000000,110000000000]。
接著,獲取第1個待編碼字符1。此時待編碼字符1對應(yīng)的編碼空間為U′1,,對待編碼字符1對應(yīng)的編碼空間為U′1進行擴展,根據(jù)公式
得R1=30250000000;得到擴展后的編碼空間;根據(jù)所述字符的統(tǒng)計模型,對所述擴展后的編碼空間進行劃分后得到
U′0=[55000000000,85249999999],U′1=[85250000000,115500000000]。
并更新統(tǒng)計值:Count=Count+1,Len=Len+1。
然后獲取第2個待編碼字符0,同理計算出R2=16637500000,得到擴展后的編碼空間;根據(jù)所述字符的統(tǒng)計模型,對所述擴展后的編碼空間進行劃分后得到U′0=[55000000000,71637499999],U′1=[71637500000,88275000000]。并更新統(tǒng)計值:Count=Count+0(由于此時待編碼字符為0,因此count的值不加1),Len=Len+1。
以此類推,最后編碼結(jié)果取值V′=730429,當(dāng)αn=α0=1.1時,比起傳統(tǒng)的編碼結(jié)果63118085,少2個數(shù)值,提高25%的壓縮比。
若步驟S340中按照多次按照預(yù)設(shè)轉(zhuǎn)換規(guī)則,進行轉(zhuǎn)換并且記錄了轉(zhuǎn)換次數(shù)Times,則此時將V′,Count,Len,Times作為編碼輸出,此時編碼完成。
可以理解的是,本發(fā)明實施例為無損編碼,當(dāng)獲取到所述編碼輸出后,可以進行逆向計算進行解碼,能夠還原出原始數(shù)據(jù)。解碼過程如下:
第一步:根據(jù)所述編碼輸出,按照預(yù)設(shè)編碼規(guī)則的逆運算進行解碼,得到轉(zhuǎn)換后的二進制數(shù):
首先:初始化相關(guān)參數(shù),由于當(dāng)前的字符串中只有0和1,所以S∈{0,1},那么Ls=2。定義Rmax=100000000000,可以理解的是Rmax取值可以相對較大,T0=Ls,fk=1,k∈[0,Ls)即f0=1,f1=1,H0=R0=Rmax、L0=0。設(shè)定α0=1.1這里采用靜態(tài)系數(shù),即αn=α0。Len=0,count=0;由于是α0=1.1,y(n)≈1。所以取y(n)=1,Ty(n)=t或
獲取Count=9(第一統(tǒng)計參數(shù),即所述待編碼數(shù)據(jù)中包含1的個數(shù)),Len=25(待編碼數(shù)據(jù)長度)和編碼結(jié)果V′=730429。
根據(jù)公式:
獲得當(dāng)前解碼空間,t=T=55004691494。將編碼結(jié)果V′與t進行比較。此時V′>550046,所以輸出1;Count=Count-1(只有解碼出符號1時才減1),Len=Len-1。
接著,根據(jù)1100000000000000001111111得出t=T=85252570554。V′<852525,輸出0;;Count=Count-0(只有解碼出符號1時才減1),Len=Len-1。
然后,根據(jù)1010000000000000001111111得出t=T=71640070554。V′>716400,輸出符號1;Count=Count-1(只有解碼出符號1時才減1),Len=Len-1。
此時,根據(jù)1011000000000000000111111得出t=T=80789529037。V′<807895,輸出符號0;
以此類推,利用1010000000000000001111111與1010111111100000000000000繼續(xù)解碼。當(dāng)Len=0時解碼結(jié)束,獲得轉(zhuǎn)換后的二進制數(shù)為1010000110010101000100010。
第二步:對所述轉(zhuǎn)換后的二進制數(shù),按照所述預(yù)設(shè)轉(zhuǎn)換規(guī)則的逆運算進行轉(zhuǎn)換,獲得壓縮后的二進制數(shù)。如果編碼輸出中含有轉(zhuǎn)換次數(shù)Times,則需要進行Times次逆運算。
例如1001001110001001,第一次逆轉(zhuǎn)換后,獲得第一次解碼的壓縮后的二進制數(shù)1110001011110001,然后按照同樣的方法將1110001011110001經(jīng)常第二次逆運算,獲得壓縮后的二進制數(shù)1011110010100001。
第三步:熵解碼
按Qe、Pe分成兩個子區(qū)間,判斷被解碼的碼字落在哪個區(qū)間,并賦予對應(yīng)符號。
設(shè)c’=(0.0101)b是被解碼的值,初始值A(chǔ)=1Qe=0.001
當(dāng)c’落在0-QeA之間,解碼符號為D=0,則C’=C’,A=Qe A
當(dāng)c’落在QeA-A之間,解碼符號為D=1,則C’=C’-Qe A,A=A(1-Qe)
c’=0.0101落在Qe A-A之間,解碼符號為D=1
c’=c’-QeA=0.0101-0.001=0.0011,A=A(1-Qe)=0.111
c’=0.0011落在Qe A-A之間,解碼符號為D=1
c’=c’-QeA=0.0011-0.000111=0.000101,
A=A(1-Qe)=0.111 0.111=0.110001
c’=0.000101落在 0-QeA之間,解碼符號為D=0
c’=c’=0.000101 A=AQe=0.110001 0.001=0.000110001
其中,上面給出的MPS和LPS是靜態(tài)模型下的劃分方法,這種情況可以直接通過查表得出LPS的概率值Qe,然后通過1-Qe得到MPS的概率值。用二進制編碼可以節(jié)約數(shù)值進制轉(zhuǎn)化運算量。其原理是相同的。
第四步:按照預(yù)設(shè)消除規(guī)則的逆運算獲取單元矩陣
得到單元矩陣二進制數(shù)值后需要通過插值的方法將被消除的符號位置信息插入,依次得到所有的單元矩陣。以256*256的原始矩陣為例,符號0對應(yīng)的單元矩陣大小一定為256*256(其中只包含0和1)。那么1的個數(shù)是確定的。所以我們可以將出現(xiàn)1的位置插入到符號1對應(yīng)的單元矩陣對應(yīng)位置上。將符號1的單元矩陣還原成為了256*256大小。
第五步:稀疏矩陣還原非稀疏矩陣
步驟1:產(chǎn)生一個單元矩陣行列數(shù)一樣的矩陣B,B是m*n的矩陣。產(chǎn)生一個空序列T。
步驟2:取一個單元矩陣組C_SQ。
步驟3:針對所有單元矩陣C_SQ[k],當(dāng)C_SQ[k]ij=1時,Bij=SQ[k](i∈[0,m-1],j∈[0,n-1],k∈[0,LSQ-1]),則B=C。
步驟4:將矩陣B中的數(shù)據(jù)還原。按照矩陣B的元素順序,取出矩陣B中的元素,按順序佩列在序列T中。
步驟5:重復(fù)步驟(8)、(9)、(10),直到所有的相關(guān)單元矩陣處理完畢,并舍棄序列T上LR個Q中的元素之后的數(shù)據(jù)(是補的“0”),這樣T=R
第六步:迭代解碼
如果編碼時采用了多次迭代處理,這里也同樣需要進行迭代解碼。
本發(fā)明實施例提供的數(shù)據(jù)處理方法,通過對由待編碼字符構(gòu)成的稀疏矩陣進行預(yù)處理,將其變成多個單元矩陣,并分別對各個單元矩陣按照消除規(guī)則,轉(zhuǎn)換為二進制數(shù),并分別對所述二進制數(shù)進行熵編碼獲得壓縮后的二進制數(shù),并對壓縮后的二進制數(shù)再次進行轉(zhuǎn)換,最終根據(jù)預(yù)設(shè)編碼規(guī)則進行編碼,使得編碼輸出進一步被壓縮,壓縮率變大,并且所述方法可以迭代實施,能夠取得更好的壓縮效果,并且根據(jù)壓縮算法的逆運算,能夠?qū)崿F(xiàn)無損的還原出原始數(shù)據(jù)。
請參閱圖6,圖6是本發(fā)明第三實施例提供的一種數(shù)據(jù)處理裝置210的功能模塊示意圖,所述數(shù)據(jù)處理裝置210包括第一轉(zhuǎn)換模塊211,消除模塊212,第一編碼模塊213,第二轉(zhuǎn)換模塊214以及第二編碼模塊215。
所述第一轉(zhuǎn)換模塊211,用于將一個非稀疏矩陣轉(zhuǎn)換為多個單元矩陣,其中,各個所述單元矩陣分別與所述非稀疏矩陣中的一個符號相對應(yīng),每個所述單元矩陣中元素1的位置與所述單元矩陣對應(yīng)的符號在預(yù)設(shè)順序表中的位置相對應(yīng),所述預(yù)設(shè)順序表是指將所述非稀疏矩陣中所有符號按照預(yù)設(shè)順序排列的表。
所述消除模塊212,用于將各個所述單元矩陣,按照預(yù)設(shè)消除規(guī)則處理后,分別形成對應(yīng)的多個二進制數(shù)。
其中,所述預(yù)設(shè)消除規(guī)則包括將第一個所述單元矩陣按照順序掃描形成二進制數(shù),并將第一個所述單元矩陣記為已消除矩陣;將第二個所述單元矩陣作為待消除矩陣;獲取已消除矩陣中元素1出現(xiàn)的位置,記為消除位置;根據(jù)所述消除位置,將所述待消除矩陣中對應(yīng)位置處的元素刪除;掃描所述待消除矩陣中剩余元素,形成二進制數(shù);將第二個所述單元矩陣記為已消除矩陣,并繼續(xù)處理下一個單元矩陣,直到所有單元矩陣處理完畢。
所述第一編碼模塊213,用于分別將所述各個二進制數(shù)進行熵編碼,形成多個壓縮后的二進制數(shù)。
所述第二轉(zhuǎn)換模塊214,用于若所述壓縮后的二進制數(shù)中包括多個連續(xù)的1,將所述壓縮后的二進制數(shù)按照預(yù)設(shè)轉(zhuǎn)換規(guī)則進行轉(zhuǎn)換,獲得轉(zhuǎn)換后的二進制數(shù)。
其中,所述預(yù)設(shè)轉(zhuǎn)換規(guī)則包括:將第一標(biāo)簽的值設(shè)置為0,將第二標(biāo)簽的值設(shè)置為1;將所述壓縮后的二進制數(shù)的第一位作為當(dāng)前待編碼字符;若所述當(dāng)前待編碼字符為1,則所述待編碼字符對應(yīng)的編碼輸出為第二標(biāo)簽的值,并將所述第一標(biāo)簽與所述第二標(biāo)簽的值交換;若所述當(dāng)前待編碼字符為0,則所述待編碼字符對應(yīng)的編碼輸出為第一標(biāo)簽的值,所述第一標(biāo)簽與所述第二標(biāo)簽的值不變;將所述當(dāng)前待編碼字符的下一字符作為當(dāng)前待編碼字符,對所述待編碼字符進行轉(zhuǎn)換,直到所述壓縮后的二進制數(shù)的字符全部轉(zhuǎn)換完成,獲得轉(zhuǎn)換后的二進制數(shù)。
所述第二編碼模塊215,用于將所述轉(zhuǎn)換后的二進制數(shù),按照預(yù)設(shè)編碼規(guī)則進行編碼,獲得編碼輸出。
以上各模塊可以是由軟件代碼實現(xiàn),此時,上述的各模塊可存儲于服務(wù)器200的存儲器內(nèi)。以上各模塊同樣可以由硬件例如集成電路芯片實現(xiàn)。
需要說明的是,本說明書中的各個實施例均采用遞進的方式描述,每個實施例重點說明的都是與其他實施例的不同之處,各個實施例之間相同相似的部分互相參見即可。
本發(fā)明實施例所提供的數(shù)據(jù)處理裝置,其實現(xiàn)原理及產(chǎn)生的技術(shù)效果和前述方法實施例相同,為簡要描述,裝置及系統(tǒng)實施例部分未提及之處,可參考前述方法實施例中相應(yīng)內(nèi)容。
在本申請所提供的幾個實施例中,應(yīng)該理解到,所揭露的裝置和方法,也可以通過其它的方式實現(xiàn)。以上所描述的裝置實施例僅僅是示意性的,例如,附圖中的流程圖和框圖顯示了根據(jù)本發(fā)明的多個實施例的裝置、方法和計算機程序產(chǎn)品的可能實現(xiàn)的體系架構(gòu)、功能和操作。在這點上,流程圖或框圖中的每個方框可以代表一個模塊、程序段或代碼的一部分,所述模塊、程序段或代碼的一部分包含一個或多個用于實現(xiàn)規(guī)定的邏輯功能的可執(zhí)行指令。也應(yīng)當(dāng)注意,在有些作為替換的實現(xiàn)方式中,方框中所標(biāo)注的功能也可以以不同于附圖中所標(biāo)注的順序發(fā)生。例如,兩個連續(xù)的方框?qū)嶋H上可以基本并行地執(zhí)行,它們有時也可以按相反的順序執(zhí)行,這依所涉及的功能而定。也要注意的是,框圖和/或流程圖中的每個方框、以及框圖和/或流程圖中的方框的組合,可以用執(zhí)行規(guī)定的功能或動作的專用的基于硬件的系統(tǒng)來實現(xiàn),或者可以用專用硬件與計算機指令的組合來實現(xiàn)。
另外,在本發(fā)明各個實施例中的各功能模塊可以集成在一起形成一個獨立的部分,也可以是各個模塊單獨存在,也可以兩個或兩個以上模塊集成形成一個獨立的部分。
所述功能如果以軟件功能模塊的形式實現(xiàn)并作為獨立的產(chǎn)品銷售或使用時,可以存儲在一個計算機可讀取存儲介質(zhì)中?;谶@樣的理解,本發(fā)明的技術(shù)方案本質(zhì)上或者說對現(xiàn)有技術(shù)做出貢獻的部分或者該技術(shù)方案的部分可以以軟件產(chǎn)品的形式體現(xiàn)出來,該計算機軟件產(chǎn)品存儲在一個存儲介質(zhì)中,包括若干指令用以使得一臺計算機設(shè)備(可以是個人計算機,服務(wù)器,或者網(wǎng)絡(luò)設(shè)備等)執(zhí)行本發(fā)明各個實施例所述方法的全部或部分步驟。而前述的存儲介質(zhì)包括:U盤、移動硬盤、只讀存儲器(ROM,Read-Only Memory)、隨機存取存儲器(RAM,Random Access Memory)、磁碟或者光盤等各種可以存儲程序代碼的介質(zhì)。需要說明的是,在本文中,諸如第一和第二等之類的關(guān)系術(shù)語僅僅用來將一個實體或者操作與另一個實體或操作區(qū)分開來,而不一定要求或者暗示這些實體或操作之間存在任何這種實際的關(guān)系或者順序。而且,術(shù)語“包括”、“包含”或者其任何其他變體意在涵蓋非排他性的包含,從而使得包括一系列要素的過程、方法、物品或者設(shè)備不僅包括那些要素,而且還包括沒有明確列出的其他要素,或者是還包括為這種過程、方法、物品或者設(shè)備所固有的要素。在沒有更多限制的情況下,由語句“包括一個……”限定的要素,并不排除在包括所述要素的過程、方法、物品或者設(shè)備中還存在另外的相同要素。
以上所述僅為本發(fā)明的優(yōu)選實施例而已,并不用于限制本發(fā)明,對于本領(lǐng)域的技術(shù)人員來說,本發(fā)明可以有各種更改和變化。凡在本發(fā)明的精神和原則之內(nèi),所作的任何修改、等同替換、改進等,均應(yīng)包含在本發(fā)明的保護范圍之內(nèi)。應(yīng)注意到:相似的標(biāo)號和字母在下面的附圖中表示類似項,因此,一旦某一項在一個附圖中被定義,則在隨后的附圖中不需要對其進行進一步定義和解釋。
以上所述,僅為本發(fā)明的具體實施方式,但本發(fā)明的保護范圍并不局限于此,任何熟悉本技術(shù)領(lǐng)域的技術(shù)人員在本發(fā)明揭露的技術(shù)范圍內(nèi),可輕易想到變化或替換,都應(yīng)涵蓋在本發(fā)明的保護范圍之內(nèi)。因此,本發(fā)明的保護范圍應(yīng)所述以權(quán)利要求的保護范圍為準(zhǔn)。