小编Ada*_*dam的帖子

简单的就地离散傅立叶变换(DFT)

我正在写一个非常简单的就地DFT.我正在使用此处显示的公式:http: //en.wikipedia.org/wiki/Discrete_Fourier_transform#Definition以及Euler的公式,以避免仅为此使用复数类.到目前为止我有这个:

private void fft(double[] data)
        {
            double[] real = new double[256];
            double[] imag = new double[256];
            double pi_div_128 = -1 * Math.PI / 128;
            for (int k = 0; k < 256; k++)
            {
                for (int n = 0; n < 256; n++)
                {
                    real[k] += data[k] * Math.Cos(pi_div_128 * k * n);
                    imag[k] += data[k] * Math.Sin(pi_div_128 * k * n);
                }
                data[k] = Math.Sqrt(real[k] * real[k] + imag[k] * imag[k]);
            }
        }
Run Code Online (Sandbox Code Playgroud)

但Math.Cos和Math.Sin术语最终都是正面和负面的,所以当我添加这些术语乘以数据[k]时,它们会被取消,我只会得到一些极小的值.我看到它是如何发生的,但是我无法理解我的代码是如何错误地代表数学的.任何帮助表示赞赏.仅供参考,我必须自己编写,我知道我可以获得现成的FFT.

c# fft

6
推荐指数
2
解决办法
7909
查看次数

标签 统计

c# ×1

fft ×1