• 大小: 2.86MB
    文件类型: .rar
    金币: 1
    下载: 0 次
    发布日期: 2023-11-15
  • 语言: 其他
  • 标签: FFT  

资源简介

FFT(快速傅立叶变换)图文并茂附FFT源码,快速傅里叶变换原理,详细,图文并茂FFT算法附源码

资源截图

代码片段和文件信息

/*********************************************************************
                         快速福利叶变换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


评论

共有 条评论