private void antialias(int ch, int gr) {
        int sb18, ss, sb18lim;
        GrInfo gi = si.ch[ch].gr[gr];
        // 31 alias-reduction operations between each pair of sub-bands
        // with 8 butterflies between each pair
        if (gi.windowSwitching && (gi.blockType == 2) && !gi.mixedBlock) {
            return;
        }
        if (gi.windowSwitching && gi.mixedBlock && (gi.blockType == 2)) {
            sb18lim = 18;
        } else {
            sb18lim = 558;
        }
        for (sb18 = 0; sb18 < sb18lim; sb18 += 18) {
            for (ss = 0; ss < 8; ss++) {
                int srcIdx1 = sb18 + 17 - ss;
                int srcIdx2 = sb18 + 18 + ss;
                double bu = out1d[srcIdx1];
                double bd = out1d[srcIdx2];
                out1d[srcIdx1] = (bu * Constants.CS[ss]) - (bd * Constants.CA[ss]);
                out1d[srcIdx2] = (bd * Constants.CS[ss]) + (bu * Constants.CA[ss]);
            }
        }
    }