public static void ComputeButterfly(int resolution, int numButterflies, out int[][] indices, out float[][] weights) { indices = new int[numButterflies][]; weights = new float[numButterflies][]; for (int i = 0; i < numButterflies; i++) { indices[i] = new int[resolution << 1]; weights[i] = new float[resolution << 1]; } ButterflyFFTUtility.ComputeIndices(indices, resolution, numButterflies); ButterflyFFTUtility.ComputeWeights(weights, resolution, numButterflies); }
private static void ComputeIndices(int[][] indices, int resolution, int numButterflies) { int num = resolution; int num2 = 1; for (int i = 0; i < numButterflies; i++) { num >>= 1; int num3 = num << 1; int num4 = 0; int num5 = 0; int num6 = num3; int[] array = indices[i]; for (int j = 0; j < num2; j++) { int k = num5; int num7 = num4; int num8 = 0; while (k < num6) { array[k] = num7; array[k + 1] = num7 + num; array[num8 + num6] = num7; array[num8 + num6 + 1] = num7 + num; k += 2; num8 += 2; num7++; } num5 += num3 << 1; num6 += num3 << 1; num4 += num3; } num2 <<= 1; } ButterflyFFTUtility.BitReverse(indices[numButterflies - 1], resolution << 1, numButterflies); }