Пример #1
0
        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);
            }
        }
Пример #2
0
 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));
     }
 }