如何獲取FFT序列中每個點的頻率值?

時間 2021-05-06 22:15:43

1樓:Voyager

連續的時間域訊號x(t)以取樣率fs進行取樣後,得到離散的時間域訊號x(n)(即題主所指的向量H),然後經過N點DFT得到離散的頻率域序列X(m)(即題主所指的序列F)。

DFT輸出值X(m)對應的頻率取決於取樣率fs和樣點個數N。例如:如果取樣率為500Hz,然後進行16點DFT,那麼基頻為fs/N=500/16=31.

25Hz,X(m)對應的頻率為基頻的整數倍,即

X(0)對應第1個頻率項,頻率=0 × 31.25=0Hz,X(1)對應第2個頻率項,頻率=1 × 31.25=31.

25Hz,X(2)對應第3個頻率項,頻率=2 × 31.25=62.5Hz,X(3)對應第4個頻率項,頻率=3 × 31.

25=93.75Hz,......

X(15)對應第16個頻率項,頻率=15 × 31.25=468.75Hz.

N點DFT的分析頻率為

更詳細的DFT計算過程見理解離散傅利葉變換

2樓:李澤光

FFT結果任意一點的頻率為:假設訊號取樣頻率為fs,從取樣定理可以知道,訊號抽樣後,抽樣訊號的頻譜是週期譜,其頻譜的週期是抽樣頻率fs,因此,對訊號做FFT時,無論你取多少點,其分析的頻率範圍就是0~fs,所以,如果你做N點的FFT(其實是離散傅利葉變換),則,FFT結果的兩點之間的頻率間隔是fs/N,這樣,任一點k(k=0~N-1)代表的頻率就是k*fs/N。另外,這N個點的FFT值是以N/2為對稱的,所以,一般真正用到的只有N/2個點。

N點取的大只說明譜線密一些而已,注意:取樣定理非常重要啊!

3樓:

你只需要知道這個序列的取樣頻率Fs,然後:

plot(linspace(-Fs/2,Fs/2,length(H)),abs(fftshift(fft(H))));

就OK了。

4樓:楊小當

這幾天我在幫師兄做傅利葉分析,就是從示波器踩過來的資料,儲存在excel檔案中。用matlab讀取,進行fft運算。大概通過幾天的學習dft,了解到如果你拿來乙個向量,N個點。

進行fft後結果當然也是N個點。但是這些點的頻率你是無法得知的。因為你沒有交代著N個點的時間長度。

以我最近幫師兄做的工作為例。示波器對300HZ電壓進行取樣,時長0.1s。

那麼也就是30個周波。由於示波器的取樣頻率很高,所得到的資料是50w個點。這僅僅是0.

1s啊儲存在exce結果通過matlab讀取後,進行fft運算。結果也是50w 個點。於是問題來了,哪乙個點是我要的300hz呢。答案是第31個點。

為什麼呢,因為matlab陣列是從1開始,第乙個點是直流分量。即0hz,那為什麼第31點是300hz呢。因為時間長度是0.

1s。那麼這段訊號進行fft的解析度就是10hz。所以300hz就是 30+1的點。

順便說一句,matlab進行fft運算的結果,幅值要經過*2/n的運算才能得到真實值。n是取樣點個數。還有,直流分量要再除以2,即第乙個點雖然是直流但是幅值是真實值的2倍。

原理高數傅利葉級數講過,已經餵狗。

回答的不好,不對的地方請高手指正。

5樓:Linglai Li

這個問題問得很不清楚,按我的理解可能是這樣的:

H是乙個向量(通常意義下應該是一串等時間取樣的時間序列),設H的取樣率為fs,即取樣時間為dt = 1/fs,取樣點為N,則總時長T = N*dt。對N點序列做FFT得到的頻譜,其分布區間為[0, fs),而頻譜點的間隔即為df = 1/T。根據Nyquist取樣定理,其中只有[0,fs/2)有資訊量,剩下一半是共軛對稱的。

