用C语言编写FFT算法 

转http://blog.sina.com.cn/s/blog_65d639d50101buo1.html

#include "math.h"
#define PI 3.1415926
#define SAMPLENUMBER 512 void InitForFFT();
void MakeWave();
void FFT(); int INPUT[SAMPLENUMBER],DATA[SAMPLENUMBER];
float fWaveR[SAMPLENUMBER],fWaveI[SAMPLENUMBER],w[SAMPLENUMBER];
float sin_tab[SAMPLENUMBER],cos_tab[SAMPLENUMBER]; main()
{
int i;
InitForFFT();
MakeWave();
for ( i=;i
{
fWaveR[i]=INPUT[i];
fWaveI[i]=0.0f;
w[i]=0.0f;
}
FFT(fWaveR,fWaveI);
for ( i=;i
{
DATA[i]=w[i];
}
while ( ); // break point
} void FFT(float dataR[SAMPLENUMBER],float dataI[SAMPLENUMBER])
{
int x0,x1,x2,x3,x4,x5,x6,x7,x8,xx;
int i,j,k,b,p,L;
float TR,TI,temp;
for ( i=;i
{
x0=x1=x2=x3=x4=x5=x6=x7=x8=;
x0=i&0x01; x1=(i/)&0x01; x2=(i/)&0x01; x3=(i/)&0x01;x4=(i/)&0x01; x5=(i/)&0x01; x6=(i/)&0x01;x7=(i/)&0x01;x8=(i/)&0x01;
xx=x0*+x1*+x2*+x3*+x4*+x5*+x6*+x7*+x8;
dataI[xx]=dataR[i];
}
for ( i=;i
{
dataR[i]=dataI[i]; dataI[i]=;
} for ( L=;L<=;L++ )
{
b=; i=L-;
while ( i> )
{
b=b*; i--;
}
for ( j=;j<=b-;j++ )
{
p=; i=-L;
while ( i> )
{
p=p*; i--;
}
p=p*j;
for ( k=j;k<;k=k+*b )
{
TR=dataR[k]; TI=dataI[k]; temp=dataR[k+b];
dataR[k]=dataR[k]+dataR[k+b]*cos_tab[p]+dataI[k+b]*sin_tab[p];
dataI[k]=dataI[k]-dataR[k+b]*sin_tab[p]+dataI[k+b]*cos_tab[p];
dataR[k+b]=TR-dataR[k+b]*cos_tab[p]-dataI[k+b]*sin_tab[p];
dataI[k+b]=TI+temp*sin_tab[p]-dataI[k+b]*cos_tab[p];
}
}
}
for ( i=;i
{
w[i]=sqrt(dataR[i]*dataR[i]+dataI[i]*dataI[i]);
}
} void InitForFFT()
{
int i;
for ( i=;i
{
sin_tab[i]=sin(PI**i/SAMPLENUMBER);
cos_tab[i]=cos(PI**i/SAMPLENUMBER);
}
} void MakeWave()
{
int i;
for ( i=;i
{
INPUT[i]=sin(PI**i/SAMPLENUMBER*)*;
}
}

用C实现FFT算法的更多相关文章

  1. FFT算法

    FFT算法的完整DSP实现 傅里叶变换或者FFT的理论参考: [1] http://www.dspguide.com/ch12/2.htm The Scientist and Engineer's G ...

  2. FFT算法的完整DSP实现(转)

    源:FFT算法的完整DSP实现 傅里叶变换或者FFT的理论参考: [1] http://www.dspguide.com/ch12/2.htm The Scientist and Engineer's ...

  3. 快速傅立叶变换(FFT)算法

    已知多项式f(x)=a0+a1x+a2x2+...+am-1xm-1, g(x)=b0+b1x+b2x2+...+bn-1xn-1.利用卷积的蛮力算法,得到h(x)=f(x)g(x),这一过程的时间复 ...

  4. msp430学习笔记-实现开方log等计算及FFT算法(待续)

    MSP430 FFT算法实现 http://bbs.21ic.com/icview-391532-1-1.html http://blog.sina.com.cn/s/blog_6cd2030b010 ...

  5. 2维FFT算法实现——基于GPU的基2快速二维傅里叶变换

    上篇讲述了一维FFT的GPU实现(FFT算法实现——基于GPU的基2快速傅里叶变换),后来我又由于需要做了一下二维FFT,大概思路如下. 首先看的肯定是公式: 如上面公式所描述的,2维FFT只需要拆分 ...

  6. FFT算法的完整DSP实现

    傅里叶变换或者FFT的理论参考: [1] http://www.dspguide.com/ch12/2.htm The Scientist and Engineer's Guide to Digita ...

  7. 基于verilog的FFT算法8点12位硬件实现

    FFT算法8点12位硬件实现 (verilog) 1 一.功能描述: 1 二.设计结构: 2 三.设计模块介绍 3 1.蝶形运算(第一级) 3 2.矢量角度旋转(W) 4 3.CORDIC 结果处理 ...

  8. Matlab:Toeplitz矩阵-向量乘法的快速傅里叶(FFT)算法

    一.$\tt Toeplitz$矩阵与循环($\tt Circulant$)矩阵 定义 为$n\times n$阶循环矩阵. 定义 $T_n(i,j)=t_{j-i} $  为$n\times n$ ...

  9. 模意义下的FFT算法

    //写在前面 单就FFT算法来说的话,下面只给出个人认为比较重要的推导,详细的介绍可参考 FFT算法学习笔记 令v[n]是长度为2N的实序列,V[k]表示该实序列的2N点DFT.定义两个长度为N的实序 ...

随机推荐

  1. ContentPresenter

    这是2年前写了一篇文章 http://www.cnblogs.com/Clingingboy/archive/2008/07/03/wpfcustomcontrolpart-1.html 我们先来看M ...

  2. C++&C#外挂(内存修改)

    大学时候因为主修C#语言(当然现在做的是javaweb开发),那时在网上学了用C#做外挂的教程,外挂嘛,大家都懂的.这里只是低级的修改内存,不涉及到截获数据包.如果是欺骗服务器,修改服务器数据,那就难 ...

  3. Mashmokh and ACM CodeForces - 414D (贪心)

    大意: 给定n结点树, 有k桶水, p块钱, 初始可以任选不超过k个点(不能选根结点), 在每个点放一桶水, 然后开始游戏. 游戏每一轮开始时, 可以任选若干个节点关闭, 花费为关闭结点储存水的数量和 ...

  4. layui怎么通过jquery去控制一个本身已经隐藏的div让他通过点击显示出来

    $('#test_form_show').removeClass('layui-hide');

  5. JS水平移动图片

    横向: <div id=demo style="overflow:hidden;width:200px;border:2px solid #e0e0e0;padding:2px;&qu ...

  6. Markdown语法笔记

    1.文字和图片中怎么让图片换行? 答:在文字和图片之间加入多个空格或者直接按Tab健即可

  7. 使用a标签实现软件下载及下载量统计

    通常最简单的软件下载就是采用如下方式: <a id="welcomeMiddleBtn" href="${basePath}/files/client/instal ...

  8. JS常用操作方法图表

    截取字符串方法 方法名 参数 返回值 例子 String.prototype.substr() (indexStart, length) 都可为负数,length为负数时自动转为0,length不传默 ...

  9. spring cloud学习(五)断路器 Hystrix

    断路器 Hystrix 断路器模式 (云计算设计模式) 断路器模式源于Martin Fowler的Circuit Breaker一文. 在分布式环境中,其中的应用程序执行访问远程资源和服务的操作,有可 ...

  10. PHP:第四章——PHP数组array_diff计算数组差集

    <pre> <?php header("Content-Type:text/html;charset=utf-8"); /*知识点一:array_diff — 计 ...