public static void gc2gc(double c1[],int m1,double g1,double c2[],int m2,double g2){
  double[] gc2gc_buff=Arrays.copyOf(c1,m1 + 1);
  c2[0]=gc2gc_buff[0];
  for (int i=1; i <= m2; i++) {
    double ss1=0.0;
    double ss2=0.0;
    int min=m1 < i ? m1 : i - 1;
    for (int k=1; k <= min; k++) {
      int mk=i - k;
      double cc=gc2gc_buff[k] * c2[mk];
      ss2+=k * cc;
      ss1+=mk * cc;
    }
    if (i <= m1)     c2[i]=gc2gc_buff[i] + (g2 * ss2 - g1 * ss1) / i;
 else     c2[i]=(g2 * ss2 - g1 * ss1) / i;
  }
}

public static void gc2gc ( double c1 [ ] , int m1 , double g1 , double c2 [ ] , int m2 , double g2 ) { double [ ] gc2gc_buff = Arrays . copyOf ( c1 , m1 + 1 ) ; c2 [ 0 ] = gc2gc_buff [ 0 ] ; for ( int i = 1 ; i <= m2 ; i ++ ) { double ss1 = 0.0 ; double ss2 = 0.0 ; int min = m1 < i ? m1 : i - 1 ; for ( int k = 1 ; k <= min ; k ++ ) { int mk = i - k ; double cc = gc2gc_buff [ k ] * c2 [ mk ] ; ss2 += k * cc ; ss1 += mk * cc ; } if ( i <= m1 ) c2 [ i ] = gc2gc_buff [ i ] + ( g2 * ss2 - g1 * ss1 ) / i ; else c2 [ i ] = ( g2 * ss2 - g1 * ss1 ) / i ; } }
gc2gc : generalized cepstral transformation
