FFT快速傅立叶变换)图文并茂
FFT(快速傅立叶变换)图文并茂附FFT源码,快速傅里叶变换原理,详细,图文并茂FFT算法附源码
代码片段和文件信息
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 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
/*********************************************************************
快速福利叶变换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);
讨论群:303616994
参考文献:
**********************************************************************/
#include
#include “fft.h“
float *SIN_TAB;//定义正弦表的存放空间
int FFT_N = 128;//定义采样点大小
/*******************************************************************
函数原型:struct compx EE(struct compx b1struct compx b2)
函数功能:对两个复数进行乘法运算
输入参数:两个以联合体定义的复数ab
输出参数:a和b的乘积,以联合体的形式输出
*******************************************************************/
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);
}
/******************************************************************
函数原型:void create_sin_tab(float *sin_t,int PointNum)
函数功能:创建一个正弦采样表,采样点数与福利叶变换点数相同
输入参数:*sin_t存放正弦表的数组指针PointNum采样点数
输出参数:无
******************************************************************/
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);
}
/******************************************************************
函数原型:void sin_tab(float pi)
函数功能:采用查表的方法计算一个数的正弦值
输入参数:pi 所要计算正弦值弧度值,范围0--2*PI,不满足时需要转换
输出参数:输入值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;
}
/******************************************************************
函数原型:void cos_tab(float pi)
函数功能:采用查表的方法计算一个数的余弦值
输入参数:pi 所要计算余弦值弧度值,范围0--2*PI,不满足时需要转换
输出参数:输入值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;
}
/*****************************************************************
函数原型:void FFT(struct compx *xin)
函数功能:对输入的复数组进行快速傅里叶变换(FFT)
输入参数:*xin复数结构体组的首地址指针,struct型
输出参数:无
*****************************************************************/
void FFT(struct compx *xin)
{
int fmiklj=0;
register int nv2nm1;
struct compx uwt;
nv2=F
属性 大小 日期 时间 名称
----------- --------- ---------- ----- ----
文件 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
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请发送邮件举报,一经查实,本站将立刻删除。
评论列表(条)