Ejemplo n.º 1
0
 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);
 }
Ejemplo n.º 2
0
        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);
        }