Login| Sign Up| Help| Contact|

Patent Searching and Data


Title:
M=7(3,8) RUNLENGTH LIMITED CODE FOR MULTI-LEVEL DATA
Document Type and Number:
WIPO Patent Application WO/1996/036120
Kind Code:
A1
Abstract:
A system for encoding digital data with an M-ary (d,k) code to provide multi-level coded data where M>2 comprises an M-ary (d,k) encoder for accepting digital input data. The M-ary (d,k) coder (304) encodes the digital input data to produce a plurality of code symbols, where each code symbol is at one of M levels and each pair of non-zero code symbols is separated by at least d but no more than k zeros. A waveform encoder (308) converts the code symbols into waveform signal amplitudes compatible with a multi-level channel. Each waveform signal amplitude is generated by modulo M addition of a current code symbol with a previous waveform signal amplitude. A specific M=7(3,8) code provides high density recording to a multi-level storage medium. The M=7(3,8) encoder is implemented using a five-state encoder (304), and a modulo seven waveform encoder (308).

Inventors:
MCLAUGHLIN STEVEN W
Application Number:
PCT/US1996/007068
Publication Date:
November 14, 1996
Filing Date:
May 13, 1996
Export Citation:
Click for automatic bibliography generation   Help
Assignee:
OPTEX CORP (US)
International Classes:
H03M5/20; (IPC1-7): H03M5/20; G11B20/14
Other References:
MCLAUGHLIN S W: "IMPROVED DISTANCE M-ARY (D,K) CODES FOR HIGH DENSITY RECORDING", IEEE TRANSACTIONS ON MAGNETICS, vol. 31, no. 2, 1 March 1995 (1995-03-01), pages 1155 - 1160, XP000566681
MCLAUGHLIN S W ET AL.: "PARTIAL RESPONSE MODULATION CODES FOR ELECTRON TRAPPING OPTICAL MEMORY (ETOM)", PROCEEDINGS OF THE SPIE, vol. 2514, 1 January 1995 (1995-01-01), pages 82 - 90, XP000566247
EARMAN A M: "OPTICAL DATA STORAGE WITH ELECTRON TRAPPING MATERIALS USING M-ARY DATA CHANNEL CODING", PROCEEDINGS OF THE SPIE, vol. 1663, 1 January 1992 (1992-01-01), pages 92 - 103, XP000566784
Download PDF:
Claims:
What Is Claimed Is:
1. A method for encoding a series of binary input data bits x into an Mary runlength limited (3,8) code having a rate R=5/6 to produce a series of code symbols y, each code symbol being at one of M levels, where M>2 and each pair of nonzero code symbols having a minimum of three and a maximum of eight zeroes therebetween, the method comprising the steps of: receiving at a fivestate encoder (204) an input data bit set Xj ... x+4 to be encoded into the Mary runlength limited (3,8) code; and generating in said encoder (204) a code symbol set yf ... yi+5 based on said input data bit set Xj ... Xμ4 according to Table 1 , wherein said code symbol set yj ... yi+5 is generated based on the input data bit set x j... x i+4and the current state of said fivestate encoder (204) when said data bit set Xj ... xi+4 is received.
2. The method of claim 1 , further comprising the steps of: generating in a waveform encoder (308) waveform signal amplitudes based on said code symbols, wherein each said waveform signal amplitude is generated by modulo seven addition of a current code symbol with a previous waveform signal amplitude; and modulating a write signal with said waveform signal amplitudes to write a series of features (102) to a storage medium (208), each feature being at a level corresponding to a waveform signal amplitude.
3. The method according to claim 2, wherein said waveform signal amplitudes modulate a write laser and wherein said modulated write laser writes said features (102) onto said storage medium (208).
4. The method according to claim 2, further comprising the steps of: reading said storage medium (208) to recover output waveform signal amplitudes; converting said output waveform signal amplitudes into output code symbols, wherein each output code symbol is at one of seven levels; and decoding said output code symbols to obtain output data bits, wherein said output data bits correspond to the input data bits.
5. The method of claim 4, wherein said step of decoding comprises the steps of: identifying with a sliding window (704) a sequence of code symbols that represents a given code symbol set; and in a table comprising a number of entries corresponding to a number of possible unique sequences of code symbols, each entry identified by one of said possible unique sequences of code symbols, and wherein each entry identifies an output data bit set that is a decoded data bit set for the code symbol set represented by the sequence of code symbols that identifies that entry, looking up with said identified sequence of code symbols the output data bit set for said given code symbol set.
6. The method according to claim 5, wherein said lookup table provides an output bit set x' for each sequence of code symbols y1 according to Table 3.
7. The method of claim 5, wherein said lookup step comprises the step of determining, using a squared euclidean distance, which table entry is identified by a sequence of code symbols.
8. A method for decoding data stored on a storage medium (208), wherein said stored data has been encoded using an M=7 (3,8) code, comprising the steps of: reading the storage medium to recover output waveform signal amplitudes; converting said output waveform signal amplitudes into output code symbols, wherein each output code symbol is at one of seven levels; and decoding said output code symbols to obtain output data bits, wherein said output data bits correspond to the input data bits.
9. The method of claim 8, wherein said step of decoding comprises the steps of: identifying with a sliding window (704) a sequence of code symbols that represents a given code symbol set; and in a table comprising a number of entries corresponding to a number of possible unique sequences of code symbols, each entry identified by one of said possible unique sequences of code symbols, and wherein each entry identifies an output data bit set that is a decoded data bit set for the code symbol set represented by the sequence of code symbols that identifies that entry, looking up with said identified sequence of code symbols the output data bit set for said given code symbol set.
10. The method according to claim 9, wherein said table provides an output bit set x' for each sequence of code symbols y' according to Table 3.
Description:
M=7 (3,8) Runlength Limited Code for Multi-Level Data

Inventor: Steven W. McLaughlin

Background of the Invention

1. Field of the Invention

The present invention relates generally to multi-level coding techniques, and more specifically to a system and method for coding data using an M=7 (3,8) runlength limited code, such code being particularly useful for storing and/or transmitting multi-level data.

2. RelatedΛrt

Various techniques are currently in use for increasing the recording density on various digital recording mediums such as magnetic tapes and disks and in other similar media. One technique utilizes an approach known as run- length-limited coding. This technique requires that each "1" in a coded bit sequence must be separated by a specified number of "0's". This number of zeros must be at least a minimum quantity, d, to reduce intersymbol interference, and is limited to a maximum quantity k for self clocking purposes. Such codes are generally referred to as (d,k) run-length-limited (RLL) codes.

