2

我正在为 Java 中的 CSE 类进行分配,并正在实现 FFT 和直接 DFT(使用矩阵计算)。我的 FFT 工作正常,但我的直接 DFT 不起作用。我的傅立叶矩阵没有给出正确的值,我想知道它是否是用户错误,或者问题是否在于我正在使用的 Complex 类(org.apache.commons.math.complex)。有这样一个主流课程,我想它只是用户错误,所以如果有人能指出它,那就太好了。

我的傅立叶矩阵计算如下:

Complex[][] fmatrix = new Complex[cvector.length][cvector.length]; // Initialize Matrix
    for(int k = 0; k < n; k++) { 
        double val = -2.0 * k * Math.PI / n; // Calculate exponential value
        Complex w = new Complex(0.0,val); // Store that in a Complex value and set imaginary piece to the exponential value
        for (int l = 0; l < n; l++) {
            Complex powerof = new Complex((double) (k*l),0.0); // Calculate the power to take it to
            fmatrix[k][l] = w.exp().pow(powerof); // Take the exponent, then raise it to powerof
        }
    }

我将一些项目提取到变量中以进行调试,但根据我的理解,代码应该都可以工作。

然而,上面的代码对于一个长度为 4 的向量,给出了以下矩阵:

      Mine                    Desired
[ 1,  1,  1, 1          [  1,  1,  1,  1
  1, -j, -1, j             1, -j, -1,  j
  1,  1,  1, 1     =/=     1, -1,  1, -1
  1, -j, -1, j ]           1,  j, -1, -j ]

任何帮助是极大的赞赏。

4

1 回答 1

6

我只是简单地看了一眼你的代码,并决定先看看数学,因为我已经有一段时间没有做过 FFT 和 DFT(对于 DFT 来说很长时间了)我想知道这一行:

double val = -2.0 * k * Math.PI / n; // Calculate exponential value

我不明白为什么 k 存在,因为我看到的等式是 -2 PI i / n,而且我认为您不需要复杂类中的 i。我怀疑这是你的问题,只是我的一个问题。如果我发现其他东西,我会再次发布。

于 2011-03-04T17:47:39.553 回答