计算java中信号的光谱能量?

时间:2015-01-27 23:50:35

标签: java signal-processing fft spectrum

我试图在java中获取信号的光谱能量。我从理论上知道能量是系数的绝对值平方和。

到目前为止,我所做的是使用JTransforms通过FFT转换输入数据。结果是由实部和虚部组成的复数数组。

我的问题是如果只有信号的实部和虚部,如何获得光谱能量?或者是否有另一种解决方案如何根据我的java代码获得光谱能量?

我所做的是以下内容: fcoeff + =(Math.pow(fft [i],2.0)+ Math.pow(fft [i + 1],2.0)); < / p>

我假设 foruier系数等于实部+虚部

我想这不对,是吗?如果我需要做的是在我的java代码中获取光谱能量吗?

    double energy = 0;
    double fcoeff = 0;

    //example real input data
    double[] input = new double[]{0.0176,-0.0620, 0.2467,0.4599,-0.0582,0.4694,0.0001,-0.2873};

    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 < fft.length;i=i+2) {

        //get the real part
        System.out.println("real part: " + fft[i]); 

        //get the imaginary part
        System.out.println("imaginary part : " +  fft[i+1]);


        /*calcluating the sum of the squared fourier coefficient by calculating the sum of the squared magnitude of a complex FFT's results*/
       fcoeff += (Math.pow(fft[i],2.0) + Math.pow(fft[i+1],2.0));

    }

    //normalised by number of samples
    energy = fcoeff/input.length;

    System.out.println();
    System.out.println("Spectral energy : " + energy); // Energy : 0.58278756
}

}

我知道我的输入数据量很小,但它只是用来举例说明我的问题。

提前致谢!!!

最好的问候本

0 个答案:

没有答案