Because conventional recording techniques use saturation recording to store information, binary recording techniques are often used to mark the recording medium. As a result, conventional (d,k) RLL codes developed to date are developed and optimized to store binary data.

Significant advances in data storage materials have lead to the development of a storage medium that provides a linear response characteristic. One such material providing a linear response characteristic is an electron trapping material such as is disclosed in U.S. Patents No. 4,864,536, 5,007,037, and 5,142,493, all to Lindmayer.

Using a material which provides a linear response characteristic yields an advantage over saturation-type media in that it adds an analog dimension to the storage capacity of the medium. Because the response is linear, the linear- response storage materials provide the ability to encode information in two dimensions - amplitude and phase.

As a result, the storage medium is no longer confined to storing binary or even tri-level data. Instead, the concept of M-ary, or non-binary, data coding and storage is provided. The increased symbol set allowed by such encoding provides the opportunity to dramatically increase the data recording density and transfer rate of the storage device. For example, the potential storage capacity of a single

5VΛ inch disk can be extended to several gigabytes if that disk is implemented using electron trapping materials with M-ary (multi-level) data coding.

Summary of the Invention

The present invention is directed toward an M=7 (3,8) runlength-limited code for multi-level data storage and/or communications. Also disclosed herein is a system and method for generating multi-level data from a binary input data stream using an M-ary (d,k) code such as the M=7 (3,8) runlength limited code.

According to the invention input data bits are coded using an M-ary (d,k) encoder to generate code symbols. Specifically, input data bits x are encoded using the M-ary (d,k) encoder to generate code symbols y, where: x = (x , x , ... x ), for p input data bits

y = (y 0> J •■• y - χ ) > where plq is the code rate R

The code symbols y are multi-level symbols, each being at one of M levels. The code symbol stream provided meets the code specifications of no fewer than d and no greater than k zeros between each non-zero symbol. Thus, according to the M=7 (3,8) code disclosed herein, code symbols are each at one

of seven levels and there is a minimum of three and a maximum of eight zeros between each non-zero symbol.

The code symbols y are encoded to generate a series of waveform amplitudes z. The waveform amplitudes are generated by modulo M addition of the current code symbol Vj with the previous waveform amplitude Z j .,. The waveform amplitudes are used to modulate a write laser to store information onto an optical disk or to otherwise store or communicate the input data bits x in the form of multi-level information.

To recover the original data bits x from the medium, the information stored on the medium is read and the resultant signal amplitudes are decoded.

Two stages of decoding are provided. In the first stage, the waveform amplitudes are decoded to generate code symbols. In the second stage, the code symbols are decoded to recover the original data bits.

The system and method described herein for coding and decoding the data is described with respect to the M=7 (3,8) code disclosed herein. However, while other codes may not be obvious in light of the code disclosed herein, given a specific M-ary (d,k) code, after reading the below disclosure, it will become apparent to a person skilled in the relevant art how the disclosed system and method can be implemented to code and decode the data using such a specific M- ary (d,k) code.

An advantage of the invention is that the recording density can be increased by coding the input data using the disclosed M=7 (3,8) code. Because there are at least d zeros between every non-zero code symbol, there can be at least d+1 symbols stored for a given minimum feature size. Given a code of rate R, the density achievable is (d+l)R.

It should be noted that the coding techniques described herein are not limited to optical recording. Other recording systems capable of supporting multi-level data would benefit from the coding techniques described herein. Additionally, these coding techniques are also applicable to communications systems where the communications channel is capable of supporting multi-level

data. In such an implementation, the waveform amplitudes could be used to modulate a signal carrier for transmission across the multi-level channel.

Further features and advantages of the present invention, as well as the structure and operation of various embodiments of the present invention, are described in detail below with reference to the accompanying drawings.

Brief Description of the Figures

The present invention is described with reference to the accompanying drawings. In the drawings, like reference numbers indicate identical or functionally similar elements. Additionally, the left-most digit(s) of a reference number identifies the drawing in which the reference number first appears.

FIG. 1 is a diagram illustrating a portion of an optical storage medium and features thereon.

FIG.2 is a diagram illustrating a data storage system for storing a multi¬ level coded data. FIG.3 is a diagram illustrating an encoder for encoding multi-level data using a multi-level (d,k) code.

FIG.4 is a flow diagram illustrating the operation of a multi-state encoder.

FIG.5 is a diagram illustrating an example input data stream being coded using the encoder illustrated in FIG. 4. FIG. 6 is a diagram illustrating a decoder for decoding multi-level (d,k) coded data.

FIG. 7 is a diagram illustrating a sliding block decoder.

Detailed Description of the Preferred Embodiments

1. Introduction

The present invention is directed toward an M-ary (d,k) code for use in storage and/or transmission of multi-level data, and a system and method for generating the same. This discussion is provided in several sections. In Section

2, before discussing the invention in detail, a brief discussion of binary (d,k) codes is presented. In Section 3, a coding system for coding input data using an M-ary (d,k) code is described. In Section 4, some code design factors are described. In Section 5, a specific M=7 (3,8) code is described that is particularly useful for storage and/or transmission of multi-level data. Section 5 also provides a detailed description of the encoder used to code data using the disclosed M=7 (3,8) code. In Section 6 there is presented a discussion of a sliding block decoder generally useful for decoding M-ary (d,k) codes, as well as a specific decoder for decoding the M=7 (3,8) code described in Section 4. The present invention is generally described in terms of an embodiment where multi-level data are stored on and retrieved from an optical disk. In such an embodiment, the encoder and decoder described herein may be implemented for multi-level data storage in an optical disk system such as that disclosed in U.S. Patent No. 5,007,037, which is incorporated herein by reference. However, after reading the below description, it will become apparent to a person skilled in the relevant art how the systems and methods of the invention can be implemented for alternative applications such as multi-level data communications and storage of multi-level data on media other than optical disks. In yet other alternative embodiments, the invention can be implemented to transmit and receive data across an M-ary communications channel. In this document, the term "channel" is sometimes used to refer to the optical disk. It should be understood that in the alternative embodiments the term channel can be used to describe alternative storage media and/or communications channels.

Additionally, after reading the below detailed description of the encoder and decoder of the present invention, it will become apparent to a person skilled in the art that these disclosed components can be implemented using hardware, software or a combination of both hardware and software.

2. Binary (d,k) Run-Length-Limited Coding

