快速傅利葉(FFT)

2021-07-10 12:57:53 字數 1585 閱讀 5791

快速傅利葉:

更加形象的理解傅利葉變換:

大概了解之後:

從傅利葉級數到傅利葉變換:

(**太大,只能裁剪為兩張)

刨根問底的同學:

雷德演算法:

輸出序列是按自然順序排列的,而輸入序列的順序則是「位元反轉」方式排列的。也就是說,將序號用二進位制表示,然後將二進位制數以相反方向排列,再以這個數作為序號。如011變成110,那麼第3個輸入值和第六個輸入值就要交換位置了。

詳見思路:

#include #include #include #include #define pi 3.1415926   //定義圓周率值

#define n 16 //變換點數

using namespace std;

typedef struct compx

compx;

//複數乘法

compx multi(compx a, compx b)

//複數加法

compx add(compx a, compx b)

//複數減法

compx sub(compx a, compx b)

//快速傅利葉

void fft(compx data)

k = n/2;

//實現進製

while(k <= j) //左邊最高位為1

j += k;

}//計算蝶形級數m

int f = n, m;

for(m = 1; (f=f/2) != 1; m++);

//控制級數

for(int n = 1; n <= m; n++)

u = multi(u, w);}}

}int main()

fft(data);

for(int i = 0; i < n; i++)

printf("%lf \t%lf\n", data[i].real, data[i].img);

return 0;

}

執行結果:

matlab對比結果:

FFT快速傅利葉

description 給出兩個n位10進製整數x和y,你需要計算xy。input 第一行乙個正整數n。第二行描述乙個位數為n的正整數x。第三行描述乙個位數為n的正整數y output 輸出一行,即xy的結果。資料範圍 n 60000 乙個整數x a nan 1.a 0x a na a 0 x an...

FFT 快速傅利葉演算法 for java

package com.test.test2 public class fft bitreverse i reve double theta,dt 2 3.14159265358979323846 fft n for i 0 i fft n 1 i 用於頻譜顯示的快速傅利葉變換 param real...

2179 FFT快速傅利葉

time limit 10 sec memory limit 259 mb submit 2803 solved 1431 submit status discuss 給出兩個n位10進製整數x和y,你需要計算x y。第一行乙個正整數n。第二行描述乙個位數為n的正整數x。第三行描述乙個位數為n的正整...