這也是一個比較現(xiàn)實的問題:現(xiàn)在我們想錄制一個信號的頻譜特征,錄制長度以天計算,對這個時域信號做頻譜分析。
做頻譜分析(FFT / PSD)默認(rèn)的前提大概是:
這段時間內(nèi),信號統(tǒng)計特性不變(平穩(wěn)),比如均值、方差、譜形狀都差不多。
如果一次性用幾天的時域數(shù)據(jù)做一發(fā) FFT,相當(dāng)于默認(rèn)這幾天內(nèi)信號沒變:頻率沒明顯漂移,振幅沒慢慢變化,沒有明顯的工況變化、事件、中斷等
現(xiàn)實里往往不是這樣:設(shè)備白天 / 晚上負(fù)載不同,環(huán)境溫度、轉(zhuǎn)速、電源噪聲隨時間變化,你關(guān)過機 / 斷過電 / 換過工況
結(jié)果就是頻譜會把這些“隨時間變化”都揉在一起,看起來像是譜線變寬、變毛、底噪抬高—不知道是“真正的頻譜特征”,還是“幾天內(nèi)條件變化的混合”。
一般做法:不直接對“幾天”做一次 FFT,而是分段(比如每 10 s / 1 min 一段)。對每一段做 FFT,再做平均、統(tǒng)計或者畫瀑布圖 / 頻譜圖(Spectrogram),這樣既能看到頻譜,又能看到隨時間的演變。
舉例子:
采樣率
錄 1 天:
樣本數(shù):
問題出現(xiàn):
內(nèi)存完全爆炸,單通道、float32:雙精度就更大了,多通道更炸。
FFT 復(fù)雜度 **,,哪怕算法優(yōu)化得不錯,運行時間和內(nèi)存訪問都很恐怖,不適合在普通 PC / MCU 上折騰。
可以這樣做分塊處理如每 1 s / 10 s / 1 min 作為一個塊,做 FFT,邊采邊算或離線滾動計算;如果只關(guān)心到 1 kHz 的頻率,就先抗混疊濾波,再把采樣率從 10 kHz 降到 2–2.5 kHz,極大減小數(shù)據(jù)量;也可以使用在線統(tǒng)計,因為很多 PSD 算法(比如 Welch)本來就是“分段 → 加窗 → FFT → 平均”,天然就適合長時間采集。
FFT 中常出現(xiàn)的 bin 是什么意思?
整段長度為 做 FFT,頻率分辨率是:
如果錄了:
1 小時:
1 天:
聽起來超爽:“哇,頻率分辨率 10 微赫茲!”但現(xiàn)實世界里,是不是配得上這么細(xì)?
信號本身在慢慢漂:比如機械轉(zhuǎn)速、工頻、時鐘、溫漂都會讓線譜在幾天內(nèi)晃來晃去;如果用超窄的 看,譜線會被 smear 成一條毛毛的帶,而不是干凈的一根線。
采樣時鐘本身也在漂,ADC 時鐘晶振自身有 ppm 級的漂移當(dāng)我們追求 μHz 分辨率時,這些漂移早就把頻軸坐標(biāo)搞模糊了。
再長的記錄,只要頻率不是 FFT 柵格整數(shù)倍,加窗后仍然會有泄漏;得到的其實是:超窄的 bin 間距 + 很寬的主瓣(由窗口決定)。真正的“有效分辨率”還是受窗函數(shù)限制,而不是無限提升。
應(yīng)該用“足夠長但不過分”的長度作為單次 FFT,比如 1–10 s;如果真正需要看極低頻(比如 1/day 附近)時,會用專門的低頻分析方法(頻率計數(shù)、Allan variance、擬合漂移等),而不是拿整段直接 FFT。
錄幾天數(shù)據(jù),很可能就是為了看:某一天、某個時刻有沒有異常振動 / 噪聲尖峰;某個工況切換(比如開機、加載、故障)前后頻譜有什么變化;白天 vs 夜間,機器狀態(tài)是否不同。
如果把所有數(shù)據(jù)硬塞進(jìn)一次 FFT,問題是:
頻譜只告訴你“這幾天整體的平均頻率成分”,不告訴你“哪一天 / 哪一分鐘發(fā)生了什么變化”。
具體表現(xiàn)是在瞬時事件(沖擊、故障)會被攤薄到整個幾天的數(shù)據(jù)里,只在譜上“輕輕抬一點底噪”。
合理的做法是使用 STFT / 瀑布圖(spectrogram)/ 時間–頻率分析:比如 10 s 一段,窗口滑動,畫成時間–頻率二維圖,或者至少:每 1 分鐘算一次頻譜 → 建立“頻譜隨時間變化”的曲線(某些譜線的幅度 vs 時間)。
如果目標(biāo)真的是看非常低的頻率,比如:
0.1 mHz(波長 ≈ 10000 s)
1/day ≈ 11.57 μHz 的調(diào)制分量
這已經(jīng)進(jìn)入“時間頻率計量”的范疇,會遇到:采樣時鐘漂移 & 溫漂,采樣時間不均勻 / 丟樣;測量系統(tǒng)本身的 1/f 噪聲、漂移
這時候,直接對原始時域做 FFT 往往不是最佳方式,通常會用:擬合趨勢(多項式、指數(shù)等) → 看殘差;Allan 方差 / Hadamard 方差等統(tǒng)計量;專用的頻率穩(wěn)定度分析,而不是普通的 FFT PSD。
總結(jié)一下:
錄制長度以天計本身沒有問題,甚至是理想的(給你足夠數(shù)據(jù));問題在于:不要把“多天記錄”當(dāng)成“一段信號做一次 FFT”就完事了。
設(shè)計采樣率和分辨率需求
先想清楚最關(guān)心的頻段(比如 0.1 Hz–10 kHz)和希望的頻率分辨率(如 0.1 Hz)。
從這些需求反推:
每段 FFT 需要的長度 。采樣率 至少是最高關(guān)注頻率的 2–5 倍。
把多天數(shù)據(jù)分段
比如:每 10 s / 60 s 做一段,重疊 50%;里面的每一段都去均值、加窗、FFT → 得到短時頻譜。
對頻譜做統(tǒng)計
對每個頻點做時間上的平均、方差、最大值、最小值 → 得到“頻譜統(tǒng)計圖”,或者做瀑布圖 / spectrogram,看隨時間演化。

極低頻成分單獨處理,真正關(guān)心 < 0.01 Hz 的趨勢,用低通/重采樣/趨勢擬合等手段處理,不依賴一次巨大的 FFT。
時頻圖:同時看時間和頻率的分布地圖
下一篇文章會給出具體的測量參數(shù)完成這個測量任務(wù)。