Patent Publication Number: US-7218256-B2

Title: DC-free code having limited error propagation and limited complexity

Description:
CROSS-REFERENCE TO RELATED APPLICATION 
     This Application is a divisional and claims the benefit of U.S. application Ser. No. 10/715,077, filed on Nov. 17, 2003 and issued as U.S. Pat. No. 7,084,789. 
    
    
     FIELD OF THE INVENTION 
     The present invention relates to communicating digital data through a communication channel. In particular, the present invention relates to encoding and decoding techniques for DC-free codes. 
     BACKGROUND OF THE INVENTION 
     In the field of digital communications, digital information is typically prepared for transmission through a channel by encoding it. The encoded data is then used to modulate a transmission to the channel. A transmission received from the channel is then demodulated and decoded to recover the original information. 
     Encoding the digital data serves to improve communication performance so that the transmitted signals are less corrupted by noise, fading, or other interference associated with the channel. The term “channel” can include media such as transmission lines, wireless communication and information storage devices such as magnetic disc drives. In the case of information storage devices, the signal is stored in the channel for a period of time before it is accessed or received. Encoding can reduce the probability of noise being introduced into a recovered digital signal when the encoding is adapted to the known characteristics of the data and its interaction with known noise characteristics of the channel. 
     In typical encoding arrangements, data words of m data bits are encoded into larger code words of n code bits, and the ratio m/n is known as the code rate of the encoder. In certain applications, such as in perpendicular recording within data storage systems, it is desirable for encoded channel sequences to have a spectral null at zero frequency. Such sequences are said to be DC-free or to have a DC content that is limited. Given a sequence of binary digits, if each binary digit “1” is translated into a plus one (+1) and each binary digit “0” is translated into a minus one (−1), the sequence will be DC-free if the running digital sum of the bipolar sequence is bounded. The running digital sum is the sum of all values (+1 and −1) in the bipolar sequence. When the variation of the running digital sum is kept to a small value, the sequence is known to have a tight bound. A tighter bound can improve the performance of the channel. 
     There is a need for DC-free codes that are amenable to practical implementations. It has been found that the mapping of binary input strings into code words having a bounded running digital sum tends to be complex. This complexity can result in considerable engineering effort being consumed to define the encoding and decoding rules and can require complex software or hardware to implement. A DC-free code is desired that has limited complexity and provides limited error propagation properties. 
     Various embodiments of the present invention address these problems, and offer other advantages over the prior art. 
     SUMMARY OF THE INVENTION 
     An embodiment of the present invention is directed to a method, which includes receiving a sequence of code words. Each code word includes an encoded data word and an indicator bit. The encoded data word corresponds to an unencoded data word. The indicator bit has a first binary value if a sign of a running digital sum (RDS) of the unencoded data word is different than a sign of a current RDS of the sequence of code words, and has a second, different binary value if the sign of the RDS of the unencoded data word is the same as the sign of the current RDS of the sequence of code words. The sequence of code words is decoded into a sequence of data words according to a code in which the encoded data word is extracted unchanged into the unencoded data word if the indicator bit has the first binary value and is extracted into the unencoded data word and then complemented if the indicator bit has the second, opposite binary value. 
     Another embodiment of the present invention is directed to a decoder, which includes an input for receiving a sequence of code words. Each code word includes an encoded data word and an indicator bit. The encoded data word corresponds to an unencoded data word. The indicator bit has a first binary value if a sign of a running digital sum (RDS) of the unencoded data word is different than a sign of a current RDS of the sequence of code words, and has a second, different binary value if the sign of the RDS of the unencoded data word is the same as the sign of the current RDS of the sequence of code words. A decoding circuit decodes the sequence of code words into a sequence of data words according to a code in which the encoded data word is extracted unchanged into the unencoded data word if the indicator bit has the first binary value and is extracted into the unencoded data word and then complemented if the indicator bit has the second, opposite binary value. 
     Another embodiment of the present invention is directed to a method, which includes decoding a sequence of successive code words, each comprising an encoded data word and an indicator bit, into a sequence of successive data words. The encoded data word is decoded unchanged into an unencoded user data word in the sequence of data words based solely on whether the indicator bit has a first binary value and is decoded into the unencoded user data word by complementing the encoded data word based solely on whether the indicator bit has a second, opposite binary value. 
     Other features and benefits that characterize embodiments of the present invention will be apparent upon reading the following detailed description and review of the associated drawings. 
    
    
     
       BRIEF DESCRIPTION OF THE DRAWINGS 
         FIG. 1  is an isometric view of a disc drive in which one embodiment of the present invention is useful. 
         FIG. 2  is a diagram illustrating an encoding algorithm according to one embodiment of the present invention. 
         FIG. 3  is a diagram illustrating a decoding algorithm according to one embodiment of the present invention. 
         FIG. 4  is a flow chart illustrating an encoding algorithm according to one embodiment of the present invention. 
         FIG. 5  is a flow chart illustrating a decoding algorithm according to one embodiment of the present invention. 
     
    
    
     DETAILED DESCRIPTION OF ILLUSTRATIVE EMBODIMENTS 
     Embodiments of the present invention relate to a DC-free code for use in encoding and decoding digital data for transmission through communication channels with limited complexity and limited error propagation. The present invention can be used in any communication channel in which DC-free codes are useful, such as in data storage systems. 
       FIG. 1  is a perspective view of a magnetic disc drive  100 , which forms apart of a communications channel in which one embodiment of the present invention is useful. Disc drive  100  communicates with a host system  101  and includes a housing with a base  102  and a top cover (not shown). Disc drive  100  further includes a disc pack  106 , which is mounted on a spindle motor (not shown), by a disc clamp  108 . Disc pack  106  includes a plurality of individual discs, which are mounted for co-rotation about central axis  109 . Each disc surface has an associated head, which is mounted to disc drive  100  for communication with the disc surface. In the example shown in  FIG. 1 , heads  110  are supported by suspensions  112  which are in turn attached to track accessing arms  114  of an actuator  116 . The actuator shown in  FIG. 1  is of the type known as a rotary moving coil actuator and includes a voice coil motor (VCM), shown generally at  118 . Voice coil motor  118  rotates actuator  116  with its attached heads  110  about a pivot shaft  120  to position heads  110  over a desired data track along an arcuate patch  122  between a disc inner diameter  124  and a disc outer diameter  126 . Voice coil motor  118  operates under control of internal (or external) circuitry  128 . 
     The heads  110  and rotating disc pack  106  define a communications channel that can receive digital data and reproduce the digital data at a later time. In one embodiment, an encoder within internal circuitry  128  receives unconstrained user data, typically from a digital computer, and then encodes the data into successive code words according to a selected code. The encoded data is then used to modulate a write current provided to a write transducer in the head  110 . The write transducer causes the modulated code words to be encoded on a magnetic layer in disc pack  106 . At a later time, a read transducer in the head  110  recovers the successive modulated code words from the magnetic layer as a serial modulated read signal. Read circuitry within internal circuitry  128  demodulates the read signal into successive parallel code words. The demodulated code words are then decoded by a decoder within circuitry  128 , which recovers the original user data for use by host system  101 . 
     The read and write transducers in head  110  can be configured for longitudinal or perpendicular recording, for example. In longitudinal recording, a run length limited (RLL) code is typically used to encode the data. However, in perpendicular recording, it is desirable to use a DC-free code or a code in which the DC content is limited. Traditionally, the mapping for DC-free codes has been complex. Thus, the problem of designing DC-free codes that are amenable to implementation is of practical significance. 
     1. The Encoding Algorithm 
     In one embodiment of the present invention, the encoding algorithm parses a given binary sequence of uncoded user data  b  into smaller length sub-blocks of length n, where n is an arbitrary but fixed integer. For example, if  b =b 1 b 2 b 3  . . . is the binary string of user data, then the first n-bit block is  b   n1 =b 1 b 2 b 3  . . . b n , the second n-bit block is  b   n2 =b n+1 b n+2  . . . b 2n , the third n-bit block is  b   n3 =b 2n+1 b 2n+2  . . . . b 3n , etc. The encoding algorithm then encodes the n-bit sub-blocks into (n+1)-bit code words and concatenates the (n+1)-bit code words to form an encoded string  c  for the uncoded binary sequence  b  such that the absolute running digital sum (RDS) of  c ≦(n+1). Since the encoding algorithm encodes n-bit sub-blocks into (n+1)-bit code words, the encoder has a code rate of n/(n+1) for a given positive integer n. 
     The RDS of a binary string can be defined as follows. Given a bit string  a =a 1 a 2  . . . a n  of length n, a corresponding bipolar string  A =A 1 A 2  . . . A n  can be obtained by replacing all “0&#39;s” in  b  by “−1”. The RDS of A is the algebraic sum of A 1 A 2  . . . A n . For example, if  a =1001001, then  A =1−1−1 1−1−1 1, and the RDS of  A =−1. If a given binary string a 1 a 2  . . . a n  is to be DC-free, it is necessary for its RDS to be bounded. A bounded RDS ensures that the bit string  a  is DC-free. 
       FIG. 2  is a diagram illustrating pseudocode for an encoding algorithm  200  according to one embodiment of the present invention. Let R 1 , R 2 , R 3 , etc. be the RDS values for  b   n1 ,  b   n2 ,  b   n3 , etc., repsectively. R i  is the RDS value for the ith n-bit block  b   ni . Let R be the current RDS of the encoded bit stream  c . 
     At step  201 , R is initialized to 0. At step  202 , a loop begins, which is performed once for each n-bit block,  b   n1 , b n2  . . . b nN , where b nN  is the final n-bit block in the user data stream. The loop includes steps  203 – 205 . 
     At step  203 , if the current RDS of  c  has the same sign as the RDS of the current n-bit block  b   ni  (e.g., if (R&gt;0 and R i  is ≧0) or (R&lt;0 and R i  is ≦0)), then the encoding algorithm complements the bits in  b   ni  and appends a binary “1” to the complemented bits to generate a corresponding code word  c   i . Equivalently, a binary “0” can be appended to the bits in block  b   ni  and then all bits are complemented to form the code word  c   i . In one embodiment, the binary “1” is appended to the end of the code word  c   i . However, this bit can be appended at any bit location within code word  c   i . 
     However if the current RDS of  c  has a different sign as the RDS of the current n-bit block  b   ni  (e.g., if (R≦0 and R i &gt;0) or if (R≧0 and R i &lt;0)), a “0” is appended to  b   ni  to generate the code word  c   i . In this case, the bits in  b   ni  are unchanged. The values of R=0 and R i =0 can be regarded as negative RDS values (as in the embodiment shown here) or as a positive value in alternative embodiments of the present invention. 
     At step  204 , the algorithm computes the running digital sum r i  of code word  c   i . At step  205 , the encoding algorithm updates the sign of R by computing R=R+r i . 
     At step  206 , the algorithm concatenates all code words  c   i , for i=1, 2, . . . N to form the code word sequence  c  for the bit string  b . 
     The encoding algorithm shown in  FIG. 2  results in the absolute RDS of the code word sequence  c  being bounded by (n+1), which guarantees the DC-free property for the coded sequence. This property can be shown as follows. For m≧1, let r m  denote the RDS of code word  c   m . Then, 
                     Let   ⁢           ⁢       r   acc     ⁡     (   i   )         =       ∑     m   =   1     i     ⁢     r   n               Eq   .           ⁢   1               
