0

我尝试对长度为 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 与 Java FFT 结果

有谁知道这是什么原因?

4

1 回答 1

1

一些纯实数据 FFT 仅返回高达 N/2 个 bin 的频率数据,因为其余部分只是前半部分的镜像复共轭,用于严格实数输入。但由于一半的能量在后半部分,因此需要将结果加倍以考虑未返回的 N/2 个能量箱。第零个 (DC) 不需要加倍,因为它在负 DC 处没有复共轭仓,因此必须在某处进行不同的处理。检查您的 FFT 的文档,因为您可能需要在仅实数半长结果 FFT 之外处理此问题。

于 2013-07-30T02:20:02.980 回答