Using conventional binary storage techniques, data are written to a storage medium using binary l's and O's. Using run-length limited coding, the data to be recorded are first encoded using a run-length-limited encoder. As stated above, with a (d,k) RLL code, there is a minimum and a maximum number of O's that can occur between each pair of 1 's, as specified by the code parameters d and k.

Thus, the (d,k) RLL encoder results in a 1 followed by at least d and at most k O's before another 1 occurs. Such (d,k) RLL codes for binary applications are well known in the art.

To write input data to the saturation storage medium, the input data are first encoded to create symbols. The encoder is designed such that the output symbols conform to the code specifications: each 1 is followed by a minimum of d and a maximum of k O's. These symbols are then written to the storage medium as a series of features. For example, for optical disks, a feature is the presence or absence of a burn mark. In a magnetic tape, the feature is a grouping of magnetic particles oriented in a particular manner.

FIG. 1 illustrates a portion of an optical storage medium 108 that stores binary data as features 102. Illustrated are shaded and unshaded features 102, indicating the absence or presence of a burn mark. Also illustrated in FIG. 1 is an example symbol stream 112 that is used to write the features 102 to medium 108. As discussed above, symbol stream 112 is the result of encoding input data using a (d,k) RLL code. Symbol stream 112 is written to medium 108 using an additional coding step as follows: the occurrence of a 1 indicates a change in the type of mark (i.e., absence or presence of a burn mark); the occurrence of a 0

indicates no change in mark type. This additional coding step is sometimes referred to as non-return-to-zero interleaved (NRZI) precoding.

Note that with a (d,k) RLL code where d=2, the minimum number of symbols represented by a single feature 102 is three. Thus, for a minimum feature size (e.g., for the smallest spot size on medium 108) three symbols can be represented. As a result, for a rate Vz code, where each input bit corresponds to two symbols, the minimum density of data written to medium 108 is 1.5 bits per feature. Thus, as a result of using the (d,k) RLL coding in the described scenario, the density of the recording system can be increased by 50%.

3. A Generic M-ary Runlength-Limited (d,k) Coder

A few advantages of (d,k) coding are described above with reference to binary data systems. It is important to note that similar gains in density can be realized for storage and communications systems using multi-level (versus binary) data. To optimize such gains, however, new codes and new coding techniques are required to take full advantage of the unique properties of the multi-level data. Thus, the inventors have developed a system and method for encoding data using M-ary (d,k) codes.

FIG. 2 is a high-level block diagram generally illustrating a multi-level data recording system 200. The recording system is comprised of an encoder 204, multi-level storage medium 208 and a decoder 212. As stated above, multi¬ level storage medium 208 can be replaced with a communications channel allowing the multi-level (d,k) code and coding scheme to be used with multi-level data communications. In such a communications embodiment, encoder 204 and decoder 212 can be provided on both ends of the communications channel to allow bi-directional coded communications.

According to the invention, input data bits x = (XQ, X„ ..., X p .,) are the actual data that a user wishes to be stored on and retrieved from medium 208. However, to take full advantage of the multi-level properties of medium 208 and

to increase the storage density achieved, the invention provides for the encoding of input data x so that multi-level data is stored on medium 208. Such encoding is accomplished using encoder 204.

In one embodiment, encoder 204 is implemented as a two-stage encoder. FIG. 3 is a block diagram illustrating encoder 204 in this embodiment. Referring to FIG. 3, encoder 204 is comprised of a symbol encoder 304 and a waveform encoder 308, referred to herein as encoder 304 and encoder 308, respectively.

