快速傅利葉變換實驗報告 FFT快速傅利葉變換的推導

2021-10-14 21:05:56 字數 1547 閱讀 6038

從我的學習經驗來看,如果不是對dft非常熟悉的,可能會在理解fft演算法的時候有點懵逼。

首先搞清楚,dft計算的是什麼及其公式。

其中 展開後得:

上面多項式可轉化為下面的矩陣:

​​最後看到離散傅利葉就是乙個複數的矩陣乘法計算。

從上面看到矩陣裡的元素全是復指數的冪,根據復指數w的週期性,可以推導出矩陣中相同值的元素。

再有:把dft計算公式按偶數和奇數拆分成兩個。

​​此處省略了幾條公式,本人懶得寫了。

總結下來得到下面公式。

g(k)是偶數部分,h(k)是基數部分,並且是以週期為n/2的週期函式。

由(1)(2)(3)(4)得:

以n=4為例,

​​從上面可以看出,x(0)和x(2)的「輸入引數」是一模一樣的。

個人覺得蝶形運算單元不需要說的特別明白,只需要知道她到底是做了什麼運算就可以了。

這裡拿x(0)和x(2)做說明。

​​看出這裡的優化就是多用了乙個臨時暫存器c來減少一次乘法運算。

下面是fft比較關鍵的一部分內容。

​​文字寫的太草,大概意思是,x(k),g(k),h(k)的運算時一樣的,只是引數不一樣,那麼我以函式形式來說明一下:

xgk(x陣列[長度是n], w[週期是n])

所以快速傅利葉變換是乙個遞迴運算。

下面是重點中的重點了。書本有個叫位碼倒讀的優化概念,不知道是不是本人的理解力有問題,書本裡說的內容我覺得從程式設計的角度去理解不太好弄。

我嘗試用n=8的陣列來解釋。

從圖中可以看到,輸入的小寫x[n]已經通過倒位碼排了序,輸出的大寫x[k]是按順序輸出。

​​當n=8時,log2(8)=3,共3級,每級記做m。從圖里看第一級(m=0)中有4組碟形,每組只有乙個蝶形運算。

把組記做j,乙個蝶形記做k,乙個蝶形運算的陣列間隔是l。

那麼對應的規律是:

l = 1

k=l;

還有乙個很重要的規律,每一組的下標間隔是l*2,即j += l*2;

更重要的來了,每乙個蝶形運算的下標怎麼取?

從圖中可以看出:蝶形的上級是j + k,下級是上級+l。

下面上一下偽**。

//假設x = x1 * w*x2

for (m = 0; m < log2(n); ++m) //第m級}}

}

快速傅利葉變換FFT

fft的作用就不多說了,搞訊號處理的人都會用上。fft的由來 傅利葉變換ft 離散傅利葉變換dft 快速傅利葉變換fft。學習資料 1 陳後金的 數字訊號處理 裡面深入淺出,該有的公式都有,程式設計思想也有。2 一篇系統講述傅利葉變換的帖子 3 學生對fft的理解 4 工程人員對fft的簡單明瞭的總...

快速傅利葉變換 FFT

bzoj 2179 fft快速傅利葉 果題 bzoj2194 請計算c k sigma a i b i k 其中 k i n 並且有 n 10 5。a,b中的元素均為小於等於100的非負整數。注意到i 和 i k有奇妙的聯絡 不妨嘗試把b翻轉 然後就變成卷積了。貼個模板 include define...

快速傅利葉變換 FFT

首先說一下我用fft做什麼,我要做的是多項式乘法,或者說,加速多項式乘法。考慮多項式a x j 0n 1aj xj,它一共有 n 項,我們稱它的次數界為 n。假設我們有兩個次數界為 n 的多項式a x 和b x 要求它們的和是非常簡單的,只需要將對應的係數相加,複雜度為o n 如果要求他們的積,則需...