public static void DFT(Complex[] data, FourierTransform.Direction direction)
{
int n = data.Length;
var c = new Complex[n];
// for each destination element
for (int i = 0; i < c.Length; i++)
{
double sumRe = 0;
double sumIm = 0;
double phim = 2 * Math.PI * i / (double)n;
// sum source elements
for (int j = 0; j < n; j++)
{
double re = data[j].Real;
double im = data[j].Imaginary;
double cosw = Math.Cos(phim * j);
double sinw = Math.Sin(phim * j);
if (direction == FourierTransform.Direction.Backward)
sinw = -sinw;
sumRe += (re * cosw + im * sinw);
sumIm += (im * cosw - re * sinw);
}
c[i] = new Complex(sumRe, sumIm);
}
if (direction == FourierTransform.Direction.Backward)
{
for (int i = 0; i < c.Length; i++)
data[i] = c[i] / n;
}
else
{
for (int i = 0; i < c.Length; i++)
data[i] = c[i];
}
}