Encoder 304 is a (d,k) RLL symbol encoder that accepts the input data bits x and converts them to a stream of code symbols y = (y 0 , y„ ..., y^,). To take advantage of the multi-level characteristics of medium 208, encoder 304 generates code symbols y at M different levels, where M>2. A second feature of encoder 304 is that the stream of code symbols y meets the code specification that there are no fewer than d and no greater than k zeros between each non-zero code symbol. Another feature of encoder 304 is that there are R input bits x f for each code symbol y { generated. This feature is referred to as the code rate. Thus for a rate 1/N code (i.e., where R = 1/N), there are N code symbols y ; generated for each input data bit Xj.

Waveform encoder 308 accepts code symbols y and converts them to a series of waveforms z = (ZQ, Z,, ..., z,,.,), each of a given amplitude. Waveform encoder 308 generates output waveforms z, each at one of M different amplitudes. The waveform amplitudes are generated by modulo M addition of the current code symbol y f with the previous waveform amplitude Zj.,. It is the waveforms z which are used to modulate a write laser for storing data onto medium 208 (or transmitted across the multi-amplitude channel). Because there are at a minimum d zeros, between each non-zero code symbol, each waveform amplitude z generated represents, at a minimum, d+1 code symbols y. Also, because there are 1/R code symbols y generated for each input data bit x, each waveform amplitude z generated represents, at a minimum, (d+l)R data bits x. Thus, for a minimum feature size (e.g., the smallest spot that

can be written to the storage medium or the shortest pulse that can be transmitted across the communications channel), the density achieved is D = (d+l)R.

Consider this density in terms of the specific M=7 (3,8) code described below. The rate of this code is R=5/6 and d=3. For this code, the density is 3.33 input data bits X; per minimum feature size. In other words, 3.33 input data bits can be stored using a single minimum-size feature.

4. Code Design Factors

The coding system and method described above can be used to code input data using any of number of M-ary (d,k) codes. However, the design of a specific M-ary (d,k) code is not a trivial matter.

There are several factors that must be taken into consideration when designing M-ary (d,k) codes. The specific coding scheme used to implement a given code impacts the performance of the encoding and decoding systems. For example, the code should be designed such that encoders and decoders can be implemented in a straight-forward and cost-effective manner. Toward this end, the desirable code can be implemented using encoders that have a relatively small number of states while still meeting the code parameters (i.e., M, d and k). Additionally, the decoder required to decode the coded data should be implementable using a small sliding block window size and the decoder should have a relatively a small table size.

Further, the code design must result in an encoder and decoder that operate such that errors in the decoder side have a minimum effect. It would be undesirable for errors to propagate too far in the decoded data stream. In some less-than-desirable systems, a single decoding error can result in a very large, if not infinite, number of additional decoding errors.

Achievement of such design goals is not a trivial matter. Not every M-ary (d,k) code of a given set of parameter values will perform in a desirable manner.

Provided in the next section of this document is a specific M=7 (3,8) runlength- limited code that meets the design goals outlined above.

5. M=7 (3,8) Runlength-limited Code

As stated above, code design is not a trivial matter as there are several coding factors that affect the performance of the system. The specific code implemented for a given set of parameters can impact the overall performance of the system. This section of the patent document describes a specific M-ary (d,k) code and the specific encoder used to implement this code. In particular, this section describes a specific M=7 (3,8) runlength-limited code having a rate R=5/6.

Table 1 is a state table illustrating a state machine 400 for encoding input data x to generate code symbols y for the M=7 (3,8) code (i.e. a specific version of encoder 304). State machine 400 is a five-state, M=7 (3,8) encoder. For each input data bit set x,- ... x i+4 , an output code symbol set y s ... y i+5 is produced; each output code symbol y ; is at one of seven levels (0-6). The various states as well as the inputs and outputs of state machine 400 are illustrated using Table 1.

FIG. 4 is an operational flow diagram illustrating the operation of state machine 400. The operation of state machine 400 is now described with reference to Table 1 and FIG. 4. In a step 404, the operation starts in a given state at time t=0. In a step 408, an input data bit set X; ... Xj +4 is received. In a step 412,

Table 1 is used to determine the output code symbol set y f ... y i+5 and next state from the current state and the input data bit set Xj ... x i+4 received in step 408. In a step 416, encoder 304 outputs code symbol set y s ... y i+5 determined in step 412. In a step 420, state machine 400 transitions to the next state determined in step 412. At this time, the operation continues at step 408 as indicated by flow line

426.

As is evident by the above description, an output code symbol set y f ... y i+5 of encoder 304 is a function of the input data bit set Xj ... x i+4 , and the current state

404 of encoder 304. For the M=7 (3,8) encoder of the present invention, Table 1 describes the output code symbol set y f ... y i+J and next state of encoder 304 for each current state and input data bit set x f ... Xj +4 .

Table 1

STATE 0

10

15

20

25

30

35

Table 1 (cont.)

STATE 1

10

15

20

25

30

Table 1 (cont.)

STATE 2

10

15

20

25

30

Table 1 (cont.)

STATE 3

10

15

20

25

30

Table 1 (cont.)

STATE 4

10

15

20

25

30

To further illustrate the operation of symbol encoder 304, consider an example input data stream x as illustrated in Table 2. In this example, assume the encoder 304 starts in state 1 and that the first input data bit set Xj ... Xj +4 is '10110'. Referring to the rows for state 1, the row where X; ... x i+4 = '10110' indicates that encoder 304 outputs symbol " and transitions to state 2.

FIG. 5 is a diagram further illustrating the example. FIG. 5 illustrates a current state 508 and a new state 512 for the example input data stream provided in Table 2. Referring to FIG. 5 and state machine 400, given the input data stream illustrated in Table 2, for each input data bit set X; ... x i+4 , encoder 304 transitions from a current state 508 to a new state 512 and produces an ' output symbol set yj ... y i+5 . FIG. 5 illustrates the example for 15 data bits x of the input data stream while Table 2 is an example for 15 data bits x.

Table 2

As described above with reference to FIG. 3, code symbols y are further coded by waveform encoder 308 to generate a sequence of amplitudes z used to modulate the write laser. According to one embodiment, waveform encoder 308 is a modulo seven encoder that, for a given time, determines the waveform amplitude Zj by z I. = (z i.- ,l + ' v i.)' mod M

Note that z is a transformed version of y, where the difference (mod M) between waveform amplitudes Z; and Zj., is the coded symbol y Thus, in this embodiment, each new code symbol yj is modulo seven added to the previous

waveform amplitude Zj. ! to result in the current waveform amplitude z-. In following the example described above and illustrated in FIG. 5 and Table 2, the code symbols y are encoded by waveform encoder 308 to waveform amplitudes z, as illustrated in Table 2. To briefly summarize the encoding process, input digital data bits x are first encoded using an M=7 (3,8) symbol encoder to produce code symbols y at M=7 levels. Code symbols y are then encoded by waveform encoder 308 to produce waveform amplitudes z. According to the current code, M=7 amplitudes (illustrated in the above examples as 0 - 6) are possible. These amplitudes are written to the media by the write laser as illustrated in FIG. 3.

6. Decoder

In order to recover the original data bits x from the amplitudes z stored on the media (or transmitted across the communications channel) a decoder is implemented. In one embodiment, the decoder uses a state independent lookup table to decode amplitude levels z read from the disk. In this embodiment, the decoder is a sliding block decoder, where a sliding window is used to decode amplitudes read from the disk.

FIG. 6 is a block diagram illustrating the decoder. As illustrated in FIG. 6, decoder 212 is comprised of a waveform decoder 604 and a sliding block decoder 608. Waveform decoder 604 receives the signal amplitudes z' (multi¬ level) from the media and converts them to a sequence of digital code symbols y'. Sliding block decoder 608 performs a table lookup to convert output code symbols y' into output data bits x'. Note that in an error free environment, output code symbols y' correspond identically to input code symbols y and output data bits x' correspond identically to input data bits x.

Any of a number of different techniques can be implemented to read waveform amplitudes z off of the media to provide the signal amplitudes z' to

waveform decoder 604. It should be noted that the actual read scheme implemented is not important to the invention as long as data are read accurately.

As stated above, the purpose of waveform decoder 604 is to decode signal amplitudes z' to recover the actual code symbols y'. Waveform decoder converts a sequence of amplitudes z' = (z' 0 , z'„ ..., z' N .,) where z' j e [0,A], for some real number A, to a sequence of code symbols y' = (y' 0 , y',, ..., y' N „ι).

The operation of waveform decoder 604 is now described. For a given time i, the code symbol y'j is determined by

/, = (z', - *',_,) mod M

According to this technique, each output symbol y' is determined as being the modulo M difference between the current amplitude waveform z and the previous amplitude waveform z'j.,. This decoding essentially undoes the coding performed by waveform encoder 308. Specifically, for M=7 (d,k) codes, such as the M=7 (3,8) code described above in Section 5, the decoding is implemented using a modulo seven difference.

6.1 Sliding Block Decoder

The purpose of sliding block decoder 608 is to convert the sequence of code symbols y' into a sequence of data bits x' that coincide with input data bits x. In a preferred embodiment, the decoder is a state independent lookup table. The size of the lookup table is dependent on the specific code implemented.

Therefore, the design of encoder 304 affects the size of the lookup table implemented.

Sliding block decoder 608 is illustrated in FIG. 7. Sliding block decoder comprises a sliding window 704 to decode the code symbols y' to arrive at output data bits x'. Whereas encoder 304 accepts one data bit set x s ... x i+4 and generates one code symbol set y ; ... y i+5 therefrom, sliding block decoder 608 must look at multiple code symbols y' to decode one data bit set. Specifically, for the encoder

described above with reference to Table 1, sliding block decoder 608 requires a block of twelve code symbols v to uniquely decode one data bit set x ... Xj +4 '. The actual size of sliding window 704 is determined during code design. An optimally sized sliding window 704 is large enough such that the symbols y' within sliding window 704 unambiguously define the correct output bit set x' without being so large that unneeded code symbols y' are included therein. In other words, the window size is chosen as the smallest window which guarantees unique decodability.

With the use of a sliding window 704 to decode the data, knowledge of state information is not required. In fact, the contents of sliding window 704 at any given time contain sufficient information such that state information can be determined therefrom. Thus, sliding block decoder 608 is computationally less complex than conventional decoders; more importantly, the sliding block decoder limits the propagation of errors. Sliding window 704 actually represents the present and f ture. The code symbols y 1 actually being decoded to generate data bits x' represent the present. Future symbols y' are those that occur after the present symbols. In FIG. 7, the present is represented by '050000' and the future by '050004'.

Note that sliding block decoders are well known for decoding binary data. One well known technique for implementing sliding block decoders with binary data is the Adler-Coppersmith-Hassner technique disclosed in U.S. Patent No. 4,413,251. Another, related technique is disclosed in U.S. Patent No. 4,882,583 to Dimitri et al. According to these techniques, the number of past symbols required in the window is fixed based on the code design. The number of future symbols should be maintained as small as possible. These goals apply to the M- ary sliding block decoder as well.

The lookup table contains a plurality of entries. In one embodiment, each entry contains a possible sequence of N code symbols y', where N is the size of sliding window 704. In alternative embodiments, each entry of the lookup table

is addressed by (directly, indirectly or via a decoding scheme) one of the possible sequences of code symbols.

Based on the specific design of coder 304, there are a limited number of possible occurrences of N code symbols y'. The lookup table comprises a sufficient number of entries such that there is one entry for each of the possible occurrences of N code symbols. As stated above, N is chosen such that for each sequence of N code symbols y' an output bit set x' is unambiguously defined.

For the encoder 304 described above with reference to Table 1, the preferred lookup table has 1574 entries and is illustrated in Table 3. For each entry of twelve code symbols y', there is an output bit set x'. Thus, to " decode code symbols y', twelve consecutive code symbols y' are loaded into sliding window 704. The entry corresponding to those twelve code symbols y' is located in the lookup table and the corresponding data bit set x 1 is output. To determine the next output data bit set x', sliding window 704 is 'slid' one code symbol y' into the future (i.e., in one embodiment, a next code symbol y' is shifted into window

704 and the oldest shifted out) and the lookup process is repeated. This sliding process continues as long as code symbols y' are provided to sliding block decoder 608.

In one embodiment, the contents of window 704 are real-valued and, therefore, the table entry retrieved is the entry that is closest in squared Euclidean distance. Specifically, for a given window w = (W],...,w 12 ), the distance d j for each table entry t j is computed as:

