如何在 JMP 中執行頻譜分析?我有超過 800k 點的數據系列,我想在頻域中查看它們。我嘗試進行“時間序列分析”來創建譜密度數據,但 JMP 只是掛起。我讓它掛了幾分鐘,然後我的顯卡死了......真是巧合!
如果您想嘗試一下,請附上數據文件,第一列是以秒為單位的時間戳,第二列是數據。請告訴我是否有辦法做到這一點。
謝謝,
賈森
回复: 如何進行光譜分析?你好丹尼爾,
我同意菲奧娜的請求。 您可以分享一下代碼嗎?
謝謝
回复: 如何進行光譜分析?您能否分享您的腳本並讓我嘗試在我的數據中運行 FFT?
回复: 如何進行光譜分析?<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />出色的! 感謝您提供有關這些數據的信息。 我很高興我的分析符合您的期望。 JMP 實際上非常適合頻域數據的統計分析,但其他一些工具(例如 MATLAB)非常適合執行專門的操作,例如對任意大小的數組執行 FFT、濾波器設計、卷積等。這就是 JMP 的可擴展性非常好的原因 - 能夠訪問 SAS、MATLAB 和 R,從而能夠在需要時利用這些工具,然後將數據帶回 JMP 進行可視化和分析。
我通過我用 JSL 編寫的 FFT 應用程序運行了您的數據 - 它的工作方式就像 JMP 平台:

當您單擊“確定”時,它正在連接到 MATLAB 並運行一些預先存在的代碼,將時域數據轉換為頻域,然後將數據返回到新的 JMP 數據表以進行進一步分析和繪圖。 如果我需要在 MATLAB 中對信號進行額外處理(例如運行帶通濾波器),我也可以在 MATLAB 中執行此操作,然後再將數據返回到 JMP。
但當數據返回 JMP 時,我可以根據需要進行分析或可視化。 例如,我使用本地數據濾波器僅關注整流交流源分量 > 3 Hz 的信號部分。

然後使用“行”>“行選擇”>“選擇主導”來關注 Pareto 前沿上的點。 JMP 確定了 33 個 FFT 箱,我可以使用“表”>“子集”對其進行子集化。 如果我選中“鏈接到原始數據表”,則子集和完整數據集將被鏈接。 我放置了一個 + 標記,並將子集中的這些點著色為紅色,並且它們在原始數據表中重新著色。

根據您試圖回答的問題,將決定分析這些數據的最佳方法,但是一旦轉換後的數據返回 JMP,您就可以以任何您想要的方式探索它。 @Xan 關於在 JSL 中使用 FFT 函數的建議也很棒。 我只是選擇使用 MATLAB,因為我已經有了一個在 MATLAB 中執行各種信號處理操作的代碼庫,而且我還經常需要使用 IIR 或 FIR 濾波器來過濾數據,作為分析步驟的一部分,MATLAB 非常適合這項任務(用於設計濾波器和執行濾波步驟)。
回复: 如何進行光譜分析?感謝您的觀看!是的,我找到了一些其他軟件(AD Instruments 的 Labchart)來進行 FFT,並且同意有一些有趣的峰值。120 Hz 和 240 Hz 表示來自整流交流電源的噪聲。一些 < 1 Hz 的能量分解為具有一致倍數的峰值,可能與系統中機械部件的旋轉頻率相關。
我發帖主要是為了看看 JMP 中是否有一些我沒有正確使用的功能,但看來頻域統計分析確實不是他們的事。
回复: 如何進行光譜分析?使用 JMP 11 中 MATLAB 的 JMP 接口,通過我在 MATLAB 中編寫的 FFT 分析腳本運行這些數據。 看起來你的 SR 是 1000Hz,所以這可以讓你的分辨率達到你的奈奎斯特頻率。 500赫茲。 很多低頻能量朝向直流,但在 40 Hz - 300 Hz 之間似乎確實存在一些有趣的峰值。 這是您對這些數據所期望的結果類型嗎?
使用 MATLAB 返回的結果在 Graph Builder 中繪製:

回复: 如何進行光譜分析?時間序列中的頻譜密度命令顯然使用了較慢的算法。 有一個名為“FFT”的 JSL 函數,它將使用快速算法,但前提是點數是一個很好的整數(有很多小因子)。 例如,如果我將數據截斷為恰好 800,000 行,則立即返回以下 JSL:
data = Column( “y” ) << 獲取值;顯示( N 行( 數據 ) );
f = FFT( {數據} );顯示( N 行( f[1] ) );
當前數據表() << 新列("freq", 設置值( f[1] ));