Abstract:
The invention relates to a method for cross interleave Reed-Solomon code correction comprising the steps of:  
     inputting of a first C1 codeword into C1 decoder means from a first memory means,  
     outputting of a second C1 codeword into a second memory means from the C1 decoder means,  
     de-interleaving the second C1 codeword to produce a first C2 codeword in the second memory means.

Description:
FIELD OF THE INVENTION  
         [0001]    This invention relates generally to a method and apparatus for performing error correction on digital data using a Reed-Solomon code, and more particularly, to a method and apparatus for cross interleave Reed-Solomon code correction.  
         BACKGROUND OF THE INVENTION  
         [0002]    One error correction code that is typically used in compact audio discs is the so-called CIRC correction code. CIRC is an acronym for Cross Interleave Reed-Solomon Code. In the case of the CIRC correction code, the encoding process of the (28, 24) Reed-Solomon code (C2 code) is performed for twenty-four data symbols, with each symbol consisting of 8 bits. In such typical audio applications each audio sample is 16 bits, which is formed of two symbols of 8 bits each. Thus, each 8-bit symbol is either the upper or lower side of an audio sample of one of the two channels of stereophonic audio data.  
           [0003]    These data symbols are in a first state of arrangement and, next, the data is rearranged from the first arrangement state to a second state of arrangement by an interleaving operation. The encoding process of the (32, 28) Reed-Solomon code (C1 code) is then executed for the twenty-eight symbols that are now in the second arrangement state. When decoding the CIRC correction code, the C1 decoding is performed first, then the de-interleave is performed and, thereafter, the C2 decoding is performed.  
           [0004]    Various methods of decoding the CIRC correction code are already known, and examples of such methods are disclosed in U.S. Pat. No. 4,546,474, U.S. Pat. No. 4,476,562 and U.S. Pat. No. 4,497,058, for example. On the other hand, various methods of decoding the Reed-Solomon code are also known, and examples of such methods are disclosed in U.S. Pat. No. 4,476,562.  
           [0005]    According to the conventional decoding methods of the CIRC correction code, error processing up to and including double-error correction is executed in the C1 decoding in the first stage, and double-error correction is executed in the C2 decoding at the next stage by referring to pointer information that is derived from the C1 decoding.  
           [0006]    One method of decoding the error correction code that has been proposed is the so-called erasure correction method, in which the location of the error symbol is indicated by pointer information and the necessary correction is performed on this error symbol. In the case of the abovementioned C1 and C2 codes, detection and correction up to and including double errors (two symbols) can be respectively performed. However, if the error location is already known, then error correction up to and including quadruple errors (four symbols) can be performed.  
           [0007]    Therefore, in order to raise the error correction capability, it has been preferred to perform the erasure correction method of decoding the error. Furthermore, the erasure correction method has been found to be particularly effective in correcting burst errors. On the other hand, in order to perform the erasure correction operation properly, the error locations must be preliminarily known from the pointer information and, moreover, the reliability of that pointer information must be relatively high.  
           [0008]    According to the conventional coding method of the CIRC correction code, error correction up to and including double errors is executed in the C1 decoder. In such case, because there is a fear of the occurrence of triple errors, which of course could not be corrected, the C1 pointer is sent to the C2 decoder in the next stage, so that error correction is executed in the C2 decoder using the C1 pointer.  
           [0009]    More specifically, in the case of the conventional CIRC correction code, the series of the C1 code (C1 series) is formed by 32 symbols that are alternately included in two adjacent frames (one frame: 32 symbols). The series of the C2 code (C2 series) is formed by 28 symbols that are included in predetermined ones of 108 consecutive frames. Because the interleave length of the C1 series is shorter than that of the C2 series, when a fast-forward reproduction operation, such as queuing or review, is performed, a problem occurs in that some frames are dropped and the continuity of the frames is lost.  
           [0010]    That is, the C1 pointer is used to indicate the presence of errors in the one frame before and after the point of the discontinuity, however, the C1 pointer only indicates the absence of the errors in the other frame. On the other hand, the interleave length of the C2 series has 108 frames, and these 108 frames will include the point of discontinuity. Thus, this is also not the correct C2 series. Upon performing the erasure correction for the incorrect C2 series by use of the foregoing C1 pointer, the error correction will be incorrect.  
           [0011]    To solve this problem of incomplete or incorrect error correction when performing error correction of the CIRC correction code, wherein the maximum error correcting capability is obtained by the erasure correction method, there has been proposed an error correction method wherein the C1 decoding and C2 decoding are executed twice in a specific order (such double-execution of C1 decoding and C2 decoding is disclosed in US-A-4 637 021). That order might be, for example, C1 decoding, followed by C2 decoding, followed by C1 decoding, and followed by C2 decoding. In the first C2 decoding, erasure correction is performed using the C1 pointer obtained by the C1 decoding at the front stage and the erroneous correction that may occur at this erasure correction is prevented by the second C1 decoding and the C2 decoding, which are similar to the conventional method of decoding the CIRC correction code.  
           [0012]    EP-A-0 278 383 shows an error correction method using Reed-Solomon code. When the error correction is performed by using the result of the multiplication of a syndrome and an error location, another syndrome is added to thereby form a new syndrome. By repetitively executing this procedure, the error vector is obtained by a number of arithmetic operations, thereby performing error correction by the so-called erasure correction technique. Then, by calculating another error vector using the first calculated error vector, the number of arithmetic operation times can be reduced.  
           [0013]    [0013]FIG. 1 is a block diagram to illustrate conventional cross interleave Reed-Solomon code (CIRC) decoding of the Reed-Solomon (RS) codes. The main tasks of the CIRC decoder are to perform:  
           [0014]    1. Delaying incoming data by one-symbol;  
           [0015]    2. Decoding the C1 code ( 32 ,  28 ) and correcting erroneous symbols;  
           [0016]    3. De-interleaving;  
           [0017]    4. Decoding the C2 code ( 28 ,  24 ) and correction of erroneous symbols;  
           [0018]    5. Delay of two symbols.  
           [0019]    32 symbols of incoming data form one frame and are supplied to the time delay circuit (delay of one-symbol), in which only the even numbered symbols are delayed by an amount to one frame. 32 symbols output from the time delay circuit are supplied to a C1 decoder, in which the actual decoding of the ( 32 ,  28 ) Reed-Solomon code (C1 code word) is executed. The error correction of up to two errors symbol in a C1 code word is performed in the C1 decoder. When three or more errors are detected in a C1 decoder, the C1 pointer (erasure flag) is set for all symbols in a C1 code word. The data and erasure flags are further processed in the de-interleave circuit (delay lines of unequal length).  
           [0020]    The output of the de-interleave circuit is supplied to a C2 decoder. In the de-interleave circuit the erasure flag of each symbol generated from a C1 decoder is de-interleaved in a manner similar to the de-interleave of the data. The erasure correction of up to four errors is executed in a C2 decoder by use of the C1 erasure flags.  
           [0021]    If correction of up to four error symbols is possible by a C2 decoder then a C1 erasure flags are cleared. If it is not possible then either the C1 erasure flags in a C2 code word are copied or erasure flags to all symbol of a C2 code word are set. The last stage in the CIRC decoding is a two-symbol delay. It is executed by a two-symbol delay circuit. Double usage of the CIRC correction codes leads to an increase of the correcting capability of the error correction system.  
         SUMMARY OF THE INVENTION  
         [0022]    However, it is a common disadvantage of such conventional CIRC decoders of the type as shown in FIG. 1 that they are incapable of double processing of blocks of the CIRC codes.  
           [0023]    The invention provides an improved method for CIRC correction and an improved computer program and Reed-Solomon decoder for CIRC correction.  
           [0024]    The present invention enables single pass and double pass operation of the CIRC decoder.  
           [0025]    One-symbol delay operation, two-symbol delay operation and the double or single decoding of the CIRC correction code are achieved by using four separate memories, and by the special controlling and addressing of each memory.  
           [0026]    The present invention is particularly advantageous in that it enables double processing of blocks of the CIRC codes. 
       
    
    
     BRIEF DESCRIPTION OF THE DRAWINGS  
       [0027]    Exemplary embodiments of the invention are described with reference to the accompanying drawings, which show in:  
         [0028]    [0028]FIG. 1 block diagram of a prior art CIRC decoder;  
         [0029]    [0029]FIG. 2 block diagram illustrating the first pass of a CIRC decoder in accordance with an embodiment of the invention;  
         [0030]    [0030]FIG. 3 block diagram illustrating the second pass of the decoder of FIG. 2;  
         [0031]    [0031]FIG. 4 block diagram illustrating an alternative embodiment of a CIRC decoder;  
         [0032]    [0032]FIG. 5 flow chart for the operation of the CIRC decoder for double and single processing of the CIRC correction code;  
         [0033]    [0033]FIG. 6 scheme illustrating the data flow in the M1 memory;  
         [0034]    [0034]FIG. 7 block diagram illustrating the calculation of addresses in the M1 memory;  
         [0035]    [0035]FIG. 8 illustration of the operation of the memory M2,a;  
         [0036]    [0036]FIG. 9 further illustration of the operation of the memory M2,a;  
         [0037]    [0037]FIG. 10 block diagram illustrating the calculation of addresses in the M2 memory;  
         [0038]    [0038]FIG. 11 characteristic lines illustrating the results of correction of different burst errors. 
     
    
     DETAILED DESCRIPTION OF PREFERRED EMBODIMENTS  
       [0039]    [0039]FIG. 2 shows a block diagram of a CIRC decoder. The decoder has a memory M 1  for storage of C1 code words (CW). Further there is a C1 decoder, a memory M 2 ,a with associated de-interleaver D 1 , a memory M 2 ,b within an associated de-interleaver D 2 , a C2 decoder and a memory M 3 .  
         [0040]    At the beginning of the first pass the C1 CW is stored in the memory M 1 . From there the C1 CW is inputted into the C1 decoder. The C1 decoder outputs another C1 CW into M2,a. The C1 CW which is outputted from the C1 decoder is a copy of the C1 CW of memory M 1 , if the C1 CW of memory M 1  is not correctable.  
         [0041]    In this instance the erasure flags are set for all the symbols within the C1 CW. If the C1 CW of memory M 1  is correctable the C1 CW which is outputted from the C1 decoder is the corrected C1 CW of memory M 1 .  
         [0042]    A de-interleaving operation is performed by means of de-interleaver D 1 . As a result a C2 CW is stored in memory M 2 ,a. The C2 CW of memory M 2 ,a is inputted into the C2 decoder. The C2 decoder writes a C2 CW back to memory M 2 ,a. This C2 CW is either a copy of the original C2 CW in case the original C2 CW is not correctable, or it is the corrected C2 CW. When the C2 CW is not correctable again the erasure flags are set.  
         [0043]    [0043]FIG. 3 is illustrative of the second pass. The C1 CW of M2,a is inputted into the C1 decoder. The C1 decoder outputs a C1 CW into memory M 2 ,b. The C1 CW of memory M 2 ,b is either a copy of the C1 CW of memory M 2 ,a in case the C1 CW of memory M 2 ,a is not correctable, or it is the corrected C1 CW of the memory M 2 ,a. In case the C1 CW of memory M 2 ,a is not correctable the erasure flags are set in the codeword C1 CW which is outputted from C1 decoder and stored in memory M2,b.  
         [0044]    The de-interleaver D2 is started. As a result a codeword C 2  CW is provided in memory M 2 ,b. This is inputted into the C2 decoder. The C2 decoder outputs a codeword C 2  CW into memory M 3 . The C2 CW which is outputted by the C2 decoder is either a copy of the C2 CW of memory M2,b in case the C2 CW of memory M 2 ,b is not correctable, or it is the corrected C2 CW of memory M 2 ,b. In case the C2 CW of memory M 2 ,b is not correctable the erasure flags are set.  
         [0045]    In the following a more detailed embodiment will be described:  
         [0046]    System Components  
         [0047]    [0047]FIG. 4 illustrates the block diagram of the CIRC decoder showing the major components of the CIRC decoder (double and single pass of the CIRC decoder is implemented in this architecture).  
         [0048]    The data stream from the acquisition part is stored into an input logic 1. The input logic is able to store 32 symbols. If sufficient data is available in the buffer of the input logic then a frame is stored into the M1 memory. M1 memory is used for one-symbol delay task of the CIRC decoder. The MUX1 multiplexer  3  is used to multiplex the data either from the M1 memory to the C1 decoder or from the M2,a memory to the C1 decoder depends on the pass of the CIRC decoder.  
         [0049]    The block  4  is the conventional RS decoder. In this block a so-called erasure correction method of RS code is implemented. RS decoder  4  is able to correct four erasures or two errors or any combinations of errors and erasures under the condition: 2*t+E&lt;d, where t-number of errors in a code word, E-number of erasures, d-Hamming distance of the RS code (d=5 for compact audio disc application).  
         [0050]    A flag processor block No.1 (block  5 ) generates the error status of the C1 decoder and defines an output erasure flag. A demultiplexer (DEMUX1)  6  is used for de-multiplexing the C1 decoder output either to the M2,a memory or to a register (buf_reg)  8 . The output of demultiplexer 6 depends on the pass of the CIRC decoder.  
         [0051]    An M2,a memory  7  is used for the de-interleaving and for assembling C1 code words in C2 code words during the first pass of the CIRC decoder. Register 8 is used to memorise the corrected C1 code word. An M2,b memory  9  is used for the de-interleaving and for assembling C1 code words in C2 code words during the second pass of the CIRC decoder. A controller  10  of the CIRC decoder performs the memories management during the following tasks:  
         [0052]    a) One-symbol delay task;  
         [0053]    b) C1 decoder task;  
         [0054]    c) De-interleave and C2 decoder task;  
         [0055]    d) Two-symbol delay task.  
         [0056]    A multiplexer  11  (MUX2) is used to multiplex the data either from the M2,a memory to the C2 decoder or from the M2,b memory to the C2 decoder, depending on the pass of the CIRC decoder. Block  12  is a conventional RS decoder. This decoder has the same performance like the RS decoder  4 .  
         [0057]    The flag processor block No.2 (block  13 ) generates the error status of the C2 decoder and defines an output erasure flag. An M3 memory  14  is used for the two-symbol delay task of the CIRC decoder. An output logic 15 is used to store 24 symbols from the M3 memory.  
         [0058]    Controlling the Data in the CIRC Decoder  
         [0059]    The operation of the CIRC decoder for double and single processing of the CIRC correction code is depicted by the flow diagram of FIG. 5.  
         [0060]    If the nxt_frame signal is active (step  2 ) then a frame is loaded from input logic into the corresponding bank of the M1 memory and the one-symbol delay task is executed (step  3 ).  
         [0061]    During step  4  the data are transferred from the M1 memory (see FIG. 4) through the MUX1 multiplexer to the C1 decoder. At the same time the syndrome is calculated. The decoding process C1 is started after transferring 32 symbols.  
         [0062]    The de-interleaver task (step  5 ) is performed in the M2,a memory. 28 symbols of the C2 code word are transferred from the M2,a memory through MUX2 multiplexer to the C2 decoder. At the same time the syndrome is calculated. The decoding process C2 is started after transferring 28 symbols.  
         [0063]    After start of the C1, C2 processes, the controller waits for an even—C1 process ready (step  6 ). If the C1 process is ready a C1 code word from a C1 decoder is written into the M2,a memory (step  7 ). Then the controller is waiting for an even—C2 process ready (step  7 ).  
         [0064]    The next step in the data flow depends on single or double pass operation of the CIRC decoder (step  9 ). If the CIRC decoder performs single pass and the C2 process is ready then a corrected C2 code word from the C2 decoder is written into the M3 memory. Then the two-symbol delay task is performed into the M3 memory. Afterwards a corresponding data item is loaded into output logic (step  16 ).  
         [0065]    If the CIRC decoder performs double pass and the C2 process is ready then a corrected C2 code word from the C2 decoder is written into the M2,a memory (step  10 ) and the second pass of the CIRC decoder is to be started.  
         [0066]    The C1 code word is transferred from the M2,a memory through MUX1 multiplexer to the C1 decoder. At the same time the syndrome is calculated. The decoding process C1 is started after transferring 32 (step  11 ).  
         [0067]    The de-interleaver task (step  12 ) is performed in the M2,b memory. 28 symbols of the C2 code word are transferred from the M2,b memory through the MUX2 multiplexer to the C2 decoder. At the same time the syndrome is calculated. The decoding process C2 is started after transferring 28 symbols.  
         [0068]    After start of the C1, C2 processes, the controller waits for an even—C1 process ready (step  13 ). If the C1 process is ready then the corrected C1 code word from a C1 decoder is written into buf_reg (step  14 ).  
         [0069]    If the C2 process ready then the corrected C2 code word from a C2 decoder is written into the M3 memory (step  16 ).  
         [0070]    Then the two-symbol delay task is performed into the M3 memory. Thereafter a corresponding data item is loaded into output logic (step  16 ).  
         [0071]    The counters are updated during the step  18 . Following step  18 , the ECC block is ready to process a new frame from the input logic.  
         [0072]    Addressing the Data in the CIRC Decoder  
         [0073]    Addressing and determining locations in different memories and controlling the transferred data bytes at read and write operations, during the one-symbol delay, de-interleaving and two-symbol delay operations, are performed using controller  11 .  
         [0074]    One-Symbol Delay Task  
         [0075]    The M1 memory is used for the one-symbol delay task of the CIRC decoder and comprises three banks with the addresses 0, 1, and 2. Each bank consists of 32 symbols. Each symbol contains 9 bytes. The MS bit is “erasure flag”, (7:0) bits are the data. An erasure bit indicates that a symbol is corrupted. If sufficient data is available in the buffer of the input logic then a frame is stored into the corresponding bank of the M1 memory and the one-symbol delay operation is executed.  
         [0076]    [0076]FIG. 6 illustrates the data flow in the M1 memory. The M1 memory has a circular nature. The data flow in the M1 memory is repeated after 3 next_frame signals, i.e. FIG. 6 a  and FIG. 6 d  are identical.  
         [0077]    [0077]FIG. 7 illustrates the calculation of addresses in the M1 memory. A frame from the input logic is loaded into the corresponding bank of the M1 memory. The bank address is calculated according to the formula:  
         bank_add_m1_w=count_m1_w,  
         [0078]    where count_m1_w counter defines the bank address in the M1 memory during the writing operation.  
         [0079]    32 symbols are loaded into the corresponding symbol ads dresses of a bank. The count_b_m1 counter defines the symbol addresses into a bank. The bank address for the reading the M1 memory depends on the even or odd symbol.  
         [0080]    The bank addresses are calculated according to the formulas:  
         bank_add — 0 —   m   —   r=count   —   m 1 —   r ,//even —   
         bank_add — 1 —   m   —   r =(count —   m 1 —   r+ 2)%3)// odd    
         [0081]    The bank address defines the count_m1_r counter and mod3 circuit. A symbol from the M1 memory is loaded in the TR temporal register (see FIG. 7). Whether a byte is inverted depends on the counter state of the count_b_ml counter (if count_b_m1=12, 13, 14, 15, 28, 29, 30, 31 then to be inverted). An erasure bit is not inverted.  
         [0082]    Delayed symbols are transferred to the syndrome generator of the C1 decoder during the first pass.  
         [0083]    De-interleaver task during first pass of the CIRC decoder  
         [0084]    The M2,a memory is used for the de-interleaving and the assembling of C1 code words in C2 code words and comprises 110 banks. Each bank consists of 32 symbols. Each symbol contains 9 bits. The task of the de-interleaver is de-interleaving C1 code words and the assembling of de-interleaved C1 code words into C2 code words.  
         [0085]    The de-interleaver task is performed in the M2,a memory during the fist pass of the CIRC decoder by corresponding addressing of the M2,a memory. The de-interleaver task is performed after C1 decoding, correction and storage of a C1 corrected code word into the M2,a memory. The M2,a memory has the circular nature.  
         [0086]    [0086]FIGS. 8 and 9 illustrate the M2,a memory. For good understanding one can describe the M2,a memory as elements of a two-dimensional Cartesian coordinate system (FIG. 9). The vertical Y axis positions each contain 32 symbols of data (C1 code word). Each horizontal X axis represents a symbol (9 bits) at each Y axis position. Symbols are numbered sequentially within each Y axis position moving from left to right.  
         [0087]    The symbols comprising C2 code words are lying along a diagonal line in the M2,a memory space. The symbols of a C2 code word in the 1, 2, 3, 4, 54 and 108 decoder cycles are shown in FIG. 9. In successive decoding cycles, the symbols comprising a C2 code word are changed. The initially positioned symbol for writing a C2 code word is located at Y position 0 and at X position 0 (FIG. 8).  
         [0088]    The general formula for calculating the addresses of symbols in the C2 code word is  
         add —   c 2=(count —   rsd+ 4* I )%  mod  110,  
         [0089]    where count_rsd is the counter of decoder cycles (0, . . . , 109), which defines the Y position (bank of memory), and where I has values of from 0 to 27.  
         [0090]    De-interleaver task during second pass of the CIRC decoder  
         [0091]    De-interleaver task during the second pass of the CIRC decoder is performed in the M2,b memory. It is a typical de-interleaver having delay lines of unequal length (see FIG. 1). The de-interleaver task is performed after C1 decoding, correction and storage a C1 corrected code word into the buf_reg register.  
         [0092]    Addressing Data in M2,a Memory During Read+Write Operation  
         [0093]    The C1 and the C2 decoder are operating concurrently on the data in the CIRC decoder. The C1 decoder is operating on the data ahead of the C2 decoder. Output of the C1 decoder (first pass) is initially positioned for writing the C1 code word at Y position  109  (FIG. 8). In each succeeding decoder cycle the output of the C1 decoder is positioned for and writes the corrected C1 code word at the next successively higher valued Y positions (109, 0, 1, . . . 0).  
         [0094]    Input of the C1 decoder (second pass) is initially positioned for writing the C1 code word at Y position 0 (FIG. 8). In each succeeding decoder cycle the input of the C1 decoder is positioned for and reads the C1 code word at the next successively higher valued Y position (0, 1, 2, . . . ). The initially positioned symbol for writing a C2 code word is at Y position 0 and at X position 0 (FIG. 8).  
         [0095]    Data processing of the M2,a memory for the double pass of the CIRC decoder (see FIGS. 5 and 8) includes the following steps:  
         [0096]    1) De-interleaving, read a C2 code word from M2,a to the C2 decoder;  
         [0097]    2) Writing the corrected a C1 code word from the C1 decoder into the M2,a memory;  
         [0098]    3) Writing the corrected C2 code word from the C2 decoder into the M2,a memory;  
         [0099]    4) Read a C1 code from the M2,a memory to the C1 decoder.  
         [0100]    Data processing of the M2,a memory for the single pass of the CIRC decoder (see FIGS. 5 and 8) includes the following steps:  
         [0101]    1) De-interleaving, read a C2 code word from M2,a to the C2 decoder;  
         [0102]    2) Writing the corrected C1 code word from the C1 decoder into the M2,a memory.  
         [0103]    [0103]FIG. 10 (address generator) illustrates the calculation of addresses in the M2,a memory (add_m2) during the corresponding steps. The count_rsd counter defines a decoder cycle and is the basic counter to calculate a different bank address of M2,a memory during the write and read operations. The count_b_m2_c1 counter defines a symbol address in a bank (counter counts up to 31). The count_b_m2 c2 counter defines a symbol address in a bank (counter counts up to 27).  
         [0104]    With each+1 sym_add the count_b_m2_c1 counter and the count_b_m2_c2 counter are counting up.  
         [0105]    The subblock  1  calculates the addresses during the 1st step of double pass of the CIRC decoder.  
         [0106]    The formula for calculation of the bank addresses of the M2,a memory is  
         bank_add=(count —   rsd+ 4*count —   b   —   m 2 —   c 2)%  mod  110,  
         [0107]    where the count_b_m2_c2 counter defines the address of symbol in a bank.  
         [0108]    The symbols are read from the M2,a memory to the C2 decoder according to these addresses. The subblock  2  calculates the addresses during the 2nd step of double pass.  
         [0109]    The formula for calculation of the bank addresses of the M2,a memory is  
         bank_add=(count —   rsd+ 109)%  mod  110,  
         [0110]    where the count_b_m2_c1 counter defines the address of symbol in a bank.  
         [0111]    Symbols of corrected C1 code word are written from the C1 decoder to the M2,a memory according to these addresses.  
         [0112]    The subblock  3  calculates the addresses during the 3rd step of double pass.  
         [0113]    The formula for calculation of the bank addresses of the M2,a memory is  
         bank_add=(count —   rsd+ 4*count —   b   —   m 2 —   c 2)%  mod  110,  
         [0114]    where the count_b_m2_c2 counter defines the address of symbol in a bank. Symbols of corrected C2 code word are written from the C2 decoder to the M2,a memory according to these addresses.  
         [0115]    The subblock 4 calculates the addresses during the 4th step of double pass.  
         [0116]    The formula for calculation of the bank addresses of the M2,a memory is  
         bank_add=(count —   rsd+ 109)%  mod  110,  
         [0117]    where the count_b_m2_c1 counter defines the address of symbols in a bank.  
         [0118]    The symbols are read from the M2,a memory to the C1 decoder according to these addresses.  
         [0119]    De-Interleaver Task During Second Pass of the CIRC Decoder  
         [0120]    For this task to be used the conventional de-interleaver has delay lines of unequal length, see FIG. 1. This de-interleaver has been implemented in the M2,b memory.  
         [0121]    Two Symbol Delay Task  
         [0122]    The M3 memory is used for the two-symbol delay task in the CIRC decoder and comprises three banks with the addresses 0, 1, 2. The bank0 consist of 28 symbols, the bank1 and the bank2 each consist of 24 symbols. Data after C2 decoding and correction are loaded into bank0.  
         [0123]    Two-symbol delay task comprises two steps:  
         [0124]    1) Read the delayed data to the output logic;  
         [0125]    2) Overwriting the M3 memory.  
         [0126]    The following table 1 is used to generate the addresses during the first step:  
                                                                                   count_b   0   1   2   3   4   5   6   7   8   9   10   11               bank   0   0   0   0   2   2   2   2   0   0   0   0       sym_add   0   1   6   7   4   5   6   7   2   3   8   9               count_b   12   13   14   15   16   17   18   19   20   21   22   23               bank   2   2   2   2   0   0   0   0   2   2   2   2       sym_add   12   13   14   15   4   5   10   11   20   21   22   23                  
 
         [0127]    wherein count_b is a byte counter, bank is the bank address in the M3, and sym_add is the symbol address in a bank.  
         [0128]    The following table 2 is used to generate the addresses during the second step (read/write).  
                                                                                   count_b   0   1   2   3   4   5   6   7   8   9   10   11               bank_r   1   1   1   1   0   0   0   0   1   1   1   1       sym_add   4   5   6   7   16   17   22   23   12   13   14   15       bank_w   2   2   2   2   1   1   1   1   2   2   2   2       sym_add   4   5   6   7   4   5   6   7   12   13   14   15               count_b   12   13   14   15   16   17   18   19   20   21   22   23               bank_r   0   0   0   0   1   1   1   1   0   0   0   0       sym_add   18   19   24   25   20   21   22   23   20   21   26   27       bank_w   1   1   1   1   2   2   2   2   1   1   1   1       sym_add   12   13   14   15   20   21   22   23   20   21   22   23                  
 
         [0129]    Results of the Simulation of the CIRC Decoder (Double Pass)  
         [0130]    [0130]FIG. 11 shows the results of correction of different burst errors. Correction results of a conventional CIRC decoder are depicted by solid lines, the results for the inventive CIRC decoder are depicted in dashed lines.  
         [0131]    The following error combinations were input for the correction:  
         [0132]    1) Burst error of 20 C1 code words with 3 errors in each code word (random errors);  
         [0133]    2) Burst error of 20 C1 code words with 4 errors in each code word;  
         [0134]    3) Burst error of 20 C1 code words with 5 errors in each code word;  
         [0135]    4) Burst error of 20 C1 code words with 6 errors in each code word;  
         [0136]    5) Burst error of 30 C1 code words with 3 errors in each code word;  
         [0137]    6) Burst error of 30 C1 code words with 4 errors in each code word;  
         [0138]    7) Burst error of 30 C1 code words with 5 errors in each code word;  
         [0139]    8) Burst error of 30 C1 code words with 6 errors in each code word;  
         [0140]    9) Burst error of 40 C1 code words with 3 errors in each code word;  
         [0141]    10) Burst error of 40 C1 code words with 4 errors in each code word;  
         [0142]    11) Burst error of 40 C1 code words with 5 errors in each code word;  
         [0143]    12) Burst error of 40 C1 code words with 5 errors in each code word.  
         [0144]    Both, the inventive CIRC decoder and a conventional CIRC decoder can correct burst error of 14 completely corrupted C1 code words-. It is apparent that, compared with a conventional CIRC decoder, advantageously the inventive CIRC decoder is able to correct burst errors of 20 C1 code words having 3 or 4 errors in each code word.  
         [0145]    In case each code word having 5 and 6 errors, the decoder is not able to correct the burst error, but the flagged byte rate of the audio data is still significantly lower than with a conventional CIRC decoder.  
         [0146]    Better correcting performance is also obtained with ‘30 C1 code word’ burst error. The inventive CIRC decoder is able to correct burst errors of 30 C1 code words having three errors in each code word, and the flagged byte rate is also lower for higher error numbers per code word.  
         [0147]    It is to be noted that separate controlling and addressing of four separate memories increases significantly the speed of the inventive CIRC decoder.  
         [0148]    Parallel controlling and addressing of the M1, M2,a memories and the M2,a, M2,b memories during read and write operations also significantly increases the speed of the inventive CIRC decoder.  
         [0149]    Memories with smaller sizes are used for de-interleaver implementations as compared with the above-mentioned CIRC decoder.  
         [0150]    The de-interleaver task is performed in the M2,a memory during the first pass.  
         [0151]    The size of the M2,a memory is 110×32×9. The de-interleaver task is performed in the M2,b memory during the second pass. The size of the M2,b memory is 1404 x 9 (conventional de-interleaver).  
         [0152]    A memory with size 256×32×9 is used for both de-interleavers in the above-mentioned CIRC decoder. The two-symbol delay task is performed in the M3 memory. The M3 memory operates as a look up table, which also increases the operational speed of the CIRC decoder.  
         [0153]    In the inventive CIRC decoder it is possible to execute the single pass mode of the CIRC decoder.  
         [0154]    The present decoding method is suitable to use the so-called erasure correction method of the RS code. Correction of large burst errors of C1 corrupted code words is very effective by low input error rate (each C1 code word comprises at most up to 6 random errors).