+\r
+void\r
+ProcessSignal::shuffleNaturalToFourierOrder (float* pdVector, const int n)\r
+{\r
+ float* pdTemp = new float [n];\r
+ int i;\r
+ if (n % 2) { // Odd\r
+ int iHalfN = (n - 1) / 2;\r
+ \r
+ pdTemp[0] = pdVector[iHalfN];\r
+ for (i = 0; i < iHalfN; i++)\r
+ pdTemp[i + 1] = pdVector[i + 1 + iHalfN];\r
+ for (i = 0; i < iHalfN; i++)\r
+ pdTemp[i + iHalfN + 1] = pdVector[i];\r
+ } else { // Even\r
+ int iHalfN = n / 2;\r
+ pdTemp[0] = pdVector[iHalfN];\r
+#if USE_BROKEN_SHUFFLE\r
+ for (i = 0; i < iHalfN; i++)\r
+ pdTemp[i + 1] = pdVector[i + iHalfN];\r
+ for (i = 0; i < iHalfN - 1; i++)\r
+ pdTemp[i + iHalfN + 1] = pdVector[i];\r
+#else\r
+ for (i = 0; i < iHalfN - 1; i++)\r
+ pdTemp[i + 1] = pdVector[i + iHalfN + 1];\r
+ for (i = 0; i < iHalfN; i++)\r
+ pdTemp[i + iHalfN] = pdVector[i];\r
+#endif\r
+ }\r
+ \r
+ for (i = 0; i < n; i++)\r
+ pdVector[i] = pdTemp[i];\r
+ delete pdTemp;\r
+}\r
+\r
+\r
+\r