深入理解FFT

2021-07-31 00:13:16 字數 1433 閱讀 6882

fft是離散傅利葉變換的快速演算法,可以將乙個訊號變換

到頻域。有些訊號在時域上是很難看出什麼特徵的,但是如

果變換到頻域之後,就很容易看出特徵了。這就是很多訊號

分析採用fft變換的原因。另外,fft可以將乙個訊號的頻譜

提取出來,這在頻譜分析方面也是經常用的。 

雖然很多人都知道fft是什麼,可以用來做什麼,怎麼去

做,但是卻不知道fft之後的結果是什意思、如何決定要使用

多少點來做fft。

現在圈圈就根據實際經驗來說說fft結果的具體物理意義。

乙個模擬訊號,經過adc取樣之後,就變成了數碼訊號。取樣

告訴我們,取樣頻率要大於訊號頻率的兩倍,這些我就

不在此羅嗦了。

取樣得到的數碼訊號,就可以做fft變換了。n個取樣點,

經過fft之後,就可以得到n個點的fft結果。了方便進行fft

運算,通常n取2的整數次方。

假設取樣頻率為fs,訊號頻率f,取樣點數為n。那麼fft

之後結果就是乙個為n點的複數。每乙個點就對應著乙個頻率

點。這個點的模值,就是該頻率值下的幅度特性。具體跟原始

訊號的幅度有什麼關係呢?假設原始訊號的峰值為a,那麼fft

的結果的每個點(除了第乙個點直流分量之外)的模值就是a

的n/2倍。而第乙個點就是直流分量,它的模值就是直流分量

的n倍。而每個點的相位呢,就是在該頻率下的訊號的相位。

第乙個點表示直流分量(即0hz),而最後乙個點n的再下乙個

點(實際上這個點是不存在的,這裡是假設的第n+1個點,也

可以看做是將第乙個點分做兩半分,另一半移到最後)則表示

取樣頻率fs,這中間被n-1個點平均分成n等份,每個點的頻率

依次增加。例如某點n所表示的頻率為:fn=(n-1)*fs/n。

由上面的公式可以看出,fn所能分辨到頻率為為fs/n,如果

取樣頻率fs為1024hz,取樣點數為1024點,則可以分辨到1hz。

1024hz的取樣率取樣1024點,剛好是1秒,也就是說,取樣1秒

時間的訊號並做fft,則結果可以分析到1hz,如果取樣2秒時

間的訊號並做fft,則結果可以分析到0.5hz。如果要提高頻率

分辨力,則必須增加取樣點數,也即取樣時間。頻率解析度和

取樣時間是倒數關係。

假設fft之後某點n用複數a+bi表示,那麼這個複數的模就是

an=根號a*a+b*b,相位就是pn=atan2(b,a)。根據以上的結果,

就可以計算出n點(n≠1,且n<=n/2)對應的訊號的表示式為:

an/(n/2)*cos(2*pi*fn*t+pn),即2*an/n*cos(2*pi*fn*t+pn)。

對於n=1點的訊號,是直流分量,幅度即為a1/n。

由於fft結果的對稱性,通常我們只使用前半部分的結果,

即小於取樣頻率一半的結果。

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...

mysql 索引深入理解 深入理解MySql的索引

為什麼索引能提高查詢速度 先從 mysql的基本儲存結構說起 mysql的基本儲存結構是頁 記錄都存在頁裡邊 各個資料頁可以組成乙個雙向鍊錶每個資料頁中的記錄又可以組成乙個單向鍊錶 每個資料頁都會為儲存在它裡邊兒的記錄生成乙個頁目錄,在通過主鍵查詢某條記錄的時候可以在頁目錄中使用二分法快速定位到對應...

深入理解C語言 深入理解指標

關於指標,其是c語言的重點,c語言學的好壞,其實就是指標學的好壞。其實指標並不複雜,學習指標,要正確的理解指標。指標也是一種變數,占有記憶體空間,用來儲存記憶體位址 指標就是告訴編譯器,開闢4個位元組的儲存空間 32位系統 無論是幾級指標都是一樣的 p操作記憶體 在指標宣告時,號表示所宣告的變數為指...