Thursday, April 19, 2007

Simple DFT (Discrete Fourier Transform) C# code

private double[,] dft(double[] input)
{
int N = input.Length;
double[,] output = new double[2, N];

for (int k = 0; k < N; k++)
{
for (int n = 0; n < N; n++)
{
output[0, k] += input[n] * Math.Cos(-2 * Math.PI * k * n / N); // Real
output[1, k] += input[n] * Math.Sin(-2 * Math.PI * k * n / N); // Imaginary
}
}

return output;
}

private double[] dftMagnitude(double[] input)
{
int N = input.Length;
double[] output = new double[N];
double temp1, temp2;

for (int k = 0; k < N; k++)
{
temp1 = 0;
temp2 = 0;
for (int n = 0; n < N; n++)
{
temp1 += input[n] * Math.Cos(-2 * Math.PI * k * n / N);
temp2 += input[n] * Math.Sin(-2 * Math.PI * k * n / N);
}
output[k] = Math.Sqrt(Math.Pow(temp1, 2) + Math.Pow(temp2, 2)); // Magnitude
}

return output;
}

private double[,] dftMagPhase(double[] input)
{
int N = input.Length;
double[,] output = new double[2, N];
double temp1, temp2;

for (int k = 0; k < N; k++)
{
temp1 = 0;
temp2 = 0;
for (int n = 0; n < N; n++)
{
temp1 += input[n] * Math.Cos(-2 * Math.PI * k * n / N);
temp2 += input[n] * Math.Sin(-2 * Math.PI * k * n / N);
}
output[0, k] = Math.Sqrt(Math.Pow(temp1, 2) + Math.Pow(temp2, 2)); // Magnitude
output[1, k] = Math.Atan2(temp2, temp1); // Phase
}

return output;
}

Thursday, April 12, 2007

C# Array...

double[] a = new double[10];
double[] b = new double[10];

for (int i = 0; i <10; i++)
a[i] = i + 1;

b = a;

It is possible!!