where r acc (i) is the accumulated RDS for the first i coded blocks  c   i  of (n+1) bits each. For each n-bit data word  w , the encoder assigns a pair of (n+1)-bit code words: a unique (n+1)-bit code word  cw  formed by appending a “0” to and its complement  cw ′. Since the number of (n+1)-bit code words (2 n+1 ) is twice the number of n-bit words (2 n ), there are enough (n+1)-bit code words to make such an assignment possible. Also, since any two n-bit words differ in at least one bit, their corresponding (n+1)-bit code words also differ in at least one bit, which ensures that the complements of these code words are also different. The RDS(cw)=−RDS(cw′). For any i≧1, the specific code word that is choosen for the (i+1) th  n-bit word  w  in encoding the bit stream  b  depends on the value of r acc (i). The algorithm chooses  cw  or  cw ′ for  w  based on which choice results in smaller value for |r acc (i+1)|. This construction ensures that the RDS of  c  is bounded.
 
     If the same n-bit word repeats itself in  b , it results in an unbounded RDS for  b . However, the |RDS| of the code word sequence  c  for this data pattern does not exceed (n+1) because of the way the encoding algorithm works. Similarly, if an n-bit pattern and its complement keep occurring in tandem in the incoming data stream, the RDS of the encoded sequence keeps increasing until it reaches n in one direction (positive or negative), then crosses zero, and changes direction. Thus, the absolute value of RDS is always bounded by (n+1), which guarantees the DC-free property for the coded sequence. 
     2. The Decoding Algorithm 
       FIG. 3  is a diagram illustrating pseudocode for the decoding algorithm according to one embodiment of the present invention. Since the encoding algorithm simply appends a “0” to the n-bit data word  b   ni  or appends a “1” to the complemented data word, the decoding algorithm can decode the code word  c   i  by simply examining the (n+1) st  indicator bit. 
     Decoding algorithm  300  includes steps  301 – 303 . At step  301 , the decoding algorithm begins a loop for decoding each successive (n+1)-bit code word  c   i , for i=1, 2 . . . N. Again, N is an integer variable representing the number of code words  c   i  in the encoded sequence  c . At step  302 , for each code word  c   i , if the (n+1) st  bit (i.e., the indicator bit) of  c   i =0, then the decoding algorithm copies verbatim the first n bits of  c   i  to form  b   ni . If not, the first n bits of  c   i  are complemented to form  b   ni , at step  303 . 
     The decoding algorithm shown in  FIG. 3  assumes that the appended indicator bit is located at the end of each (n+1)-bit code word  c   i . However, the decoding algorithm can be easily modified to look at any bit position to which the indicator bit was appended by the encoding algorithm. 
     3. Addition of Parity Bits and k-Constraint 
     In an alternative embodiment, one or more parity bits can be added to each code word. The addition of one parity bit, in the worst case, could increase the absolute value of the running digital sum of the encoded sequence at the end of the code word to (n+2). In a run-length-limited (RLL) code, the number of consecutive zeros is constrained to a value no greater than a maximum number “k”. With the above encoding algorithm, the worst-case k-constraint will be no more than (n+2). An encoded sequence having the maximum number of consecutive zeros equal to the worst-case k-constraint could occur if the incoming user data stream includes a repetition of n-bit word and its complement in tandem. 
     4. Example of Encoding and Decoding with a Rate 3/4 DC-Free Code 
     Table 1 illustrates the mapping of n-bit user data words into (n+1)-bit code words, where n=3, using the above algorithm. 
     
       
         
           
               
               
               
             
               
                   
                 TABLE 1 
               
               
                   
                   
               
               
                   
                   
                 THE TWO POSSIBLE 4- 
               
               
                   
                   
                 BIT CHOICES FOR 
               
               
                   
                   
                 ENCODING THE THREE- 
               
               
                   
                 3-BIT DATA WORD 
                 BIT DATA WORD 
               
               
                   
                   
               
             
            
               
                   
                 000 
                 0000 
               
               
                   
                   
                 1111 
               
               
                   
                 001 
                 0010 
               
               
                   
                   
                 1101 
               
               
                   
                 010 
                 0100 
               
               
                   
                   
                 1011 
               
               
                   
                 011 
                 0110 
               
               
                   
                   
                 1001 
               
               
                   
                 100 
                 1000 
               
               
                   
                   
                 0111 
               
               
                   
                 101 
                 1010 
               
               
                   
                   
                 0101 
               
               
                   
                 110 
                 1100 
               
               
                   
                   
                 0011 
               
               
                   
                 111 
                 1110 
               
               
                   
                   
                 0001 
               
               
                   
                   
               
            
           
         
       
     
     Consider a string  b =010 010 111 000 001 101 011 001. Table 2 summarizes the encoding procedure for  b , given the mapping in Table 1. 
     
       
         
           
               
               
               
               
               
               
             
               
                 TABLE 2 
               
               
                   
               
               
                   
                   
                   
                   
                   
                 ACCUMULATED RDS 
               
               
                   
                   
                 ACCUMULATED RDS 
                   
                   
                 FOR THE CODE 
               
               
                   
                   
                 R FOR THE CODE 
                 CODEWORD  c   I   
                   
                 WORD STREAM 
               
               
                   
                 RDS OF THE 
                 WORD STREAM 
                 FOR THE 
                   
                 AFTER ENCODING 
               
               
                 PRESENT 3- 
                 PRESENT 
                 BEFORE ENCODING 
                 PRESENT 3- 
                   
                 THE PRESENT 3- 
               
               
                 BIT BLOCK 
                 THREE-BIT 
                 THE PRESENT 3- 
                 BIT BLOCK 
                 RDS r i  OF 
                 BIT BLOCK (R + 
               
               
                 IN  b   
                 BLOCK IN  b   
                 BIT BLOCK 
                 IN  b   
                 INDIVIDUAL c i . 
                 r i ) 
               
               
                   
               
             
            
               
                   
               
            
           
           
               
               
               
               
               
               
            
               
                 010 
                 −1 
                 0 
                 0100 
                 −2 
                 −2 
               
               
                 010 
                 −1 
                 −2 
                 1011 
                 2 
                 0 
               
               
                 111 
                 3 
                 0 
                 1110 
                 2 
                 2 
               
               
                 000 
                 −3 
                 2 
                 0000 
                 −4 
                 −2 
               
               
                 001 
                 −1 
                 −2 
                 1101 
                 2 
                 0 
               
               
                 101 
                 1 
                 0 
                 1010 
                 0 
                 0 
               
               
                 011 
                 1 
                 0 
                 0110 
                 0 
                 0 
               
               
                 001 
                 −1 
                 0 
                 1101 
                 2 
                 2 
               
               
                   
               
            
           
         
       
     
     The encoding algorithm obtains  c  by joining together all  c   i . Thus  c =01001011111000001101101001101101. When encoding each three-bit data word in  b  the encoding algorithm attempts to minimize the accumulated RDS for the code ream constructed up to that point. 
     When decoding the code word sequence  c , the decoding algorithm parses the code word sequence into four-bit code words and examines the 4 th  bit in each code word. If the 4 th  bit is a “0”, the first three bits of the code word are extracted as the decoded three-bit user data word for that code word. If the 4 th  bit is a “1”, the first 3 bits in the code word are complemented to generate the decoded 3-bit user data word for that code word. The decoding algorithm joins together all the decoded 3-bit user data words to generate the decoded user data string  b . Table 3 summarizes the operation of the decoding algorithm on the code word string  c . 
     
       
         
           
               
               
               
             
               
                   
                 TABLE 3 
               
               
                   
                   
               
               
                   
                 4-BIT BLOCKS IN  c   
                 DECODED 3-BIT DATA WORD 
               
               
                   
                   
               
             
            
               
                   
                 0100 
                 010 
               
               
                   
                 1011 
                 010 
               
               
                   
                 1110 
                 111 
               
               
                   
                 0000 
                 000 
               
               
                   
                 1101 
                 001 
               
               
                   
                 1010 
                 101 
               
               
                   
                 0110 
                 011 
               
               
                   
                 1101 
                 001 
               
               
                   
                   
               
            
           
         
       
     
     By joining together all the decoded 3-bit blocks in the second column of Table 3, the decoding algorithm obtains the decoded user data string  b  as 010 010 111 000 001 101 011 001, which is the same as the uncoded bit string from which the code word string  c  was generated in Table 2. 
     5. Flow Chart of the Encoder 
       FIG. 4  is a flowchart illustrating the steps performed by the encoding algorithm according to one embodiment of the present invention. At step  401 , the current RDS variable “R” for the encoded sequence c is initialized to zero. At step  402 , the encoder gets the next n-bit data word  w  in the uncoded user data bit string  b . The encoder then appends a “0” to  w  to form  cw , at step  403 . At step  404 , the algorithm computes the sign of RDS “r” of  cw . 
     At step  405 , if R and r have the same sign, the algorithm complements the bits in the code word  cw  and updates R to equal R−r. This is equivalent to comparing the sign of  b   ni  with the sign of R in step  203  in  FIG. 2 . In either case, the value of R is moved toward zero. If R and r have opposite signs, the algorithm does not complement the bits in  cw  and updates R to equal R+r. The value of  cw  becomes the code word for  w  at step  406 . The code word  cw  is then appended to the code bit string formed so far to continue forming code word sequence  c  at step  407 . 
     At step  408 , if there are any more n-bit data words left in the user data bit string  b , the algorithm returns to step  402  to encode the next data word. If not, the algorithm terminates at step  409 . 
     6. Flow Chart of the Decoder 
       FIG. 5  is a flowchart illustrating the steps performed by decoding algorithm  500  according to one embodiment of the present invention. The decoding algorithm begins at step  501 . At step  502 , the decoding algorithm gets the next (n+1)-bit code word  cw  in code word sequence c. If the (n+1) st  bit in code word  cw  is “0”, at step  503 , the decoding algorithm extracts the first n bits in  cw  to form the decoded user data word  dw , at step  504 . If not, the decoding algorithm complements the first n bits in  cw  to form the decoded user data word  dw , at step  505 . At step  506 , the decoding algorithm appends the decoded user data word  dw  to the decoded bit string formed so far to continue forming the decoded bit stream  b , at step  506 . At step  507 , if there are any more (n+1)-bit code words left in the code word sequence  c , the decoding algorithm returns to step  502  to decode another code word  cw . If not, the decoding algorithm terminates at step  508 . 
     As long as the indicator bit (e.g., the appended (n+1) th  bit in the generated code word) is not corrupted, a single bit error in the code word results in a single bit error in data word. In general, “m” erroneous bits in the code word result in exactly “m” erroneous decoded bits. This corresponds to the least possible error propagation any decoder can expect to achieve. This benefit is achieved because the encoder mapping rules are simply a verbatim copying of the n-bit data word or its complement. The simpler the encoder&#39;s mapping rules, the lower the decoder&#39;s error propagation property. The simplest mapping rule that can be achieved for an encoder is to copy the data word itself as the code word. Another practical advantage of the encoding algorithm discussed above is its ease of implementation. The encoder and decoder mapping rules are not ad hoc as in other encoder-decoder mapping rules. Considerable engineering effort is often spent in coming up with the encoding-decoding rules. As mentioned above, the encoder mapping rule discussed above is simply the appending of one bit to the data word, and the decoder mapping rule is simply the copying or complementing of the first n bits of the code words. Thus, implementation of the code rules is relatively straightforward. 
     It is to be understood that even though numerous characteristics and advantages of various embodiments of the invention have been set forth in the foregoing description, together with details of the structure and function of various embodiments of the invention, this disclosure is illustrative only, and changes may be made in detail, especially in matters of structure and arrangement of parts within the principles of the present invention to the full extent indicated by the broad general meaning of the terms in which the appended claims are expressed. For example, the particular elements may vary depending on the particular application for the communication system while maintaining substantially the same functionality without departing from the scope and spirit of the present invention. In addition, although the embodiments described herein are directed to a coding system for a disc drive, it will be appreciated by those skilled in the art that the teachings of the present invention can be applied to any communication channel in which DC-free codes are useful, such as satellite communications and telecommunications, without departing from the scope and spirit of the present invention. Also, a digital “word” or “block” can have any number of bits in alternative embodiments of the present invention. In addition, computing the RDS of a given data word is considered equivalent to computing the RDS of the corresponding code word when the comparison is made to the running RDS of the code word sequence the RDS of the code word is a function of the RDS of the data word and a similar effect is achieved.