12 d j - Ε i-i ~ ' for j = !,...! 574 ι=l

where, 1 is the i'th component of the j'th table entry. The window w is then decoded to the table entry with the minimum distance d j . Other embodiments are contemplated where the contents of window 704 are used as an address or used to generate an address of an entry in a memory, where the contents of that entry contain the appropriate output data bit set x'.

The complexity of the decoding process can be reduced significantly by making hard decisions regarding read signal amplitudes. Specifically, in one embodiment, the read signal amplitudes z' are rounded-off or quantized to be one of the seven permissible amplitude levels. Even though this results in a decrease in the performance of the decoder it can significantly reduce its complexity: that is, the table can be a true lookup table requiring no distance calculations.

It should be noted that at the beginning and the end of a data stream, there is a period of time during which window 704 is not full.

© © © 0 © © © © © © © © © © © © © © © 0 © © © 0 © © © 00 © © © © 00 © © © © 0 © 000 © © © © 0 © © © ©

© © © © O © © © © © © © 00000 © © © 00 © © © © © © 0 © 0 © 0 © © © 0 © 0 © 0 © 0000000 © 00 © π- π- π- π- π- π- π- π- π- 0 © O O O O O O O O O O O O O O O O O O O O O θ H- π- _- -- — _- — — -- _- _

Table 3 (cont.)

Contents Contents Contents

00060 0004000 1011 00020 0040006 11001 00040 0040005 11011 000600005000 1011 0002000500Q1 11001 000400040006 11011 000600006000 1011 000200050002 11001 000400050001 11011 000600010000 1011 000200050003 11001 000400050002 11011 000600020000 1011 000200050004 11001 000400050003 11011 000600030000 1011 000200050005 11001 000400050004 11011 000600040000 1011 000200050006 11001 000400050005 11011 00060oosoooo 1011 000200060002 11001 000400050006 11011 00060 0060000 1011 000200060003 11001 000400060002 lion 000100010002 11000 000200060004 11001 000400060003 11011 000100010003 11000 000300010002 1.1010 000400060004 11011 000100010004 11000 000300010003 11010 000500010002 11100 000100010005 11000 000300010004 11010 000500010003 11100 000100010006 11000 000300010005 11010 000500010004 11100 000100020001 11000 000300010006 11010 000500010005 11100 000100020002 11000 000300020001 11010 000500010006 I 1100 000100020003 11000 000300020002 11010 000500020001 I I 100 000100020004 11000 000300020003 11010 000500020002 11100 000100020005 11000 000300020004 11010 000500020003 11100 000100020006 11000 000300020005 11010 000500-02.0004 11100 000100030001 11000 000300020006 11010 000500020005 11100 000100030002 11000 000300030001 11010 000500020006 11100 000100030003 11000 000300030002 11010 000500030001 11100 000100030004 11000 000300030003 11010 000500030002 11100 000100030005 11000 000300030004 11010 000500030003 11100 000100030006 I 1000 000300030005 11010 000500030004 11100 000100040001 11000 000300030006 11010 000500030005 11100 000100040002 11000 000300040001 11010 000500030006 11100 000100040003 11000 000300040002 11010 000500040001 11100 000100040004 11000 000300040003 11010 000500040002 11100 000100040005 11000 000300040004 11010 000500040003 11100 000100040006 11000 000300040005 11010 000500040004 11100 000100050001 11000 000300040006 11010 000500040005 11100 000100050002 11000 000300050001 11010 000500040006 11100 000100050003 11000 000300050002 11010 000500050001 11100 000100050004 11000 000300050003 11010 000500050002 I 1100 000100050005 11000 000300050004 11010 000500050003 I I 100 000100050006 11000 000300050005 11010 000500050004 11100 000100060002 11000 000300050006 11010 000500050005 11100 000100060003 11000 000300060002 11010 000500050006 11100 000100060004 11000 000300060003 11010 000500060002 11100 000200010002 11001 000300060004 11010 000500060003 11100 000200010003 11001 000400010002 11011 000500060004 11100 000200010004 11001 000400010003 11011 000600010002 11101 000200010005 11001 000400010004 11011 000600010003 11101 000200010006 11001 000400010005 11011 000600010004 11101 000200020001 11001 000400010006 11011 000600010005 11101 000200020002 11001 000400020001 11011 000600010006 11101 000200020003 11001 000400020002 11011 000600020001 11101 000200020004 11001 000400020003 11011 000600020002 11101 000200020005 11001 000400020004 11011 000600020003 11101 000200020006 11001 000400020005 11011 000600020004 1 I 101 000200030001 11001 000400020006 11011 000600020005 11101 000200030002 11001 000400030001 11011 000600020006 11101 000200030003 11001 000400030002 11011 000600030001 11101 000200030004 11001 000400030003 11011 000600030002 11101 000200030005 11001 000400030004 11011 000600030003 11101 000200030006 11001 000400030005 11011 000600030004 11101 000200040001 11001 000400030006 11011 000600030005 11101 000200040002 11001 000400040001 11011 000600030006 11101 000200040003 11001 000400040002 11011 000600040001 11101 000200040004 11001 000400040003 11011 000600040002 11101 000200040005 11001 000400040004 11011 000600040003 11101

