public WWDecimalFft(int numPoints) { if (!IsPowerOfTwo(numPoints) || numPoints < 2) { throw new ArgumentException("numPoints must be power of two integer and larger than 2"); } mNumPoints = numPoints; mWn = new WWDecimalComplex[mNumPoints]; for (int i = 0; i < mNumPoints; ++i) { decimal angle = -2.0M * WWDecimalMath.M_PI * i / mNumPoints; mWn[i] = new WWDecimalComplex(WWDecimalMath.Cos(angle), WWDecimalMath.Sin(angle)); } // mNumStage == log_2(mNumPoints) int t = mNumPoints; for (int i = 0; 0 < t; ++i) { t >>= 1; mNumStage = i; } mBitReversalTable = new uint[mNumPoints]; for (uint i = 0; i < mNumPoints; ++i) { mBitReversalTable[i] = BitReversal(mNumStage, i); } }
public static void TestSin() { for (int i = -360; i <= 720; i += 30) { Console.WriteLine("sin({0})={1}", i, WWDecimalMath.Sin(WWDecimalMath.M_2PI * i / 180)); } }