簡體   English   中英

從FFT提取信號頻率

[英]extracting frequency of signal from FFT

我是MatlabFFT的新手。
我需要從幅度和頻率變化的信號中提取主導頻率。 我嘗試執行下降趨勢 ,然后執行FFT以獲取頻率,但無法擺脫0Hz處的大峰值(DC分量?)。 我對信號使用了diff函數,並通過FFT處理了所得信號。 在這種情況下, FFT輸出的峰值不為零。 我比較了兩條FFT曲線,似乎除了峰值為零外,兩條曲線顯示的光譜相似(不相同)。 我想知道diff函數是一種有效的(並且非常有效的)去趨勢方法,還是我在這里丟失了一些信息? 換句話說,區分信號是否對其頻率有任何影響:[ diff(sin(omega.t))= cos(omega.t) -頻率無變化]?

非常感謝!

通過區分信號,您實際上會使用一種高通濾波器,這不是一種很聰明的高通,它會破壞您的信號。 相反,您可以嘗試其他一些過濾器,例如:

b=fir1(32,2*0.01/fs,'high');
a=1;
FilteredX=filtfilt(x,a,b)

哪里:

x是您的原始信號,

FilteredX是已過濾的信號。

fs-您的采樣頻率。

這樣,您將濾除任何低於0.01的頻率,並且幾乎不會損害其余頻譜,從而使您可以根據需要檢測峰值。

信號x的離散傅立葉變換X定義為(按比例縮放)

X(k) = Sum[ exp(2*pi*i*k*n/N) * x(n) ]

如果我們先處理信號差異,您會得到

Sum[ exp(2*pi*i*k*n/N) * (x(n) - x(n-1)) ]

您可以重新安排給

(1 - exp(2*pi*i*k/N)) * Sum[ exp(2*pi*i*k*n/N) * x(n) ]

即它是原始傅立葉變換的倍數。 k = 0情況下(即零頻率分量),乘數為零,這解釋了為什么這消除了k = 0處的尖峰。

但是請注意,乘數取決於k的值,因此您不會得到相同的信號-您不能僅求第一差就可以消除尖峰。 需要對連續傅立葉變換進行比較,如果g = F(f)h = F(df / dx),

h(k) = i * k * g(k)

即導數的傅立葉變換是原始函數的傅立葉變換,乘以ik

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM