c語言資料結構演算法之實現快速傅利葉變換
本例項將實現二維快速傅利葉變換,同時也將藉此例項學習用c語言實現矩陣的基本操作、複數的基本掾作,複習所學過的動態記憶體分配、檔案操作、結構指標的函式呼叫等內容。
很久以來,傅利葉變換一直是許多領域,如線性系統、光學、概率論、量子物理、天線、數字影象處理和訊號分析等的乙個基本分析工具,但是即便www.cppcns.com使用計算速度驚人的計算機計算離散傅利葉變換所花費的時間也常常是難以接受的,因此導致了快速傅利葉變換(fft)的產生。
本例項將對乙個二維陣列進行正、反快速傅利葉變換。正傅利葉變換時dfft()函式先呼叫fft()按行對陣列進行變換,再對結果呼叫fft()按列進行變換,此時完成了快速傅利葉變換,再呼叫rdfft()函式進行傅利葉逆變換。如果程式設計正確的話,變換的結果應與原陣列相同。
例項**:
#include
#include &l>
#include
#define pi 3.14159265358979323846
struct complex
cplx , * hfield , * s , * r , * w;
int n , m;
int www.cppcns.comln , lm;
void initiate ();
void dfft ();
void rdfft ();
void showresult ();
void fft (int l , int k);
int reverse (int t , int k);
void w (int l);
int loop (int l);
void conjugate ();
void add (struct complex * x , struct complex * y , struct complex * z);
void sub (struct complex * x , struct complex * y , struct complex * z);
void mul (struct complex * x , struct complex * y , struct complex * z);
struct complex * hread(int i , int j);
void hwrite (int i , int j , struct complex x);
void main ()
void initiate ()
if ((lm = loop (m)) == -1)
hfield = (struct complex *) malloc (n * m * sizeof (cplx));
if (fread (hfield , sizeof (cplx) , m * n , df) != (unsigned) (m * n))
fclose (df);}
void dfft ()
fft(l , k);
for (j = 0 ; j < n ; j++)
hwrite (i , j , r[j]);
} free (r);
www.cppcns.com free (s);
free (w);
l = m;
k = lm;
w = (struct complex *) calloc (l , sizeof (cplx));
r = (struct complex *) calloc (l , sizeof (cplx));
s = (struct complex *) calloc (l , sizeof (cplx));
w (l);
for (i = 0 ; i < n ; i++)
fft(l , k);
for (j = 0 ; j < m ; j++)
hwrite (j , i , r[j]);
} free (r);
free (s);
free (w);}
void rdfft ()
void showresult ()
}}void fft (int l , int k)
}nv = nv >> 1;
} for (i = 0 ; i < l ; i++) }
int reverse (int t , int k)
return y;}
void w (int l)}
int loop (int l)
if (l == (1 << (i - 1)))
return i - 1;
} return -1;}
void conjugate ()
}}struct complex * hread (int i , int j)
void hwrite (int i , int j , struct complex x)
void add (struct complex * x , struct complex * y , struct complex * z)
void sub (struct complex * x , struct complex * y , struct complex * z)
void mul (struct complex * x , struct complex * y , struct complex * z)
本文標題: c語言資料結構演算法之實現快速傅利葉變換
本文位址:
資料結構 C語言實現快速排序演算法
先從數列中選取乙個數為基準數 把所有大於基準數的數放在基準數的右邊,小於基準數的放在左邊 對上面的數列以上個基準數為軸,分別對左右兩個數列再次遞迴呼叫函式選擇新的基準數繼續比較 include intquick int arry,int left,int right arry left arry l...
C語言資料結構與演算法 快速排序
基本思想 該方法太浪費空間,需要許多空間 改進如下 只需要乙個額外的位置 依此將後續的值與所選界點進行比較 比界點大的不移動 low 或high 比界點小的移動到前面 前面有空,從後面移動乙個比界點大的 後面有空,從前面移動乙個比界點小的。當low high 時不用繼續了,並將 0 號位置的中心點放...
快速排序 C語言資料結構
include include void swap int p1,int p2 void quick sort int a,int left,int right 函式功能 使用快速排序法進行排序 從小到大 函式原型 void quick sort int a,int left,int right 函...