Table 3 (cont.)

Contents X' Contents X* Contents X'

004000040001 00011 006000030006 00101 002000300005 0011 004000040002 00011 006000040001 00101 002000300006 0011 004000040003 00011 006000040002 00101 002000400001 0011 004000040004 00011 006000040003 00101 002000400002 0011 004000040005 0001 I 006000040004 00101 002000400003 0011 004000040006 00011 006000040005 00101 002000400004 0011 004000050001 00011 006000040006 00101 002000400005 0011 004000050002 00011 006000050001 00101 002000400006 0011 004000050003 00011 006000050002 00101 002000500001 0011 004000050004 00011 006000050003 00101 002000500002 0011 004000050005 00011 006000050004 00101 002000500003 0011 004000050006 00011 006000050005 00101 002000500004 0011 004000060002 00011 006000050006 00101 002000500005 0011 004000060003 00011 006000060002 00101 002000500006 0011 004000060004 00011 006000060003 00101 002000600002 0011 005000010002 00100 006000060004 00101 002000600003 0011 005000010003 00100 001000100002 00110 002000600004 0011 005000010004 00100 001000100003 00110 003000100002 01000 005000010005 00100 001000100004 00110 003000100003 01000 005000010006 00100 001000100005 00110 003000-10.0004 01000 005000020001 00100 001000100006 00110 003000100005 01000 005000020002 00100 001000200001 00110 003000100006 01000 005000020003 00100 001000200002 00110 003000200001 01000 005000020004 00100 001000200003 00110 003000200002 01000 005000020005 00100 001000200004 00110 003000200003 01000 005000020006 00100 001000200005 00110 003000200004 01000 005000030001 00100 001000200006 00110 003000200005 01000 005000030002 00100 001000300001 00110 003000200006 01000 005000030003 00100 001000300002 00110 003000300001 01000 005000030004 00100 001000300003 00110 003000300002 01000 005000030005 00100 001000300004 00110 003000300003 01000 005000030006 00100 001000300005 00110 003000300004 01000 005000040001 00100 001000300006 00110 003000300005 01000 005000040002 00100 001000400001 00110 003000300006 01000 005000040003 00100 001000400002 00110 003000400001 01000 005000040004 00100 001000400003 00110 003000400002 01000 005000040005 00100 001000400004 00110 003000400003 01000 005000040006 00100 001000400005 00110 003000400004 01000 005000050001 00100 001000400006 00110 003000400005 01000 005000050002 00100 001000500001 00110 003000400006 01000 005000050003 00100 001000500002 00110 003000500001 01000 005000050004 00100 001000500003 00110 003000500002 01000 005000050005 00100 001000500004 00110 003000500003 01000 005000050006 00100 001000500005 00110 003000500004 01000 005000060002 00100 001000500006 00110 003000500005 01000 005000060003 00100 001000600002 00110 003000500006 01000 005000060004 00100 001000600003 00110 003000600002 01000 006000010002 00101 001000600004 00110 003000600003 01000 006000010003 00101 002000100002 0011 003000600004 01000 006000010004 00101 002000100003 001 I 004000100002 01001 006000010005 00101 002000100004 0011 004000100003 01001 006000010006 00101 002000100005 0011 004000100004 01001 006000020001 00101 002000100006 0011 004000100005 01001 006000020002 00101 002000200001 0011 004000100006 01001 006000020003 00101 002000200002 0011 004000200001 01001 006000020004 00101 002000200003 0011 004000200002 01001 006000020005 00101 002000200004 0011 004000200003 01001 006000020006 00101 002000200005 0011 004000200004 01001 006000030001 00101 002000200006 0011 004000200005 01001 006000030002 00101 002000300001 0011 004000200006 01001 006000030003 00101 002000300002 0011 004000300001 01001 006000030004 00101 002000300003 0011 004000300002 01001 006000030005 00101 002000300004 0011 004000300003 01001

Table 3 (cont.)

Contents Contents Contents X'

