JTransforms与Matlab不同的FFT DC分量

时间:2013-07-30 00:05:56

标签: java matlab fft

我尝试对长度为4000的输入信号进行FFT。我的java代码如下:

    Vector<Double> signal = readFile("signal.txt");
    double[] input = new double[signal.size()];
    for(int i=0; i<signal.size(); i++) {
        input[i] = signal.get(i);
    }

    DoubleFFT_1D fftDo = new DoubleFFT_1D(input.length);    
    double[] fft = new double[input.length * 2];
    System.arraycopy(input, 0, fft, 0, input.length);
    fftDo.realForwardFull(fft);

    for(int i=0; i<6; i=i+2) {
        System.out.println(fft[i] + "\t" + fft[i+1]);
    }

输出与Matlab的FFT中给出的答案相匹配,除了第一个组件。

Matlab vs Java FFT results

有谁知道这个的原因?

1 个答案:

答案 0 :(得分:1)

一些仅实数据的FFT仅将频率数据返回到N / 2个二进制位,因为其余的只是前半部分的镜像复共轭,用于严格实数输入。但由于能量的一半是在下半年,因此结果需要加倍才能解释未返回的N / 2能量箱。第0(DC)不需要加倍,因为它在负DC处没有复杂的共轭仓,因此必须在某处进行不同的处理。检查FFT的文档,因为您可能需要在实际半长度结果FFT之外处理此问题。