有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

Java中的矩阵离散傅里叶变换(非FFT)

我正在用Java为一个CSE类做赋值,并且正在实现FFT和直接DFT(使用矩阵计算)。我的FFT工作正常,但直接DFT不工作。我的傅立叶矩阵没有给出正确的值,我想知道这是用户错误,还是问题在于我正在使用的复杂类(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
        }
    }

出于调试的目的,我将一些项拉入变量中,但根据我的理解,代码应该都可以工作

然而,对于n=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 ]

非常感谢您的帮助


共 (1) 个答案

  1. # 1 楼答案

    我只是浏览了一下你的代码,决定先看一下数学,因为我做FFT和DFT已经有一段时间了(DFT的时间很长) 我想知道这一行:

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

    我不明白为什么会有k,因为我看到的方程是-2pii/n,我认为在复杂类中不需要I。我怀疑这是你的问题,只是我的一个问题。如果我发现其他东西,我会再发一次