所以這段話有兩個重要的資訊,取樣頻率fs決定了可分辨的頻率範圍是[0,fs/2),而取樣的總時長決定了頻域解析度df

舉個例子:在電力系統中計算諧波。中國電網頻率是50Hz,乙個周波就是20ms,假設取樣是一周波256個點,即取樣率是fs = 256*50 = 12800Hz,dt = 1/12800,取樣點N = 256個(正好乙個週期),則FFT的結果也是256個點,分別對應直流量,基波(50Hz),二次諧波(100Hz),三次諧波(150Hz),直到127次諧波;剩下的129個點是個特殊點,再剩下的127個點是跟1-127次共軛對稱的值。

如果我的理解是對的,題主想問的是要把FFT的結果n個點畫出來,其橫軸應該怎麼設定,那答案就是0:1/T : (n-1)/T,而縱軸一般是兩個分別畫:幅值和相角。

其實matlab自己fft這個函式的例子就有。

6樓:杜佳慧

Fast Fourier transform我覺得這個已經解釋的很好了。

至於為什麼要使用nextpow2,是fft蝶形演算法要求點數是2的整數次冪。當然你寫輸入點數比如1000而不是1024也是可以的,只不過計算時候會自動把1001-1024點的值都補成0。理論上說n取得越大頻率解析度越高,但是時間解析度會下降(比如你想把頻率解析度變成原來兩倍,除非你願意後面那些點都是0——有個高大上的方法稱之為補零法。

現在終於曉得是怎麼來的了。要麼就同樣的精度原來採了一秒鐘就能拿去轉換,現在要等兩秒鐘。所以魚和熊掌不可兼得)。

不過太高也是沒有必要的,你可以自己改改引數感受下。

別的應該沒什麼了吧。

7樓:DJ醬

首先我們得知道H的取樣間隔和取樣的時長即取樣的點數。

比如當取樣間隔為ts=0.01,取樣時長為t=10即1001個點。

設fs=1/ts的話,那麼頻譜的解析度等於fs除以取樣的點數即df=fs/1001

在Matlab裡fft後經過fftshift後頻譜的範圍為f=-fs/2:df:fs/2

然後就可以獲得每個點的頻率了。

n的話看你怎麼用,不填寫n的話它為H的長度但是n超過H長度的話Matlab預設H序列補0到n這麼長。

上面的涉及到的知識點要看訊號處理的書。

8樓:

看過的最好的講解傅利葉變換的文章

關於如何選取合適的n,可以參考胡廣書《數字訊號處理(第二版)》3.7節

如何使《三體》中的「點牆族」或者是《刀劍神域 序列之爭》的AR技術的實現成為可能

Conquerher 例如在投影到桌面上的鍵盤上敲擊可以進行輸入,空中的手勢指令可以可以被識別等等 現在主要的問題是反應速度和準確率達不到要求,以及布置裝置的成本太高,但是實現起來已經沒有什麼太大的技術難關了 無非就是各種鏡頭和顯示裝置的配合與計算機視覺領域的一些常規操作罷了 題主耐心等幾年吧,如果...

如何在金融時間序列資料中構造iid的樣本?

長沙王太傅 自相關是任何時間序列資料都存在的問題。在金融資料中這個問題更為嚴峻,因為不光是yt 1會影響yt,過去的volatility也會顯著的影響yt。這就是所謂的ARCH或者GARCH effect。 伊格諾 有overlaping當然不能假設iid,所以金融時間序列很多時候都是考慮non o...

如何直觀地理解傅利葉變換中的時間 相位 負頻率等概念?

天涯明月夜 看到這個問題,我想起了以前上學時疑惑過的問題。傅利葉級數假定目標函式為週期函式。傅利葉變換假定已知函式隨時間變化的規律。那麼問題來了,這不是相當於用以後的資訊來給出當前事物的狀態嗎?違反因果律啊!後來同學解釋說可以這麼理解,用以後的資訊來分析當前發生的事物的狀態,對了,沒問題。不對,也沒...