專利名稱:數(shù)字?jǐn)?shù)據(jù)無損壓縮的方法和設(shè)備的制作方法
背景技術(shù):
本發(fā)明總體上涉及數(shù)字?jǐn)?shù)據(jù)壓縮,尤其涉及用于進行數(shù)字?jǐn)?shù)據(jù)無損壓縮和解壓縮的方法和設(shè)備。
在許多重要的工業(yè)和商業(yè)應(yīng)用中,使用用數(shù)字?jǐn)?shù)據(jù)形式表示的信息。眾所周知,數(shù)字?jǐn)?shù)據(jù)與模擬數(shù)據(jù)不同,它是用一系列組成“字節(jié)”和“字”的1和0(稱為二進制數(shù)字或“位”)表示的。例如,可以將文本和圖像表示成數(shù)字?jǐn)?shù)據(jù)組進行存儲或傳輸。
有些類型的信息形成數(shù)字?jǐn)?shù)據(jù)的交錯量。例如,諸如腦瘤X射線等精細(xì)圖像很容易需要幾百萬字節(jié)的數(shù)字?jǐn)?shù)據(jù)。為了降低數(shù)據(jù)的存儲和傳輸成本,已研究出“壓縮”數(shù)字?jǐn)?shù)據(jù)的方法,將原始信息轉(zhuǎn)換成一組新的具有較小位數(shù)的數(shù)字?jǐn)?shù)據(jù)。然后對壓縮數(shù)據(jù)進行“解壓縮”逆處理,以便恢復(fù)原始信息。
兩種主要類型的數(shù)字?jǐn)?shù)據(jù)壓縮是“有損”壓縮和“無損”壓縮。有損數(shù)據(jù)壓縮允許解壓縮數(shù)據(jù)與原始數(shù)據(jù)不同,只要解壓縮數(shù)據(jù)滿足一些逼真標(biāo)準(zhǔn)。例如,當(dāng)把圖像轉(zhuǎn)換成數(shù)字?jǐn)?shù)據(jù),然后對其壓縮時,即使存儲差異,也足以從解壓縮數(shù)據(jù)中獲得人眼看來與原始圖像相同的圖像。因此,有損壓縮方法只能用于某些類型的數(shù)據(jù),諸如視頻和音頻等。有損壓縮的優(yōu)點是,可以比無損壓縮獲得更高程度的壓縮。壓縮程度一般表示成一個比率。例如,如果原始數(shù)據(jù)的大小為壓縮數(shù)據(jù)的二倍,則稱該壓縮方法具有2∶1壓縮率。
與有損數(shù)據(jù)壓縮相反,無損數(shù)據(jù)壓縮在對數(shù)據(jù)進行壓縮,然后解壓縮時,提供了與原始數(shù)據(jù)完全相同的數(shù)據(jù)。無損壓縮的優(yōu)點是,可以用于要求完全恢復(fù)原始數(shù)據(jù)的各類信息。
無損數(shù)據(jù)壓縮在20世紀(jì)50年代早期通過當(dāng)時在貝爾實驗室工作的DavidHuffman的工作,而廣為人知。Huffman的方法事實上已成為無損壓縮領(lǐng)域所有工作的基礎(chǔ)。但是,盡管發(fā)展了40年,但目前關(guān)于無損數(shù)據(jù)壓縮的方法和設(shè)備仍只能獲得大約2∶1的平均壓縮率。
許多已知的對文本數(shù)據(jù)進行無損壓縮的現(xiàn)有技術(shù)依賴于預(yù)先已知(邊工作時確定)字母符號在原始數(shù)據(jù)中出現(xiàn)的大概頻率。例如,對于英文文本,目前的無損壓縮方法通常依賴于這樣的認(rèn)識,即字母E和N出現(xiàn)的次數(shù)通常比字母Q和Z出現(xiàn)的次數(shù)多。于是,利用該信息開發(fā)一種代碼結(jié)構(gòu),該代碼結(jié)構(gòu)將較短的代碼分配給出現(xiàn)次數(shù)多的符號,而將較長的代碼分配給出現(xiàn)次數(shù)較少的字母。盡管已知的方法在許多場合很有用,但希望提供這樣的無損數(shù)字?jǐn)?shù)據(jù)壓縮方法和設(shè)備,這類方法和設(shè)備可以獲得比現(xiàn)有技術(shù)高的壓縮率,并且不要求預(yù)先知道有關(guān)源數(shù)據(jù)內(nèi)容的信息。
本發(fā)明的目的是提供下述無損數(shù)字?jǐn)?shù)據(jù)壓縮/解壓縮方法和設(shè)備,在這些方法和設(shè)備中,可以一個字節(jié)一個字節(jié)地恢復(fù)所有經(jīng)編碼的數(shù)據(jù),原始信息不損失。本發(fā)明提供了可以獲得很大壓縮率的無損壓縮方法和設(shè)備。
發(fā)明內(nèi)容
本發(fā)明的優(yōu)點和目的在以下說明中得到部分?jǐn)⑹觯⑶也糠謱恼f明中顯現(xiàn)出來,或者通過實施本發(fā)明而學(xué)習(xí)到。利用后附權(quán)利要求書中特別指出的元件及其組合,可以實現(xiàn)和獲得本發(fā)明的優(yōu)點和目的。
為了獲得這些優(yōu)點,并且依照本發(fā)明的目的,如這里所實施和概述的,本發(fā)明提供了無損數(shù)字?jǐn)?shù)據(jù)壓縮的方法和設(shè)備。具體地說,在第一方面,本發(fā)明是一種數(shù)字?jǐn)?shù)據(jù)壓縮方法。該方法包括以下步驟接收要壓縮的數(shù)字?jǐn)?shù)據(jù);將數(shù)字?jǐn)?shù)據(jù)分成組,每組具有由1和0組成的預(yù)定序列;根據(jù)預(yù)定過程處理一序列,通過刪除位獲得具有可變長度的壓縮序列值;并且將壓縮序列值存儲在臨時存儲區(qū)中。該方法還包括以下步驟產(chǎn)生一刪除代碼,該代碼表示被刪除位的數(shù)目;根據(jù)預(yù)定標(biāo)準(zhǔn)產(chǎn)生一分隔代碼;按預(yù)定關(guān)系將刪除代碼和分隔代碼與壓縮序列值一起存儲在臨時存儲區(qū)中;以及對每個序列執(zhí)行先前的步驟,獲得中間數(shù)據(jù)組。該方法還包括以下步驟將中間數(shù)據(jù)組分成序列;以及根據(jù)預(yù)定標(biāo)準(zhǔn),通過多次迭代重復(fù)執(zhí)行先前的步驟。最后的步驟是提供最后一次迭代的中間數(shù)據(jù)組,將其作為接收數(shù)字?jǐn)?shù)據(jù)的壓縮形式。
在另一方面,本發(fā)明包括了用于無損數(shù)字?jǐn)?shù)據(jù)壓縮的設(shè)備,該設(shè)備包括輸入端,用于接收要壓縮的數(shù)字?jǐn)?shù)據(jù);輸出端,用于提供被壓縮的數(shù)字?jǐn)?shù)據(jù);以及第一、第二和第三壓縮電路。每個壓縮電路包括輸入電路,用于接收輸入數(shù)據(jù);處理電路,它根據(jù)預(yù)定標(biāo)準(zhǔn)將接收到的輸入數(shù)據(jù)分成序列;二進制搜索處理器,它用二進制搜索過程對序列進行處理,通過刪除低位位,獲得與序列對應(yīng)的壓縮序列值;代碼發(fā)生器,它根據(jù)壓縮序列值和刪除代碼的特性,產(chǎn)生表示被刪除位數(shù)目的刪除代碼和分隔代碼;以及輸出電路,用于提供壓縮序列值、刪除代碼和分隔代碼,將其作為輸出數(shù)據(jù)。第一壓縮電路的輸入電路與輸入端相連,第一壓縮電路的輸出電路與第二壓縮電路的輸入電路相連,第二壓縮電路的輸出電路與第三壓縮電路的輸入電路相連,而第三壓縮電路的輸出電路與輸出端相連。
附圖概述說明書中包含的附圖構(gòu)成說明書的一部分,它們說明了本發(fā)明的實施例,并且與說明書一起用于說明本發(fā)明的原理。
圖1是一邏輯流程圖,示出了對數(shù)字?jǐn)?shù)據(jù)進行無損壓縮的方法。
圖2是一邏輯流程圖,示出了對經(jīng)壓縮的原始數(shù)字?jǐn)?shù)據(jù)進行解壓縮的方法。
圖3是一邏輯流程圖,示出了對圖2方法中的分隔代碼進行識別的方法。
圖4是一邏輯流程圖,示出了構(gòu)成本發(fā)明另一實施例的對數(shù)字?jǐn)?shù)據(jù)進行無損壓縮的方法。
圖5是一邏輯流程圖,示出了對圖4方法產(chǎn)生的數(shù)據(jù)進行解壓縮的方法。
圖6是VLSI定制集成電路,用圖3所示的方法對數(shù)字?jǐn)?shù)據(jù)進行無損壓縮;以及圖7是一方框圖,示出了用于形成圖5中VLSI電路之組成電路的公共壓縮電路。
較佳實施例的描述本發(fā)明使用迭代技術(shù),利用搜索過程在一次執(zhí)行時獲得一標(biāo)稱壓縮率,然后在一系列執(zhí)行或迭代后獲得大得多的壓縮。在本較佳實施例中,使用二進制搜索過程。例如利用該過程,可以在一次簡單的迭代中將所有8位整數(shù)壓縮為7位或更少。特別是,將所有奇整數(shù)壓縮成7位,將所有偶整數(shù)壓縮成6位或更少。對所有8位整數(shù)合起來獲得的平均壓縮為每個整數(shù)2位,在一次迭代后對原始的8位整數(shù)產(chǎn)生平均為6位的壓縮代碼長度。這對應(yīng)于每個整數(shù)25%的總壓縮。使用術(shù)語“總的”是因為額外開銷將用掉一些壓縮,致使每次迭代對每個整數(shù)的凈壓縮明顯變小。但是,本發(fā)明使用連續(xù)迭代,最終獲得非常大的壓縮率。
現(xiàn)在就8位整數(shù),概述眾所周知的二進制搜索技術(shù)。首先,對所有8位整數(shù)選擇數(shù)值中點。由于8位所能包含的最大整數(shù)是225,所以中點是128,或27。接下來,判斷目前正在編碼的輸入整數(shù)值是大于還是小于中點128。如果輸入值小于中點,則輸出0。如果輸入值大于中點,則輸出1位。如果輸入值等于中點,則過程終止,不輸出、下一步是選擇2的下一個較低次冪,在本例中,為26,或64。如果輸入值大于先前的中點,則將該值與先前的中點相加,如果輸入值小于先前的中點,則用先前的中點減去該值。此步驟產(chǎn)生192或64。然后將輸入值與這個新的中點比較。再一次,如果輸入值小于該中點,則輸出0,如果大于中點,則輸出1位。如果輸入值等于中點,則過程終止。在用這種方式繼續(xù)下去時,保留正在產(chǎn)生的輸出位的數(shù)目。上述過程繼續(xù),直至正確定位了正在編碼的當(dāng)前值。該過程產(chǎn)生一個輸出位流,稱為二進制搜索代碼,長度如上所述(即,如果輸入值是奇數(shù),為7位,如果輸入值為偶數(shù),為6位或更少)。因此,連續(xù)輸入值的壓縮輸出由一系列二進制搜索代碼組成,其包含各種長度的位序列。
為了對二進制搜索的壓縮輸出解壓縮,解壓縮方法必須能夠確定它將解碼的、構(gòu)成二進制搜索代碼的下一個位序列的長度。因此,本發(fā)明的較佳實施例提供了與二進制搜索代碼相關(guān)的附加代碼,稱為“刪除代碼”和“分隔代碼”。正是這些附加代碼構(gòu)成了上述額外開銷。
在一較佳實施例中,本發(fā)明將輸入數(shù)據(jù)分成“序列”。序列的定義是從一個或多個1開始,到一個或多個0結(jié)束(即,在下一個1位之前)的位串。
例如,假設(shè)以下位串是接收到的輸入101101001100這個串按順序產(chǎn)生如下四個“序列”序列1=10序列2=110
序列3=100序列4=1100。
對于隨機數(shù)字,序列的平均長度為4位。用該方式定義的序列的最重要特點是,它們都以零結(jié)尾。其價值將在以下描述的序列壓縮過程中體現(xiàn)出來,該過程能夠產(chǎn)生一凈壓縮,足以使本發(fā)明較佳實施例成為一可行過程,呈現(xiàn)其迭代特性。也就是說,每次迭代或循環(huán)的壓縮量相對較小,通過許多循環(huán)的累積,可以產(chǎn)生極大的壓縮率,這是本發(fā)明的特征。
在本發(fā)明的較佳實施例中,用二進制搜索技術(shù)處理每個序列,產(chǎn)生經(jīng)壓縮的序列值,即由輸入序列組成代碼,但將某些位刪除,具體地說,刪除從低位(即,最右)的零位向上并包括第一個低位的1位。本較佳實施例在每個經(jīng)壓縮的序列值前面放一個刪除代碼,它表示用二進制技術(shù)從原始序列中刪除的位數(shù)。下面,表I示出了刪除代碼。
表I刪除位數(shù) 被刪除的實際位刪除代碼2 10 03 100104 1000 1105 10000 1110等等。
注意,在所有情況中,刪除代碼比被刪除的位數(shù)小1位。這說明通過包括刪除代碼,壓縮序列實現(xiàn)了一位壓縮。
壓縮序列值根據(jù)其特性分4種(稱為“類”)。表II例示了這四類壓縮序列,以下對每一類進行討論。
表II源位序列 壓縮序列*類代碼110 (0)1H100 (10)R1100(10)1 B10 (0) N
*刪除代碼示于括號中,以便與壓縮序列中的其它位相區(qū)別。類代碼H將兩個低位位“10”刪除,并用刪除代碼“0”代替(參見上節(jié))。注意,刪除兩個低位位留下1位,在壓縮序列中跟在刪除代碼的后面。由于這一位留下來掛著,所以稱為“掛位”。這里描述了稱為H類的壓縮序列,即具有掛位的壓縮序列。類代碼R刪除源序列“100”中三個低位位,并用刪除代碼“10”代替。該壓縮序列沒有掛位。但是,它在刪除代碼中有一高位1位。該特征可表征此類(即,刪除代碼1位),并說明類代碼“R”。類代碼B刪除源位序列“100”中的三個低位位,并用刪除代碼“10”代替。這時,存在一個掛位和一個刪除代碼1位。由于它具有掛位和刪除代碼1位兩者,所以類代碼為“B”類代碼N刪除“10”,產(chǎn)生刪除代碼“0”,并且沒有掛位。由于該壓縮序列既沒有掛位也沒有刪除代碼1位,所以其類代碼為“N”。
上述例子描述了所有可能發(fā)生的壓縮序列類型。顯然,H類可以有不止一個掛位,R類可以有不止一個刪除1位。B類可以有多個掛位和多個刪除代碼1位。但類型名稱不變。
如果將前一節(jié)中的四個壓縮序列串在一起,形成一個壓縮位流,那么它們將如下所示,這里同樣將刪除代碼放在括號內(nèi)(0)1(10)(10)1(0)當(dāng)對該壓縮流解壓縮時,當(dāng)然沒有括號幫助。因為根據(jù)本發(fā)明壓縮的數(shù)據(jù)中的第一信息必須是刪除代碼,所以從左向右移,顯然第一個零位構(gòu)成刪除代碼零。但是,下一個1位可以是掛位,或者是刪除代碼1位。在許多情況下,相鄰的壓縮序列在它們的邊界處“摻混(bleed)”在一起。為了解決該問題,本發(fā)明的較佳實施例使用一個最終類型的附加代碼,稱為“分隔”代碼。
根據(jù)以下規(guī)則應(yīng)用分隔代碼-當(dāng)存在掛位(即,有一個或多個1位緊跟在刪除代碼后面)時,在最后一個懸掛的1位后面插入分隔代碼零位。
-當(dāng)不存在掛位而刪除代碼有一個或多個高位1位時,在下一個刪除代碼開始之前插入一個分隔代碼零位。
以下是經(jīng)修改的壓縮代碼流,分隔代碼帶下劃線(0)10(10)0(10)10(0)對壓縮序列附加的分隔位犧牲了對序列的壓縮,但不會引起序列的擴張。因為75%的序列需要分隔位,凈壓縮達(dá)到25%來自不需要分隔碼。
現(xiàn)在舉例描述此技術(shù)??紤]下述32位隨機的源輸入位流10100101100110100011100011101010(=32位)表III源序列 壓縮序列(帶刪除代碼)類代碼1 10 (0) N2 100 (10) R3 10 (0) N4 1100 (10)1 B5 110 (0)1 H6 1000 (110) R7 111000 (110)11 B8 1110 (0)11 H9 10 (0) N1010 (0) N用上述方式處理此輸入位流,如上述表III中左列所示,輸入首先被分隔成序列。然后,用二進制搜索技術(shù)對序列壓縮,以獲得表III中列所示的壓縮序列值,其中刪除代碼位于括號中。然后,在表III的右列示出了每個序列的類代碼。
然后根據(jù)上述兩個規(guī)則,對表3中列的壓縮序列值進行分析,產(chǎn)生分隔代碼。應(yīng)用這些規(guī)則并添加分隔代碼,產(chǎn)生以下壓縮序列位流(0)0(10)(0)0(10)10(0)10(110)0(110)110(0)110(0)(0)(=29位,壓縮9.375%)同樣,刪除代碼表示在括號中。分隔代碼帶下劃線??梢钥闯觯瑧?yīng)用上述技術(shù)可以由32位的原始輸入位流產(chǎn)生29位的壓縮位流。這表示對于此特列,壓縮了9.35%。
因此,25%壓縮(用刪除代碼)×25%對所有序列每個循環(huán)6.25%的凈壓縮。
在使用“節(jié)律流水式”結(jié)構(gòu)的VLSI上執(zhí)行本發(fā)明的一個實施例,在該設(shè)計中,將相同的電路串聯(lián)在構(gòu)成節(jié)律流水式處理器的順序鏈中。輸入數(shù)據(jù)進入流水線的第一電路。當(dāng)?shù)谝浑娐?對應(yīng)于第一“循環(huán)”)產(chǎn)生壓縮輸出數(shù)據(jù)時,順序鏈中的第二電路將其接收。該過程沿整個鏈路繼續(xù)下去,直至序列中的最后一個電路提供構(gòu)成壓縮數(shù)據(jù)的輸出位。
此作用是使大量的處理時間重疊。也就是說,當(dāng)新數(shù)據(jù)正在進入第一電路時,先前已進入的數(shù)據(jù)同時被鏈路下游的其它電路處理。系統(tǒng)所表現(xiàn)的延遲稱為“等待”時間,它是數(shù)據(jù)開始進入流水線頂部(即,輸入電路)與流水線底部(即,序列中的最后一個電路)開始產(chǎn)生輸出之間的時間。以目前半導(dǎo)體設(shè)備的速度,即便是很長的流水線,總的等待時間也非常短。本發(fā)明甚至可以跟得上實時要求最高的、具有很高位速率的應(yīng)用。
流水線的長度,即鏈路中順序電路的個數(shù),決定了總流水線將產(chǎn)生的壓縮量。因此,可以生成包含不同程度壓縮的不同芯片,為特殊應(yīng)用提供硬件支持。
現(xiàn)在參照圖1,邏輯流程圖示出了構(gòu)成本發(fā)明第一實施例的方法。在第一步驟10中,接收要壓縮的數(shù)字?jǐn)?shù)據(jù),并將其存儲在輸入緩沖器中。在步驟12,將數(shù)據(jù)分隔成許多序列。
接下來,在步驟14,依照一預(yù)定過程處理被存儲的數(shù)據(jù),以獲得長度可變的壓縮數(shù)據(jù)值。在本較佳實施例中,如上所述,使用二進制搜索過程。在步驟16,將壓縮數(shù)據(jù)值存儲在臨時存儲區(qū)中,并在步驟18,產(chǎn)生一刪除代碼,它表示在壓縮步驟中從序列中刪除的位數(shù)。然后,在步驟20,將刪除代碼按一預(yù)定關(guān)系與壓縮字值一起存儲在臨時存儲區(qū)中。
在步驟22,判斷是否需要分隔代碼。如果需要,在步驟24,根據(jù)一組預(yù)定的規(guī)則產(chǎn)生一分隔代碼,并在步驟26,將分隔代碼添加到壓縮序列值中。在本較佳實施例中根據(jù)上述規(guī)則產(chǎn)生分隔代碼。
在步驟28,判斷是否已經(jīng)處理了輸入緩沖器中的所有數(shù)據(jù)。如果結(jié)論肯定,那么存儲在臨時存儲區(qū)中數(shù)據(jù)構(gòu)成一組中間數(shù)據(jù),方法行至步驟30。如果還沒有處理完所有輸入數(shù)據(jù)字,那么方法返回步驟14,并對存儲在輸入緩沖器中的每個輸入數(shù)據(jù)字節(jié)執(zhí)行步驟12-22。在步驟30,根據(jù)預(yù)定標(biāo)準(zhǔn),判斷是否已達(dá)到了所需的數(shù)據(jù)壓縮程度。在本較佳實施例中,預(yù)定標(biāo)準(zhǔn)指定了時限。還可以使用其它標(biāo)準(zhǔn),例如迭代的預(yù)定數(shù)目,預(yù)定的期望壓縮率,或其它等價的標(biāo)準(zhǔn)。
如果還沒有獲得所需的數(shù)據(jù)壓縮,方法行至步驟32,將中間數(shù)據(jù)組存儲在輸入緩沖器中。方法返回步驟12,并將輸入緩沖器的數(shù)據(jù)分離成序列。然后,方法執(zhí)行步驟14至28,直到處理完輸入緩沖器中的所有數(shù)據(jù),然后行至步驟30,在那里再次判斷是否已達(dá)到所需的數(shù)據(jù)壓縮程度。如果達(dá)到了所需的壓縮程度,那么在步驟34對存儲在臨時存儲區(qū)內(nèi)的中間數(shù)據(jù)組添加迭代計數(shù),該計數(shù)表示已執(zhí)行的壓縮循環(huán)次數(shù)。在步驟36,提供該數(shù)據(jù),作為編碼器的輸出,并為步驟10中接收到的數(shù)字?jǐn)?shù)據(jù)指定壓縮形式。
現(xiàn)在參照圖2,邏輯流程圖示出了構(gòu)成本發(fā)明第一實施例另一方面的用于對壓縮后的原始數(shù)字?jǐn)?shù)據(jù)進行解壓縮的方法。如圖2所示,方法從步驟50開始,接收由圖1所示方法產(chǎn)生的經(jīng)壓縮的原始數(shù)字?jǐn)?shù)據(jù)。接收數(shù)據(jù)包括各種長度的壓縮數(shù)據(jù)代碼,其中包括刪除代碼,并由分隔值分隔,還包括迭代計數(shù)。在步驟52,利用分隔值從接收數(shù)據(jù)中獲得下一個數(shù)據(jù)代碼。下面會更詳細(xì)地描述分隔代碼的識別方法。然后,在步驟54,處理下一個壓縮序列值,以獲得解壓縮的值。在本較佳實施例中,該過程基于二進制搜索技術(shù),它用刪除代碼和1位來獲得解壓縮的序列。在步驟56,臨時存儲解壓縮序列。在步驟58,判斷是否已處理了所有輸入數(shù)據(jù)。如果沒有,則返回并重復(fù)步驟52至56。如果已處理了所有數(shù)據(jù),那么方法行至步驟60,使計數(shù)器增值。
接下來,在步驟62,由臨時存儲的解壓縮值獲得一數(shù)據(jù)代碼,用下述方式從臨時存儲的數(shù)據(jù)中識別出分隔代碼。
然后,在步驟64,處理數(shù)據(jù)代碼,得到解壓縮序列。在步驟66,臨時存儲解壓縮序列,并在步驟68判斷計數(shù)器的值是否等于迭代計數(shù)。如果不相等,那么返回并重復(fù)步驟60、62、64和66。如果計數(shù)器的值等于迭代計數(shù),那么解壓縮結(jié)束。然后,提供臨時存儲的壓縮值,作為輸出。此輸出數(shù)據(jù)是原始數(shù)字?jǐn)?shù)據(jù)。
現(xiàn)在參照圖3,邏輯流程圖示出了在對壓縮輸入數(shù)據(jù)解壓縮時用于識別分隔代碼的方法。
方法從步驟70開始。如步驟71所示,識別位流中的下一個刪除代碼。這包括識別位流中的最高位0位。所有高位位一直到且包括該0位構(gòu)成了刪除代碼。接下來,在步驟72,判斷刪除代碼后的下一位是0還是1。如果是1,則此位和所有后續(xù)的1位構(gòu)成與前一個刪除代碼相關(guān)的掛位。于是如步驟74所示,明確地將后面一個0位識別為分隔代碼。然后,返回步驟70。
另一方面,如果在步驟72判斷出下一位是0位,那么該0位可以是分隔代碼,也可以是刪除代碼。在步驟76,通過判斷下一位(在步驟70識別出的刪除代碼后的第二位)是1還是0來弄清楚。如果該位是1,那么在步驟78明確地將前一位(在步驟70識別出的刪除代碼后面的第一位)識別為分隔代碼,并且程序循環(huán)返回步驟70。
另一方面,如果步驟76判斷出在步驟71識別出的刪除代碼后面的第二位是0,那么步驟80將步驟72得出的0位識別了刪除代碼。用這種方法,可以明確地識別在壓縮位流中的分隔位,從而有助于圖1的方法。
圖4是一邏輯流程圖,更詳細(xì)地示出了構(gòu)成本發(fā)明第二實施例一個方面的數(shù)據(jù)壓縮方法,它可以用為應(yīng)用程序在可編程的數(shù)字計算機上執(zhí)行。工作中,程序要填充多個循環(huán)緩沖器,每個緩沖器對應(yīng)于一個附加的壓縮程度。用戶確定所需的壓縮程度,從而確定程序執(zhí)行的循環(huán)次數(shù)。在工作期間,第一時間段包括讀入輸入數(shù)據(jù)并填充程序的所有緩沖器。從概念上可以將此看作“填充流水線”。在此期間,程序接受輸入數(shù)據(jù),但不產(chǎn)生輸出。
所有緩沖器充滿后,程序繼續(xù)接收輸入數(shù)據(jù),并且還產(chǎn)生壓縮數(shù)據(jù)輸出。此第二時段一直繼續(xù)到用完所有輸入數(shù)據(jù)。
當(dāng)所有輸入數(shù)據(jù)用完并且沒有附加輸入數(shù)據(jù)要壓縮時,程序繼續(xù)產(chǎn)生壓縮數(shù)據(jù)輸出,因為它要排空在第一時段充滿的緩沖器。從概念上可以將此第三時段看作“排空流水線”?,F(xiàn)在對該實施例作更詳細(xì)的描述。
在步驟100,程序開始執(zhí)行。在步驟102,進行初始化,在此期間,程序與用戶交流,確定對當(dāng)前運行的要求。包括諸如要壓縮文件的名稱,將存儲壓縮數(shù)據(jù)的輸出文件的名稱、以及要執(zhí)行的最大循環(huán)次數(shù)(即,希望達(dá)到的壓縮程度)等信息。然后。程序繼續(xù),打開用戶為輸入和輸出指定的文件,并將所需的輸入數(shù)據(jù)存儲在零循環(huán)輸入緩沖器中。循環(huán)次數(shù)初始設(shè)為零。
在步驟104,當(dāng)存儲在零循環(huán)輸入緩沖器中時,程序查看是否存在要壓縮的附加輸入字節(jié)。如果存在,那么程序行至步驟106,取得該輸入,并在步驟108將其構(gòu)成序列。在步驟110,如果沒有足夠的輸入形成序列,那么程序返回步驟104。
在步驟112,通過刪除低位0位和第一低位1位并增加刪除代碼來壓縮序列。在步驟114,如果必要,增加分隔代碼。
在步驟116,將經(jīng)壓縮的序列代碼、其刪除代碼和分隔代碼存儲在輸入緩沖器中,供下一循環(huán)使用?!把h(huán)次數(shù)”計數(shù)器用于跟蹤當(dāng)前正在執(zhí)行的壓縮循環(huán)的次數(shù)。在步驟118,對該計數(shù)器增1。
在步驟120,程序判斷當(dāng)前循環(huán)輸入緩沖器是否具有剩余的輸入。如果有,那么在步驟122,程序試圖形成一個完整的序列。如果序列完整(步驟124),那么在步驟126用刪除代碼形成一個新的壓縮序列代碼,并在步驟128加入一個分隔代碼。在步驟130,將新壓縮的序列代碼存儲在下一個循環(huán)輸入緩沖器中。
在步驟132,判斷是否已經(jīng)達(dá)到了預(yù)定的最大循環(huán)次數(shù)。如果已經(jīng)達(dá)到,那么已經(jīng)將提供給程序的第一數(shù)據(jù)壓縮到此特定程序的最大程度,對該序列的壓縮結(jié)束。將循環(huán)次數(shù)計數(shù)器復(fù)位到零,且程序返回步驟104,從零循環(huán)輸入緩沖器中獲取新的輸入數(shù)據(jù)。程序繼續(xù)循環(huán)上述步驟,直至輸入文件中沒有數(shù)據(jù)。然后,程序行至步驟140。
這時,程序用相應(yīng)的方法“排空流水線”,即處理各循環(huán)輸入緩沖器中的所有數(shù)據(jù),直至沒有位可用來形成序列。然后,程序執(zhí)行步驟144,用未壓縮形式將剩余的位存儲在最大循環(huán)緩沖器的最后。然后,將最大循環(huán)緩沖器中的內(nèi)容寫入指定的輸出文件中。程序還將最大循環(huán)次數(shù)寫在輸出文件的前面,并在步驟146結(jié)束。
現(xiàn)在參照圖5,邏輯流程圖示出了包含本發(fā)明一較佳實施例另一方面的、對壓縮數(shù)字?jǐn)?shù)據(jù)解壓縮的方法。用個人計算機上運行的一個程序來實施本方法。在步驟200,程序開始執(zhí)行。在初始化步驟期間,程序與用戶交流,確定對當(dāng)前運行的要求。包括諸如被壓縮數(shù)據(jù)文件的名稱和被解壓縮輸出文件的名稱(即,被恢復(fù)的源文件)等信息。另一種方式是,在壓縮文件內(nèi)包含被壓縮文件的名稱。然后,程序繼續(xù)下去,打開用戶為壓縮輸入和和解碼輸出而指定的文件。在打開壓縮輸入文件后,程序從該文件的前面抽取出要在編碼運行期間達(dá)到的最大循環(huán)次數(shù)。然后,在步驟202,使用該數(shù)值對循環(huán)計數(shù)器初始化。這時,我們處于迭代的底部(即,最低)循環(huán)。在步驟204,程序查看是否存在要解碼的壓縮輸入附加字節(jié)。如果存在,那么程序行至步驟206,獲取該壓縮輸入,并處理它。如果不存在,那么程序行至步驟236,對早已輸入的剩余數(shù)據(jù)進行解壓縮(在下文中描述),并結(jié)束當(dāng)前運行。
在步驟206,程序檢索下一個刪除代碼。
在步驟208,如圖2A所述,識別下一個刪除代碼和分隔代碼。然后,在步驟210,用刪除代碼和任何掛位獲得解壓縮序列。
在步驟214,將解碼序列寫入下一個較低循環(huán)的輸入緩沖器中。
在步驟216,程序?qū)ρh(huán)次數(shù)減1,并且開始新的循環(huán)處理。在步驟218,處理新循環(huán)的第一步驟是判斷當(dāng)前循環(huán)輸入緩沖器中是否存在一個完整的序列等待處理。如果有,那么程序檢索該信息,并行至步驟220進行處理。如果沒有足夠的位,那么程序行至步驟232。程序通過位檢索一直到下一個刪除代碼的開始,來確定它具有完整的序列。這可以包括被拋棄的分隔代碼。
在步驟220,與步驟208一樣,程序識別當(dāng)前循環(huán)中的刪除代碼和分隔代碼。在步驟222,程序用同樣的方式判斷是否有完整的壓縮序列等在當(dāng)前循環(huán)輸入緩沖器中。如果有,那么程序行至步驟224。否則,程序行至步驟223。
在步驟224,程序用與步驟210相同的方法獲得下一個壓縮序列輸入位,并對其解碼。然后,用與步驟214相同的方法,將經(jīng)解碼的序列寫到下一個較低的循環(huán)輸入緩沖器中。
在步驟230,程序判斷當(dāng)前循環(huán)是否為0循環(huán)。如果是,則結(jié)束了對數(shù)據(jù)的解壓縮,并且位于該循環(huán)輸出緩沖器中的數(shù)據(jù)與原始源數(shù)據(jù)相同。現(xiàn)在,將該數(shù)據(jù)寫到指定的輸出文件中,并且程序行至步驟232。如果程序不處于0循環(huán),則程序行至步驟216,開始下一循環(huán)處理。
在步驟232,系統(tǒng)將循環(huán)次數(shù)復(fù)位到最大循環(huán),其中最大循環(huán)在位于當(dāng)前壓縮輸入文件開始的標(biāo)題信息中有規(guī)定。這使得程序返回流水線的底部,如前所述繼續(xù)處理。并且程序在步驟234返回。步驟204判斷被解碼的當(dāng)前文件是否有附加的壓縮輸入。
如果輸入文件中沒有更多的數(shù)據(jù),那么程序執(zhí)行“排空流水線”,并結(jié)束對現(xiàn)在包含在各種輸入緩沖器中的數(shù)據(jù)的解壓縮。當(dāng)所有輸入緩沖器都是空的時,程序行至步驟238。在步驟238執(zhí)行各種“整理”任務(wù),準(zhǔn)備結(jié)束,并且在步驟240,解碼程序結(jié)束。包含在指定輸出文件中的數(shù)字?jǐn)?shù)據(jù)是對輸入解碼器中的原始數(shù)據(jù)的精確復(fù)制。
圖4和圖5描述的程序可以在具有80486處理器的IBM兼容個人計算機上執(zhí)行,程序在MS-DOS操作系統(tǒng)下運行。當(dāng)然,更高級的處理器可以獲得更快的壓縮和解壓縮時間。
現(xiàn)在參照圖6,一較佳實施例示出了本發(fā)明的另一方面,該實施例在VLSI定制集成電路(“IC”)300上執(zhí)行。電路300用第一、第二和第三壓縮電路實現(xiàn)聯(lián)系圖3程序描述的編碼功能。特別是,第一壓縮電路302實現(xiàn)在步驟106、108、110、112、114和116中描述的0循環(huán)的功能。但是,IC300的電路302不象步驟116所述的那樣將輸出寫入“下一個循環(huán)輸入緩沖器”中,而是將輸出提供給第二電路304的輸入端。第二壓縮電路304實現(xiàn)步驟122、124、126、128和130中所示的功能。但是,電路304不象步驟130所述的那樣將壓縮輸出寫入下一個循環(huán)輸入緩沖器中,而是將壓縮輸出作為輸入提供給IC300所含順序中的下一個電路。
IC 300的不同實施可以包括不同數(shù)量的電路302-306。對于總壓縮率的每個10次冪,大致需要75個電路。例如,IC 300中的75個電路將產(chǎn)生大約10∶1的壓縮率,150個電路將產(chǎn)生大約100∶1的壓縮率,225個電路將產(chǎn)生大約1000∶1的壓縮率,等等。
第三壓縮電路306實現(xiàn)步驟122、124、126、128和130的功能。但是,電路306不象步驟130所述的那樣把數(shù)據(jù)寫入下一循環(huán)的輸入緩沖器中,而是提供一個由位流組成的輸出信號,表示提供給電路302的輸入的壓縮形式。另外,當(dāng)電路306判定沒有足夠的附加數(shù)據(jù)位可以形成序列時,該電路提供剩余的位,將其作為未壓縮的“下腳料(footer)”,終止輸入數(shù)據(jù)流。
圖7是一方框圖,示出了形成電路302、304和306的公共壓縮電路350。在較佳實施例中,這些電路302、304、306是相同的,有利于在VLSI芯片上實現(xiàn)大量的這種電路。
電路350包括輸入電路352,用于接收來自輸入端308(對于電路302)或前一個緊接的上游壓縮電路(對于電路304和306)的數(shù)據(jù)。輸入電路352與二進制搜索處理器354耦合,而處理器根據(jù)圖3所示的方法進行數(shù)字?jǐn)?shù)據(jù)壓縮。用存儲電路356來實現(xiàn)處理354的臨時存儲。處理器354產(chǎn)生分隔值,并且提供給輸出電路358,而輸出電路358又將這些信號提供給輸出端310(對于電路306)或下一個緊接的下游壓縮電路的輸入電路(對于電路302和304)。
在本發(fā)明的另一方面,包含多種相同解碼電路的VLSI集成電路用類似于上述圖6所示的關(guān)于編碼器硬件形式的方法,實現(xiàn)圖5程序的功能。
本領(lǐng)域的技術(shù)人員應(yīng)該理解,不脫離本發(fā)明的范圍或精神可以對本發(fā)明的方法和較佳實施例的結(jié)構(gòu)進行各種變化和改變。通過參考說明書以及實施這里所揭示的發(fā)明,本發(fā)明的其它實施例對本領(lǐng)域的技術(shù)人員來說是顯而易見的。說明和例子只能視為舉例,本發(fā)明的真實范圍和精神由以下權(quán)利要求書確定。
權(quán)利要求
1.一種數(shù)字?jǐn)?shù)據(jù)壓縮方法,其特征在于,包括以下步驟(a)接收要壓縮的數(shù)字?jǐn)?shù)據(jù);(b)將數(shù)字?jǐn)?shù)據(jù)分成組,每組具有由1和0組成的預(yù)定序列;(c)根據(jù)預(yù)定過程處理一序列,通過刪除位獲得具有可變長度的壓縮序列值;(d)將壓縮序列值存儲在臨時存儲區(qū)中;(e)產(chǎn)生一刪除代碼,該代碼表示被刪除位的數(shù)目;(f)根據(jù)預(yù)定標(biāo)準(zhǔn)產(chǎn)生一分隔代碼;(g)按預(yù)定關(guān)系將刪除代碼和分隔代碼與壓縮序列值一起存儲在臨時存儲區(qū)中;(h)對每個組執(zhí)行步驟c至g,以獲得中間數(shù)據(jù)組;(i)將中間數(shù)據(jù)組分成序列;(j)根據(jù)預(yù)定標(biāo)準(zhǔn),通過多次迭代重復(fù)進行步驟c至i;(k)提供最后一次迭代的中間數(shù)據(jù)組,將其作為接收數(shù)字?jǐn)?shù)據(jù)的壓縮形式。
2.如權(quán)利要求1所述的方法,其特征在于,處理序列的步驟包括用二進制搜索過程獲得二進制搜索代碼。
3.如權(quán)利要求1所述的方法,其特征在于,產(chǎn)生分隔代碼的步驟包括根據(jù)壓縮序列值和刪除代碼的特性產(chǎn)生分隔代碼。
4.如權(quán)利要求1所述的方法,其特征在于,產(chǎn)生刪除代碼的步驟包括產(chǎn)生比被刪除位數(shù)小一位的代碼。
5.如權(quán)利要求1所述的方法,其特征在于,產(chǎn)生刪除代碼的步驟包括產(chǎn)生這樣的代碼,該代碼具有一個低位0位和多個高位1位,比從序列中刪除的位數(shù)小2位,從而形成壓縮序列值。
6.一種對經(jīng)壓縮的原始數(shù)字?jǐn)?shù)據(jù)進行解壓縮的方法,其特征在于,包括以下步驟(a)接收輸入數(shù)據(jù),所述輸入數(shù)據(jù)是經(jīng)壓縮的原始數(shù)字?jǐn)?shù)據(jù),包括由分隔代碼分隔的各種長度的壓縮數(shù)據(jù)代碼和刪除代碼,還包括一個迭代計數(shù);(b)用分隔值從輸入數(shù)據(jù)獲得數(shù)據(jù)代碼;(c)處理數(shù)據(jù)代碼,以便獲得解壓縮值;(d)臨時存儲所述解壓縮值;(e)重復(fù)步驟(b)、(c)和(d),直至處理完所有的輸入數(shù)據(jù);(f)對計數(shù)器增值;(g)按分隔值從臨時存儲的解壓縮值中獲得數(shù)據(jù)代碼;(h)處理所述數(shù)據(jù)代碼,以便獲得解壓縮值;(i)臨時存儲所述解壓縮值;(j)重復(fù)步驟(f)、(g)、(h)和(i),直至計數(shù)器等于迭代計數(shù);以及(k)輸出被存儲的解壓縮值,用于代表原始數(shù)字?jǐn)?shù)據(jù)。
7.用于壓縮數(shù)字?jǐn)?shù)據(jù)的設(shè)備,其特征在于,包括輸入端,用于接收要壓縮的數(shù)字?jǐn)?shù)據(jù);輸出端,用于提供被壓縮的數(shù)字?jǐn)?shù)據(jù);和第一、第二和第三壓縮電路,每個壓縮電路包括輸入電路,用于接收輸入數(shù)據(jù);處理電路,它根據(jù)預(yù)定標(biāo)準(zhǔn)將接收到的輸入數(shù)據(jù)分成序列;二進制搜索處理器,它用二進制搜索過程對序列進行處理,通過刪除低位位,獲得與序列對應(yīng)的壓縮序列值;代碼發(fā)生器,它根據(jù)壓縮序列值和刪除代碼的特性,產(chǎn)生表示被刪除位數(shù)目的刪除代碼和分隔代碼;以及輸出電路,用于提供壓縮序列值、刪除代碼和分隔代碼,將其作為輸出數(shù)據(jù);第一壓縮電路的輸入電路與輸入端相連,第一壓縮電路的輸出電路與第二壓縮電路的輸入電路相連,第二壓縮電路的輸出電路與第三壓縮電路的輸入電路相連,而第三壓縮電路的輸出電路與輸出端相連。
8.如權(quán)利要求7所述的設(shè)備,其特征在于,還包括多個第二壓縮電路,它們串聯(lián)連接在第一和第二壓縮電路之間。
全文摘要
數(shù)字?jǐn)?shù)據(jù)無損壓縮和解壓縮的方法和設(shè)備。用二進制搜索過程處理輸入數(shù)據(jù),以便在一次迭代中獲得標(biāo)稱壓縮。對第一迭代輸出進行反復(fù)迭代,為所有類型的數(shù)字?jǐn)?shù)據(jù)提供很大的壓縮。本方法可以在個人計算機上用軟件實施,或者利用大量串聯(lián)的相同壓縮電路在VLSI硬件上實施,從而大量串聯(lián)的壓縮電路形成節(jié)律流水式結(jié)構(gòu)。
文檔編號H03M7/30GK1257621SQ98805358
公開日2000年6月21日 申請日期1998年4月10日 優(yōu)先權(quán)日1997年4月18日
發(fā)明者R·E·蘭利 申請人:首要研究有限公司