我目前使用JTransforms-library来计算44100Hz FS的一秒信号的DFT。该代码非常简单:JTransform的FFT与MATLAB相比的大小
DoubleFFT_1D fft = new DoubleFFT_1D(SIZE);
fft.complexForward(signal); // signal: 44100 length array with audio bytes.
为JTransform的DoubleFFT_1D
类的文档,请参阅此页。 http://incanter.org/docs/parallelcolt/api/edu/emory/mathcs/jtransforms/fft/DoubleFFT_1D.html
问题是:什么是SIZE
应该是?我知道这可能是窗口大小,但似乎无法让它与我遇到的最常见的值一起工作,如1024和2048.
此刻,我正在测试此功能,通过生成一个1kHz正弦信号。但是,当我使用上面的代码并且将结果与MATLAB的fft
函数进行比较时,它们似乎来自完全不同的大小。例如。 MATLAB给出的结果如0.0004 - 0.0922i
,而上面的代码得到的结果类似-1.7785E-11 + 6.8533E-11i
,SIZE设置为2048.然而,信号数组的内容相同。
对于SIZE
,哪个值会给出与MATLAB内置的fft
类似的FFT函数?
它确实有效,但它需要永久完成工作。我不认为这是应该的。不过谢谢。 – gleerman 2012-02-20 21:25:55
'永远'是什么意思?你可以发布更多的代码,以便我可以看到你在做什么?如果您将数据输入为真实数据并使用'fft.realForwardFull',则应该获得(大)速度优势。 – aganders3 2012-02-20 21:48:30
我正在开发一个Android项目,我试图让FFT实时计算。这意味着,当下一秒记录时,计算并显示电流的FFT。这需要一分多钟。代码的其他部分用于过去的处理,但是日志显示它是上面的代码,它会一直占用。更具体地说,在fft计算中,GC似乎正在广泛运行,其中SIZE设置为44100(或22050)。 – gleerman 2012-02-21 11:09:53