資源簡(jiǎn)介
FFT(快速傅立葉變換)圖文并茂附FFT源碼,快速傅里葉變換原理,詳細(xì),圖文并茂FFT算法附源碼

代碼片段和文件信息
/*********************************************************************
?????????????????????????快速福利葉變換C程序包
函數(shù)簡(jiǎn)介:此程序包是通用的快速傅里葉變換C語言函數(shù),移植性強(qiáng),以下部分不依
??????????賴硬件。此程序包采用聯(lián)合體的形式表示一個(gè)復(fù)數(shù),輸入為自然順序的復(fù)
??????????數(shù)(輸入實(shí)數(shù)是可令復(fù)數(shù)虛部為0),輸出為經(jīng)過FFT變換的自然順序的
??????????復(fù)數(shù).此程序包可在初始化時(shí)調(diào)用create_sin_tab()函數(shù)創(chuàng)建正弦函數(shù)表,
??????????以后的可采用查表法計(jì)算耗時(shí)較多的sin和cos運(yùn)算,加快可計(jì)算速度.與
??????????Ver1.1版相比較,Ver1.2版在創(chuàng)建正弦表時(shí)只建立了1/4個(gè)正弦波的采樣值,
??????????相比之下節(jié)省了FFT_N/4個(gè)存儲(chǔ)空間
使用說明:使用此函數(shù)只需更改宏定義FFT_N的值即可實(shí)現(xiàn)點(diǎn)數(shù)的改變,F(xiàn)FT_N的
??????????應(yīng)該為2的N次方,不滿足此條件時(shí)應(yīng)在后面補(bǔ)0。若使用查表法計(jì)算sin值和
??????????cos值,應(yīng)在調(diào)用FFT函數(shù)前調(diào)用create_sin_tab()函數(shù)創(chuàng)建正弦表
函數(shù)調(diào)用:FFT(s);
討論群:303616994
參考文獻(xiàn):
**********************************************************************/
#include?
#include?“fft.h“
float?*SIN_TAB;//定義正弦表的存放空間
int?FFT_N?=?128;//定義采樣點(diǎn)大小?
/*******************************************************************
函數(shù)原型:struct?compx?EE(struct?compx?b1struct?compx?b2)
函數(shù)功能:對(duì)兩個(gè)復(fù)數(shù)進(jìn)行乘法運(yùn)算
輸入?yún)?shù):兩個(gè)以聯(lián)合體定義的復(fù)數(shù)ab
輸出參數(shù):a和b的乘積,以聯(lián)合體的形式輸出
*******************************************************************/
struct?compx?EE(struct?compx?astruct?compx?b)
{
?struct?compx?c;
?c.real=a.real*b.real-a.imag*b.imag;
?c.imag=a.real*b.imag+a.imag*b.real;
?return(c);
}
/******************************************************************
函數(shù)原型:void?create_sin_tab(float?*sin_t,int?PointNum)
函數(shù)功能:創(chuàng)建一個(gè)正弦采樣表,采樣點(diǎn)數(shù)與福利葉變換點(diǎn)數(shù)相同
輸入?yún)?shù):*sin_t存放正弦表的數(shù)組指針PointNum采樣點(diǎn)數(shù)
輸出參數(shù):無
******************************************************************/
void?create_sin_tab(float?*sin_tint?PointNum)
{
??int?i;
??SIN_TAB=sin_t;
??FFT_N=PointNum;
??for(i=0;i<=FFT_N/4;i++)
SIN_TAB[i]=sin(2*PI*i/FFT_N);
}
/******************************************************************
函數(shù)原型:void?sin_tab(float?pi)
函數(shù)功能:采用查表的方法計(jì)算一個(gè)數(shù)的正弦值
輸入?yún)?shù):pi?所要計(jì)算正弦值弧度值,范圍0--2*PI,不滿足時(shí)需要轉(zhuǎn)換
輸出參數(shù):輸入值pi的正弦值
******************************************************************/
float?sin_tab(float?pi)
{
??int?n=0;
??float?a=0;
???n=(int)(pi*FFT_N/2/PI);
??if(n>=0&&n<=FFT_N/4)
????a=SIN_TAB[n];
??else?if(n>FFT_N/4&&n ????{
?????n-=FFT_N/4;
?????a=SIN_TAB[FFT_N/4-n];
????}
??else?if(n>=FFT_N/2&&n<3*FFT_N/4)
????{
?????n-=FFT_N/2;
?????a=-SIN_TAB[n];
???}
??else?if(n>=3*FFT_N/4&&n<3*FFT_N)
????{
?????n=FFT_N-n;
?????a=-SIN_TAB[n];
???}
??return?a;
}
/******************************************************************
函數(shù)原型:void?cos_tab(float?pi)
函數(shù)功能:采用查表的方法計(jì)算一個(gè)數(shù)的余弦值
輸入?yún)?shù):pi?所要計(jì)算余弦值弧度值,范圍0--2*PI,不滿足時(shí)需要轉(zhuǎn)換
輸出參數(shù):輸入值pi的余弦值
******************************************************************/
float?cos_tab(float?pi)
{
???float?api2;
???pi2=pi+PI/2;
???if(pi2>2*PI)
?????pi2-=2*PI;
???a=sin_tab(pi2);
???return?a;
}
/*****************************************************************
函數(shù)原型:void?FFT(struct?compx?*xin)
函數(shù)功能:對(duì)輸入的復(fù)數(shù)組進(jìn)行快速傅里葉變換(FFT)
輸入?yún)?shù):*xin復(fù)數(shù)結(jié)構(gòu)體組的首地址指針,struct型
輸出參數(shù):無
*****************************************************************/
void?FFT(struct?compx?*xin)
{
??int?fmiklj=0;
??register?int?nv2nm1;
??struct?compx?uwt;
???nv2=F
?屬性????????????大小?????日期????時(shí)間???名稱
-----------?---------??----------?-----??----
?????文件???????5590??2013-11-30?09:14??FFT(快速傅立葉變換)\fft.c
?????文件????3546785??2013-08-29?13:00??FFT(快速傅立葉變換)\FFT原理(講得很具體).pdf
?????文件?????????80??2013-11-30?10:29??FFT(快速傅立葉變換)\FFT說明.txt
?????目錄??????????0??2013-11-30?09:12??FFT(快速傅立葉變換)
-----------?---------??----------?-----??----
??????????????3552455????????????????????4
評(píng)論
共有 條評(píng)論