An error-correcting code (ECC) or forward error correction (FEC) code are codes in which each data signal conforms to specific rules of construction so that errors in the received signal can be detected and corrected. These codes are often used in computer data storage and in data transmission.
A powerful class of error-correcting codes are Reed-Solomon (RS)codes. Reed-Solomon error correction works by oversampling a polynomial constructed from the data. The polynomial is evaluated at multiple points. The results of these evaluations are sent or recorded. Sampling the polynomial more often than is necessary makes the polynomial over-determined. As long as the receiver gets many of the points correctly, the receiver can recover the original polynomial even in the presence of a few erroneous points. Reed-Solomon codes are used in a wide variety of commercial applications. For example, Reed-Solomon codes are used in CDs and DVDs. Reed-Solomon codes are also used in data transmission technologies such as Digital Subscriber Loop (DSL), WIMAX, Digital Video Broadcasting (DVB), and digital television.
An embodiment of the invention may therefore comprise a Reed-Solomon encoder with a variable number of redundant symbols, comprising: a fixed length Reed-Solomon encoder configured to produce a first fixed number of redundant symbols, the fixed length Reed-Solomon encoder being configured with an encoding polynomial that is fixed; a symbol preprocessor that maps each input data symbol to a transformed input data symbol; a symbol postprocessor that maps a second fixed number of redundant symbols output from the fixed length Reed-Solomon encoder to a set of redundant symbols, the second fixed number of redundant symbols being less than the first fixed number of redundant symbols.
Another embodiment of the invention may therefore further comprise a method of generating Reed-Solomon redundant symbols, comprising: receiving a first set of information symbols; processing the first set of information symbols to produce a second set of information symbols; generating a first set of redundant symbols with a Reed-Solomon encoder configured to produce a first number of redundant symbols using a fixed encoding polynomial; and, processing the first set of redundant symbols to produce a second set of redundant symbols with a second number of redundant symbols, wherein the second number of redundant symbols is less than the first number of redundant symbols.
Another embodiment of the invention may therefore further comprise a Reed-Solomon encoder, comprising: a systematic Reed-Solomon encoder configured to produce a first fixed number of redundant symbols, wherein the systematic Reed-Solomon encoder is configured with an encoding polynomial that is fixed; a first Galois Field multiplier receiving a sequence of information symbols and a sequence of inverted transformation coefficients; a second Galois Field multiplier receiving a sequence of redundant symbols from the systematic Reed-Solomon encoder and a sequence of transformation coefficients, wherein the sequence of redundant symbols has fewer than the first fixed number of redundant symbols; a transformation coefficient inverter that receives the sequence of transformation coefficients and produces the sequence of inverted transformation coefficients by performing at least a Galois Field inversion; a transformation coefficient generator that produces the sequence of transformation coefficients by evaluating a transformation polynomial at successive powers of a primitive element of a Galois Field of the encoding polynomial.
In an embodiment, the output redundant symbols produced by Reed-Solomon encoder 100 may be a different number of redundant symbols than fixed length Reed-Solomon encoder 120 is configured to produce. For example, if fixed length Reed-Solomon encoder 120 is configured to produce redundant symbols for an RS(7,3) code, preprocessing by symbol preprocessor 110 and postprocessing by symbol postprocessor 130 allow Reed-Solomon encoder 100 to produce redundant symbols for an RS(5,3) code. Because the number of redundant symbols produced for an RS(7,3) code is 4, and the number of redundant symbols produced for an RS(5,3) code is 2, the output redundant symbols produced by Reed-Solomon encoder 100 is a different number of redundant symbols than fixed length Reed-Solomon encoder 120 is configured to produce. Thus, by turning preprocessing by symbol preprocessor 110 and postprocessing by symbol postprocessor 130 on or off, Reed-Solomon encoder 100 may produce a variable number of redundant symbols.
Symbol preprocessor 110 transforms each input data symbol. This transformation may comprise multiplying each input data symbol by the inverse of a corresponding one of a series of transformation coefficients. This multiplication would typically be a Galois Field multiplication. Likewise, the inverses of the series of transformation coefficients would be produced using Galois Field arithmetic.
To produce the series of transformation coefficients, symbol preprocessor 110 may evaluate a transformation polynomial at successive powers of a primitive element. The primitive element is a primitive element of the Galois Field used by the encoding (or generating) polynomial of fixed length Reed-Solomon encoder 120. Thus, the primitive element (α) is a root of the generating polynomial of fixed length Reed-Solomon encoder 120. The transformation polynomial may be based on a set of coefficients from the polynomial:
where ρ is the difference between the number of redundant symbols produced by fixed length Reed-Solomon encoder 120 and the number of redundant symbols produced by Reed-Solomon encoder 100. The primitive element (α) is a primitive element of the encoding polynomial of the fixed length Reed-Solomon encoder 120.
For example, the coefficients of the polynomial Ψ(x) may be enumerated as follows:
These enumerated coefficients may be used to produce a transformation polynomial (
Symbol preprocessor 110 may then use the transformation polynomial
Symbol postprocessor 130 receives redundant symbols 122 from fixed length Reed-Solomon encoder 120. Symbol postprocessor 130 may multiply at least the redundant symbols 122 produced by fixed length Reed-Solomon encoder 120 as it encoded the transformed input data symbols 112 by a corresponding transformation coefficient. The results of this multiplication are redundant symbols of a Reed-Solomon code that has ρ fewer redundant symbols than fixed length Reed-Solomon encoder 120 is configured to produce.
In an embodiment, symbol postprocessor 130 also receives the series of transformed input data symbols 112 that were sent to fixed length Reed-Solomon encoder 120. Symbol postprocessor 130 may then multiply the transformed input data symbols 112 by a corresponding transformation coefficient. This undoes the transformation done by symbol preprocessor 110 so that the data symbols output by Reed-Solomon encoder 100 are the same as the untransformed input data symbols. In other words, Reed-Solomon encoder 100 is a systemic Reed-Solomon encoder.
A first set of redundant symbols is generated by a fixed Reed-Solomon encoder from the second set of information symbols (206). For example, fixed length Reed-Solomon encoder 120 may generate redundant symbols 122 from transformed input data symbols 112.
A second set of redundant symbols is produced from the first set of redundant symbols (208). For example, symbol postprocessor 130 may produce output redundant symbols from the redundant symbols symbol postprocessor 130 received from fixed length Reed-Solomon encoder 120.
Coefficient inverter 330 produces a series of inverted transformation coefficients. This series of inverted transformation coefficients is the result of a mathematical Galois Field inversion (e.g., y=1/x) of the received transformation coefficients.
The output of coefficient inverter 330 is operatively coupled to a first input of Galois Field multiplier 340. The second input of Galois Field multiplier 340 receives the information symbols that are to be Reed-Solomon encoded by Reed-Solomon encoder 300. Thus, the output of Galois Field multiplier 340 comprises a series of transformed information symbols. The transformation of these input symbols comprises the multiplication of each input information symbol by the inverse of a corresponding transformation coefficient.
The output of Galois Field multiplier 340 is operatively coupled to the input of fixed Reed-Solomon encoder 320. Thus, fixed Reed-Solomon encoder 320 encodes the series of transformed information symbols received from Galois Field multiplier 340. Fixed Reed-Solomon encoder 320 may be implemented by a linear feedback shift register (LFSR) with Galios Field multipliers configured with at least one multiplicand as a constant.
The output of fixed Reed-Solomon encoder 320 is operatively coupled to a second input of Galois Field multiplier 350. Thus, Galois Field multiplier 350 multiplies the series of redundant symbols received from fixed Reed-Solomon encoder 320 by the series of transformation coefficients produced by coefficient generator 310. This produces a series of redundant symbols that comprise an output of Reed-Solomon encoder 300. In an embodiment, the number of redundant symbols produced by Reed-Solomon encoder 300 is less than the number of redundant symbols fixed Reed-Solomon encoder 320 is configured to produce.
To produce the series of transformation coefficients, coefficient generator 310 may evaluate a transformation polynomial at successive powers of a primitive element. The primitive element is a primitive element of the Galois Field used by the encoding (or generating) polynomial of fixed Reed-Solomon encoder 320. Thus, the primitive element (α) is a root of the generating polynomial of fixed Reed-Solomon encoder 320. The transformation polynomial may be based on a set of coefficients from the polynomial:
where ρ is the difference between the number of redundant symbols produced by fixed Reed-Solomon encoder 320 and the number of redundant symbols produced by Reed-Solomon encoder 300. The primitive element (α) is a primitive element of the encoding polynomial of the fixed Reed-Solomon encoder 320.
The coefficients of polynomial Ψ(x) may be enumerated as follows:
These enumerated coefficients may be used to produce a transformation polynomial (
Coefficient generator 310 may then use the transformation polynomial
Reed-Solomon encoder 100, Reed-Solomon encoder 300, and the method illustrated in
The number k=n−2t defines the number of information symbols in codeword. These information symbols are denoted d0, . . . , dk−1 and comprise data to be transmitted. Hence, the number of redundant (a.k.a., parity symbols) are equal to 2t. An RS-encoder is a device that transforms information message d=(d0, . . . , dk−1) into codeword c=(c0, c1, . . . , cn−1) of RS-code.
A method for transforming an information message to codeword is as follows. The process starts with a generator polynomial (g(x)) equal to:
Let d(x)=d0+ . . . +dk−1xk−1 and c(x)=c0+ . . . +cn−1xn−1. The encoder performs the transformation d(x)|→xn−kd(x)+p(x), where p(x)=xn−kd(x) mod g(x). In an embodiment, this encoder may be fixed length Reed-Solomon encoder 120 or fixed Reed-Solomon encoder 320. Because cn−k=d0, . . . , cn−1=dk−1 and the encoder is said to be in systematic form.
Consider a new number of correctable errors t′, where 0<t′<t. Also, fix some positions j1, . . . , jρε{0, 1 . . . , n−1}, where ρ=2(t−t′). Map from RS(n,n−2t,t)-code to the set of codewords c′=(c′0, . . . , c′n−1) of RS(n,n−2t′,t′)-code such that c′j
To construct the mapping, a discrete Fourier transform Fn: GF(q)n→GF(q)n maps each vector v=(v0, . . . , vn−1) over GF(q) into a vector V=(V0, . . . , Vn−1) over GF(q) as follows:
where α is a primitive element of GF(q) (and thus is also a root of g(x)).
To create the mapping the following polynomial is used:
Let Ψ=(Ψ0, . . . , Ψρ, 0, . . . , 0)εGF(q)n be the vector of the coefficients of the Ψ(x) polynomial. Define ψ=(ψ0, . . . , ψn−1)=Fn−1(Ψ), where Fn−1 is an inverse discrete Fourier transform. It is known that ψi=Ψ(α−i) for i=0, . . . , n−1. Hence ψj
Define the map on codewords as follows: c|→c′=cψ. Vector C′=Fn(c′)=C*Ψ, where C=Fn(c). Because c is a codeword, it follows that Ci
and c′(αi
The conditions c′(αi
A systematic RS-encoder, denoted E, has the capability to correct t errors. This RS-encoder transforms a message
into codeword (c0, . . . , cn−1). For (c0, . . . , cn−1), where k=n−2t, the symbols c2t=d0, . . . , cn−1=dk−1 are information symbols. The symbols c0, . . . , c2t−1 are redundant (also known as parity) symbols.
Reed-Solomon encoding with an error correction capability of t′ errors 0<t′<t, (denoted E′) may be accomplished using a fixed length encoder such as fixed length Reed-Solomon encoder 120 or fixed Reed-Solomon encoder 320. Reed-Solomon encoder 100 and Reed-Solomon encoder 300 are examples of an E′ encoder. A shortened version of E that performs the transformation
is used. Let j1=0, . . . , jρ=ρ−1. A corresponding Ψ(x)=Ψ0+ . . . +Ψρxρ is calculated. Transformation coefficients (αi) are defined for i=0, . . . , n−1 as:
ai=αρiψi=αρiΨ(α−i)=Ψρ+ . . . Ψ0αρi
The polynomial
As an alternative, each codeword symbol ci, for i=ρ, . . . , n−1, from the output of E may be multiplied by a corresponding ai. This produces the transformation ci|→aici. Thus, the information symbols are returned to their untransformed values. Thus E′ is a systematic encoder because ci=diai−1 ai=di for i=2t, . . . , n−1.
The implementation of the E′ encoder may be pipelined. For example, fixed Reed-Solomon encoder 320 may have a delay of one clock. Coefficient inverter 330 may have a delay of s clocks. Coefficient generator 310 may take 2 clocks to produce the first coefficient. Thus, fixed Reed-Solomon encoder 320 should wait s+2 clocks after coefficient generator 310 starts before starting to encode. Likewise, the first information symbols should not be input to Galois Field multiplier 340 until s+2 clocks after coefficient generator 310 starts. The coefficients generated by coefficient generator 310 should be delayed by s+1 clocks before being input to Galois Field multiplier 350.
These pipeline delays and timings ensure that the corresponding information symbol is multiplied by the corresponding inverse of a transformation coefficient before being input to fixed Reed-Solomon encoder 320. These pipeline delays and timings also ensure that the corresponding information or redundant symbol output from fixed Reed-Solomon encoder 320 is multiplied by the transformation coefficient.
The foregoing description of the invention has been presented for purposes of illustration and description. It is not intended to be exhaustive or to limit the invention to the precise form disclosed, and other modifications and variations may be possible in light of the above teachings. The embodiment was chosen and described in order to best explain the principles of the invention and its practical application to thereby enable others skilled in the art to best utilize the invention in various embodiments and various modifications as are suited to the particular use contemplated. It is intended that the appended claims be construed to include other alternative embodiments of the invention except insofar as limited by the prior art.
Number | Name | Date | Kind |
---|---|---|---|
5444719 | Cox et al. | Aug 1995 | A |
5757826 | Fredrickson | May 1998 | A |
5946328 | Cox et al. | Aug 1999 | A |
6047395 | Zook | Apr 2000 | A |
6408339 | Wirkestrand | Jun 2002 | B1 |
6978415 | Weng | Dec 2005 | B1 |
7082564 | Fredrickson et al. | Jul 2006 | B2 |
7516394 | Ashley et al. | Apr 2009 | B2 |
7581155 | Lee et al. | Aug 2009 | B2 |
Number | Date | Country | |
---|---|---|---|
20100070831 A1 | Mar 2010 | US |