我试图在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
}
}
我知道我的输入数据量很小,但它只是用来举例说明我的问题。
提前致谢!!!
最好的问候本