//#define WANT_STREAM #define WANT_MATH #include "include.h" #include "newmatap.h" //#include "newmatio.h" #include "tmt.h" #ifdef use_namespace using namespace NEWMAT; #endif static void SlowFT(const ColumnVector& a, const ColumnVector&b, ColumnVector& x, ColumnVector& y) { int n = a.Nrows(); x.ReSize(n); y.ReSize(n); Real f = 6.2831853071795864769/n; for (int j=1; j<=n; j++) { Real sumx = 0.0; Real sumy = 0.0; for (int k=1; k<=n; k++) { Real theta = - (j-1) * (k-1) * f; Real c = cos(theta); Real s = sin(theta); sumx += c * a(k) - s * b(k); sumy += s * a(k) + c * b(k); } x(j) = sumx; y(j) = sumy; } } static void SlowDTT_II(const ColumnVector& a, ColumnVector& c, ColumnVector& s) { int n = a.Nrows(); c.ReSize(n); s.ReSize(n); Real f = 6.2831853071795864769 / (4*n); int k; for (k=1; k<=n; k++) { Real sum = 0.0; const int k1 = k-1; // otherwise Visual C++ 5 fails for (int j=1; j<=n; j++) sum += cos(k1 * (2*j-1) * f) * a(j); c(k) = sum; } for (k=1; k<=n; k++) { Real sum = 0.0; for (int j=1; j<=n; j++) sum += sin(k * (2*j-1) * f) * a(j); s(k) = sum; } } static void SlowDTT(const ColumnVector& a, ColumnVector& c, ColumnVector& s) { int n1 = a.Nrows(); int n = n1 - 1; c.ReSize(n1); s.ReSize(n1); Real f = 6.2831853071795864769 / (2*n); int k; int sign = 1; for (k=1; k<=n1; k++) { Real sum = 0.0; for (int j=2; j<=n; j++) sum += cos((j-1) * (k-1) * f) * a(j); c(k) = sum + (a(1) + sign * a(n1)) / 2.0; sign = -sign; } for (k=2; k<=n; k++) { Real sum = 0.0; for (int j=2; j<=n; j++) sum += sin((j-1) * (k-1) * f) * a(j); s(k) = sum; } s(1) = s(n1) = 0; } static void test(int n) { Tracer et("Test FFT"); ColumnVector A(n), B(n), X, Y; for (int i=0; i