代码如下
/// <summary>
/// 离散傅里叶变换
/// </summary>
/// <param name="array">数据源</param>
/// <returns>处理后的数据</returns>
public static double[] Dft(double[] array)
{
//将复数数组分为两个数组分别代表实部和虚部。
int N = array.Length;
double[] result = new double[N];
double[] real = new double[N];//实部运算
double[] imag = new double[N];//虚部运算
for (int k = 0; k < N; k++)
{
for (int n = 0; n < N; n++)
{
real[k] = real[k] + array[n] * Math.Cos(2 * Math.PI * k * n / N);
imag[k] = imag[k] - array[n] * Math.Sin(2 * Math.PI * k * n / N);
}
result[k] = Math.Sqrt(real[k] * real[k] + imag[k] * imag[k]);
}
return result;
}