Abstract:
A method and apparatus for reducing the computational load of a dual-rate encoding system having a multi-pulse maximum likelihood quantization process configured to transmit at a first transmission rate and to search subframes of excitation signals according to a reduced number of gain scale factors; and an algebraic code-excited linear prediction block configured to perform a first correlation threshold test for entry into an embedded signal processing loop and a second correlation threshold test for entry into a previous signal processing loop in which the embedded signal processing loop is embedded to reduce the number of times the previous signal processing loop and the embedded signal processing loop are entered, thereby reducing the computational load of the system.

Description:
The present invention relates to low complexity encoders, and more particularly, to low complexity encoders for implementing recommendation G.723.1 of the International Telecommunication Union (ITU-T). 
     BACKGROUND OF THE INVENTION 
     1. Field of the Invention 
     Lower complexity compressors/decompressors (codecs) may be preferred for some computationally intensive applications. If the complexity of the codec is the bottleneck in a system, complexity reduction is desirable and can result in a significant reduction in millions of instructions per second (MIPS) required to be executed by the encoder. 
     2. Description of the Related Art 
     SUMMARY OF THE INVENTION 
     The ITU-T recommendation G.723.1, incorporated herein by reference, relates to dual rate speech coding for multimedia communications transmitting at 5.3 and 6.3 Kbps. The recommendation prescribes certain methods of implementation for each of these transmission rates. The 6.3 Kbps codec has better quality and uses Multi-Phase Maximum Likelihood Quantization (MP-MLQ) for fixed codebook excitation. The 5.3 Kbps codec uses Algebraic Code-Excited Linear Prediction (ACELP). A functional module of the codec which executes these two encoding methods bears almost half of the computational load of the entire G.723.1speech coder. If the methods executed by the functional module are made to have a decreased computational load, the G.723.1 speech coder will have an increased efficiency. 
     The present invention provides a method of reducing the computational load of a dual rate encoding system, the encoding system being configured to transmit at a first transmission rate using a Multi-Pulse Maximum Likelihood Quantization (MP-MLQ) process or at a second transmission rate using an Algebraic Code-Excited Linear Prediction (ACELP) process, wherein the MP-MLQ process normally searches subframes of excitation signals according to a nominal number of gain scale factors in the execution of quantization steps for encoding the speech signals and the ACELP process normally imposes a first correlation threshold test for entry into an embedded signal processing loop, the method including the step of: 
     for the MP-MLQ process, reducing the number of gain scale factors employed in the quantization steps, thereby reducing the number of searches, which in turn reduces the computational load; and 
     for the ACELP process, imposing a second correlation threshold test for entry into a previous signal processing loop in which the embedded signal processing loop is embedded, thereby reducing the number of times the previous signal processing loop and the embedded signal processing loop are entered, which in turn reduces the computational load. 
     The present invention further provides a dual rate speech coding system having a reduced computational load, the encoding system having Multi-Pulse Maximum Likelihood Quantization (MP-MLQ) processing means for But ting at a first transmission rate and Algebraic Codec-Excited Linear Prediction (ACELP) processing means for transmitting at a second transmission rate, wherein the MP-MLQ processing means normally searches subframes of excitation signals according to a nominal number of gain scale factors in quantization of the speech signals, and the ACELP processing means normally uses a first correlation threshold test for allowing entry into an embedded signal processing loop, wherein: 
     the MP-MLQ processing means has a reduced number of gain scale actors for reducing the number of searches and thereby reducing the computational load; 
     the ACELP processing means uses a second correlation threshold test for allowing entry into a previous signal processing loop in which the embedded signal processing loop is embedded, thereby reducing the number of times the previous signal processing loop and the embedded signal processing loop are entered, which in turn reduces the computational load. 
     Advantageously, embodiments of the invention simplify the ACELP and MP-MLQ methods by reducing the number of recursions, which make less contribution to the metrics. This is achieved by selecting less gain levels or putting an extra threshold to decrease the chance to enter the most computational intensive loops. 
     Advantageously, the proposed encoder scheme is applicable for both ITU-T recommendations G.723.1 and G.723.1A. For ACELP excitation, further complexity reduction is possible by adjusting the thresholds. This complexity reduction for ACELP excitation is also applicable for G.729 and its annexes. 
    
    
     BRIEF DESCRIPTION OF THE SEVERAL VIEWS OF THE DRAWING(S) 
     The present invention will now be described in further detail, by way of example only, with reference to the accompanying drawing. 
    
    
     DETAILED DESCRIPTION OF THE INVENTION 
     FIG. 1 is a block diagram of the G.723.1 speech coder. 
     Reference is also made to the following procedures which are appended to this description. Procedure  1  is a pseudocode representation of the standard MP-MLQ procedure of the G.723.1 speech coder; Procedure  2  is a pseudocode representation of the MP-MLQ procedure of an embodiment of the present invention; Procedure  3  is a pseudocode representation of the standard ACELP procedure of the G.723.1 speech coder; Procedure  4  is a pseudocode representation of the ACELP procedure of an embodiment of the present invention. 
     A MP-MLQ/ACELP block  10  for implementing the MP-MLQ and ACELP excitation methods is shown in FIG.  1 . These methods take up almost half of the computational load of the whole codec. Since embodiments of the present invention only relate to these two fixed codebook excitation methods, the description relates only to these excitation techniques and not to other parts of the G.723.1 speech coder. Apart from the fixed codebook excitation part (i.e. block  10 ), all other modules are the same for the dual rate coders. The decoding scheme, for decoding bit streams encoded with the low complexity encoder, remains the same as for the normal ITU-T G.723.1 recommendation. 
     MP-MLQ Excitation (Normal Complexity) 
     The object of the quantization procedure is to find the optimized excitation e u (n) that makes the mean square error minimum, based on an analysis by the synthesis method. The excitation signal is given by                    e   u          (   n   )       =       G   u            ∑     k   =   0         N   p     -   1              α   k          δ        (     n   -     ξ   k       )               ,                0   ≤   n   ≤   59             (   1   )                                
     where G u  is the gain factor, δ(n) is a Dirac function, {α k } k=0     . . .      Np−1  and ξ k  are the signs (±1) and positions of the Dirac functions respectively, and N p  is the number of pulses, which is 5 for odd subframes and 6 for even subframes. The pulse positions are either all odd or all even. This is indicated by a grid bit. 
     The scalar gain quantizer consists of 24 steps, of 3.2 dB in each step. Around the quantized value, G u , additional gain values are selected within the range [G u −6.4 dB; G u +3.2 dB]. The optimal combination of pulse locations and gains are then transmitted to the remaining encoder modules. 
     To improve the quality of speech with a short pitch period, the following additional procedure is used. If the pitch lag is less than 58 samples for a particular subframe, a train of Dirac functions with a period of the pitch index is used for each location k instead of a single Dirac function in the above quantization procedure. The choice between a train of Dirac functions or a single Dirac function to represent the residual signal is made based on the mean square error computation. The configuration which yields the lowest mean square error is selected. 
     Based on the above brief description of MP-MLQ, the optimization procedure is represented in pseudocode as shown in Procedure 1. The symbols InsCI inside the brackets are the cycles needed for a given processor; and the number of cycles if using, for example, a D950 processor. The D950 is a normal 16-bit fixed-point digital signal processor (DSP) made by STMicroelectronics. Other 16-bit fixed-point DSPs are the ADSP-2181 by Analog Devices and the TMS320C54x series by Texas Instruments. Although the number of instructions required to execute the same function may vary among different DSPs, the invention will still achieve a significant savings in MIPS for each appropriate DSP. 
     The worst case for MP-MLQ is that the above optimization procedure is conducted twice when the pitch is less than 58 samples. The total number of cycles per subframe is given by: 
      Total cycles per subframe=2×{Ins C 1+2×[Ins C 2+Ins C 6+4×(Ins C 3+Ins C 4+Ins C 5)]}  (2) 
     Therefore the total number of cycles per subframe for Procedure 1 is 64368 if using the D950 processor. 
     ACELP Excitation (Normal Complexity) 
     For the ACELP technique for fixed codebook excitation, a 17-bit algebraic codebook is used for the stochastic codebook excitation e ua (n). Each fixed codevector contains four non-zero pulses that can assume the signs and positions given in the following table. 
     
       
         
               
             
               
               
             
               
               
               
               
               
               
               
               
               
             
           
               
                 TABLE 1 
               
             
             
               
                   
               
               
                 ACELP excitation codebook 
               
             
          
           
               
                 Sign 
                 Positions 
               
               
                   
               
             
          
           
               
                 ±1 
                 0 
                 8 
                 16 
                 24 
                 32 
                 40 
                 48 
                 56 
               
               
                 ±1 
                 2 
                 10 
                 18 
                 26 
                 34 
                 42 
                 50 
                 58 
               
               
                 ±1 
                 4 
                 12 
                 20 
                 28 
                 36 
                 44 
                 52 
                 (60) 
               
               
                 ±1 
                 6 
                 14 
                 22 
                 30 
                 38 
                 46 
                 54 
                 (62) 
               
               
                   
               
             
          
         
       
     
     In the table, all pulses are in the even positions but the positions of all pulses can be simultaneously shifted by one (to occupy odd positions) when requiring one extra bit. Note that the last position of each of the last two pulses falls outside the subframe boundary, which signifies that the pulse is not present. Each pulse position is encoded with 3 bits and each pulse sign is encoded with 1 bit. This gives a total of 16 bits for the 4 pulses. Further, an extra bit is used to encode the shift. The excitation sequence is defined as: 
     
       
           e   ua.m ( n )=α υ δ( n−ξ   α )+α 1 δ( n−ξ   1 )+α 2 δ( n−ξ   2 )+α 3 δ( n−ξ   3 )  (3) 
       
     
     where ξ k  is the position of the k th  pulse and α k  is its sign (±1). 
     A focused search approach is used to simplify the search procedure. To limit the number of times entering the last loop, a threshold is applied and the last loop is entered only if this threshold is exceeded. The maximum number of times the loop can be entered is fixed so that a low percentage of the codebook is searched. The maximum absolute correlation C max3  and the average correlation C av3  due to the contribution of the first three pulses are found prior to the codebook search. The threshold is given by: 
     
       
         thr3 =C   av3 +( C   max3   −C   av3 )/2  (4) 
       
     
     The fourth loop is entered only if the absolute correlation (of the three pulses) exceeds thr3. To further control the search, the number of times the last loop is entered (for the 4 subframes) is not allowed to exceed 600. (The average worst case per subframe is 150 times). 
     Based on the above brief description of ACFLP, the optimization procedure is represented in pseadocode as shown in Procedure 3. In Procedure 3, InsCi is the number of instruction cycles, followed by an example number of cycles for the D950 implementation. The total cycles are calculated by: 
     
       
         Ins C 1+Ins C 12+8×(Ins C 2 
       
     
     
       
         +Ins C 11)+8 2 ×(Ins C 3 
       
     
     
       
         +Ins C 10)+8 3 ×(Ins C 4 
       
     
     
       
         +Ins C 9)+time 3 ×(Ins C 5 
       
     
     
       
         +Ins C 7+8×Ins C 6)+(8 3   
       
     
     
       
         −time 3 )×Ins C 8=27207 
       
     
     
       
         +timer 3 ×238 [if using a D950 processor] 
       
     
     
       
         =62907 [if time 3 =150]  (5) 
       
     
     where time 3  is the number of times entering the last loop. At the worst case, the maximum number of time 3  is set to 150. Therefore the worst case cycles per 7.5 ms subframe are 62907 if using a D950 processor, which equates to 8.4 MIPS. 
     Lower Complexity Implementations 
     In embodiments of the invention the modules (codes) may be shared by both G.723.1 and the lower complexity implementation of the G.723.1 coder (LC-G.723.1). Preferably, the coding system is selectable between bit-exact G.723.1 and LC-G.723.1 coders, leading to an embedded system. This is shown by the procedure as follows: 
     If (lower complexity enabled) 
     If (6.3 kbit/s) 
     6.3 kbit/s LC-G723.1 encoding 
     Else 5.3 kbit/s LC-G723.1 encoding 
     Else 
     If (6.3 kbit/s) 
     6.3 Kbit/s encoding 
     Else 5.3 Kbit/s encoding 
     For the low-complexity encoding of 6.3 Kbps and 5.3 Kbps codecs in accordance with the present invention, the operation procedures are shown in Procedure 2 and Procedure 4 respectively. 
     One of the characteristics of MP-MLQ is that the latter pulse contribution will be added upon the previous one and all pulses are scaled by one gain. For each new found pulse, the gain is further fine tuned within the range [−6.4 dB;−3.2 dB; 0; +3.2 dB]. Since all pulses share one gain, the observation is that the gain level decreases as the number of found pulses increases. Due to the characteristic of MP-MLQ, the additional higher gain levels (0 and +3.2 dB) are rarely selected. In this simplification, we only use two gain levels, i.e. −4 dB and −3.2 dB around the previous quantized gain. Therefore the number of instructions inside the gain searching loop can be decreased by about half for catch subframe when the pitch lag is less than 58 samples. 
     The worst case number of cycles for MP-MLQ is calculated as: 
     
       
         Total cycles per subframe=2×{Ins C 1+2×[Ins C 2+Ins C 6+2×(Ins C 3+Ins C 4+Ins C 5)]}  (6) 
       
     
     For the D950 example, the total number of cycles per subframe is 39424. 
     For an adaptive codebook search, the worst case is when the pitch lag ≧58, which is just the opposite of fixed codebook excitation. If the number of gain levels decreases from 4 to 2 for fixed codebook excitation, the computational load is reduced from Equation (2) to Equation (6). To balance the computational load for all cases, the codes are also simplified for when the pitch lag ≧58. The number of searched gain levels is reduced from 4 to 3, i.e. −6.4, −3.2 and 0 dB. (please refer to Procedure 2). 
     The number of cycles per subframe for MP-MLQ with a pitch lag ≧58 is calculated as: 
     
       
         Total cycles per subframe=Ins C 1+2×[Ins C 2+Ins C 6+3×(Ins C 3+Ins C 4+Ins C 5)]  (7) 
       
     
     The total number of cycles per subframe would then be 19826 for the D950 processor example. 
     Comparing Equations (2) and (6), 24944 cycles per subframe can be saved at worst case (of MP-MLQ) if using the D950 processor. This equates to a saving of 3.3 MIPS. For the normal case, in which MP-MLQ is conducted once, the saved cycles are 12358 per subframe, which equates to 1.65 MIPS. This unbalanced complexity reduction in the fixed codebook search (MP-MLQ) corresponds to the unbalanced computational load adaptive codebook search, in which, for example, about 30,000 and 46,000 cycles are needed respectively for the worst case and normal case of MP-MLQ. 
     An advantage of the embodiments of the invention is a reduction in the complexity for the worst case scenario (i.e., under the most intensive computational load). If the complexity is reduced in the worst case, the overall MIPS requirement is reduced accordingly. At the higher bit rate, the most complex modules are the fixed codebook excitation module (MP-MLQ) and adaptive excitation module. The complexity of these two modules changes depending on the pitch lag, while other modules are relatively stable in terms of computational load. Shown in Table 2 below is a comparison of the MIPS requirements for the worst case (pitch lag &lt;58 samples) and the normal case (pitch lag ≧58) for a D950 DSP. 
     
       
         
               
             
               
               
               
             
               
               
               
               
               
               
               
             
               
               
               
               
               
               
               
               
             
           
               
                 TABLE 2 
               
             
             
               
                   
               
               
                 Complexity comparison 6.3 kbits/s for one subframe (7.5 ms) 
               
             
          
           
               
                   
                 Pitch lag ≧ 58 
                 Pitch lag ≧ 58 (Worst case) 
               
             
          
           
               
                 6.3 kbits 
                 Adaptive 
                 ML-LPQ 
                 Sum 
                 Adaptive 
                 ML-LPQ 
                 Sum 
               
               
                   
               
             
          
           
               
                 Normal 
                 Cycles 
                 46000 
                 32184 
                 78184 
                 30000 
                 64368 
                 94368 
               
               
                 G.723.1 
                 MIPS 
                 6.13 
                 4.29 
                 10.42 
                 4.0 
                 8.58 
                 12.58 
               
               
                 LC 
                 Cycles 
                 46000 
                 19826 
                 65826 
                 30000 
                 39424 
                 69424 
               
               
                 G.723.1 
                 MIPS 
                 6.13 
                 2.64 
                  8.77 
                 4.0 
                 5.26 
                 9.26 
               
               
                   
               
             
          
         
       
     
     From Procedure 3 and Equation (5), it is apparent that any instructions inside the i 2  and i 3  loops will be executed hundreds of times. It may be advantageous to further limit the numbers entering these two loops. Instead of using one threshold, two thresholds are used. Both the maxium absolute correlation and the average correlation due to the contribution of the first two and three pulses, C max2  and C av2 , and C max3  and C av3 , are found prior to the codebook search. The thresholds are calculated by: 
     
       
         thr2=( C   av2 +( C   max2   −C   av2 )/4)  (8) 
       
     
     
       
         thr3=( C   av3 +( C   max3   −C   av3 )/3)  (9) 
       
     
     Now there are two thresholds. To further control the search, the average number of times the third and last loops are entered is not allowed to exceed 32 and 75 (for example), respectively for each subframe. The proposed low-complexity ACELP optimization procedure is modified as in Procedure 4. 
     The total number of cycles per subframe is given by: 
     
       
         Ins c 1+Ins C 12+8×(Ins C 2 
       
     
     
       
         +Ins C 11)+64×(Ins C 3 
       
     
     
       
         +Ins C 10)+time 2 ×(Ins C 13 
       
     
     
       
         +Ins C 14)+(64−time 2 )×Ins C 15 
       
     
     
       
         +time 2 ×8×(Ins C 4 
       
     
     
       
         +Ins C 9)+time 3 ×8 
       
     
     
       
         ×(Ins C 7+8×Ins C 6)+(time 2 ×8 
       
     
     
       
         −time 3 )×Ins C 8=8373 
       
     
     
       
         +time 2 ×336+time 3 ×238  (10) 
       
     
     where time 2  and time 3  are the number of times the processor enters into the 3 rd  and 4 th  loops respectively. For the worst case, the time 2  and time 3  are set to 32 and 75 respectively. Therefore the worst case number of cycles will become 36976. Comparing with Equation (5), 25932 cycles or 3.45 MIPS can be saved (if using the D950 processor). 
     It should be noted that further complexity reduction is simple to effect for this ACELP excitation by choosing smaller time 2  and time 3  parameters and corresponding higher thresholds. The proposed parameters for this LC-G.723.1 are based on the objective that LC-G.723.1 should have similar performances to G.723.1. If further reduction of complexity is needed, the performance will be smoothly degraded. For example, by increasing the threshold levels and corresponding allowed loop entry times time 2  and time 3  to and 60 respectively, a further 1.01 MIPS can be saved. 
     From the foregoing it will be appreciated that, although specific embodiments of the invention have been described herein for purposes of illustration, various modifications may be made without deviating from the spirit and scope of the invention. Accordingly, the invention is not limited except as by the appended claims. 
     
       
         
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
           
               
                   
               
               
                 PROCEDURE 1 
               
               
                   
               
             
             
               
                   
               
             
          
           
               
                   
                 do twice or once depending on the pitch lag 
               
             
          
           
               
                   
                 pre-search (InsC1, 6116) 
               
               
                   
                 for k = 0,1 (grid) 
               
             
          
           
               
                   
                 find the first pulse and quantize gain (InsC2, 537) 
               
             
          
           
               
                   
                 for i = 1, 2, 3, 4 (gain) 
               
             
          
           
               
                   
                 prepare searching (InsC3, 173) 
               
               
                   
                 find remain pulses (InsC4, 2261) 
               
               
                   
                 evaluate the error (InsC5, 687) 
               
             
          
           
               
                   
                 post process (InsC6, 13) 
               
               
                   
                   
               
             
          
         
       
     
     
       
         
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
           
               
                   
               
               
                 PROCEDURE 2 
               
               
                   
               
             
             
               
                   
               
             
          
           
               
                   
                 if pitch lag &lt;58 do twice 
               
               
                   
                 pre-search (InsC1, 6116) 
               
             
          
           
               
                   
                 for k = 0,1 (grid) 
               
             
          
           
               
                   
                 find the first pulse and quantize gain (InsC2, 2537) 
               
             
          
           
               
                   
                 for i = 1, 2 (gain) 
               
             
          
           
               
                   
                 prepare searching (InsC3, 173) 
               
               
                   
                 find remain pulses (InsC4, 2261) 
               
               
                   
                 evaluate the error (InsC5, 687) 
               
             
          
           
               
                   
                 post process (InsC6, 13) 
               
             
          
           
               
                   
                 else do once 
               
               
                   
                 pre-search (InsC1, 6116) 
               
             
          
           
               
                   
                 for k = 0,1 (grid) 
               
             
          
           
               
                   
                 find the first pulse and quantize gain (InsC2, 2537) 
               
             
          
           
               
                   
                 for i = 1, 2, 3 (gain) 
               
               
                   
                 prepare searching (InsC3, 173) 
               
               
                   
                 find remain pulses (InsC4, 2261) 
               
               
                   
                 evaluate the error (InsC5, 687) 
               
               
                   
                 post process (InsC6, 13) 
               
               
                   
                   
               
             
          
         
       
     
     
       
         
               
             
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
             
           
               
                   
               
               
                 PROCEDURE 3 
               
               
                   
               
             
             
               
                   
               
             
          
           
               
                 pre-search (InsC1,4195) 
               
               
                 for i0 = 0, . . .,7 (first pulse) 
               
             
          
           
               
                   
                 partial correlation &amp; energy calculation (InsC2, 12) 
               
               
                   
                 for i1 = 0, . . .,7 (second) 
               
             
          
           
               
                   
                 partial correlation &amp; energy calculation (InsC3, 26) 
               
               
                   
                 for i2 = 0, . . .,7 (third) 
               
             
          
           
               
                   
                 partial correlation &amp; energy calculation 
               
               
                   
                 (InsC4, 30) 
               
               
                   
                 if (correlation &gt; threshold) 
               
             
          
           
               
                   
                 prepare for last loop (InsC5, 14) 
               
               
                   
                 for i3 = 0, . . .,7 (last) 
               
             
          
           
               
                   
                 {correlation &amp; energy 
               
               
                   
                 calculation and evaluation 
               
               
                   
                 (InsC6, 25)} 
               
             
          
           
               
                   
                 update (InsC7,26) 
               
             
          
           
               
                   
                 else 
               
               
                   
                 Update (InsC8, 2) 
               
               
                   
                 post process (InsC9, 5) 
               
             
          
           
               
                   
                 post process (InsC10, 22) 
               
             
          
           
               
                   
                 do post (InsC11, 17) 
               
             
          
           
               
                 post process (InsC12, 746) 
               
               
                   
               
             
          
         
       
     
     
       
         
               
             
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
               
             
               
             
           
               
                   
               
               
                 PROCEDURE 4 
               
               
                   
               
             
             
               
                   
               
             
          
           
               
                 pre-search (InsC1, 4915) 
               
               
                 for i0 = 0, . . .,7 (first loop) 
               
             
          
           
               
                   
                 partial correlation &amp; energy calculation (InsC2, 12) 
               
               
                   
                 for il = 0, . . .,7 (second) 
               
             
          
           
               
                   
                 partial correlation &amp; energy calculation (InsC3, 26) 
               
               
                   
                 if (correlation &gt; threshold2) 
               
             
          
           
               
                   
                 preparation (Ins13, 14) 
               
               
                   
                 for i2 = 0, . . .,7 (third) 
               
             
          
           
               
                   
                 partial correlation &amp; energy calculation 
               
               
                   
                 (InsC4, 30) 
               
               
                   
                 if (correlation &gt; threshold) 
               
             
          
           
               
                   
                 preparation (InsC5, 14) 
               
               
                   
                 for i3 = 0, . . ., 7 (last) 
               
               
                   
                 {correlation &amp; energy calculation, 
               
               
                   
                 and evaluation (InsC6,25)} 
               
               
                   
                 post process 
               
             
          
           
               
                   
                 else 
               
               
                   
                 update (InsC8, 2) 
               
             
          
           
               
                   
                 do post process (InsC9, 5) 
               
             
          
           
               
                   
                 post process (InsC14, 26) 
               
             
          
           
               
                   
                 else 
               
             
          
           
               
                   
                 update (InsC15, 2) 
               
             
          
           
               
                   
                 post process (InsC10, 22) 
               
             
          
           
               
                   
                 post process (InsC11, 17) 
               
             
          
           
               
                 post process (InsC12, 746)