700字范文,内容丰富有趣,生活中的好帮手!
700字范文 > 快速傅里叶变换c语言函数 C语言实现FFT(快速傅里叶变换)

快速傅里叶变换c语言函数 C语言实现FFT(快速傅里叶变换)

时间:2024-02-05 15:38:02

相关推荐

快速傅里叶变换c语言函数 C语言实现FFT(快速傅里叶变换)

while(1); }

#include

#include

/********************************************************************* 快速傅立叶变换C程序包

函数简介:此程序包是通用的快速傅里叶变换C语言函数,移植性强,以下部分不依 赖硬件。此程序包采用联合体的形式表示一个复数,输入为自然顺序的复 数(输入实数是可令复数虚部为0),输出为经过FFT变换的自然顺序的 复数.此程序包可在初始化时调用create_sin_tab()函数创建正弦函数表, 以后的可采用查表法计算耗时较多的sin和cos运算,加快可计算速度.与 Ver1.1版相比较,Ver1.2版在创建正弦表时只建立了1/4个正弦波的采样值, 相比之下节省了FFT_N/4个存储空间

使用说明:使用此函数只需更改宏定义FFT_N的值即可实现点数的改变,FFT_N的

应该为2的N次方,不满足此条件时应在后面补0。若使用查表法计算sin值和 cos值,应在调用FFT函数前调用create_sin_tab()函数创建正弦表 函数调用:FFT(s); 时 间:-2-20 版 本:Ver1.2 参考文献:

**********************************************************************/ #include

#define FFT_N 128 //定义傅立叶变换的点数

#define PI 3.1415926535897932384626433832795028841971 //定义圆周率值

struct compx {float real,imag;};

//定义一个复数结构

struct compx s[FFT_N]; //FFT输入和输出:从S[0]开始存放,根据大小自己定义 float SIN_TAB[FFT_N/4+1]; //定义正弦表的存放空间

/******************************************************************* 函数原型:struct compx EE(struct compx b1,struct compx b2) 函数功能:对两个复数进行乘法运算 输入参数:两个以联合体定义的复数a,b 输出参数:a和b的乘积,以联合体的形式输出

*******************************************************************/ struct compx EE(struct compx a,struct 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); }

/****************************************************************** 函数原型:void create_sin_tab(float *sin_t)

函数功能:创建一个正弦采样表,采样点数与傅立叶变换点数相同 输入参数:*sin_t存放正弦表的数组指针 输出参数:无

******************************************************************/ void create_sin_tab(float *sin_t) {

int i;

for(i=0;i<=FFT_N/4;i++) sin_t[i]=sin(2*PI*i/FFT_N); }

/****************************************************************** 函数原型:void sin_tab(float pi)

函数功能:采用查表的方法计算一个数的正弦值

输入参数:pi 所要计算正弦值弧度值,范围0--2*PI,不满足时需要转换 输出参数:输入值pi的正弦值

******************************************************************/ float sin_tab(float pi) { int n;

float a;

n=(int)(pi*FFT_N/2/PI);

if(n>=0&&n<=FFT_N/4) a=SIN_TAB[n];

else if(n>FFT_N/4&&nn-=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; }

/****************************************************************** 函数原型:void cos_tab(float pi)

函数功能:采用查表的方法计算一个数的余弦值

输入参数:pi 所要计算余弦值弧度值,范围0--2*PI,不满足时需要转换 输出参数:输入值pi的余弦值

******************************************************************/ float cos_tab(float pi) {

float a,pi2; pi2=pi+PI/2; if(pi2>2*PI) pi2-=2*PI; a=sin_tab(pi2); return a;

}

/***************************************************************** 函数原型:void FFT(struct compx *xin,int N)

函数功能:对输入的复数组进行快速傅里叶变换(FFT) 输入参数:*xin复数结构体组的首地址指针,struct型 输出参数:无

*****************************************************************/ void FFT(struct compx *xin) {

int f,m,nv2,nm1,i,k,l,j=0; struct compx u,w,t;

nv2=FFT_N/2; //变址运算,即把自然顺序变成倒位序,采用雷德算法

nm1=FFT_N-1;

for(i=0;i{

if(it=xin[j]; xin[j]=xin[i]; xin[i]=t;

}

k=nv2; //求j的下一个倒位序

while(k<=j) //如果k<=j,表示j的最高位为1 {

j=j-k; //把最高位变成0

k=k/2; //k/2,比较次高位,依次类推,逐个比较,直到某个位为0 }

j=j+k; //把0改为1

以上是由77cn范文大全为大家整理的C语言实现FFT(快速傅里叶变换)的相关范文,本文关键词为语言,实现,FFT,快速,傅里叶,变换,函数,原型,void,您可以从右上方搜索框检索更多相关文章,如果您觉得有用,请继续关注我们并推荐给您的好友,您可以在综合文库中查看更多范文。

C语言实现FFT(快速傅里叶变换).doc

免费范文网为全国范文类知名网站,下载全文稍作修改便可使用,即刻完成写稿任务。

已有11人下载

百度搜索“77cn”或“免费范文网”即可找到本站免费阅读全部范文。收藏本站方便下次阅读,免费范文网,提供经典小说综合文库C语言实现FFT(快速傅里叶变换)在线全文阅读。

本文来自:免费范文网() 转载请注明出处!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。