專利名稱:算術編碼的方法和設備的制作方法
技術領域:
本發明通常涉及信息理論、視頻壓縮和算術編碼。更具體地,本發明涉及用于算術編碼的終結(termination)和字節填充、以及在算術編碼期間創建和使用狀態機的方法和設備。
背景技術:
數據壓縮是一種用于存儲和傳送大量數據的極其有用的工具。例如,當使用壓縮來減少重新創建圖像所需的比特數時,極大地減小了傳送例如文檔的網絡傳輸的圖像所需的時間。在現有技術中存在許多不同的數據壓縮技術。壓縮技術可以劃分為兩個較寬的類別:有損編碼和無損編碼。有損編碼涉及會導致信息損失的編碼,由此,無法保證原始數據的理想重構。有損壓縮的目的在于:按照使其無異議或可檢測的方式進行對原始數據的改變。在無損壓縮中,保留所有信息并按照允許進行理想重構的方式對該數據進行壓縮。算術編碼是一種公知的壓縮技術,用于一些數據編碼和壓縮系統中以便減小傳輸所需的比特或符號的數量。算術編碼器接收包括一系列事件(例如二進制事件)或符號的輸入。算術編碼器將輸入序列編碼為相應的比特或字節序列。在一些情況下,在編碼器的輸出處產生比編碼器輸入處接收到的數據比特更少的數據比特,導致了數據壓縮。算術編碼器可以接收或訪問已編碼數據。所述算術編碼器讀取已編碼數據的序列且產生已解碼數據,所述已解碼數據應該與解碼器處接收到的輸入符號相匹配。通過在針對正在進行編碼的事件的信息序列中產生較少的比特來實現壓縮,其中正在進行編碼的事件與信息比特的比率可以達到64:1或甚至128:1,取決于事件的概率分布。優選地,解碼器操作與編碼器操作相對稱。如果編碼器和解碼器的操作對稱,則在解碼器處所讀取的已編碼數據比特的數量應該與由解碼器所產生的已編碼比特的數量相匹配。在一些算術解碼器中,在啟動解碼器操作時,解碼器提前讀取一組比特。然而,由于解碼器提前讀取了一組比特,可能會出現不匹配或不對稱。
對該不對稱進行補償的一種傳統方案在于:向編碼器處的已編碼數據添加額外比特。在另一傳統方案中,不產生附加已編碼比特,而是允許解碼器提前在比特流中讀取已編碼數據,然后反向跟蹤。這兩種傳統方案均會引入較低效率。需要一種更為有效的方案來減小編碼和解碼算法的復雜度、減小用于編碼、傳輸和解碼的數據、以及降低存儲要求。
發明內容
公開了執行算術編碼和/和解碼的方法和設備。在一個實施例中,編碼數據的方法包括對事件序列中的多個事件進行編碼以產生已編碼數據,且利用已編碼數據來產生比特流,包括將零個或更多個填充比特添加到比特流中已編碼數據之后。所述零個或更多個填充比特操作用于實質上保持已編碼事件量、正在編碼的塊數和比特流中的比特數之間的關系。在一個實施例中,所述算術解碼器包括序列發生器,用于產生針對事件序列的事件的環境標識符;概率估計器,用于確定針對LPS的值和針對LPS的概率估計;以及解碼引擎,包括范圍寄存器以便將數值分配給針對LPS的范圍。如果環境標識符并不等于指標(index),則所述數值基于概率估計、范圍寄存器中所存儲的數值和針對LPS的范圍的環境標識符,并且如果環境標識符等于所述指標,則該值并不基于范圍寄存器中所存儲的值。所述解碼引擎還根據針對LPS的范圍值和來自信息序列的比特,確定二進制事件的值。在另一個實施例中,創建用于概率估計的狀態機的方法包括:將概率分配給查找表(LUT)中的狀態,包括將這些狀態的每一狀態I的概率設置為LPS的最高概率乘以適配t匕(adaptation ratio)的i次冪,其中i是給定狀態的數量,并且適配比小于I。所述方法還包括:當觀察MPS和LPS時,針對LUT中要轉移到的狀態產生狀態轉移,其中如果當前狀態并不是最高狀態,當觀察到MPS時狀態機從當前狀態轉移到其的下一狀態是高于當前狀態的下一狀態,如果當前狀態是最高狀態,則所述下一狀態是當前狀態。另外,當針對多個狀態觀察到LPS時狀態機從當前狀態轉移到其的下一狀態是以下計算結果的舍入版本:當前狀態數+log (當前狀態的概率*適配比+ (1-適配比))/當前狀態的概率)/log (適配比)。
從以下所給出的詳細描述和本發明的各種實施例的附圖中,本發明將得到更完整地理解,然而,其并非用于將本發明局限于特定的實施例,而是僅用于說明和理解。圖1是編碼和解碼系統的方框圖。圖2是用于產生比特流的編碼處理的流程圖。圖3示出了通過其在圖1的系統中來傳送已編碼數據的典型數據格式。圖4示出了算術編碼器的一個實施例的方框圖。圖5是用于編碼事件的一個實施例的流程圖。圖6是編碼器重新歸一化(renormalization)過程的一個實施例的流程圖。圖7示出了用于執行放置比特過程的實施例的處理的一個實施例。圖8是在終結之前對事件進行解碼的處理的一個實施例的流程圖。
圖9示出了在終結處清除(flushing)的處理的一個實施例的流程圖。圖10是算術編碼器的一個實施例的方框圖。圖11是算術解碼器初始化處理的一個實施例的流程圖。圖12是用于解碼二進制事件的一個實施例的流程圖。圖13是重新歸一化過程的流程圖。圖14A和14B示出了以等概率對二進制事件進行解碼的流程圖。圖15A和15B是用于解碼片段標志和終結之前的其他二進制事件的實施例的流程圖。圖16A和16B示出了執行概率估計查詢的典型表。圖17是典型計算機系統的方框圖。
具體實施例方式公開了一種編碼和解碼信息特別是視頻數據的方法和設備。在編碼和解碼期間,使用指示符(例如,片段的末尾)來信號通知正在被算術編碼的事件的結尾。在一個實施例中,也是在信息編碼期間,將填充信息的比特或字節添加到由編碼器所產生的已編碼數據的比特流中。作為將這些附加比特填充到已編碼數據的比特流的中間的替代,將填充字節(或比特)附加到已編碼數據的結尾。這樣的填充可用于保持正在被編碼的事件的數量、視頻數據的塊(例如宏塊)的數量和正在產生的信息序列的大小之間的關系。在以下描述中,闡明了大量細節以提供對本發明的更透徹的解釋。然而,對本領域的技術人員顯而易見,沒有這些特定細節也能夠實施本發明。在其他示例中,以方框圖的形式示出了公知的結構和設備,而非詳細地,以便避免使本發明不清楚。以在計算機存儲器內對數據比特的操作的算法和符號表示的形式展示了以下詳細描述的一些部分。這些算法描述和表示是數據處理領域的技術人員所使用的手段以便更有效地向本領域的其他技術人員傳達其工作內容。算法在這里通常被設想為一種導致所需結果的自給的步驟序列。這些步驟是需要對物理量進行物理操作的步驟。通常,盡管并非必須的,這些量采用了被存儲、轉移、組合、比較和其他操作的電或磁信號的形式。原理上,出于通用的理由,其通常是方便的,以查閱這些信號,作為比特、值、元素、符號、字符、術語、數量等。然而,應該記住,所有這些和類似術語要與適當的物理量相關聯且僅作為應用于這些量的方便標簽。如果沒有另外聲明,從以下討論中顯而易見,應該意識到,在整個描述中,利用諸如"處理"或"計算"或"核算"或"確定"或"顯示"等涉及計算機系統或類似電子計算設備的動作和處理,所述計算機系統或類似電子計算設備將計算機系統的寄存器和存儲器內的表示為物理(電子)量的數據操縱和轉換為計算機系統存儲器或寄存器或其他這樣的信息存儲、傳輸或顯示設備內、類似地表示為物理量的其他數據。本發明還涉及一種執行其中的操作的設備。可以針對所需的目的專門構造該設備,或所述設備可以包括通過存儲在計算機內的計算機程序選擇性激活或重新配置的通用計算機。這樣的計算機程序可以存儲在計算機可讀存儲介質中,但是并不局限于以下任何類型的盤,包括軟盤、光盤、CD-ROM和磁光盤、只讀存儲器(ROM)、隨機存取存儲器(RAM)、EPROM、EEPR0M、磁或光卡或適合于存儲電子指令的任何類型的介質,且每一個均與計算機系統總線相連。這里所展示的算法和顯示本質上并不與任何特定的計算機或其他設備相關聯。利用根據這里的教導的程序,可以使用各種通用系統,或其可以方便地構造更為專用的設備以執行所需的方法步驟。從以下描述中,這樣的各種系統將變得顯而易見。此外,并未參考任何特定的編程語言來描述本發明。將會意識到,可以使用各種各樣的編程語言來實現這里所描述的本發明的教導。機器可讀介質包括用于以計算機(例如計算機)可讀的形式存儲或傳送信息的任何機制。例如,機器可讀介質包括只讀存儲器("ROM")、隨機存取存儲器("RAM")、磁盤存儲介質、光存儲介質、閃速存儲設備、電、光、聲或其他形式的傳播信號(例如,載波、紅外信號、數字信號等)等。編碼和解碼系統概況圖1是編碼和解碼系統100的實施例的方框圖。參考圖1,系統100包括通過信道120通信的編碼器102和解碼器104。可選地,系統100可以僅包括編碼器102或解碼器104。信道120可以是任何適當的數據通信信道,包括有線信道和無線信道或其組合。任何適當的數據通信和調制方案可以在信道120中使用。系統100的一個示例是用于編碼、壓縮和解碼包括圖像序列的視頻數據的系統。在一個實施例中,將每一個圖像劃分為一個或多個片段。編碼器102具有用于接收輸入信息例如輸入數據(例如視頻信息)的輸入106。在一個實施例中,編碼器102利用算術編碼對數據進行編碼。因此,編碼器102可以包括數據存儲器、操作寄存器和算術編碼引擎。在一個實施例中,編碼器102包括范圍寄存器或R寄存器,和低(low)寄存器或L寄存器。另外,在一個實施例中,編碼器102包括概率估計狀態機。由編碼器102所執行的編碼算法可以是本領域公知的環境自適應二進制算術編碼,這里被稱為CABAC。此外,這里所描述的技術和結構還可以擴展到其他編碼和解碼算法和過程。編碼器102具有用于向信道120提供已編碼數據的輸出108。在一個實施例中,編碼器102產生已編碼數據的比特流,包括表示算術編碼數據的終結的已編碼事件(例如決定)。在一個實施例中,表示算術編碼數據的終結的事件包括片段標志的結尾。所述比特流還可以包括以下更詳細描述的填充字節(或比特)。解碼器104具有用于從信道120中接收已編碼數據的輸入110和用于提供已解碼數據的輸出112。在一個實施例中,解碼器104解碼已編碼數據的操作通常與編碼器102的編碼操作對稱。注意,系統100可以包括多于一個的編碼器和/或多于一個的解碼器。編碼器102和解碼器104用于對視頻數據例如由視頻處理器(例如視頻編解碼器)所產生的視頻數據進行處理。在一個實施例中,視頻圖像被記錄且被分割為數據樣本塊,數據樣本塊可以表示記錄圖像的16X 16、8X8、或4X4樣本。然后,由視頻處理器(例如,利用離散余弦變換)對這些塊進行變換,并且對其進行量化以產生表示樣本塊的整數值。由視頻處理器將這些整數值轉換為事件序列(例如,二進制事件)且發送到用于編碼的編碼器。可選地,視頻處理器可以直接操作于單個樣本,包括變換和量化這些樣本,且將針對該樣本的特定量化整數值轉換為事件序列。圖2是用于產生比特流的編碼處理的流程圖。由處理邏輯來執行該處理,所述處理邏輯可以包括硬件(例如電路、專用邏輯等)、軟件(例如運行于通用計算機系統或專用機器)或其組合。參考圖2,處理事件序列中的邏輯碼事件來產生已編碼數據(塊201的處理)。所述事件可以是二進制決定。這些事件還可以形成相同的片段。在一個實施例中,這些事件之一表示算術編碼的終結(例如片段的結尾)。然后,處理邏輯針對由填充字節(或比特)所跟隨的所有事件,利用已編碼數據來產生比特流(處理邏輯202)。可以將填充字節(或比特)放置在比特流中表示算術編碼的終結的已編碼指示符之后。圖3示出了通過其可以在如圖1所示的系統等系統中傳送已編碼數據的典型數據格式300。格式300包括報頭302,算術編碼304,一個或多個停止比特306,零個、一個或多個的對齊比特308,和零個、一個或多個填充字節310。在一個可選實施例中,可以使用零個、一個或多個填充比特來替代字節。如上所述,圖1所示的系統和圖3所示的數據格式可以用于編碼和傳送視頻信息,包括與圖像序列相關的數據。在一個實施例中,將圖像分割為一個或多個片段,其中片段包含一個或多個作為16X16陣列的宏塊。可以獨立于圖像內的其他片段對每一個片段進行編碼。以圖3所示的格式對圖像數據進行編碼。在一個實施例中,報頭302在字節邊界處開始且包含利用固定長度和可變長度編碼(例如,Huffman編碼)編碼的數據。報頭302可以是片段報頭。作為片段報頭,報頭302前面具有起始比特(SC)和用于識別隨后的片段數據類型的指示符。算術編碼304是由諸如編碼器102 (圖1)等編碼器的算術編碼引擎所產生的比特序列。在一個實施例中,比特序列在字節邊界處開始。一個或多個停止比特306跟隨在算術編碼304之后。在一個可選實施例中,停止比特306可以包括在算術編碼304中。偽(trailing)對齊比特308的號(O到7)跟隨在停止比特306之后,并且在一個實施例中,確保了填充字節310的字節對齊。附加到數據上的填充字節310的數量可以是零字節、一字節或多于一的字節,取決于保持正在被編碼的事件數量、視頻數據塊(例如宏塊)的數量和正在產生的信息序列的大小之間的關系所需的字節數。編碼流終結在一個實施例中,編碼器對表示到解碼器的算術編碼數據的終結的事件(例如決定)進行編碼。當已經到達片段的結尾時,可以表示該算術編碼數據的終結。當比特流中的算術編碼數據停止且由非算術編碼數據跟隨其后時,算術編碼數據的終結也可能會出現。再次參考圖3,在一個實施例中,針對片段中的每一個宏塊,典型地,算術編碼304包含以下數據:宏塊模式、任意運動矢量和變換系數、以及end_of_slice_flag。end_of_Slice_flag使解碼器104 (圖1)能夠確定何時已經對片段中的最后宏塊進行了解碼。由于算術編碼的最后比特可以包含描述多于一個宏塊的數據,因此使用該標志。可以通過檢查傳統實現來解釋對算術編碼數據進行編碼的好處。在傳統實現中,通常根據兩個可選方法之一來進行算術編碼器的終結。在第一方法中,傳送整個寄存器L。在第二方法中,將偏移添加到寄存器L的內容中且僅傳送寄存器L的最高有效比特。第一方法的優點在于:解碼器讀取與由編碼器所產生的比特數完全相同數量的比特。然而,這導致了發送額外比特的花費。在第二方法中,保存比特但是解碼器讀取比編碼器所產生的比特更多的比特。這可以在解碼器中填塞比特流來克服。
這里所公開的方法提供了兩全其美:解碼器讀取與編碼器所產生的比特數相同數量的比特,而不需具有發送比所需更多比特的編碼器。這是由以下事實來實現的:對事件end_of_slice_flag進行編碼以信號通知片段的結尾。假定將明確定義的概率分配給該事件,解碼器可以對其進行解碼,但是如果事件的結果對終結進行信號通知,則可以先行重新歸一化。即,通常,在編碼期間,針對已編碼的每一個符號,將值R乘以概率以得到子區間。之后,執行重新歸一化以使R的值回到數值范圍。重新歸一化對算術編碼領域的技術人員而言是公知的。先行重新歸一化確保了所讀取的比特數與由編碼器所產生的比特數相匹配。在一個實施例中,在執行任何重新歸一化之前,由在編碼終結期間分配給寄存器R的數量來定義分配給end_of_slice事件(或表示算術編碼的終結的其他事件)的概率。在一個實施例中,為了確保編碼器和解碼器同步,對于所述標志的末尾,并不通過將R中所存儲的值乘以該概率來執行子區間的計算。作為替代,給子區間分配固定值或常數。在一個實施例中,使用固定值2。更一般地,所述值可以獨立于在對end_of_slice_flag進行編碼之前寄存器R的內容值。針對放置到比特流中的最后符號(比特)來進行該操作。通過將子區間設置為值2,可以將值I添加到寄存器L的值上,而不會影響解碼器的操作。這允許將整個低(L)寄存器的內容發送到比特流中。由于發送整個寄存器L的內容,因此在該示例中,重新歸一化并非必須的。在一個實施例中,在發送L的內容之前將寄存器L的最低有效比特設置為I。如果其最低有效比特為零,則將寄存器L的最低有效比特設置為I等效于將I添加到L。因此,由算術編碼器所產生的最后比特等于I且包含算術編碼的比特流的最后字節具有非零值。實際上,寄存器L的最低有效比特變為停止比特。添加填充字節在一個實施例中,所述編碼器將填充字節或比特插入到壓縮數據的比特流中。在一個實施例中,在針對片段的算術編碼之后插入填充字節,跟隨在停止比特、零個、一個或多個對齊比特之后。添加對齊比特以確保在字節邊界處插入任意添加的填充字節。將填充字節放置在停止比特之后的一個優點在于:解碼器將不必對填充字節進行解碼。因此,解碼器對與由編碼器所產生的已編碼數據的比特數相同數量的比特進行解碼。在一個實施例中,插入到壓縮比特流中的填充字節的數量基于對正在被輸入編碼器的事件數量、數據塊的數量和從編碼器中正在輸出的比特數量之間的關系的保持。下面將更詳細地描述該關系。在一個實施例中,填充字節具有特定的模式。該模式可以是唯一的,從而解碼器能夠通過利用跟隨在停止比特或一個或多個對齊比特之后的特定模式來識別比特,確定這些填充字節存在。一旦進行了這樣的確定,則解碼器不必對這些填充字節進行解碼。在一個實施例中,解碼器包括解復用功能,用于防止填充字節以與報頭比特(其并未發送到解碼引擎)類似的方式被發送到解碼器中的算術解碼引擎。在一個實施例中,填充比特的模式是三字節序列000003 Hex,添加到比特流上。前兩個字節表示零字(0000)而第三字節(03)在片段的結尾之后由解碼器識別以將這些字節識別為填充字節。在一個實施例中,在片段的結尾填充的填充字節310的數量確保了算術解碼操作的數量和比特數之間的關系小于或等于4。編碼器,例如圖1所示的編碼器102,可以使用寄存器C來計數或另外跟蹤事件(解碼操作)與比特(或字節)比。每一次處理事件時,將計數器C遞增1,并且每一次產生比特時,將計數器C遞減4 (或針對每一個所產生的字節,32)。在一個實施例中,所述計數考慮到片段中的所有比特(或其他事件集合),包括報頭和報尾停止和對齊比特。注意,在一個實施例中,并不利用計數器C對end_of_slice_flag進行解碼操作(盡管在一個可選實現中,可以對其進行計數)。然而,已知的是,每一個宏塊存在一個這樣的事件且這樣的事件的數量由圖像大小明確地界定。在這種情況下,不對end_0f_SliCe_flag進行計數等效于對其進行計數(因此,每一個宏塊以I遞增C),而同時每256個像素以I遞減C (每一個宏塊一次)。可選地,針對每一個宏塊,能夠以任意值對C進行遞減。在一個實施例中,按照這里所述的方式來添加填充字節確保了已編碼片段的最小長度。相對于將填充比特插入已編碼片段的中間的傳統技術,該改進簡化了通過其編碼器編碼數據特別是定義多少數據來進行編碼的規則。編碼器可以將事件序列的事件數限制為信息比特的序列中的信息比特數、事件序列中所表示的輸入數據的分段或塊的數量。例如,所述限制可以采用線性組合的形式:e≤ α Β+β S,其中,e是信息比特(或其他元素)序列中所表示的事件數量,B是信息比特(或其他元素)中的序列中的信息比特的數量,S是事件序列中所表示的分段(例如宏塊)的數量,以及α和β表示對計數器的遞減值以實質上保持事件序列中的事件數量相對于所產生的信息比特數和所處理的分段數的限制。典型地,將α和β的值提供給針對算術編碼器的控制器,并且下面將討論α和β的獲得。值α可以表示在解碼器處產生信息比特時諸如對計數器的遞減值,而值β可以表示在完成數據塊的處理時諸如對計數器的遞減值。在可選方案中,可以在分段的處理開始處或處理數據塊期間的任何其他時間處,從計數器值中遞減數值β,這對本領域的技術人員是顯而易見的。由于塊的總數S和值β是已知的,因此,針對輸入數據塊(例如宏塊)的處理之后的事件序列,從事件數中減去乘積0XS。例如,在計數器用于響應已經產生的比特數來限制事件數的情況下,計數器最初能夠以數值β XS遞減,且針對所產生的每一個信息比特,能夠以數值α遞減,而針對由熵編碼器處理的事件序列的每一個事件,以"I"對計數器進行遞增。值β可以是任意值,典型地在I到100的范圍內,并且如以下所描述的那樣來確定。值α可以是任意值,典型地在I到10的范圍內,并且可以如以下所描述的那樣來確定。在一些情況下,要處理的輸入數據的塊數是事先未知的,例如,其中通信介質限制了可能在信息序列中提供的信息比特的數量的情況。這可能在以下情況下發生,在通過因特網作為因特網協議(IP)分組來傳送信息序列的情況下,在IP分組具有最大尺寸限制的情況下。在這些情況下,根據特定圖像的復雜度,可以需要一個或多個信息比特序列來表示輸入數據的單個圖像。然而,用于產生信息比特序列的塊數可能是事先未知的,由于在多少處理后的分段之后將達到信息比特序列的最大尺寸可能是未知的。在要處理的輸入數據的分段數事先未知的情況下,當對表示特定事件序列的一個或多個塊進行編碼時,所述控制器可以考慮事件的序列。例如,在計數器用于響應已經產生的比特數來限制事件數的情況下,針對所處理的每一塊,能夠以值β對計數器進行遞減,并且針對所產生的每一個信息比特,能夠以值α對計數器進行遞減,同時針對由熵編碼器所處理的事件序列的每一個事件,能夠以"I"遞增計數器。可以通過考慮到如上所述的一個或多個限制的編碼器的系統設計器來事先確定數值α和β,并且將其提供給控制器。可選地或另外,數值α和β可以由控制器或編碼器的任何其他組件根據如上所討論的一個或多個限制來確定,或者作為編碼器默認值。在控制器利用由標準或由解碼設備所施加的限制之一或兩者來確定數值α和β的情況下,關于一個或多個限制的信息可以存儲在控制器的存儲器處(未示出),并且由控制器用于確定α和β值。另外,或在可選方案中,可以將與限制有關的信息提供給控制器,例如,通過諸如外部存儲器(即,數字視頻盤(DVD))等一些外部設備、DVD播放設備或由系統工程師,例如,處理與編碼特定輸入數據有關的一些功能。在后一種情況下,系統工程師可以進入控制臺或其他輸入設備(未示出),或者另外指定關于作為編碼標準和/或解碼設備的結果施加的限制的信息,如本領域的技術人員所意識到的。此外,當確定值α和β時,可以考慮復雜性限制是否太嚴格,例如,α和/或β的值是否太低。在信息比特序列的結尾處的填充信息比特的高比例(即,填充字節(或比特)的數量大于信息序列的信息比特的大約1%或2%)可以表示該限制太嚴格(tight)。本領域的技術人員將會意識到,其他比例可以表示高比例的填充信息比特,例如,考慮到可以使用的特定標準和/或解碼器。在諸如確定α和β的值太嚴格的情況下,可以增加α和β的值以減小將添加填充字節的可能性(即,減小已編碼信息序列中的質量處罰的可能性)。當增加α和β的值時,可以考慮相對于用于解碼已編碼信息序列的解碼器對所產生的復雜性限制的效果。這樣的考慮可以包括實現解碼器的成本。如果復雜性限制較高,則在解碼器中可能會需要越大的處理能力。所需處理能力的增加可能會導致更高的實現成本。注意,在一個實施例中,可以在對來自每一個宏塊的數據進行編碼之后進行對α和β的改變。可以利用線性回歸技術,通過試驗來確定值α和β。可以對一定數量的事件序列,每一個均表示S分段,進行編碼,而不會提高限制的復雜性。對于每一個事件序列ζ,事件數量e (ζ)、這樣產生的信息比特B (ζ)的數量是已知的。利用線性表達式,可以確定近似于數據對(e (ζ), B (ζ))的線e+c*B+d。然后,可以增加初始值α和/或β,從而減小和可能最小化位于線e= α *Β+β *S上方的數據對(e (ζ), B (ζ))的數量。利用如上所討論的一個或多個各技術所確定的值α和β,編碼器可以針對所產生的每一個信息比特考慮值α (即,以值α遞減計數器),且可以在輸入數據的分段完成時,考慮值β (即,以數值β來遞減計數器)。例如,在α和β為整數的情況下,可以直接實現這樣的考慮(即,對一個或多個計數器進行遞減)。在諸如α和β之一或兩者為分數值的情況下,可以確定公分母來提供α和β的非分數值。在這種情況下,例如,通過在信息比特產生和分段處理完成時分別以值α和β來遞減計數器,如上所述,可以考慮α和β的新的、非分數值。例如,通過在處理事件序列的每一個事件時將公分母的值加到計數器值上,可以考慮所確定的公分母。例如,在確定α和β的值分別為4/3和25的情況下,可以確定公分母為3。因此,利用該公分母,α和β的非分數值可以分別確定為4和75。因此,在使用計數器來考慮α和β的值的情況下,針對所產生的每一個信息比特,可以用4來遞減計數器,在完成處理每一個分段時以75來遞減計數器,以及針對處理后的每一個事件,以3來遞增計數器。典型編碼器操作圖4示出了算術編碼器的一個實施例的方框圖。參考圖4,算術編碼器400包括序列發生器405、概率估計器410和編碼引擎415,每一個均彼此相連。一個或多個輸入數據線420提供輸入端口,用于接收到編碼器400的事件序列425 (例如,二進制事件的已排序序列)。如以下所描述的,由編碼器400來處理事件序列,以產生信息序列。在一個實施例中,信息序列是由至少一個信息元素(例如比特)構成的已排序序列。在一個實施例中,信息序列中的信息比特的數量小于事件序列中的事件數。輸出430提供輸出端口,用于發送來自編碼器400的信息序列435。信息序列比特的已排序序列包括一個或多個具有值"O "和"I"的比特。在接收到事件序列425時,序列發生器405順序地向概率估計器410和編碼引擎415傳送事件425。序列發生器405還針對二進制事件向概率估計器410傳送環境信息。概率估計器410利用接收到的環境信息,產生向編碼引擎415傳送的概率估計Ρ(Α)。在一個實施例中,概率估計器410向編碼引擎415發送多個概率估計,且編碼引擎415根據R值來選擇概率估計之一。可選地,可以將R值發送到概率估計器410,所述概率估計器410使用其來選擇要發送的一個概率估計。概率估計器410然后根據接收到的二進制事件的值來更新其內部狀態。編碼引擎415利用接收到的二進制事件和相應的概率估計P (A)來產生零個或更多個信息。在一個實施例中,編碼引擎415對表示算術編碼的終結的事件。所述事件可以是片段標志的結尾,或如果有的話,非算術編碼的另一指示符在比特流中將跟隨其后。在產生零個或更多個信息比特時,編碼引擎415利用包括范圍寄存器465、低寄存器470、比特突出(bit outstanding)寄存器475和計數寄存器480的各種寄存器。在執行算術編碼時編碼器400的操作在本領域內是公知的。在一個實施例中,編碼器400將事件的關系限制到信息比特,這在別的地方將會描述。編碼器400通過將填充字節(或比特)插入到信息序列中來執行該操作,如這里所描述的。圖5是用于編碼事件的一個實施例的流程圖。通過處理邏輯來執行該處理,所述處理邏輯可以包括硬件(例如,電路、專用邏輯等)、軟件(例如,在通用計算機系統或專用機器上運行的軟件)、或兩者的組合。對算術編碼處理的輸入是利用識別環境的環境ID所解碼后的二進制事件,并且在輸出中寫入的值R、L和symCnt是從編碼中得到的比特。在一個實施例中,編碼與解碼對稱,并且如以上所討論的,算術編碼引擎的狀態由指向子區間下端的值L的值、以及指定子區間的相應范圍的值R來表示。在一個實施例中,僅在初始化編碼引擎之后調用編碼處理。在一個實施例中,通過發送等于零的值L和等于OxOlFE的值R,將第一比特標志設置為一,設置等于零的比特突出(BO)值和symCnt (C)計數器,來執行初始化。在編碼期間使用第一比特標志來表示編碼器什么時候第一次通過放置比特過程。symCnt計數器存儲表示已編碼的事件數的值。參考圖5,該處理通過如下所述獲得值Rujs開始編碼單一事件(例如比特)(處理塊501)。在一個實施例中,處理邏輯通過設置等于R右移六個位置的值的R索引(或Ridx)并且與數值3Hex相與來獲得變量Rm。然后,處理邏輯設置等于通過利用Ridx值和與環境相關的當前環境的狀態值來訪問概率估計狀態機表(例如圖16A所示的表)而確定的值的Rujs值。然后,將R值設置為當前R值減去R >s。在計算出針對MPS計數的子范圍區間之后,處理邏輯測試正在被編碼的二進制事件的值是否不等于MPS的值(處理塊502)。如果二進制事件的值等于MPS,則處理邏輯采用MPS路徑并轉移到處理塊503,其中處理邏輯利用圖16B的表將狀態機更新為狀態機中針對環境所表示的下一狀態,并且處理轉移到處理塊508。如果處理邏輯確定正在被編碼的二進制事件并不等于MPS的值,則處理邏輯采用LPS路徑且轉移到處理塊504,其中處理邏輯將L的值設置為等于值L加上值R,且將值R設置為等于值Ru^之后,處理邏輯確定特定環境的狀態是否并不等于零(處理塊505)。在一個實施例中,狀態零是對應于50/50概率的狀態。可選地,狀態零是另一概率,例如50/50概率附近的某個概率的狀態。如果針對環境(context)的狀態并不等于零,則處理邏輯轉移到處理塊507。如果環境的狀態等于零,則處理邏輯切換MPS的意思(處理塊506)并將處理轉移到塊507,并且處理邏輯利用圖16B的表,將環境的狀態號轉移到下一狀態(處理塊507)。
在執行處理塊507和503之后,處理轉移到處理塊508,其中處理邏輯執行重新歸一化過程,例如圖6所示的重新歸一化。然后,處理邏輯以I來遞增事件計數器值(處理塊509),且處理結束。圖6是編碼器重新歸一化過程的一個實施例的流程圖。通過處理邏輯來執行處理,所述處理邏輯可以包括硬件(例如電路、專用邏輯等)、軟件(例如在通用計算機系統或專用機器上運行的)、或兩者的組合。參考圖6,處理邏輯測試值R是否小于IOOHex (處理塊601)。如果否,則執行該處理。如果是,則處理轉移到處理塊602,其中處理邏輯測試值L是否小于lOOHex。如果是這樣,處理塊轉移到處理塊603,其中利用參數O來執行放置比特過程,且之后處理轉移到處理塊608。如果處理邏輯確定值L大于或等于IOOHex,則處理邏輯測試值L是否大于200Hex。如果否,則處理邏輯將值L設置為從值L中減去IOOHex的結果,且利用參數1,以I來遞增比特突出(BO)值(處理塊605),且處理轉移到處理塊608。如果值L大于或等于200Hex,則處理轉移到處理塊606,其中處理邏輯將值L設置從值L中減去200Hex的結果,且執行放置比特過程(處理塊607),并且轉移到處理塊608。處理塊608,處理邏輯將R的值左移一個位置且將值L移位一個位置。之后,處理轉移到處理塊601且重復該處理。圖7示出了用于執行放置比特過程的一個實施例的處理的一個實施例。所述放置比特過程將零個或更多個比特寫入比特流。通過處理邏輯來執行該處理,所述處理邏輯可以包括硬件(例如電路、專用邏輯等)、軟件(例如,在通用計算機系統或專用機器上運行的軟件)或其組合。參考圖7,處理邏輯最初檢查第一比特標志是否并不等于零(處理塊701)。如果第一比特標志設置為1,則處理邏輯將第一比特標志設置為等于零(處理塊702),并且處理轉移到處理塊704。如果否,則處理邏輯發送具有值B的比特(處理塊703),且處理邏輯轉移到處理塊704。在處理塊704,處理邏輯測試比特突出(BO)的值是否大于零。如果否,則處理結束。如果是這樣,則處理邏輯發送具有值1-B的比特,且以一來遞減BO的值(處理塊705)。之后,處理邏輯轉移到處理塊704。圖8是用于在終結之前對事件進行解碼的處理的一個實施例的流程圖。該處理可以用于編碼片段的結尾、以及信號通知算術編碼的終結的任何其他二進制事件。通過處理邏輯來執行該處理,所述處理邏輯可以包括硬件(電路、專用邏輯等)、軟件(例如,在通用計算機系統或專用機器上運行的軟件)、或兩者的組合。參考圖8,處理邏輯最初以2來遞減值R (處理塊801)。然后,處理邏輯測試正在被編碼的二進制事件的值是否并非等于零(處理塊802)。如果該事件等于零,則處理邏輯執行如圖6所示的重新歸一化過程(處理塊803),且處理轉移到邏輯塊806。如果要編碼的二進制事件的值并不等于零,則處理邏輯將值L設置為值L加上值R的結果(處理塊804),執行編碼器清除過程(處理塊805),且轉移到處理塊806。在處理塊806,處理邏輯以I遞增事件計數器的值且編碼處理結束。如以上處理中所看到的,在一個實施例中,當二進制事件的值等于I時,算術編碼終結且在編碼該事件之后應用清除過程。當編碼這樣的事件時,寫入的最后比特包含等于I的停止比特。圖9示出了在終結處清除的處理的一個實施例的流程圖。通過處理邏輯來執行該處理,其中可以包括硬件(例如電路、專用邏輯等)、軟件(例如,在通用計算機系統或專用機器上運行的軟件)或兩者的組合。參考圖9,處理邏輯最初將值R設置為2 (處理塊901)。然后,處理邏輯執行重新歸一化過程,例如圖6所示的重新歸一化過程(處理塊902)。然后,處理邏輯對等于將值L右移九個位置且與IHex的值相與的值執行圖7所示的放置比特過程(處理塊903)。對L寄存器的值的移位內容執行與運算的結果引起在第10個比特位置處(從最近的有效比特開始計數)的比特得以產生,且隨后利用放置比特過程輸出。最后,處理邏輯發送等于右移7個位置、與3Hex的值相與、然后與IHex或運算的L寄存器的值的兩個比特(處理塊904)。執行與IHex的或運算以加上停止比特。典型解碼器操作圖10是算術解碼器1000的一個實施例的方框圖。參考圖10,解碼器1000包括連接在一起的序列發生器1005、概率估計器1010和解碼引擎1015。輸入1020向解碼器1000提供針對信息序列1025 (例如,二進制比特的已排序序列)的端口。序列1025的二進制比特可以具有值"O"或"I"。在一個實施例中,解碼器1000處理信息序列以產生事件序列1035。所產生的事件序列是包括多個事件的已排序事件序列(例如二進制事件),其可以具有除了單一比特值之外的其他值。將事件序列提供給輸出1030,所述輸出1030包括來自解碼器1000的至少一個輸出端口。在接收信息序列1025時,序列發生器1005向解碼引擎1015傳送一個或多個比特。解碼器1000按照如下方式交互地產生事件序列的一個或多個事件。對于每一個事件,序列發生器1005向概率估計器1010傳送相應的環境。
根據所接收到的環境值,概率估計器1010產生相應的概率估計P(A),其被發送到解碼引擎1015且由解碼引擎1015在產生事件時使用。在一個實施例中,概率估計器1010向解碼引擎1015發送多個概率估計,且解碼引擎1015根據R值選擇概率估計之一。可選地,可以將R值發送到概率估計器1010,所述概率估計器1010使用其來選擇要發送的一個概率估計。然后,概率估計器1010根據從解碼引擎1015接收到的二進制事件的值來更新其內部狀態。解碼引擎1015向概率估計器1010和序列發生器1005發送每一個產生的二進制事件。解碼引擎1015消耗針對所產生的每一個二進制事件的零個或更多個信息比特。因此,在產生事件之后,序列發生器1005可以將來自信息序列的零個或更多個比特傳送到解碼引擎1015。解碼引擎1015在產生事件序列1035的事件時,使用各種寄存器,包括范圍寄存器1065、數值寄存器1070。解碼器1000的操作在如下所討論的流程圖中示出。以下的流程圖示出了通過解碼器的一個實施例,例如解碼器1000對片段執行的解碼操作。在一個實施例中,解碼器基于環境值,根據圖12、14八、148、15八或158所示的流程圖來執行解碼。所示處理可以包括在其他處理中,進行修改或另外適配以獲得其中所具體實現的改進的好處。在一個實施例中,解碼器一次讀取一個字節。在可選實施例中,解碼器一次讀取一個比特。圖11是算術解碼器初始化處理的一個實施例的流程圖。由處理邏輯來執行該處理,所述處理邏輯可以包括硬件(例如電路、專用邏輯等)、軟件(例如在通用計算機系統或專用機器上運行的軟件)或兩者的組合。參考圖11,該處理利用將范圍R設置為預定數的處理邏輯來開始(處理塊1101)。在一個實施例中,預定數是OxffOO。在初始化范圍R之后,處理邏輯將壓縮數據的兩個字節讀入到寄存器V (處理塊1102)。在一個實施例中,寄存器V存儲壓縮的比特,一次一個字節。寄存器V可以實現來存儲壓縮的數據,一次一個比特,但是在這里所描述的處理中所使用的常數將必須相應地改變。如圖所示,更具體地,處理邏輯讀入一個字節且左移8個位置,然后得到另一字節且利用算術或運算將其加到寄存器V中。一旦已經將壓縮的數據讀入到寄存器V中,處理邏輯將寄存器B的值設置為預定值。寄存器B表示可用于處理的寄存器V中的額外比特的數量。當寄存器B的值變為小于O時,則需要提取另一壓縮數據的字節。在一個實施例中,預定值為7。圖12是用于解碼二進制事件的處理的一個實施例的流程圖。由處理邏輯來執行該處理,所述處理邏輯可以包括硬件(例如電路、專用邏輯等)、軟件(例如在通用計算機系統或專用機器上運行的軟件)或兩者的組合。參考圖12,該處理通過計算針對LPS的區間的大小開始(處理塊1202)。在一個實施例中,通過乘法來執行該計算。所述乘法可以通過使用基于與環境相關聯的狀態(CTX)來表查詢來近似。在一個實施例中,使用有限狀態機來表不多大的概率正在取決于狀態機。然后,針對查詢,狀態值和在R的最高有效比特之后的R的下兩個最高有效比特。圖16A示出了用于執行查詢的典型表。以下還給出了產生該表的典型方法。由于該實現每次讀取字節而非比特,因此將表查詢的結果移位7個位置。表查詢的移位結果是被稱為Rujs的LPS的子范圍區間。
此外,作為處理塊1202的部分,處理邏輯通過從寄存器R的范圍中減去LPS的子范圍區間Rujs,來計算MPS的子區間范圍。處理邏輯將R值設置為等于相減的結果。在計算針對MPS的子范圍區間之后,處理邏輯測試寄存器V的值是否大于或等于寄存器R中所存儲的MPS的子區間,表示正在處理的當前比特處于LPS子范圍內(處理塊1203)。如果否,則處理邏輯采用MPS路徑且轉移到處理塊1204,其中處理邏輯將正在解碼的值(即,正在返回的結果)S設置為等于定義為針對該特定環境的MPS的值,且利用圖16B所示的表,將針對環境的狀態機更新為針對環境的狀態機中所表示的下一狀態。在一個實施例中,對于MPS,狀態機更新包括將狀態表中的狀態以I遞增。如果處理邏輯確定值V大于或等于寄存器R中的值,則處理邏輯采用LPS路徑且轉移到處理塊1205,其中將結果S設置為等于針對特定環境CTX的LPS (并非MPS),將值V設置為等于從當前值V中減去范圍R的值的結果,區別將范圍R設置為等于針對LPS的范圍,即Rlps (處理塊1205)。處理邏輯還檢查針對二進制事件的環境的狀態是否為零(處理塊1206)。在一個實施例中,狀態O是對應于50/50概率的狀態。可選地,狀態O是對應于另一概率,例如50/50概率附近的某個概率的狀態。如果否,則處理轉移到處理塊1208。如果是,則處理邏輯切換MPS的意義(處理塊1207)。之后,利用圖16B所示的表,將環境的狀態號更新為下一狀態(處理塊1208),并且處理邏輯執行重新歸一化過程(處理塊1209),下面將更詳細地討論。圖13是重新歸一化過程的流程圖。由處理邏輯來執行該處理,所述處理邏輯可以包括硬件(例如電路、專用邏輯等)、軟件(例如在通用計算機系統或專用機器上運行的軟件)或兩者的組合。參考圖13,該處理通過處理邏輯測試R是否小于8000Hex開始(處理塊1301)。如果R大于或等于8000Hex,則重新歸一化處理結束。如果否,處理邏輯加倍R和V的值(處理塊1302)。在一個實施例中,處理邏輯通過將R和V的比特左移一個位置來加倍R和V的值。由于該移位已經引起了一個較不有效的比特可用于處理,因此還以I來遞減B的值。然后,處理邏輯檢查值B是否小于O (處理塊1303)。如果否,則處理轉移到處理塊1301且重復該處理。如果B的值小于0,則處理轉移到處理塊1304,其中將B的值設置為7,且提取要處理的另一字節且與寄存器V的當前內容執行邏輯或運算。之后,處理轉移到處理塊1301且重復該處理。圖14A和14B示出了以等概率來解碼事件的流程圖。當寄存器V的大小大于16比特時,可以使用圖14A,而當寄存器V的大小為16比特時,可以使用圖14B。當每次提取字節時可以使用這些實現。由處理邏輯來執行該處理,所述處理邏輯可以包括硬件(例如電路、專用邏輯等)、軟件(例如在通用計算機系統或專用機器上運行的軟件)或兩者的組合。在分布圍繞零為中心且得到正值或負值的可能性大致相同的情況下,可以使用這些處理。例如,當處理系數的符號值時,可以使用其。作為估計其是正值或負值的可能性的替代,使用固定估計,識別概率為50/50。因此,不必執行針對R與概率乘法的表查詢。注意,這些并不會影響終結。參考圖14A,該處理通過處理邏輯加倍值V且將B的值遞減I來開始(處理邏輯1401)。可以通過將V的比特左移一個位置來執行值V的加倍。接下來,處理邏輯檢查值B是否小于O (處理塊1402)。如果否,則處理轉移到處理塊1404。如果值B小于0,則處理轉移為處理塊1403,其中將值B設置為7且提取要處理的另一字節,并且與寄存器V的當前內容執行邏輯或運算。在處理塊1404,處理邏輯測試V的值是否大于或等于值R。如果是這樣,則處理邏輯將結果S設置為1,且將值V設置為從值V中減去值R的結果(處理塊1405),并且處理結束。如果否,則處理邏輯將結果S設置為O (處理塊1406),并且處理結束。參考圖14B,處理通過處理邏輯將值V'設置為等于V、加倍V的值且以I遞減B的值來開始(處理邏輯1411)。可以通過將V的比特左移一個位置,可以執行值V的加倍。接下來,處理邏輯檢查值B是否小于O (處理塊1412)。如果否,則處理轉移到處理塊1414。如果值B小于0,則處理轉移到邏輯塊1413,其中將值B設置為7且提取要處理的另一字節,并且與寄存器V的當前內容進行邏輯或運算。在處理塊1414處,處理邏輯測試值V是否大于或等于R的值,或V'是否大于或等于SOOOHex。如果是這樣,則處理邏輯將結果S設置為1,并且將值V設置為從值V中減去值R的結果(處理塊915),并且處理結束。如果否,則處理邏輯將結果S設置為O (處理塊916)和處理結束。圖15A是用于解碼表示算術編碼的終結的已編碼事件的一個實施例的流程圖。這樣的事件可以包括片段標志的結尾。針對片段標記的結尾,可以使用語法來向解碼器表示片段標志的結尾的存在。在一個實施例中,針對每一個宏塊執行該處理;然而,僅針對片段中的最后宏塊的是將要表示片段的結尾的結果(例如,輸出等于I的結果)。當數據將要遵循除了算術編碼之外的另一編碼技術內未壓縮或已壓縮的比特流中的算術編碼時,可以使用信號通知算術編碼的終結的事件(對于解碼器)。注意,附加算術編碼數據可以遵循該未壓縮數據或利用非算術編碼技術壓縮后的數據。因此,在具有算術編碼數據的比特流中交織非算術編碼數據的情況下,可以使用信號通知終結的事件。由處理邏輯來執行該處理,所述處理邏輯可以包括硬件(例如電路、專用邏輯等)、軟件(例如在通用計算機系統或專用機器上運行的軟件)或兩者的組合。參考圖15A,處理邏輯測試值V是否小于100Hex(處理塊1501),由此,指示已經達到了片段中的最后宏塊。如果這樣,則處理邏輯將表示已解碼符號的結果S設置為1(處理塊1502),并且針對片段的解碼處理結束。如果否,則處理邏輯將輸出結果S設置為0,將值R設置為從值R中減去IOOHex的結果,并且將值V設置為從值V中減去IOOHex的結果(處理邏輯1503)。然后,處理邏輯執行圖3所示的重新歸一化過程(處理塊1504)并且處理結束。注意,在一個實施例中,可以切換MPS和LPS之間的約定。圖15B是當切換MPS和LPS之間的約定時,在終結之前編碼事件的處理的一個實施例的流程圖。可以由處理邏輯來執行該處理,所述處理邏輯可以包括硬件(例如電路、專用邏輯等)、軟件(例如在通用計算機系統或專用機器上運行的軟件)或兩者的組合。參考圖15B,處理邏輯通過從值R中減去IOOHex來開始(處理塊1511)。然后,處理邏輯測試值V是否大于或等于值R (處理塊1512)。如果這樣,處理邏輯設置將表示已解碼符號的輸出結果S設置為I (處理塊1513),并且在終結之前解碼事件的解碼處理結束。因此,不執行重新歸一化。如果否,則處理邏輯將輸出結果S設置為O (處理塊1514),并且執行圖13的重新歸一化過程(處理塊1515)和處理結束。用于概率估計的狀態機的構造以下在C代碼中給出了構造圖16A和16B中的狀態機的典型處理。C 代碼:
權利要求
1.一種算術解碼器,包括: 序列發生器,用于產生針對事件序列的事件的環境標識符;以及 概率估計器,用于確定針對LPS的值和針對LPS的概率估計;以及 解碼引擎,包括范圍寄存器,用于將數值分配給針對LPS的范圍,其中如果環境標識符并不等于指標,則所述數值基于概率估計、范圍寄存器中所存儲的數值和LPS的范圍的環境標識符,并且如果環境標識符等于所述指標,則該值并不基于范圍寄存器中所存儲的值,并且解碼引擎還根據針對LPS的范圍值和來自信息序列的比特,確定二進制事件的值。
2.根據權利要求1所述的算術解碼器,其特征在于當環境標識符等于指標且對LPS進行解碼時,所述解碼引擎停止解碼。
3.根據權利要求2所述的算術解碼器,其特征在于在信息序列中非算術編碼數據跟隨在算術編碼數據之后。
4.根據權利要求2所述的算術解碼器,其特征在于所述指標表示片段指示符的結尾。
5.根據權利要求1所述的算術解碼器,其特征在于所述解碼引擎包括數值寄存器,并且當環境標識符等于指標時,如果數值寄存器中的數值小于分配給LPS范圍的數量,則通過產生第一狀態的事件,根據數值寄存器中的值對事件進行解碼,而如果數值寄存器中的值大于或等于所述數量,則通過產生第二狀態的事件,根據數值寄存器中的值對事件進行解碼。
6.根據權利要求5所述的算術解碼器,其特征在于僅當數值寄存器中的值大于或等于所述數量時,解碼引擎響應對事件的解碼來執行重新歸一化。
7.根據權利要求1所述的算術解碼器,其特征在于所述解碼引擎包括數值寄存器,并且當環境標識符等于所述指標時,通過首先從范圍寄存器中減去分配給LPS范圍的數值來對事件進行解碼,其中如果數值寄存器中的數值大于或等于范圍寄存器中的數值,則在第一狀態下產生事件,而如果數值寄存器中的數值小于范圍寄存器中的數值,則在第二狀態下產生事件。
8.根據權利要求7所述的算術解碼器,其特征在于僅當數值寄存器中的數值大于或等于范圍寄存器中的數值時,響應解碼事件,所述解碼引擎執行重新歸一化。
9.根據權利要求7所述的算術解碼器,其特征在于如果環境標識符等于所述指標,則分配給LPS的范圍的數值是2。
10.根據權利要求8所述的算術解碼器,其特征在于如果環境標識符等于所述指標,則分配給LPS的范圍的數值是lOOHex。
11.根據權利要求7所述的算術解碼器,其特征在于如果環境標識符等于所述指標,則分配給LPS的范圍的數值為2,并且在包含正在被所述解碼引擎解碼的二進制事件的比特流中的讀取的最后一個比特等于I。
12.—種解碼方法,包括: 產生事件序列的二進制事件的環境標識符; 確定針對LPS的值和針對LPS的概率估計; 將數值分配給針對LPS的范圍,其中如果環境標識符并不等于指標,則所述數值基于概率估計、范圍寄存器中所存儲的值和LPS的范圍的環境標識符,并且如果環境標識符等于所述指標,則所述數值并不基于范圍寄存器中所存儲的數值;以及根據針對LPS的范圍值和來自信息序列的比特,確定二進制事件的值。
13.根據權利要求12所述的方法,其特征在于還包括:當環境標識符等于所述指標且對LPS進行解碼時,停止解碼。
14.根據權利要求12所述的方法,其特征在于在信息序列中非算術編碼數據跟隨在算術編碼數據之后。
15.根據權利要求12所述的方法,其特征在于所述指標表示片段指示符的結尾。
16.根據權利要求12所述的方法,其特征在于根據針對LPS的范圍值和來自信息序列的比特來確定二進制事件的數值包括:當環境標識符等于所述指標時,如果數值寄存器中的數值小于分配給LPS范圍的數值,則通過產生第一狀態的事件根據數值寄存器中的值對事件進行解碼,而如果數值寄存器中的值大于或等于所述數量,則通過產生第二狀態的事件,根據數值寄存器中的值對事件進行解碼。
17.根據權利要求16所述的方法,其特征在于還包括:僅當數值寄存器中的值大于或等于所述數量時,響應對事件的解碼來執行重新歸一化。
18.根據權利要求12所述的方法,其特征在于根據針對LPS的范圍值和來自信息序列的比特來確定二進制事件的值包括:當環境標識符等于所述指標時,通過首先從范圍寄存器中減去分配給LPS范圍的數值來對事件進行解碼,其中如果數值寄存器中的數值大于或等于范圍寄存器中的數值,則在第一狀態下產生事件,而如果數值寄存器中的數值小于范圍寄存器中的數值,則在第二狀態下產生事件。
19.根據權利要求18所述的方法,其特征在于還包括:僅當數值寄存器中的數值大于或等于范圍寄存器中的數值時,響應解碼事件,執行重新歸一化。
20.根據權 利要求18所述的方法,其特征在于如果環境標識符等于所述指標,則分配給LPS的范圍的數值是2。
21.根據權利要求19所述的方法,其特征在于如果環境標識符等于所述指標,則分配給LPS的范圍的數值是lOOHex。
22.根據權利要求19所述的算術解碼器,其特征在于如果環境標識符等于所述指標,則分配給LPS的范圍的數值為2,其中在包含正在由解碼引擎解碼的二進制事件的比特流中讀取的最后一個比特等于I。
23.一種算術編碼器,包括: 概率估計器,用于產生事件序列的每一個事件具有特定值的概率估計,其中概率估計器響應針對所述每一個事件的相應環境信息,產生所述概率估計;以及 與概率估計器相連的編碼引擎,用于響應每一個事件及其相應概率估計,產生信息序列的零個或更多個比特,其中編碼引擎在對片段信號的結尾進行編碼之前,利用與范圍寄存器的數值無關的子范圍區間的常數,對事件進行編碼,以信號通知信息序列中的算術編碼數據的結尾。
24.根據權利要求23所述的編碼器,其特征在于:利用常數對事件進行編碼以信號通知事件序列中的事件結尾的編碼引擎能夠將低寄存器的任何剩余內容包括在信息序列中。
25.根據權利要求24所述的編碼器,其特征在于:所述編碼引擎對低寄存器的任何剩余內容進行清除,并將在清除期間寫入的最后一個比特設置為等于I。
26.—種編碼數據的方法,所述方法包括:編碼事件序列中的事件以產生編碼數據;以及 利用編碼數據來產生比特流,包括對解碼時使用的指示符進行編碼以表示比特流中的算術編碼數據的結尾。
27.根據權利要求26所述的方法,其特征在于:在比特流中非算術編碼數據跟隨在算術編碼數據之后。
28.根據權利要求26所述的方法,其特征在于:編碼所述指示符包括對事件進行編碼以信號通知片段的結尾。
29.根據權利要求28所述的方法,其特征在于:編碼事件以信號通知片段的結尾包括: 在對片段信號的結尾進行編碼之前,利用與范圍寄存器的數值無關的子范圍區間的常數。
30.根據權利要求29所述的方法,其特征在于:利用常數來編碼事件以信號通知片段的結尾能夠將低寄存器的任何剩余內容清除到信息序列中。
31.根據權利要求30所述的方法,其特征在于:清除低寄存器的任何剩余內容包括: 將在清除期間寫入的最后一個比特設置為等于I。
32.—種編碼數據的方法,包括: 編碼事件序列中的事件以產生編碼數據;以及 利用編碼數據來產生比特流,包括在對片段信號的結尾進行編碼之前,利用與范圍寄存器的數值無關的子范圍區間的常數,對事件進行編碼以信號通知比特流中的算術編碼數據的結尾。
33.根據權利要求32所述的方法,還包括: 清除低寄存器的內容,包括將在清除期間所寫入的最后一個比特設置為等于I。
34.一種編碼數據的設備,所述設備包括: 用于編碼數據塊以產生編碼數據的裝置;以及 用于利用所述編碼數據來產生比特流的裝置,包括用于其中在對片段信號的結尾進行編碼之前,利用與范圍寄存器的數值無關的子范圍區間的常數,所述編碼引擎對事件進行編碼以信號通知比特流中的算術編碼數據的結尾的裝置。
35.一種創建用于概率估計的狀態機的方法,所述方法包括: 將概率分配給查找表(LUT)中的狀態,包括將這些狀態中的每一個狀態i的概率設置為LPS的最高概率乘以適配比的i次冪,其中i是給定狀態的數量,并且適配比小于I ; 當觀察MPS和LPS時,針對LUT中要轉移到的狀態來產生狀態轉移,其中如果當前狀態并不是最高狀態,則當觀察到MPS時狀態機從當前狀態轉移到的下一狀態是高于當前狀態的下一狀態,而如果當前狀態是最高狀態,則當觀察到MPS時狀態機從當前狀態轉移到的下一狀態是當前狀態,并且其中當針對多個狀態觀察到LPS時狀態機從當前狀態轉移到的下一狀態是以下計算結果的舍入版本: 當前狀態數+log ((當前狀態的概率*適配比+ (1-適配比))/當前狀態的概率Vlog(適配比)。
36.根據權利要求35所述的方法,其特征在于:所述結果的舍入版本是:平均起來,當觀察到LPS時產生下一狀態時所引入的任何舍入實質上為零。
37.根據權利要求35所述的方法,其特征在于:所述LUT具有與每一個狀態關聯的多個值,其中所述多個值中的每一個均近似于期望區間范圍乘以與狀態關聯的概率的乘積。
38.根據權利要求37所述的方法,其特征在于:通過N/(2*M*log((j+M+l)/(j+M)))和與狀態關聯的概率的乘積,且舍入為整數值來獲得與狀態關聯的值,其中j表示陣列中的列索引,M是陣列中的列數,且N是常數。
39.根據權利要求37所述的方法,其特征在于:將所述多個狀態中的至少一個的多個數值中的至少一個限制為預定數。
40.根據權利要求39所述的方法,其特征在于:所述預定數能夠使得在編碼MPS期間具有至多一次重新歸一化迭代。
41.根據權利要求38所述的方法,其特征在于: LUT中的狀態數為63, 適配比等于0.5/0.01875的1.0/63次冪,以及 LPS的最高概率為0.5,以及 陣列中的列數為4,以及 將陣列中的第一列的值限制為N/4。
42.根據權利要求41所述的方法,其特征在于所述數N為512。
43.一種算術編碼器,包括: 概率估計器,用于產生事件序列的每一個事件具有特定值的概率估計,其中所述概率估計器利用通過以下方式創建的概率估計狀態機,響應所述每一個事件的相應環境信息產生概率估計,所述方式為: 將概率分配給查找表(LUT)中的狀態,包括將這些狀態中的每一個狀態i的概率設置為LPS的最高概率乘以適配比的i次冪,其中i是給定狀態的數量,并且適配比小于I ; 當觀察MPS和LPS時,針對LUT中的要轉移到的狀態,產生狀態轉移,其中如果當前狀態并不是最高狀態,則當觀察到MPS時狀態機從當前狀態轉移到的下一狀態是高于當前狀態的下一狀態,而如果當前狀態是最高狀態,則當觀察到MPS時狀態機從當前狀態轉移到的下一狀態是當前狀態,另外,當針對多個狀態觀察到LPS時狀態機從當前狀態轉移到的下一狀態是以下計算結果的舍入版本: 當前狀態數+log ((當前狀態的概率*適配比+ (1-適配比))/當前狀態的概率Vlog(適配比);以及 與概率估計器相連的編碼引擎,響應每一個事件及其相應的概率估計,產生信息序列的零個或更多個比特。
44.根據權利要求43所述的算術編碼器,其特征在于:所述結果的舍入版本是:平均起來,當觀察到LPS時產生下一狀態時所引入的任何舍入實質上為零。
45.根據權利要求43所述的算術編碼器,其特征在于:所述LUT具有與每一個算術編碼器關聯的多個值,其中所述多個值中的每一個均近似于期望區間范圍乘以與狀態關聯的概率的乘積。
46.根據權利要求45所述的算術編碼器,其特征在于:通過N/(2*M*log((j+M+l)/(j+M)))和與狀態關聯的概率的乘積,且舍入為整數值來獲得與狀態關聯的值,其中j表示陣列中的列索引,M是陣列中的列數,且N是常數。
47.根據權利要求45所述的算術編碼器,其特征在于:所述多個狀態中的至少一個的多個數值中的至少一個被限制為一個數。
48.根據權利要求47所述的算術編碼器,其特征在于:所述數使得能夠在編碼MPS期間具有至多一次重新歸一化迭代。
49.根據權利要求43所述的算術編碼器,其特征在于: LUT中的狀態數為63, 適配比等于0.5/0.01875的1.0/63次冪,以及 LPS的最高概率為0.5,以及 陣列中的列數為4,以及 將陣列中的第一列的值限制為N/4。
50.根據權利要求49所述的算術編碼器,其特征在于:所述數N為512。
51.一種算術解碼器,包括: 概率估計器,用于產生事件序列中的事件具有特定值的概率估計,其中所述概率估計器利用通過以下方式創建的概率估計狀態機,響應針對事件序列中的所述事件的相應環境信息產生概率估計,所述方式為: 將概率分配給查找表(LUT)中的狀態,包括將這些狀態中的每一個狀態i的概率設置為LPS的最高概率乘以適配比的i次冪,其中i是給定狀態的數量,并且適配比小于I ;以及 當觀察MPS和LPS時,針對LUT中的要轉移到的狀態,產生狀態轉移,其中如果當前狀態并不是最高狀態,則當觀察到MPS時狀態機從當前狀態轉移到的下一狀態是高于當前狀態的下一狀態,而如果當前狀態是最高狀態,則當觀察到MPS時狀態機從當前狀態轉移到的下一狀態是當前狀態,另外,當針對所述多個狀態觀察到LPS時狀態機從當前狀態轉移到的下一狀態是以下計算結果的舍入版本: 當前狀態數+log ((當前狀態的概率*適配比+ (1-適配比))/當前狀態的概率Vlog(適配比);以及 與概率估計器相連的解碼引擎,響應于相應的概率估計和信息序列,產生事件序列的事件。
52.根據權利要求51所述的算術解碼器,其特征在于:所述結果的舍入版本是:平均起來,當觀察到LPS時產生下一狀態時所引入的任何舍入實質上為零。
53.根據權利要求51所述的算術解碼器,其特征在于:所述LUT具有與每一個算術編碼器關聯的多個值,其中所述多個值中的每一個均近似于期望區間范圍乘以與狀態關聯的概率的乘積。
54.根據權利要求53所述的算術解碼器,其特征在于:通過N/(2*M*log((j+M+l)/(j+M)))和與狀態關聯的概率的乘積,且舍入為整數值來獲得與狀態關聯的值,其中j表示陣列中的列索引,M是陣列中的列數,且N是常數。
55.根據權利要求53所述的算術解碼器,其特征在于:所述多個狀態中的至少一個的多個數值中的至少一個被限制為一個數。
56.根據權利要求55所述的算術解碼器,其特征在于:所述數量使得能夠在編碼MPS期間具有至多一次重新歸一化迭代。
57.根據權利要求51所述的算術解碼器,其特征在于: LUT中的狀態數為63, 適配比等于0.5/0.01875的1.0/63次冪,以及 LPS的最高概率為0.5,以及 陣列中的列數為4,以及 將陣列中的第一列的值限制為N/4。
58.根據權利要求57所述的算術解碼器,其特征在于:所述數N為512。
59.—種解碼方法,包括: 產生事件序列中的事件具有特定值的概率估計,利用通過以下方式創建的概率估計狀態機,響應針對事件序列中的所述事件的相應環境信息產生所述概率估計,所述方式為:將概率分配給查找表(LUT)中的狀態,包括將這些狀態中的每一狀態i的概率設置為LPS的最高概率乘以適配比的i次冪,其中i是給定狀態的數量,并且適配比小于1 ; 當觀察MPS和LPS時,針對LUT中要轉移到的狀態產生狀態轉移,其中如果當前狀態并不是最高狀態,則當觀察到MPS時狀態機從當前狀態轉移到的下一狀態是高于當前狀態的下一狀態,而如果當前狀態是最高狀態,則當觀察到MPS時狀態機從當前狀態轉移到的下一狀態是當前狀態,另外,當針對多個狀態觀察到LPS時狀態機從當前狀態轉移到的下一狀態是以下計算結果的舍入版本: 當前狀態數+log ((當前狀態的概率*適配比+ (1-適配比))/當前狀態的概率Vlog(適配比);以及 響應相應的概率估計和信息序列,產生事件序列的事件。
全文摘要
公開了一種執行算術編碼和/或解碼的方法和設備。在一個實施例中,編碼數據的方法包括對事件序列中的多個事件進行編碼以產生已編碼數據,且利用已編碼數據來產生比特流,包括將零個或更多個填充比特添加到比特流中已編碼數據之后,其中所述零個或更多個填充比特操作用于實質上保持已編碼事件量、正在編碼的塊數和比特流中的比特數之間的關系。
文檔編號H03M7/40GK103152054SQ201310053178
公開日2013年6月12日 申請日期2003年9月19日 優先權日2002年9月20日
發明者弗蘭克·簡·博森 申請人:株式會社Ntt都科摩