1200字范文,内容丰富有趣,写作的好帮手!
1200字范文 > fft c语言与matlab c语言matlab实现fft几种编程实例.doc

fft c语言与matlab c语言matlab实现fft几种编程实例.doc

时间:2019-03-21 00:39:37

相关推荐

fft c语言与matlab c语言matlab实现fft几种编程实例.doc

c语言matlab实现fft几种编程实例.doc

C语言、MATLAB实现FFT几种方法总结前人经验,仅供参考///一、/c语言程序/#include#include#include#definePI3.1415926535897932384626433832795028841971//定义圆周率值#defineFFT_N128//定义福利叶变换的点数structcompx{floatreal,imag;};//定义一个复数结构structcompxs[FFT_N];//FFT输入和输出:从S[1]开始存放,根据大小自己定义/*******************************************************************函数原型:structcompxEE(structcompxb1,structcompxb2)函数功能:对两个复数进行乘法运算输入参数:两个以联合体定义的复数a,b输出参数:a和b的乘积,以联合体的形式输出*******************************************************************/structcompxEE(structcompxa,structcompxb){structcompxc;c.real=a.real*b.real-a.imag*b.imag;c.imag=a.real*b.imag+a.imag*b.real;return(c);}/*****************************************************************函数原型:voidFFT(structcompx*xin,intN)函数功能:对输入的复数组进行快速傅里叶变换(FFT)输入参数:*xin复数结构体组的首地址指针,struct型*****************************************************************/voidFFT(structcompx*xin){intf,m,nv2,nm1,i,k,l,j=0;structcompxu,w,t;nv2=FFT_N/2;//变址运算,即把自然顺序变成倒位序,采用雷德算法nm1=FFT_N-1;for(i=0;iN)break;%判断是否超出范围elsep=X(i1)*W;X(i1)=X(i)-p;X(i)=X(i)+p;%蝶形运算endendW=W*dw;%蝶形运算系数的变化endendsubplot(2,2,1);t=0:0.0000001:N*T;plot(t,sin(2*pi*f*t));%画原曲线subplot(2,2,2);stem(k,x);%画采样后的离散信号subplot(2,2,3);stem(k,abs(X)/max(abs(X)));%画自己的fft的运算结果subplot(2,2,4);stem(k,abs(fft(x))/max(abs(fft(x))));%调用系统的函数绘制结果,与自己的结果进行比较//三、/FFT的C语言算法实现程序如下:/************FFT***********/#include#include#include#defineN1000typedefstruct{doublereal;doubleimg;}complex;voidfft();/*快速傅里叶变换*/voidifft();/*快速傅里叶逆变换*/voidinitW();voidchange();voidadd(complex,complex,complex*);/*复数加法*/voidmul(complex,complex,complex*);/*复数乘法*/voidsub(complex,complex,complex*);/*复数减法*/voiddivi(complex,complex,complex*);/*复数除法*/voidoutput();/*输出结果*/complexx[N],*W;/*输出序列的值*/intsize_x=0;/*输入序列的长度,只限2的N次方*/doublePI;intmain(){inti,;system(“cls“);PI=atan(1)*4;printf(“Pleasethesizeofx:\n“);/*输入序列的长度*/scanf(“%d“,printf(“Pleasethedatainx[N]:(suchas:56)\n“);/*输入序列对应的值*/for(i=0;i0){j=j>1;}if(j>i){temp=x[i];x[i]=x[j];x[j]=temp;}}}voidoutput()/*输出结果*/{inti;printf(“Theresultareasfollows\n“);for(i=0;i=0.0001)printf(“+%.4fj\n“,x[i].img);elseif(fabs(x[i].img)real=a.real+b.real;c->img=a.img+b.img;}voidmul(complexa,complexb,complex*c){c->real=a.real*b.real-a.img*b.img;c->img=a.real*b.img+a.img*b.real;}voidsub(complexa,complexb,complex*c){c->real=a.real-b.real;c->img=a.img-b.img;}voiddivi(complexa,complexb,complex*c){c->real=(a.real*b.real+a.img*b.img)/(b.real*b.real+b.

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。