FFT原理及实现.docVIP

  1. 1、本文档共19页,可阅读全部内容。
  2. 2、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。
  3. 3、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  4. 4、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  5. 5、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  6. 6、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  7. 7、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  8. 8、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
FFT原理及实现

哈!经过连续几个晚上的奋战,终于弄懂了FFT推导过程及实现! Happy? 基2 FFT总的思想是将输入信号对半分割,再对半分割,再再对半分割(以下省略10000个再再...?)直至分割到2点. 两点DFT简化 假设输入为x[0],x[1];输出为X[0],X[1]. 伪代码如下 : 周期离散信号是由无穷多相同的周期序列在时间轴上组成的,假设周期为N,即每个周期序列都有N个元素,而这样的周期序列有无穷多个,由于无穷多个 周期序列都相同,所以可以只取其中一个周期就足以表示整个序列了,这个被抽出来表示整个序列特性的周期称为主值周期,这个序列称为主值序列。然后以N对应 的频率作为基频构成傅立叶级数展开所需要的复指数序列ek(n)=exp(j*2pi*k*n/N),用主值序列与复指数序列取相关(乘加运算),得出每 个主值在各频率上的频谱分量,这样就表示出了周期序列的频谱特性 // ------------------------------------------------------------------ #define N 2 #define PI 3.1415926 // ------------------------------------------------------------------ int i, j for(i=0, X[i]=0.0; iN; i++) for(j=0; jN; j++) X[i] += x[j] * ( cos(2*PI*i*j/N) - sin(2*PI*i*j/N) ); 注意到(我想Audio编解码很多时候都是对cos,sin进行优化!) j=0 j=1 i=0 cos 1 sin 0 tw 1 cos 1 sin 0 tw 1 i=1 cos 1 Sin 0 tw 1 cos -1 sin 0 tw -1 X[0] = x[0]*(1-0) + x[1]*(1-0) = x[0] + 1*x[1]; X[1] = x[0]*(1-0) + x[1]*(-1-0) = x[0] - 1*x[1]; 这就是单个2点蝶形算法. FFT实现流程图分析(N=8,以8点信号为例) FFT implementation of an 8-point DFT as two 4-point DFTs and four 2-point DFTs 8点(Layer表示层, gr表示当前层的颗粒) 下面以LayerI为例. LayerI部分,具有4个颗粒,每个颗粒2个输入 (注意2个输入的来源,由时域信号友情提供,感谢感谢?) 我们将输入x[k]分为两部分x_r[k], x_i[k].具有实部和虚部,时域信号本没有虚部的,因此可以让x_i[k]为0.那么为什么还要画蛇添足分为实部和虚部呢?这是因为LayerII, LayerIII的输入是复数,为了编码统一而强行分的.当然你编码时可以判断当前层是否为1来决定是否分.但是我想每个人最后都会倾向分的. 旋转因子 tw = cos(2*PI*k/N)-j*sin(2*PI*k/N);也可以分为实部和虚部,令其为tw_r, tw_i; 则tw = tw_r - j*tw_i; X[k] = (x_r[k] + j*x_i[k]) + (tw_r–j*tw_i) * (x_r[k+N/2]+j*x_i[k+N/2]) 则 X_R[k] = x_r[k] + tw_r*x_r[k+N/2] + tw_i*x_i[k+N/2]; X_I[k] = x_i[k] - tw_i*x_r[k+N/2] + tw_r*x_i[k+N/2]; LayerII部分,具有2个颗粒,每个颗粒4个输入 (注意4个输入的来源,由LayerI友情提供,感谢感谢?) LayerIII部分,具有1个颗粒,每个颗粒8个输入 (注意8个输入的来源,由LayerII友情提供,感谢感谢?) LayerI, LayerII, LayerIII从左往右,蝶形信号运算流非常明显! 假令输入为x[k], x[k+N/2],输出为X[k], X[k+N/2]. x[k]分解为x_r[k], x_i[k]部分 则该蝶形运算为 X[k] = (x_r[k]-j*x_i[k]) + (x_r[k+N/2]-j*x_i[k+N/2])*(cos(2*PI*k/N)-j*sin(2*PI*k/N)); 再令cos(2*PI*k/N)为tw1, sin(2*PI*k/N)为tw2则 X[k] =

文档评论(0)

cuotian + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档