我正在使用Jtransforms java庫對給定數據集執行分析。jTransforms的功率譜密度DoubleFFT_1D
的數據的例子如下:
980,988,1160,1080,928,1068,1156,1152,1176,1264
我使用在jTransforms的DoubleFFT_1D功能。 數據輸出如下:
10952, -152, 80.052, 379.936, -307.691, 12.734, -224.052, 427.607, -48.308, 81.472
我無法解釋的輸出。我知道輸出數組中的第一個元素是10個輸入的總和(10952)。它是
輸出數組的其他元素,我不明白。最終,我想在圖表上繪製輸入數據的功率譜密度,並找出0到0.5 Hz之間的量。
爲jTransform功能狀態的文檔(其中,a是所述數據集):
public void realForward(double[] a)
計算真實 數據的1D向前DFT結果存放一個。輸出數據 的物理佈局是如下:如果n是偶數則
a[2*k] = Re[k], 0 <= k < n/2 a[2*k+1] = Im[k], 0 < k < n/2 a[1] = Re[n/2]
如果n是奇數則
a[2*k] = Re[k], 0 <= k < (n+1)/2 a[2*k+1] = Im[k], 0 < k< (n-1)/2 a[1] = Im[(n-1)/2]
此方法計算只的元件的半真正的變革。 另一半滿足對稱條件。如果您想要完整的 實際正向轉換,請使用realForwardFull。爲了找回原始數據, 在此方法的輸出上使用realInverse。
參數: - :(因爲我的數據陣列的長度爲10「是偶數n」是所使用的方法)
數據現在,使用上述方法轉化Re[0] = 10952 Re[1] = 80.052 Re[2] = -307.691 Re[3] = -224.052 Re[4] = -48.308 Re[5] = 12.734 Im[0] = -152 Im[1] = 379.936 Im[2] = 12.734 Im[3] = 427.607 Im[4] = 81.472
所以有些問題: 這個輸出看起來是否正確?在我看來,Re [0]不應該是10952,它是原始數組中所有元素的總和。
好像輸出應稍微修正:(我錯了?)
Re[0] = 80.052
Re[1] = -307.691
Re[2] = -224.052
Re[3] = -48.308
Re[4] = -152
Im[0] = 379.936
Im[1] = 12.734
Im[2] = 427.607
Im[3] = 81.472
現在用張貼在論壇下面的方法:
爲了獲得箱子的大小K優需要計算sqrt(re * re + im * im)
,其中re,im是bin k的FFT輸出中的實部和虛部。
對於您的特定FFT re[k] = a[2*k] and im[k] = a[2*k+1]
。因此,計算功率譜:
for k in 0 to N/2 - 1
{
spectrum[k] = sqrt(sqr(a[2*k]) + sqr(a[2*k+1]))
}
這樣:
spectrum[0] = 388.278
spectrum[1] = 307.955
spectrum[2] = 482.75
spectrum[3] = 94.717
一些問題。這些數據看起來是否正確?我在正確的軌道上嗎? 這會光譜數據,然後繪製出這樣的事:
388.278 at .125 Hz
307.955 at .25 Hz
482.75 at .375 Hz
94.717 at .5 Hz
上午我的路要走?我的目標是生成0到0.5Hz的功率譜密度條形圖
這不是從昨天你的問題的重複:http://stackoverflow.com/questions/4996747/interpreting-jtransform-fft-results? – 2011-02-15 22:32:36