00400 0300004 01001 006000 300003 01011 00200 0300020 01101 004000300005 01001 006000300004 01011 002000300030 01101 004000300006 01001 006000300005 01011 002000300040 01101 004000400001 01001 006000300006 01011 002000300050 01101 004000400002 01001 006000400001 01011 002000300060 01101 004000400003 01001 006000400002 01011 002000400010 01101 004000400004 01001 006000400003 01011 002000400020 01101 004000400005 01001 006000400004 01011 002000400030 01101 004000400006 01001 006000400005 01011 002000400040 01101 004000500001 01001 006000400006 01011 002000400050 01101 004000500002 01001 006000500001 01011 002000400060 01101 004000500003 01001 006000500002 01011 002000500010 01101 004000500004 01001 006000500003 01011 002000500020 01101 004000500005 01001 006000500004 01011 002000500030 01101 004000500006 01001 006000500005 01011 002000500040 01101 004000600002 01001 006000500006 01011 002000500050 01101 004000600003 01001 006000600002 01011 002000500060 01101 004000600004 01001 006000600003 01011 002000600020 01101 005000100002 01010 006000600004 01011 002000600030 01101 005000100003 01010 001000100020 01100 002000.6O.0040 01101 005000100004 01010 001000100030 01100 003000100020 01110 005000100005 01010 001000100040 01100 003000100030 01110 005000100006 01010 001000100050 01100 003000100040 01110 005000200001 01010 001000100060 01100 003000100050 01110 005000200002 01010 001000200010 01100 003000100060 01110 005000200003 01010 001000200020 01100 003000200010 01110 005000200004 01010 001000200030 01100 003000200020 01110 005000200005 01010 001000200040 01100 003000200030 01110 005000200006 01010 001000200050 01100 003000200040 01110 005000300001 01010 001000200060 01100 003000200050 01110 005000300002 01010 001000300010 01100 003000200060 01110 005000300003 01010 001000300020 01100 003000300010 01110 005000300004 01010 001000300030 01100 003000300020 01110 005000300005 01010 001000300040 01100 003000300030 01110 005000300006 01010 001000300050 01100 003000300040 01110 005000400001 01010 001000300060 01100 003000300050 01110 005000400002 01010 001000400010 01100 003000300060 01110 005000400003 01010 001000400020 01100 003000400010 01110 005000400004 01010 001000400030 01100 003000400020 01110 005000400005 01010 001000400040 01100 003000400030 01110 005000400006 01010 001000400050 01100 003000400040 01110 005000500001 01010 001000400060 01100 003000400050 01110 005000500002 01010 001000500010 01100 003000400060 01110 005000500003 01010 001000500020 01100 003000500010 01110 005000500004 01010 001000500030 01100 003000500020 01110 005000500005 01010 001000500040 01100 003000500030 01110 005000500006 01010 001000500050 01100 003000500040 01110 005000600002 01010 001000500060 01100 003000500050 01110 005000600003 01010 001000600020 01100 003000500060 01110 005000600004 01010 001000600030 01100 003000600020 01110 006000100002 01011 001000600040 01100 003000600030 01110 006000100003 01011 002000100020 01101 003000600040 01110 006000100004 01011 002000100030 01101 004000100020 0111 006000100005 01011 002000100040 01101 004000100030 0111 006000100006 01011 002000100050 01101 004000100040 0111 006000200001 01011 002000100060 01101 004000100050 0111 006000200002 01011 002000200010 01101 004000100060 0111 006000200003 01011 002000200020 01101 004000200010 0111 006000200004 01011 002000200030 01101 004000200020 0111 006000200005 01011 002000200040 01101 004000200030 0111 006000200006 01011 002000200050 01101 004000200040 0111 006000300001 01011 002000200060 01101 004000200050 0111 006000300002 01011 002000300010 01101 004000200060 0111

Table3 (cont.)

Contents X' Contents X' Contents

00400 0300010 on 00600 0200060 10001 02000 0020005 10011 004000300020 on 006000300010 10001 020000020006 10011 004000300030 on 006000300020 10001 020000030001 1001 I 004000300040 011 006000300030 10001 020000030002 10011 004000300050 01 I 006000300040 10001 020000030OΘ3 10011 004000300060 011 006000300050 10001 020000030004 10011 004000400010 011 006000300060 10001 020000030005 10011 004000400020 on 006000400010 10001 020000030006 10011 004000400030 Oi l 006000400020 10001 020000040001 10011 004000400.040 01 I 006000400030 10001 020000040002 10011 004000400050 011 006000400040 10001 020000040003 10011 004000400060 on 006000400050 10001 020000040004 10011 004000500010 on 006000400060 10001 020000040005 10011 004000500020 011 006000500010 10001 020000040006 10011 004000500030 011 006000500020 10001 020000050001 10011 004000500040 011 006000500030 10001 020000050002 10011 004000500050 on 006000500040 10001 020000050003 10011 004000500060 011 006000500050 10001 020000050004 10011 004000600020 011 006000500060 10001 020000050005 10011 004000600030 011 006000600020 10001 020000-35.0006 10011 004000600040 011 006000600030 10001 020000060002 10011 005000100020 10000 006000600040 10001 020000060003 10011 005000100030 10000 010000010002 10010 020000060004 10011 005000100040 10000 010000010003 10010 030000010002 10100 005000100050 10000 010000010004 10010 030000010003 10100 005000100060 10000 010000010005 10010 030000010004 10100 005000200010 10000 010000010006 10010 030000010005 10100 005000200020 10000 010000020001 10010 030000010006 10100 005000200030 10000 010000020002 10010 030000020001 10100 005000200040 10000 010000020003 10010 030000020002 10100 005000200050 10000 010000020004 10010 030000020003 10100 005000200060 10000 010000020005 10010 030000020004 10100 005000300010 10000 010000020006 10010 030000020005 10100 005000300020 10000 010000030001 10010 030000020006 10100 005000300030 10000 010000030002 10010 030000030001 10100 005000300040 10000 010000030003 10010 030000030002 10100 005000300050 10000 010000030004 10010 030000030003 10100 005000300060 10000 010000030005 10010 030000030004 10100 005000400010 10000 010000030006 10010 030000030005 10100 005000400020 10000 010000040001 10010 030000030006 10100 005000400030 10000 010000040002 10010 030000040001 10100 005000400040 10000 010000040003 10010 030000040002 10100 005000400050 10000 010000040004 10010 030000040003 10100 005000400060 10000 010000040005 10010 030000040004 10100 005000500010 10000 010000040006 10010 030000040005 10100 005000500020 10000 010000050001 10010 030000040006 10100 005000500030 10000 010000050002 10010 030000050001 10100 005000500040 10000 010000050003 10010 030000050002 10100 005000500050 10000 010000050004 10010 030000050003 10100 005000500060 10000 010000050005 10010 030000050004 10100 005000600020 10000 010000050006 10010 030000050005 10100 005000600030 10000 010000060002 10010 030000050006 10100 005000600040 10000 010000060003 10010 030000060002 10100 006000100020 10001 010000060004 10010 030000060003 10100 006000100030 10001 020000010002 10011 030000060004 10100 006000100040 10001 020000010003 10011 040000010002 10101 006000100050 10001 020000010004 10011 040000010003 10101 006000100060 10001 020000010005 10011 040000010004 10101 006000200010 10001 020000010006 10011 040000010005 10101 006000200020 10001 020000020001 10011 040000010006 10101 006000200030 10001 020000020002 10011 040000020001 10101 006000200040 10001 020000020003 10011 040000020002 10101 006000200050 10001 020000020004 10011 040000020003 10101

