快速傅利葉變換 FFT ZZ

2021-05-22 05:35:53 字數 1171 閱讀 3260

#include

#define double_pi   6.283185307179586476925286766559

// 快速傅利葉變換

// data 長度為 (2 * 2^n), data 的偶位為實數部分, data 的奇位為虛數部分

// isinverse表示是否為逆變換

void fft(double * data, int n, bool isinverse = false)

// 相反的二進位制加法

m = nn;

while(m >= 2 && j > m)

j += m;

}// danielson - lanczos 引理應用

mmax = 2;

while(n > mmax)

sin_htheta = sin(0.5 * theta);

sin_theta = sin(theta);

pwr = -2.0 * sin_htheta * sin_htheta;

wr = 1.0;

wi = 0.0;

for(m = 1; m < mmax; m += 2)

sin_htheta = wr;

wr = sin_htheta * pwr - wi * sin_theta + wr;

wi = wi * pwr + sin_htheta * sin_theta + wi;

}mmax = step;}}

輸入資料為data,data是一組複數,偶數字儲存的是複數的實數部分,奇數字儲存的是複數的虛數部分。data的長度與n相匹配。注意:這裡的n並非是data的長度,data的實際長度為(2 * 2^n),儲存了n = 2^n個複數。

輸出也存放在data中。

以正向傅利葉變換為例,作為輸入data中儲存的是以delta為時間間隔時域函式的振幅抽樣值。經過函式計算後data中存放輸出,儲存的是以1/(n * delta)為頻率間隔頻域像函式值。頻率範圍為0hz,1/(n * delta),2/(n * delta) ... (n / 2 - 1) / n * delta, +/- 1 / delta, -(n / 2 - 1) / n * delta ... -2/(n * delta), -1/(n * delta)。注意這是乙個中間大兩邊小的排列。

如果將isinverse設定為true則計算逆傅利葉變換。

傅利葉變換與快速傅利葉變換

作為電子資訊專業的學生老說,這個不知道,或者理解不清楚,是十分不應該的,作為乙個學渣,有時候確實是理解不清楚的 1 首先離散傅利葉變換目的 簡單點說 就是將乙個訊號從時域變換到頻域 標準點說 將以時間為自變數的訊號 與 頻率為自變數的頻譜函式之間的某種關係變換 數學描述 對於 n點序列 其中自然對數...

快速傅利葉變換

學習快速傅利葉變化是量子計算中的基礎,查了很多資料,以下鏈結可以作為參考 本部落格部分知識學習於 最後這個裡面有解釋蝴蝶效應是怎麼來的!實用數字訊號處理 dft 離散傅利葉變換 o n2 計算多項式乘法 fft 快速傅利葉變換 o n log n 計算多項式乘法 fntt ntt 快速傅利葉變換的優...

快速傅利葉變換

傅利葉變換 fft fast fourier transformation 是離散傅氏變換 dft 的快速演算法。即為快速傅氏變換。它是根據離散傅氏變換的奇 偶 虛 實等特性,對離散傅利葉變換的演算法進行改進獲得的。採用這種演算法能使計算機計算離散傅利葉變換所需要的乘法次數大為減少,特別是被變換的抽...