WO2003034597A1 - Huffman coding - Google Patents
Huffman coding Download PDFInfo
- Publication number
- WO2003034597A1 WO2003034597A1 PCT/IB2002/004198 IB0204198W WO03034597A1 WO 2003034597 A1 WO2003034597 A1 WO 2003034597A1 IB 0204198 W IB0204198 W IB 0204198W WO 03034597 A1 WO03034597 A1 WO 03034597A1
- Authority
- WO
- WIPO (PCT)
- Prior art keywords
- bit
- bits
- value
- decoding
- code word
- Prior art date
Links
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
- H03M7/42—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code using table look-up for the coding or decoding process, e.g. using read-only memory
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M7/00—Conversion of a code where information is represented by a given sequence or number of digits to a code where the same, similar or subset of information is represented by a different sequence or number of digits
- H03M7/30—Compression; Expansion; Suppression of unnecessary data, e.g. redundancy reduction
- H03M7/40—Conversion to or from variable length codes, e.g. Shannon-Fano code, Huffman code, Morse code
Definitions
- This invention relates to data compression, and specifically to decoding Huffman- encoded code words.
- Huffman codes are very widely used in the area of data compression and telecommunication. Some applications include JPEG picture compression and MPEG video and audio compression. Huffman codes are of variable word length, which means that the individual symbols used to compose a message are represented (encoded) each by a distinct bit sequence of distinct length. This characteristic of the code words helps to decrease the amount of redundancy in message data, i.e., it makes data compression possible. For example, symbols A, B, C and D may be represented with following code words:
- Table 1 An example of Huffman code table
- All code words are uniquely decodable; for example, the sequence of bits "01101110100” decodes to "ACDABA ⁇
- the set of code words is called a symbol list or alphabet.
- Uniqueness follows from the "prefix property" of Huffman codes; that is, the fact that if and when any leftmost or "leading" substring of a code word matches a code word in a Huffman decoding table, there is no need to check any additional bits beyond the leading substring.
- the symbol "B” is assigned a code word of "10". Thus, no other code words begin with "10".
- Huffman codes affords compression, because distinct symbols have distinct probabilities of incidence. This property is used to advantage by tailoring the code lengths corresponding to those symbols in accordance with their respective probabilities of occurrence. Symbols with higher probabilities of incidence are coded with shorter code words, while symbols with lower probabilities are coded with longer code words. Longer code words still show up, but because of their smaller probabilities of occurrence, the overall code length of all code words in a typical bit string tends to be smaller due to the Huffman coding.
- the algorithm for building Huffman code is based on a "coding tree”. Commonly-known algorithm steps are:
- Each "0"jbit in a code word corresponds to traversing a "0" branch in the tree, which, in FIG. 1, is done !by going up; going down traverses a "1" branch.
- the code word "11000” is represented on the tree by, starting on the right, at the root, and traversing one-by-one, a branch for each bit of the code word.
- the first two bits, "11”, correspond to the two one branches, or two down steps.
- the next bit, "0" corresponds to movement up, i.e. along a zero branch, as shown by the arrow. Traversing two more zero branches, for the remaining bits, "00”, leads to the output symbol for the complete code word "11000", wliich is here the letter "P”, located on
- bit-by-bit decoding A technique requiring less memory is bit-by-bit decoding, which proceeds as follows. One bit is taken and compared to all the possible codes with a word length of one. If a match is not found, another bit is shifted in to try to find the bit pair from among all the code words with a word length of two. This is continued until a match is found. Although this approach is very memory-efficient, it is also very slow, especially if the code word being decoded is long.
- a bit slice i.e., bit string long enough to accommodate any code word and therefore equal in length to the maximum code word
- a bit slice i.e., bit string long enough to accommodate any code word and therefore equal in length to the maximum code word
- the CAM contains memory pointers that reference symbols and associated code word lengths in a RAM table. Once a code word is decoded, the incoming bit stream is then shifted by the length of the decoded code word, and decoding resumes.
- An efficiently-implemented CAM scheme is fast, but still requires extra memory for pointers.
- CAMs are not readily available in all technologies. The CAM-based approach is described in U.S. Patent No. 5,208,593 which is further discussed below.
- variable code word lengths As indicated in the above examples, a problem in using variable code word lengths is achieving balance between speed and reasonable memory usage.
- Canonical Huffman codes are of special interest since they make decoding easier.
- PKZip file compression/decompression utility
- MPEG-1 layer III Mp3
- JPEG default baseline encoder JPEG default baseline encoder
- Characteristic of canonical Huffman codes is that the most significant (n-1) bits of the smallest Huffman code of length n are greater in value than the largest Huffman code of length (n-1), provided that the table is of the type where almost all codes have a leading one bit.
- n-1 the largest Huffman code of length
- Transforming Huffman tables to canonical format does not decrease coding efficiency, because, as can be seen from the following example in Table 3, the transformation does not change the number of bits per code word.
- codes of length 3 (for example, 010 and 011) are always larger than the three starting bits of codes of length 4 (for example, 0000, 0001, 0010, 0011). Code lengths are otherwise left unchanged.
- canonical codes often start with a string of ones (or zeroes) due to the above characteristic.
- the property of starting with one strings has been used in U.S. Patent No. 5,208,593 ("Tong") in the context of JPEG decoding, since JPEG Huffman tables consist of several codes that start with strings of ones.
- This reference applies "leading ones detection” to Huffman codes used in JPEG.
- the next code word to be decoded is checked for the length of the consecutive run of " 1 "s that starts at the most significant bit (MSB) (hereinafter, "the leading bit” will mean the most significant bit or leftmost bit) of that next code word. After this length or count is known,!
- U.S. Patent No. 6,219,457 to Potu discloses Huffman decoding pre-processing that is implemented to count either the number of consecutive leading zeros of a code word or the number of leading ones of a code word, depending, respectively, on whether the incoming code stream has been , encoded under the MPEG standard, which codes with leading zeros, or under
- VLC variable length code
- Hashemian's decoding scheme is based on "clustering" the incoming bits as follows. The first L bits are “clustered” for use as a pointer into a table. If the code is L or fewer bits in length, the current table contains the symbol, and the code is instantly decoded. If it is longer, the table has pointers to other tables which contain code words that start with those particular L bits. These new tables are again addressed by the next L-bit cluster, and so forth, until the symbol is finally found. Decreasing L improves memory efficiency, but the number of decoding steps increases.
- the first four of the 13 bits identify, in the first lookup table, the pointer to a second lookup table, whose codes all start with those four bits. Those four bit are thus no longer needed. Therefore, there are 9 bits left for the second lookup; after the second lookup, there are 5 bits left for the third lookup; and after the third lookup, there is 1 bit left, which requires a fourth step.
- the three table lookups constitute the first three steps in decoding, and the processing of the remaining bit constitutes the fourth decoding step.
- JPEG uses maximum lengths of 13 bits, while the longest code words in Mp3 are 19 bits long.
- Hashemian's scheme relies on bit masking and comparison steps. Also, since it does not exploit properties of canonical codes, the algorithm cannot simply jump over consecutive ones or zeros but processes code at a rate of at most L bits at a time; therefore, long codes take a very long time to decode. Moreover, Hashemian's solution using the above single-side growing table and a cluster length of 4 takes up 122 words of memory.
- Performing Huffman decoding requires the use of specialized independent hardware components such as shifters and adders, etc. This approach is feasible in application-specific devices, such as high definition television (HDTV) decoders, etc., but is a waste of resources on a system with a high-performance processor since these components already exist in the host.
- HDTV high definition television
- An accelerator can be implemented as a completely independent decoder (loose coupling) that has its own access to memory and outputs data so that the host CPU can perform its own tasks. Although several resources must be duplicated (adders, memory interface units, shifters etc.), performance is high. Unfortunately, Huffman decoding requires rather large tables which, if stored in the decoder's internal memory, would require that the memory be correspondingly large and costly. If the tables are in common memory, the decoder might block memory buses since decoding is a memory-intensive application.
- the present invention is directed to a method, apparatus and program for decoding a current code word in a series of Huffman-encoded code words.
- the value of a bit in the code words is detected.
- a cuirent count is calculated of that bit and subsequent, consecutive bits of the same value.
- Based on the current count an entry is retrieved from the decoding table.
- the detecting and calculating is iteratively repeated, each time for bits subsequent to those already counted, until the last retrieved entry indicates that no more iterations are to be performed.
- the last retrieved entry does not contain an output symbol that constitutes a decoding of the current code word, at least one bit subsequent to those counted is used to retrieve an entry that contains an output symbol that constitutes a decoding of the current code word.
- the present invention is directed to determining the value of the leading bit of a string and a count of a run that includes the bit.
- a value detector detects the value, and, a first inverter inverts the bits of the string if the detected value is equal to a pre-selected bit value.
- a digit extender converts to the pre-selected bit value every bit of the string of value different than the pre-selected bit value and of significance lower than that of the most significant bit having the pre-selected bit value.
- a second inverter inverts bits output from the digit extender.
- a reversor reverses the order of the bits inverted by the second inverter to create a reversed string.
- thermometer code evaluator calculates a run count of the bits in the reversed string that have the pre-selected value.
- this invention is directed to a computer usable medium having computer-readable program code means for decoding Huffman codes.
- the means includes a Huffman decoding table having, as an entry, an offset for identifying, from serially-arranged Huffman-encoded code words, remainder bits that represent a tail offset into the table.
- the number of remainder bits representing the tail offset is predetermined based on a plurality of counts of respective, consecutive, same-valued bits in the serial arrangement.
- the same- valued bits are of significance higher than that of the remainder bits and generally do not all have the same bit value count-to-count.
- FIG. 1 is a diagram of a Huffman tree
- FIG. 2 is an exemplary decoding system in accordance with the present invention.
- FIG. 3 is a flow chart of the process of decoding Huffman encoded code words in accordance with the present invention.
- FIG. 4 is
- This invention provides a fast and memory-efficient way of decoding a Huffman code stream.
- Decoding is based on the detection of bit runs, i.e., "0000" and "ll ll..” -strings, in the beginning of the code word.
- bit runs i.e., "0000" and "ll ll..” -strings
- the remaining bits in the code word are again searched for continuous streams of ones or zeros, until it can be decided that there are only a few bits left in the code word, at which point, they can be used to look up the corresponding symbol from a memory table.
- This process can be visualized as travelling maximum lengths of "straight runs” in a Huffman tree and stopping every time that a "turn” leading to new "subtree” is detected.
- a code word is processed at a minimum of two bits at a time (leading zero or one and the following bit that indicated "turn").
- the decoding process for letter "P -> 11000” would roughly proceed as follows: first, the deviation from all ones/zeros path, meaning that a different branch in the tree has been reached, is detected. Following this, the first 2+1 bits ("110") which are no longer needed, are eliminated and "00XXXXX" remains to be decoded. Here, the X's are bits that belong to the next code word. The trailing dots are less specific, and hereinafter refer to bits that follow, whether or not those following bits belong to a subsequent code word. Referring to FIG. 1, the ("110") string processed implies that we have gone down two "1" branches and up one "0" branch.
- the remaining bits "00XXXXX" are fed again to the leading one/zero -detector. In this case, the detector detects that we are heading in the "0000" -direction. Since, referring to FIG. 1 , the maximum remaining code length in the all-zero direction is two (and in fact it is two in any direction), we have reached the end of route " 11000", which has now been decoded.
- the present inventive methodology processes a code word at a minimum of two bits at a time (from the leading bit to the bit of different value), the present invention quickly decodes even non-canonical Huffman-encoded code words, which characteristically do not have as many leading same-valued bit strings and which Tong's method could not handle without
- the present invention does not rely on a second table lookup; instead, many output symbols are accessed on the first lookup. Also, like Tong, Potu requires larger table sizes than does the present invention, because only a single bit run count is pre-processed, and, like Tong, would need even larger table sizes to handle non-canonical Huffman codes.
- An exemplary decoding system 200 includes an encoded bitstream source 202 for sending Huffman-encoded code words 204 for serial reception by a reception buffer 206.
- a host processor or control block 208 which may be a microprocessor, for example, receives the output of the buffer 206 and sends buffer control instructions to the buffer 206.
- the host processor 208 sends a group of bits in that output to a leading zero/one count calculator 216, which may be a, hardware accelerator.
- the calculator 216 returns to the host processor 208 a count of consecutive, same-valued bits in the group.
- the host processor 208 determines an encoded bitstream source 202 for sending Huffman-encoded code words 204 for serial reception by a reception buffer 206.
- a host processor or control block 208 which may be a microprocessor, for example, receives the output of the buffer 206 and sends buffer control instructions to the buffer 206.
- the host processor 208 sends a group of bits in that output to a leading
- I address based on the count and invokes a memory read mechanism 220 to read that address in a decoding table 222 that resides in a RAM 224 or other memory, such as a ROM.
- the host processor 208 decides (1) if another calculation is needed for another group, (2) if bits subsequent to those already counted are otherwise needed, or (3) if the read data includes an output symbol corresponding to a current code word so that the cuirent code word has been decoded, i.e. an output symbol that constitutes a decoding of the current code word.
- the host processor 208 invokes the leading zero/one count calculator
- the current code word is outputted to a decoded data recipient 226, ⁇ yhich may be, for example, a reception buffer for a reverse discrete cosine transform processor.
- the host 1 processor 208 selects a predetermined number of them as a string whose value serves as a "tail offset" from the cuirent location in the table 222 to decode the current word.
- the offset is referred to herein as a "tail offset", because the selected bits which provide it
- the tail offset bits are located at the end of a code word to be decoded.
- FIG. 3 is an exemplary flow chart that provides more detail on how decoding may be implemented according to the present invention. For illustration purposes, it is assumed that the reception buffer ⁇ 206 contains the bit string "00011111010".
- the process starts with the current group of bits and a current code word.
- the current group may extend, at its least significant end, far enough to include the current code word, or, it may be the case that the cuirent code word is longer than the 'current group.
- the length of a group is set at 8 bits, because the zero/one count calculator 216 has been configured with a search field length of 8 bits.
- the current group in the present example is therefore "0001 l l l l l", and is transmitted to the calculator 216.
- the calculator 216 detects the value of the leading bit as "0" (step S302) and calculates, as the current count, the number of consecutive bit repetitions of the leading bit "0", i.e. the current count starts with the leading bit and includes subsequent, consecutive bits of the same value.
- the calculator 216 returns the current count, which is 3, to the host processor 208 (step S304).
- the host processor 208 uses the current count, 3, as an offset into the decoding table 222 to point to an address of the table 222.
- the processor 208 provides the address to the memory read mechanism! 220.
- the mechanism 220 retrieves the entiy at that address, and provides the entry to the processor 208 (step S306). Based on the contents of that entry, the processor 208 decides if another iteration of counting consecutive bits is needed to decode the current code word (step S308). If so, as in the instant example, the next group is made the current group (step S310) and another iteration (steps S302 through S306) is carried out.
- next group made the current group is "111101 OX" where X represents the bit that comes next in the reception buffer 206, and is therefore retrieved by the processor 208. It is noted that, in deteii ⁇ iining that the current group is "1111010X", the preceding bit string "0001" was skipped. These four bits ,are no longer needed, because the three high order zeroes have already been counted, and thej " 1 " bit is known from the fact that it is inherently the only bit that terminates a
- step S306 the processor 208 retrieves another entry from the decoding table 222 (step S306), or another decoding table branched to and swapped in to replace the table 222. Based on the newly retrieved entry, the processor 208 decides that another iteration is not needed (step S308) and that the entry last retrieved (step S306) does not contain an output symbol that constitutes a decoding of the current code word (step S312). In the present example, this is ⁇ the second iteration in the process of decoding the same current code word.
- the tail offset bits are needed to decode the current code word.
- the processor 208 knows, from the entry last retrieved (step S306), that the tail offset is provided by two bits, and retrieves the next two bits (step S314), which can be seen to be "10" in the instant example.
- the maximum length in bits of the tail offset bits is referred to hereinafter as the "tail threshold", which in the instant example is 2.
- the processor 208 uses the tail offset to point past its current location in the current decoding table and toward the location at which the output symbol resides and then extracts the output symbol (step S314). Since the bits just used to retrieve the output symbol are no longer needed, the processor 208 points past these bits in preparation for a next code word (step S316).
- step IS318 It is next decided whether decoding of the bit stream from the source 202 has been completed. If all bits received from the reception buffer 206 have been subject to j decoding, processing stops and awaits restart if and when additional bits are received in the reception buffer 206. If, on the other hand, not all bits have been decoded, the processing loops back to the beginning for another iteration in which that next group is made the current group (step S310). Alternatively, completion of the decoding of the bit stream from the source 202 may be indicated by a special code word in the bit stream. In such an implementation, step S316 includes compaiiing the special code word to bits subsequent to those just decoded. If they match, processing is completed, and resumes with a signal that decoding is to be restarted. If, on the other hand, they do not match, processing loops back to step 310. counted, a bit is provide a tail
- the number of tail offset bits was restricted to a maximum of two bits, which maximum determined the number of iterations before the final iteration, which in this example was two.
- Table 5 below is used in another example of decoding in accordance with the present invention, and uses an exemplary lookup table built based on the Huffman table labeled above as Table 4 and in accordance with the formatting discussed below.
- Table 5 The rows of Table 5 are shown here for illustrative purposes as numbered by a "Row #"
- row 0 has two fields, which in this example contain the values "2" and "13". These two fields are 8 bits each, for a total row length of 16 bits. Rows shown above row 0 are labeled with negative row numbers and rows show below row 0 are labeled with positive row numbers. All rows other than row 0 have three fields. The three fields, "Entry Identifier”, "Symbol/offset address” and "Shift amount/code length” are 2, 10 and 4 bits, respectively, for a total row length of 16 bits.
- the first field entitled “Entry Identifier”, holds information about three possible cases: l If the field contains "S” (a “symbol found indicator”, represented in memory by, for example, two zero bits, denoted herein as "00"), the entry, i.e. row, contains the output symbol (i.e. decoding result) and its length.
- S symbol found indicator
- the entry holds an offset from the table starting address.
- the table starting address of Table 4 corresponds to the location of row 0.
- the offset is used to form an address that points to a memory entry that contains the output symbol and its length. That is, the offset is used to form an address that points to an entry having "S" as its "Entry Identifier", i.e. an "S" entry.
- the entry holds an offset from the table starting address that is used to point to a new taible elsewhere in memory 224.
- the new table may be branched to
- the second field entitled "Symbol / offset address”, can hold three different types of information:
- I current code word is shifted, after an output symbol is found, to shift the current code word out and shift in a new code word.
- a brandy entry at the table starting address contains a positive branch count and a negative branch count, i.e., there are 2 possible branches on the all-zeros side (00 and 01) and 13 possible branches on the all-ones side.
- the positive and negative branch counts generally correspond to the maximum number of consecutive zero and one bits, respectively, in any code word for the current decoding table, although, as discussed below, the table can be configured with code words I that exceed these limits.
- Tie host processor 208 receives a current group CURR_GRP of 16 bits in a code word register, which is a non-circular, shift register.
- the accelerator 216 receives from the host processor 208 the cuirent group CURR_GRP of 16 bits, which, in the current example, must contain the current code word, because the largest code word, as seen from Table 4, is 13 bits.
- CURR__GRP which accordingly contains the current code word plus bits of the following code word(s), contains the following 16 bits: "1111111110 00 01 11".
- CURR GRP contains the first three code words and part of the fourth code word.
- the first task is to decode the first code word, which at this point is the current code word.
- the accelerator 216 detects the leading bit of the group to be one (step S302) and returns the value -9.
- the magnitude nine means that it found the first zero after consecutive ones that occupy the highest nine bits in the group.
- step S306 copies the entry into a retrieval register (step S306), which is a non circular, shift register, where * (ADDRESS) refers to the content of the memory location at ADDRESS.
- * (ADDRESS) refers to the content of the memory location at ADDRESS.
- the host 208 checks whether the "Entry Identifier" field for this entry is S, B or N. To do this, the host processor 208 copies the contents of the retrieval register into a work register.
- the "Symbol/offset address" field is the second type of this second field in the table, as
- the second type indicates that an output symbol can be found from the address indicated by the sum of the table starting address, the offset found from this field, and the tail offset.
- This second type of the "Symbol/offset address" field will be referred to hereinafter as "OFFSET".
- the middle field in the above depiction of a retrieved table entry is the OFFSET, which is 10 bits long
- the rightmost field is the "Shift amount/code length" field, which is 4 bits long. These lengths are not invariable, and, as explained below] are selected to accommodate other design parameters.
- the immediate goal is to determine the value in the leftmost field, the "Entry Identifier" field.
- Shifting the work register right by 14 bits acts to right justify the "Entry Identifier” field and fill the leftmost 14 bits with zeros.
- Each of the values "S", “B” and “N” reside in the rightmost part of their respective storage locations'. Shifting the work register has therefore facilitated bit-to-bit comparison of the "Entry Identifiei]” in the work register to each of the respective storage locations, so that the "Entry Identifier" can be identified by comparison as one of the values S, B and N.
- the comparisons can be performed in any order, e.g., to N, to S and then to B.
- comparisons are potentially done to only two of the three values, because the third value is determined by process of elimination.
- Tb prepare for the next code word, the host 208 checks the "Shift amount/code length" entry, i.e. last 4 bits, of the retrieval register to find out the code length, CWJLEN, of the code word that was just decoded, which in the present example is 10.
- the retrieval register is shifted left by two bits to clear the "Entry Identifier", which is two bills long, and then shifted right by six bits to clear the Shift amount/code length field (which is 4 bits long, but shifting right by 6 bits compensates for the two bit shift to the left) and right justify! OFFSET, which contains the decoded output in the form of an output symbol.
- the output symbol is "Oxla", as illustrated above in the retrieved entry. The output symbol has now been isolated and right justified in the retrieval register, and is therefore available for subsequent processing of the decoded output.
- the host 208 prepares to decode a new code word by shifting the code word register left by the CWJLEN, which is 10 (step S316).
- CURR_GRP which in the present case consists of the first 10 bits, "00 01 111011" of the current group and any other following bits up to the register limit of 16 bits is ready to be sent as a group of bits to the accelerator 216 to decode a new code word, wliich is now deemed the current code word.
- Tie accelerator 216 receives CURR_GRP, which in the current example is "00 01 111011 ",i as indicated above in step (9).
- ZEROS_MAX the leftmost field located at the TABLE_STARTING_ADDRESS (which is at row 0 of Table 5) is 2. Since ACCJVALUE is 3, it is not true that ACCJVALUE
- ACC_VALUE is "out of bounds.” Therefore, ACCJVALUE is set to i the value ZEROS MAX, which in this case is 2.
- the host 208 checks the "Entry Identifier" field, , as in step 5 above, which at this point in this example contains "S”, a therefore detenmnes that the current code word has been decoded (steps S308 and S312).
- the host 208 extracts the last 4 bits, as in step 7 above, to determine CW_LEN, which at this point in the example equals 2.
- CURR_GRP contains "01 1110 11", because the two bits just decoded have been shifted out of the code word register in step 19 above.
- the host 208 checks *(TABLE_STARTING_ADDRESS + ACC_VALUE), that
- T le host 208 checks the last 4 bits of the retrieval register to receive the value 2 from the "Shift almount/code length" field.
- T he output symbol is "0x01" with length 2. The same procedure, as shown above, is perforated to prepare for the next code word.
- the "Entry Identifier" is deteraiined by comparison to be "B". For a "B" entry, another iteration! is not needed (step S308), and the cunent code word has not yet been decoded (step S312).
- the host 208 checks the last 4 bits of the retrieval register to receive the value 14 from the "Shift amount/code length" field. This value will be used to deteimine the number of bits a temporary register, referred to hereinafter as "TEMP", is shifted right in order to right justify the tail offset bits, so that the tail offset can be added, in step 35 below, to form an address that points to the! output symbol.
- the host 208 could shift the code word register left by one plus the magnitude of ACCJVALUE or
- the code word register is not shifted here, because a "B" entry requires a tail offset, which adds bits to, and therefore, increases the length of the code word.
- the entire current code word will be shifted out at once when decoding of the cunent code word is completed and the code word length is retrieved. In the current example, the code word is! shifted out in step 38.
- the host! 208 stores CUR_R_GRP into a temporary register, referred to hereinafter as
- TEMP is shifted left by
- TEMP now con ains “11 ."
- the leading two bits, "11”, stored in TEMP comprise the tail offset bits whicli are needed in step 35, wherein TEMP is right-shifted by 14 so that the string "11” is right-justified).
- step S314 the 3 addend used above to determine the entry location at : row 12 is the value of the tail offset bits "11").
- step S314 the 3 addend used above to determine the entry location at : row 12 is the value of the tail offset bits "11").
- the host 208 shifts the entry right by 4 bits to right-justify the symbol "0x0a" .
- Tie code word register is left-shifted by CW_LEN (step S316), and new bits are added from the right, if there are new bits. In the cuirent case, there are no new bits.
- processing halts until reactivated by the anival of bits in the reception buffer 206.
- the Table 5 lookup table does not have a Field Identifier "N", because the Table 4 code words, upon which Table 5 is based, are such that the remaining part of any code word after a count, i.e., the part other than the bit ran combined with the immediately following and inherently known bit, is always two or fewer bits in length. By design, therefore, these two or fewer bits are immediately evaluated as a predetermined tail offset into Table 5 in what is a first and final iteration. This first example, therefore, does not fully show the potential for recursive counting of zero and one strings in the instant invention.
- An exemplary second embodiment of the invention demonstrates iteration in the search for leading ones and zeroes. The second embodiment, like the first, is illustrated in FIGs. 1 to 3, but is based on a table derived by modifying "Huffman Table Number 13" from the Mp3 Audio Standard. The modified table is shown below in Table 6.
- Table 6 above assigns, for simplicity, each code word a respective symbol that is selected from the range of "1" to "256". Also for simplicity, code words with common leading bits have been grouped so that their respective symbols are consecutive. As in Huffman Table ijlumber 13, the maximum length for any code word in Table 6 is 19 bits.
- Tables 7 and 8 shown below, are two of a plurality of decoding tables based on Table 6 that are used collectively in the current embodiment to decode code words that require multiple counts, i.e., multiple iterations of the S302 through S310 loop. Only the two tables, 7 and 8, are provided herein, because only tables 7 and 8 are needed in decoding the string in the cunent example.
- Table [7 is the main decoding table and Table 8 is a subtable.
- Table 7 has, in addition, multiple other subtables, and subtables may have their own subtables. For execution speed, all these (sub)tables would preferably reside in memory, and, for compactness, adjacent to one another.
- the main table is followed by a subtable, which is followed by its own subtables, which are followed by a second subtable of the main table, and by the second subtable's subtables, etc.
- Table 7 is a decoding table that, unlike the decoding table, Table 5, of the previous example, has entries with an "Entry Identifier" of "N", each "N" entry pointing to a new decoding table.
- I subtables (not shown). Processing branches to a subtable when, in the course of decoding a code word, another co;unt, and thus another iteration of loop S302 through S310, is needed. It is assumed here that received from the encoded bitstream source 202 is the following bitstream "0001000111.. . .”, where the trailing dots represent bits that follow in the bitstream.
- CURPv_GRP 0001000111 ... (up to 19 bits, which is the search field length in the cunent embodiment, because Table 6 has a maximum code length of 19 bits).
- ACCJVALUE 3 (referring to FIG. 3, steps S302 and S304), because the high order string consists of 3 bits, i.e., "000". ACCJVALUE is validated against ZEROS_MAX or ONESJVLAX, depending on whether ACCJVALUE is positive or negative, respectively. Since
- ACCJ ALUE is, in this example, positive-valued, ZEROSJMAX is used for validation.
- Tie host 208 checks the Entry Identifier by shifting the work register and determines the Identifier to be N, implying that a branch is to occur to a new table that is located at TABLE_STARTING_ADDRESS + OFFSET. Since the Identifier is N, another iteration is needed (step S3q8).
- the host 208 shifts the Entry Identifier field away in the retrieval register, leaving the second field which contains the value "T2".
- This second field is of the third type noted earlier, i.e. it contains an offset from TABLE_STARTING_ADDRESS to a new table, subtable T2, which is Table 8. (It is noted that rows -1 and 1 in Table 8 contain "T2_l" and
- T2_2 respectiv Iely, in the "Symbol/offset address” field.
- T2_X is the address of a subtable of subtable T2, i.e., the address of a subtable of Table 8.
- T2 after saving TABLE_STARTING_ADDRESS to ADDRESS_SAVE if TABLE_STARTING_ADDRESS is not already stored for quick retrieval, for example, as a declared parameter of the program executed by the host processor 208.
- TABLE_STARTLNG_ADDRESS points to Table 8, which is created for code words starting with "0001", the leading code word bits that have already been used to invoke Table 8. 7) TEMP (which, like CURR_GRP, is 19 bits long in this embodiment) is loaded
- the host 208 retrieves *(TABLE_STA_RTING_ADDRESS),
- ACCJVAUUE is within bounds (since the positive branch count here is 6).
- the host 208 reads *(TABLE_STARTING_ADDRESS + ACCJVALUE), finding:
- the host 208 shifts the work register to identify this entry as a "B" entry. For a "B" entry, another iteration is not needed (step S308), and the current coded word has not yet been decoded (step S312).
- the host 208 determines bits 4 tlrrough 13 (i.e. the Symbol/offset address field, represented by OFFSET) by sliifting the retrieval register, after detecting the value in "Shift amount/code length" in the retrieval register.
- CURR_GRP i.e. the contents of the code word register
- TEMP now contains the bit string "11 "
- CLTRR_GRP is left-shifted by CL_LEN (step S316). Additional new bits, if any cunently exist in the reception buffer 206, fill the code word register up to the search field length of 19 bits.
- I causes the processing to point to an "N" entry in the main decoding table.
- the positive and negative branch counts are repeatedly used to validate bit run counts, but are fixed for a particular decoding table. At the start of decoding, they therefore are preferably stored for fast access, such as in special CPU registers, so that the overhead of repeatedly retrieving them from the table is avoided.
- the positive and negative branch counts can be limited to some length other that the maximum numbjsr of consecutive zero or one bits, respectively, that are needed for a count.
- the lengh of the tail threshold is a design question.
- the length is two bits. Using one bit would not have saved memory, but would have required more i recursive steps, and therefore longer decoding time, although one bit may be beneficial for other decoding tables.
- different thresholds such as 3 or 4 could be used for more complex tables such as those employed in the JPEG or MPEG standard, and, for example, a tail threshold of 3 was used for the second embodiment. More bits affords a quicker search, but may result in decoding tables having several redundant memory locations. For example, three remaining bits (for a tail threshold of 3) require 8 memory locations, although it may be the case that only three of the locations are occupied by code words.
- Field sizes in the decoding tables presented here are variable, so that, if longer decoding i table rows are needed, the relative lengths of the fields can be adjusted or a longer word length can be used.
- a Symbol/offset address field size of 10 bits can address 1024 memory locations in
- RAM 224 whiqh is quite sufficient for either the first or second embodiment.
- Table 6 contains 256 symbols, whereas even at only 50% efficiency, there are merely 512 different memory locations that need to be referenced.
- Table 4 has only 32 symbols, and is easily accommodated by 10-bit memory addresses.
- the Shift amount/code length field is 4 bits long in the first embodiment, allowing for the
- e oo up ta e s can e xe or a part cu ar u man tree.
- ternat ve y, t ey can generated "on the fly" at the start of decoding based on a Huffman tree leading in the encoded bitstream, or updated as needed, as, for example, to accommodate an adaptive Huffrxtan coding scheme.
- decoding tables with "B” entries and use tail offsets
- a decoding table may have, for example, merely “S” and “N” entries — the "S" entry contains a decoded output symbol, whereas the "N” entry points to a subsequent decoding table.
- each bit run in a cu ent code word results in a respective count, from which the host processor 208 determines a respective offset into the current table.
- a respective "N” entry points to a respective subsequent table, and the process repeats for the next bit run, until, based on the final bit ran, the host processor 208 offsets into the cunent table to arrive at an "S" entry, which contains the decoding result.
- the invention is preferably implemented with an accelerator 216 to assist in difficult bit manipulation functions, such as finding the length of a zero/one string, bit shifting and comparison whiph are difficult for the CPU to perfo ⁇ n. For example, as discussed above, finding the first "1" in a stream is difficult using software, but is easily handled through hardware.
- FIG. 4 illustrates in a Huffman decoding apparatus 400 one possible implementation of a leading zero/one count calculator or accelerator 404 in accordance with the present invention. Operation is explained here for a 8-bit search window: the bits to be detected are given to the accelerator 404 as part of a cunent group 408 of bits by the host CPU 410 in a register 412. The first bit to be searched is in the MSB end of the register. The MSB or leading bit 414 of the incoming bit slice is examined by a selector 416 having a value detector 417 to determine if i processing is headed towards an "all-zeros" or "all-ones" path.
- a pre-selected bit value e.g., one
- a first inverter 418 bitwise inverts the output of the register 412; otherwise, if zero is the MSB 414, no inversion occurs.
- a selector 416 passes on the result to a digit extender such as one extender 419 which converts to the pre-selected value, here one, every other-valued bit of significance lower than that of the most significant bit having
- a second inverter 422 inverts the output 420.
- thermometer code evaluator 426 which does thermometer to binary coded digit conversion, thereby determining the length of the all- zeros/ones ran.
- JA thermometer code is a bit string that has all same-valued bits at one end, the number of the same-valued bits indicating the value of the code, i.e., a thermometer code having four trailing ones has a value of four.
- thermometer code evaluator 426 If it is detected by the value detector 417 that the leading bit 414 has the pre-selected value, the output of the thermometer code evaluator 426 is negated by a run characterizer 428 that includes a negator 430 and a selector 432.
- the ran characterizer 428 thus selectiyely reformats the output of the thermometer code evaluator, including the step of sign extending that output to the native length of the host CPU 410 if such extending is needed by the host CPU 410.
- the final result is a BCD number that gives the length of the all-ones/zeros ran at the start of the current group 408, that is, a cunent count for the group 408.
- the final result is negative if the leading bit 414 is one and positive if the leading bit 414 is zero.
- the "negative for ones, positive for zeros" convention is not essential.
- the information could be passed in some other form to the CPU.
- the format of the accelerator output provides both the current count and the basis for selecting either ONESJMAX or ZEROS MAX for comparison to ACCJVALUE.
- the interface to the host could be performed via registers that the host already has, if the accelerator 404 is permitted entry to the core of the host 410.
Landscapes
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
- Compression Or Coding Systems Of Tv Signals (AREA)
Abstract
Description
Claims
Priority Applications (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
EP02779788A EP1436899A1 (en) | 2001-10-19 | 2002-10-11 | Huffman coding |
KR1020047004806A KR100950607B1 (en) | 2001-10-19 | 2002-10-11 | Huffman coding |
Applications Claiming Priority (2)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
US10/045,693 US6563440B1 (en) | 2001-10-19 | 2001-10-19 | Apparatus and method for decoding Huffman codes using leading one/zero string length detection |
US10/045,693 | 2001-10-19 |
Publications (2)
Publication Number | Publication Date |
---|---|
WO2003034597A1 true WO2003034597A1 (en) | 2003-04-24 |
WO2003034597B1 WO2003034597B1 (en) | 2003-07-31 |
Family
ID=21939355
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
PCT/IB2002/004198 WO2003034597A1 (en) | 2001-10-19 | 2002-10-11 | Huffman coding |
Country Status (5)
Country | Link |
---|---|
US (1) | US6563440B1 (en) |
EP (1) | EP1436899A1 (en) |
KR (1) | KR100950607B1 (en) |
CN (1) | CN100477532C (en) |
WO (1) | WO2003034597A1 (en) |
Cited By (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1314271C (en) * | 2003-09-09 | 2007-05-02 | 华为技术有限公司 | A video coding-decoding method |
US8254700B1 (en) | 2006-10-03 | 2012-08-28 | Adobe Systems Incorporated | Optimized method and system for entropy coding |
Families Citing this family (37)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6704645B1 (en) * | 2001-12-11 | 2004-03-09 | Garmin Ltd. | System and method for estimating impedance time through a road network |
US6574554B1 (en) * | 2001-12-11 | 2003-06-03 | Garmin Ltd. | System and method for calculating a navigation route based on non-contiguous cartographic map databases |
US6650996B1 (en) | 2001-12-20 | 2003-11-18 | Garmin Ltd. | System and method for compressing data |
US6581003B1 (en) * | 2001-12-20 | 2003-06-17 | Garmin Ltd. | Systems and methods for a navigational device with forced layer switching based on memory constraints |
US6975940B1 (en) | 2001-12-21 | 2005-12-13 | Garmin Ltd. | Systems, functional data, and methods for generating a route |
US7184886B1 (en) * | 2001-12-21 | 2007-02-27 | Garmin Ltd. | Navigation system, method and device with detour algorithm |
US6903669B1 (en) * | 2003-10-03 | 2005-06-07 | Cirrus Logic, Inc. | Systems and methods for decoding compressed data |
KR101142584B1 (en) * | 2003-11-18 | 2012-05-10 | 스칼라도 아베 | Method for processing a digital image and image representation format |
KR20050053996A (en) * | 2003-12-03 | 2005-06-10 | 삼성전자주식회사 | Method and apparatus for decoding huffman code effectively |
US8427494B2 (en) * | 2004-01-30 | 2013-04-23 | Nvidia Corporation | Variable-length coding data transfer interface |
US7148821B2 (en) * | 2005-02-09 | 2006-12-12 | Intel Corporation | System and method for partition and pattern-match decoding of variable length codes |
US7925320B2 (en) | 2006-03-06 | 2011-04-12 | Garmin Switzerland Gmbh | Electronic device mount |
JP4540652B2 (en) * | 2006-10-18 | 2010-09-08 | 株式会社イシダ | Encoder |
WO2008142800A1 (en) * | 2007-05-24 | 2008-11-27 | Fujitsu Limited | Information search program, recording medium having the program recorded thereon, information search device, and information search method |
WO2008142799A1 (en) * | 2007-05-24 | 2008-11-27 | Fujitsu Limited | Information search program, recording medium containing the program, information search method, and information search device |
US8725504B1 (en) | 2007-06-06 | 2014-05-13 | Nvidia Corporation | Inverse quantization in audio decoding |
US8726125B1 (en) | 2007-06-06 | 2014-05-13 | Nvidia Corporation | Reducing interpolation error |
US8477852B2 (en) * | 2007-06-20 | 2013-07-02 | Nvidia Corporation | Uniform video decoding and display |
US8849051B2 (en) * | 2007-09-17 | 2014-09-30 | Nvidia Corporation | Decoding variable length codes in JPEG applications |
US8502709B2 (en) * | 2007-09-17 | 2013-08-06 | Nvidia Corporation | Decoding variable length codes in media applications |
US8704834B2 (en) * | 2007-12-03 | 2014-04-22 | Nvidia Corporation | Synchronization of video input data streams and video output data streams |
US8687875B2 (en) * | 2007-12-03 | 2014-04-01 | Nvidia Corporation | Comparator based acceleration for media quantization |
US8934539B2 (en) * | 2007-12-03 | 2015-01-13 | Nvidia Corporation | Vector processor acceleration for media quantization |
US9307267B2 (en) * | 2008-12-11 | 2016-04-05 | Nvidia Corporation | Techniques for scalable dynamic data encoding and decoding |
KR101175680B1 (en) * | 2008-12-23 | 2012-08-22 | 광운대학교 산학협력단 | Driving method of bitstream processor |
CN102237878B (en) * | 2010-04-20 | 2015-09-02 | 慧荣科技股份有限公司 | A kind of Hofmann decoding method |
KR101843087B1 (en) * | 2012-03-05 | 2018-03-28 | 삼성전자주식회사 | Apparatus and method for decoding |
CN104253993B (en) * | 2013-06-28 | 2018-01-12 | 炬芯(珠海)科技有限公司 | A kind of multimedia data processing method, circuit and device |
CN104283568B (en) * | 2013-07-12 | 2017-05-17 | 中国科学院声学研究所 | Data compressed encoding method based on part Hoffman tree |
US9298420B2 (en) * | 2013-07-26 | 2016-03-29 | International Business Machines Corporation | Identification of the bit position of a selected instance of a particular bit value in a binary bit string |
US9337862B2 (en) | 2014-06-09 | 2016-05-10 | Tidal Systems, Inc. | VLSI efficient Huffman encoding apparatus and method |
CN104717499B (en) * | 2015-03-31 | 2018-06-05 | 豪威科技(上海)有限公司 | A kind of storage method of huffman table and the Hofmann decoding method for JPEG |
US9787323B1 (en) | 2016-12-11 | 2017-10-10 | Microsoft Technology Licensing, Llc | Huffman tree decompression |
TWI645698B (en) * | 2017-07-17 | 2018-12-21 | 財團法人工業技術研究院 | Data transmitting apparatus, data receiving apparatus and method thereof |
US11475061B2 (en) * | 2018-09-12 | 2022-10-18 | Samsung Electronics Co., Ltd. | Method and device for detecting duplicate content |
KR102687153B1 (en) * | 2019-04-22 | 2024-07-24 | 주식회사 쏠리드 | Method for processing communication signal, and communication node using the same |
CN113271107B (en) * | 2020-09-30 | 2024-04-26 | 北京清微智能科技有限公司 | Huffman hardware decoding method |
Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6404358B1 (en) * | 1999-06-15 | 2002-06-11 | Stmicroelectronics S.R.L. | Decoding method for a Huffman code |
US6411226B1 (en) * | 2001-01-16 | 2002-06-25 | Motorola, Inc. | Huffman decoder with reduced memory size |
Family Cites Families (10)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US4396906A (en) * | 1980-10-31 | 1983-08-02 | Sri International | Method and apparatus for digital Huffman encoding |
US5181031A (en) | 1991-07-30 | 1993-01-19 | Lsi Logic Corporation | Method and apparatus for decoding huffman codes by detecting a special class |
US5208593A (en) | 1991-07-30 | 1993-05-04 | Lsi Logic Corporation | Method and structure for decoding Huffman codes using leading ones detection |
EP0619053A1 (en) * | 1991-12-23 | 1994-10-12 | Intel Corporation | Decoder and decoding method for prefixed Huffman codes using plural codebooks |
CN1098565C (en) * | 1996-06-07 | 2003-01-08 | 大宇电子株式会社 | Method and apparatus for decoding variable length code |
CN1123125C (en) * | 1997-12-08 | 2003-10-01 | 大宇电子株式会社 | Variable-length coding method and apparatus thereof |
US6219457B1 (en) * | 1998-05-26 | 2001-04-17 | Silicon Graphics, Inc. | Method and system for decoding data encoded in a variable length code word |
US6124811A (en) * | 1998-07-02 | 2000-09-26 | Intel Corporation | Real time algorithms and architectures for coding images compressed by DWT-based techniques |
JP3323175B2 (en) * | 1999-04-20 | 2002-09-09 | 松下電器産業株式会社 | Encoding device |
FR2800941A1 (en) * | 1999-11-09 | 2001-05-11 | France Telecom | Digital code decoding technique uses decoding lattice based on binary tree structure for reduced error rate decoding |
-
2001
- 2001-10-19 US US10/045,693 patent/US6563440B1/en not_active Expired - Fee Related
-
2002
- 2002-10-11 EP EP02779788A patent/EP1436899A1/en not_active Withdrawn
- 2002-10-11 CN CNB028198115A patent/CN100477532C/en not_active Expired - Fee Related
- 2002-10-11 WO PCT/IB2002/004198 patent/WO2003034597A1/en not_active Application Discontinuation
- 2002-10-11 KR KR1020047004806A patent/KR100950607B1/en not_active IP Right Cessation
Patent Citations (2)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
US6404358B1 (en) * | 1999-06-15 | 2002-06-11 | Stmicroelectronics S.R.L. | Decoding method for a Huffman code |
US6411226B1 (en) * | 2001-01-16 | 2002-06-25 | Motorola, Inc. | Huffman decoder with reduced memory size |
Cited By (3)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN1314271C (en) * | 2003-09-09 | 2007-05-02 | 华为技术有限公司 | A video coding-decoding method |
US8254700B1 (en) | 2006-10-03 | 2012-08-28 | Adobe Systems Incorporated | Optimized method and system for entropy coding |
US8600183B2 (en) | 2006-10-03 | 2013-12-03 | Adobe Systems Incorporated | Optimized method and system for entropy coding |
Also Published As
Publication number | Publication date |
---|---|
WO2003034597B1 (en) | 2003-07-31 |
EP1436899A1 (en) | 2004-07-14 |
KR20040041651A (en) | 2004-05-17 |
KR100950607B1 (en) | 2010-04-01 |
CN100477532C (en) | 2009-04-08 |
US6563440B1 (en) | 2003-05-13 |
CN1613188A (en) | 2005-05-04 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US6563440B1 (en) | Apparatus and method for decoding Huffman codes using leading one/zero string length detection | |
US5406278A (en) | Method and apparatus for data compression having an improved matching algorithm which utilizes a parallel hashing technique | |
US7403136B2 (en) | Block data compression system, comprising a compression device and a decompression device and method for rapid block data compression with multi-byte search | |
US5049881A (en) | Apparatus and method for very high data rate-compression incorporating lossless data compression and expansion utilizing a hashing technique | |
US6650261B2 (en) | Sliding window compression method utilizing defined match locations | |
EP1289153B1 (en) | Data compressing method and data decompressing method, and data compressing apparatus and data decompressing apparatus therefor | |
US5003307A (en) | Data compression apparatus with shift register search means | |
JP3541930B2 (en) | Encoding device and decoding device | |
US6633242B2 (en) | Entropy coding using adaptable prefix codes | |
WO1993017503A1 (en) | Data compression using hashing | |
EP1779522A1 (en) | System and method for static huffman decoding | |
JPH09153818A (en) | Data companding device | |
JPH0869370A (en) | Method and system for compression of data | |
KR20030040567A (en) | Method of performing huffman decoding | |
EP0638214A1 (en) | Method for data compression having an improved encoding algorithm which utilizes a token stacking technique | |
JPS6356726B2 (en) | ||
US5392036A (en) | Efficient optimal data recopression method and apparatus | |
JP2536422B2 (en) | Data compression device and data decompression device | |
US6668093B2 (en) | Method for improving dictionary-based compression by ordering raster data | |
JP3241787B2 (en) | Data compression method | |
JPH05152971A (en) | Data compressing/restoring method | |
JP3083550B2 (en) | Data compression and decompression method | |
JP2999561B2 (en) | Data compression and decompression device | |
KR100462060B1 (en) | UVLC Multiple Decoding Method | |
US7583208B1 (en) | Compact encoding of non-repeating sequences |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
AK | Designated states |
Kind code of ref document: A1 Designated state(s): AE AL AM AT AU AZ BA BB BG BR CA CH CN CR CU CZ DE DK DM EC ES FI GB GD GE GH GM HR HU ID IL IS JP KE KG KP KR KZ LC LK LR LS LU LV MA MD MG MK MN MW MX NZ OM PH PL PT RO RU SD SE SG SI SL TJ TM TN TR TT TZ UA UG UZ VN ZA ZM |
|
AL | Designated countries for regional patents |
Kind code of ref document: A1 Designated state(s): GH GM KE LS MW MZ SD SL SZ UG ZM ZW AM AZ BY KG KZ RU TJ TM AT BE BG CH CY CZ DK EE ES FI FR GB GR IE IT LU MC PT SE SK TR BF BJ CF CG CI GA GN GQ GW ML MR NE SN TD TG |
|
121 | Ep: the epo has been informed by wipo that ep was designated in this application | ||
B | Later publication of amended claims |
Free format text: 20030515 |
|
WWE | Wipo information: entry into national phase |
Ref document number: 1020047004806 Country of ref document: KR |
|
WWE | Wipo information: entry into national phase |
Ref document number: 20028198115 Country of ref document: CN |
|
WWE | Wipo information: entry into national phase |
Ref document number: 2002779788 Country of ref document: EP |
|
WWP | Wipo information: published in national office |
Ref document number: 2002779788 Country of ref document: EP |
|
NENP | Non-entry into the national phase |
Ref country code: JP |
|
WWW | Wipo information: withdrawn in national office |
Ref document number: JP |