《信号处理FFT算法.docVIP

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

实验2 基2时域抽选的FFT程序设计与调试 一、实验目的 掌握信号处理,尤其是数字信号处理的基本原理和方法。要求能通过实验熟练掌握基2时域抽选的快速傅立叶变换算法(FFT)的基本原理,了解二维及多维快速傅立叶变换算法。 二、实验原理 1.复数类型 对于FFT算法涉及的复数运算,使用自定义的COMPLEX来定义复数类型,其使用方法与常规类型(如int,float,double)相似。 typedef struct { float real, imag; } COMPLEX; 2.FFT基本原理 FFT改进了DFT的算法,减少了运算量,主要是利用了旋转因子W的两个性质: (a)W的周期性:W= W (b) W的对称性:W=-W FFT把N点DFT运算分解为两组N/2点的DFT运算,然后求和: 其中, 在计算X1(k)与X2(k)时,仍利用上述公式,把它们看成是新的X(k)。如此递归下去,便是FFT算法。 3.蝶形运算 从基2时域抽选FFT运算流图可知: ① 蝶形两节点的距离为2m-1,其中,m表示第m列,且m =1,… ,L。 例如N=8=23, 第一级(列)距离为21-1=1, 第二级(列)距离为22-1=2, 第三级(列)距离为23-1=4。 ② 考虑蝶形运算两节点的距离为2m-1,蝶形运算可表为: Xm(k)=Xm-1(k)+Xm-1(k+2m-1) WNr Xm(k+2m-1)= Xm-1(k)-Xm-1(k+2m-1) WNr 由于N为已知,所以将r的值确定即可确定WNr。为此,令k=(n2n1n0)2 ,再将k左移(L-m)位,右边位置补零,就可得到(r)2 的值,即(r)2 =(k)22L-m 。 例如 N=8=23 (1) k=2 , m=3 的r值,∵k=2=(010)2 左移L-m=3-3=0 ,∴ r=(010)2=2; (2) k=3 ,m=3 的r值;k= 3=(011)2,左移0位,r=3; (3) k=5 ,m=2的值;k=5=(101)2 左移L-m=1位 r=(010)2 =2。 4.存储单元 存输入序列 x(n),n=0,1, ,N-1,计N个单元; 存放系数WNr, r=0,1, ,(N/2)-1;需N/2个存储单元; 共计(N+N/2)个存储单元。 5.程序框图 三、实验内容 1.编写一个实现FFT算法的函数。 void fft(COMPLEX A[ ] , int m) 其中,COMPLEX是复数类型的名称,A是要变换的数据,m是FFT点数N的以2为底的幂次(即N=2m )。 编写测试用的主程序对fft函数进行测试,并给出测试结果。 实验代码 #include stdio.h #include stdlib.h #include math.h #define N 1000 #define PI atan(1)*4 typedef struct { double real; double imag; }complex; void fft(complex A[],int m); //快速傅里叶变换 void initW(); void change(); void add(complex,complex,complex *); //复数加法 void mul(complex,complex,complex *); //复数乘法 void sub(complex,complex,complex *); //复数减法 void divi(complex,complex,complex *); //复数除法 void output(); complex A[N], *W; //输出序列的值 complex up,down,product; int size=0; //序列的长度 int m; void main() { fft(A,m); output(); } //进行基-2 FFT运算 void fft(complex x[],int m) { int i=0,j=0,k=0,l=0; printf(Please input m:); scanf(%d,m); size=pow(2,m); printf(Please input %d datas in A[%d]:\n,size,size); for(i=0;isize;i++) { printf(A[%d]:,i);

文档评论(0)

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

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

1亿VIP精品文档

相关文档