Table 3 (cont.)

Contents X' Contents X' Contents

04000 0020004 10101 0600000 20003 1011 0200002 00002 11001 040000020005 10101 060000020004 1011 020000200003 11001 040000020006 10101 060000020005 1011 020000200004 11001 040000030001 10101 060000020006 1011 020000200005 11001 040000030002 10101 060000030001 1011 0200002000Θ6 11001 040000030003 10101 060000030002 1011 020000300001 11001 040000030004 10101 060000030003 1011 020000300002 11001 040000030005 10101 060000030004 1011 020000300003 11001 040000030006 10101 060000030005 1011 020000300004 11001 040000040001 10101 060000030006 1011 020000300005 11001 040000040002 10101 060000040001 1011 020000300006 11001 040000040003 10101 060000040002 1011 020000400001 11001 040000040004 10101 060000040003 1011 020000400002 11001 040000040005 10101 060000040004 1011 020000400003 11001 040000040006 10101 060000040005 1011 020000400004 11001 040000050001 10101 060000040006 1011 020000400005 11001 040000050002 10101 060000050001 1011 020000400006 11001 040000050003 10101 060000050002 1011 020000500001 11001 040000050004 10101 060000050003 1011 020000500002 11001 040000050005 10101 060000050004 1011 02000050.0003 11001 040000050006 10101 060000050005 1011 020000500004 11001 040000060002 10101 060000050006 1011 020000500005 11001 040000060003 10101 060000060002 1011 020000500006 11001 040000060004 10101 060000060003 1011 020000600002 11001 050000010002 10110 060000060004 1011 020000600003 11001 050000010003 10110 010000100002 11000 020000600004 11001 050000010004 10110 010000100003 11000 030000100002 11010 050000010005 10110 010000100004 11000 030000100003 11010 050000010006 10110 010000100005 11000 030000100004 11010 050000020001 10110 010000100006 11000 030000100005 11010 050000020002 10110 010000200001 11000 030000100006 11010 050000020003 10110 010000200002 11000 030000200001 11010 050000020004 10110 010000200003 11000 030000200002 11010 050000020005 10110 010000200004 11000 030000200003 11010 050000020006 10110 010000200005 11000 030000200004 11010 050000030001 10110 010000200006 11000 030000200005 11010 050000030002 10110 010000300001 11000 030000200006 11010 050000030003 10110 010000300002 11000 030000300001 11010 050000030004 10110 010000300003 11000 030000300002 11010 050000030005 10110 010000300004 11000 030000300003 11010 050000030006 10110 010000300005 11000 030000300004 11010 050000040001 10110 010000300006 11000 030000300005 11010 050000040002 10110 010000400001 11000 030000300006 11010 050000040003 10110 010000400002 11000 030000400001 11010 050000040004 10110 010000400003 11000 030000400002 11010 050000040005 10110 010000400004 11000 030000400003 11010 050000040006 10110 010000400005 11000 030000400004 11010 050000050001 10110 010000400006 11000 030000400005 11010 050000050002 10110 010000500001 11000 030000400006 11010 050000050003 10110 010000500002 11000 030000500001 11010 050000050004 10110 010000500003 11000 030000500002 11010 050000050005 10110 010000500004 11000 030000500003 11010 050000050006 10110 010000500005 11000 030000500004 11010 050000060002 10110 010000500006 11000 030000500005 11010 050000060003 10110 010000600002 11000 030000500006 11010 050000060004 10110 010000600003 11000 030000600002 11010 060000010002 1011 010000600004 11000 030000600003 11010 060000010003 1011 020000100002 11001 030000600004 11010 060000010004 1011 020000100003 11001 040000100002 11011 060000010005 1011 020000100004 11001 040000100003 11011 060000010006 1011 020000100005 11001 040000100004 11011 060000020001 1011 020000100006 11001 040000100005 11011 060000020002 1011 020000200001 11001 040000100006 11011

Table 3 (cont.)

Contents Contents X' Contents X'

10000 4xxxxxx 00010 5000 Olxxxxxx 10111 30002 Oxxxxxx 01100 100005xxxxxx 00011 500002xxxxxx 11000 30003Oxxxxxx 01101 100006xxxxxx 00100 500003xx xxx 11001 30004O xxxxx 01110 200001 xxxxxx 00101 500004xxxxxx 11010 30005Oxxxxxx 01111 200002xxxxxx 00110 500005xxxxxx 11011 30006Oxxxxxx 10000 200003xxxxxx 00111 500006xxxxxx 11100 40001 Oxxxxxx 10001 200004xxxxxx 01000 600002xx xxx 11101 40002Oxxxxxx 10010 200005xxxxxx 01001 600003xx xxx 11110 40003Oxxxxxx 10011 200006xxxxxx 01010 600004xxxxxx 11111 40004Oxxxxxx 10100 300001 xxxxxx 01011 100020xxxxxx ooooo 40005O xxxxx 10101 300002xxxxxx 01100 100030xxxxxx 00001 40006Oxxxxxx 10110 300003xxxxxx 01101 100040xxxxxx 00010 50001Oxxxxxx 10111 30000.xxxxxx oi no 100050xxxxxx 00011 50002Oxxxxxx 11000 300005xxxxxx 01111 100060xxxxxx 00100 50003Oxxxxxx 11001 30000oxxxxxx 10000 2000 lOxxxxxx 00101 50004Oxxxxxx 11010 400001 xxxxxx 10001 200020xxxxxx 00110 50005Oxxxxxx 11011 400002xxxxxx 10010 200030xxxxxx 00111 50006Oxxxxxx 11100 400003xxxxxx 10011 200040xxxxxx 01000 60002Oxxxxxx 11101 400004xxxxxx 10100 200050xxxxxx 01001 60003Oxxxxxx 11110 400005xxxxxx 10101 200060xxxxxx 01010 60004Oxxxxxx 11111 400006xxxxxx 10110 3000 lOxxxxxx 01011

7. Conclusion

While various embodiments of the present invention have been described above, it should be understood that they have been presented by way of example only, and not limitation. Thus, the breadth and scope of the present invention should not be limited by any of the above-described exemplary embodiments, but should be defined only in accordance with the following claims and their equivalents.