離散傅利葉變換 DFT(FFT基礎)

2021-09-24 23:17:13 字數 2574 閱讀 7862

本文是從最基礎的知識開始講解,力求用最通俗易懂的文字將問題將的通俗易懂,大神勿噴,多多指教啊,雖然說是從零學習fft,但是基本的數學知識還是要有的,sin,cos,等。

fft(快速傅利葉變換)其本質就是dft,只不過可以快速的計算出dft結果,要弄懂fft,必須先弄懂dft,dft(discretefourier transform) 離散傅利葉變換的縮寫,咱們先來詳細討論dft,因為dft懂了之後,fft就容易的多了

那麼為什麼可以求出正弦波的幅度呢,這裡就要說一下訊號的相關性了,我們也可以利用訊號的相關性檢測訊號波中是否含有某個頻率的訊號波:把乙個待檢測訊號波乘以另乙個訊號波,個新的訊號波,再把這個新的訊號波所有的點進行相加,從相加的結果就可以判斷出這兩個訊號的相似程度,比如下圖:

上圖中a,b圖是待檢測訊號,c,d是3個週期的正弦訊號,很顯然a圖含有正弦波,e=a*c,將e圖的各點相加,很顯然值是正的,這就說明a圖含頻率為3的正弦波,f=b*d,顯然將f圖中各點相加結果約等於0了,說明b圖不含有週期為3的正弦波,這就是dft的原理,也就是離散傅利葉變換的原理,其實就是這麼簡單,只不過dft將待檢測訊號和很多不同頻率的正弦波和余弦波相乘,也就是進行了訊號相關性檢測,從而可以計算出訊號中含有的正弦波的幅度,若含有此頻率的正弦波,那麼幅值不為0,若不含有此正弦波,那麼幅值為0,那麼幅值是如何計算出來的呢,幅值就是上面e圖和f圖各點之和(若是連續訊號的話就是兩訊號乘積求積分了,。。額,不說積分,抽象了)

下面來看個具體的例子:

上面圖一即為待檢測訊號,也就是將進行dft變換的訊號,將它分成16個離散的點,圖2是乙個頻率為1的正弦波,也分成16個點,將對應的點相乘,得到圖3,再將圖3的各個點的幅值相加,結果為10.06,也就是說圖1中的影象含有圖2的正弦波,此時用到的dft點數就為16,10/(n/2)=10/8=1.25,含有的頻率為1的正弦波的幅度就是1.25,以此類推,若要求是否含有頻率為2的正弦波,將圖1和頻率為2的正弦波相乘再求和,。。。。

至於為什麼要除以n/2,數字訊號處理裡面有講,我就不多說了

接下來就是dft的實現了:                   

dft的公式:

其中x(k)表示dft變換後的資料,x(n)為取樣的模擬訊號,公式中的x(n)可以為復訊號,實際當中x(n)都是實訊號,即虛部為0,此時公式可以展開為:

從這個公式可以看出,變換後的資料就是原訊號對cos和sin的相關操作,即進行相乘求和(連續訊號即為積分),為什麼我要將n\n寫在2k*pi後面呢?因為我覺得在對cos和sin進行相關操作時,k代表和頻率為多少的正弦相關,而n和n則是在乙個正弦週期內取樣n個點,取樣間隔為2*pi\n,,n用來步進,一次步進2*pi\n,最後進行累加求和,就得出了x(k),《實用數字訊號處理》這本書的dft章節詳細的解釋了此公式,並且還進行了舉例,看了以後明白了不少,另外,dft之後的資料是對稱的,具體原因還是在那本書上面有,在fft的章節。比如做8點dft,取樣訊號為x(n),dft之後的資料為x(k),那麼x(0)為直流訊號,x(1), x(2), x(3), x(5), x(6), x(7),關於x(4)對稱,即x(1)=x(7), x(2)=x(6),x(3)=x(5),如下圖,是對1+sin(2*pi)進行dft變換,具體的幅值先不關心,只要知道它是對稱的就行了。

接下來就是對公式寫程式了,先將公式展開:

在計算機中可以這樣展開:

float real[n];//用來儲存cos相關。

float imag[n];//用來儲存sin相關。

可以得到如下程式:

for(k=0;k

for(n=0;n

real[k] = real[k] + x[n] * cos(2*pi*k*n/n) ;

imag[k] = imag[k] – x[n] * sin(2*pi*k*n/n);

real就是cos相關的幅值,imag就是sin相關的幅值

最後將sin與cos合成乙個sin,

.matlab中的fft是根據複數形式的dft來計算的,求出來的值其實是對應的頻率密度

就完了。。。

離散傅利葉變換

傅利葉 原理表明 任何連續測量的時序或 訊號,都可以表示為不同頻率的正弦波 訊號的無限疊加。而根據該 原理創立的傅利葉變換演算法利用直接測量到的原始 訊號,以累加方式來計算該 訊號中不同正弦波 訊號的頻率 振幅和相位。岡薩雷斯版 影象處理 裡面的解釋非常形象 乙個恰當的比喻是將傅利葉變換比作乙個玻璃...

離散傅利葉變換

作用 離散傅利葉變換主要是將連續的訊號轉換為離散的訊號。如在時域上連續的有時在頻域上是離散的。然而我們知道,任何的乙個函式都可以由無數個正弦函式和余弦函式相結合的形式來表示。即 如果將乙個影象進行離散傅利葉變換,就是將影象從空間域轉換到頻域上。其中f是空間域的值,f是頻域的值。轉換後的頻域值是複數。...

離散傅利葉變換

離散時間傅利葉級數 dfs 用ws進行週期延拓 連續復指數和離散復指數的區別和聯絡 當k 1時,乙個週期t後,即 n 0 127 取完後之後只旋轉了一圈。當k 2時,乙個週期t後,即 n 0 127 取完後之後只旋轉了兩圈。當k 3時,乙個週期t後,即 n 0 127 取完後之後只旋轉了三圈。dfs...