新闻中心

EEPW首页 > 模拟技术 > 设计应用 > 实数FFT算法的设计及其C语言实现

实数FFT算法的设计及其C语言实现

作者:时间:2013-09-22来源:网络收藏
aI[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];

3 DIT FFT 算法的基本思想分析

  我们知道N点FFT运算可以分成LOGN2 级,每一级都有N/2个碟形。DIT FFT的基本思想是用3层循环完成全部运算(N点FFT)。

  第一层循环:由于N=2m需要m级计算,第一层循环对运算的级数进行控制。

  第二层循环:由于第L级有2L-1个蝶形因子(乘数),第二层循环根据乘数进行控制,保证对于每一个蝶形因子第三层循环要执行一次,这样,第三层循环在第二层循环控制下,每一级要进行2L-1次循环计算。

  第三层循环:由于第L级共有N/2L个群,并且同一级内不同群的乘数分布相同,当第二层循环确定某一乘数后,第三层循环要将本级中每个群中具有这一乘数的蝶形计算一次,即第三层循环每执行完一次要进行N/2L个碟形计算。

  可以得出结论:在每一级中,第三层循环完成N/2L个碟形计算;第二层循环使第三层循环进行 2L-1次,因此,第二层循环完成时,共进行2L-1 *N/2L=N/2个碟形计算。实质是:第二、第三层循环完成了第L级的计算。

  几个要注意的数据:

  ① 在第L级中,每个碟形的两个输入端相距b=2L-1个点。

  ② 同一乘数对应着相邻间隔为2L个点的N/2L个碟形。

  ③ 第L级的2L-1个碟形因子WPN 中的P,可表示为p = j*2m-L,其中j = 0,1,2,...,(2L-1-1)。

  以上对嵌入式系统中的进行了分析与研究。读者可以将其算法直接应用到自己的系统中,欢迎来信共同讨论。(Email:xiaowanang@163.net)

  附128点DIT FFT函数:

  /* 采样来的数据放在dataR[ ]数组中,运算前dataI[ ]数组初始化为0 */

  void FFT(float dataR[],float dataI[])

  {int x0,x1,x2,x3,x4,x5,x6;

  int L,j,k,b,p;

c语言相关文章:c语言教程




关键词: FFT算法 C语言实现

评论


相关推荐

技术专区

关闭