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

Lov*_*ing 2 java fft matrix complex-numbers

我正在为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
        }
    }
Run Code Online (Sandbox Code Playgroud)

为了调试目的,我将一些项目提取到变量中,但代码应该完全符合我的理解.

但是,对于= 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 ]
Run Code Online (Sandbox Code Playgroud)

任何帮助是极大的赞赏.

kee*_*l89 6

我只是瞥了一眼你的代码然后决定先看一下数学,因为我已经做了一段时间,因为我已经完成了FFT和DFT(很长一段时间用于DFT)我想知道这一行:

double val = -2.0 * k * Math.PI / n; // Calculate exponential value
Run Code Online (Sandbox Code Playgroud)

我不明白为什么k在那里,因为我看到的等式是-2 PI i/n,我认为你不需要复杂类中的i.我怀疑这是你的问题,只是我的问题.如果我找到别的东西,我会再次发帖.