快速傅里叶变换fft的计算机实现_信号与系统课程设计论文(编辑修改稿)内容摘要:

ine maxnum 128 //宏定义最大数:用以初始化数组,且限制了时域信号取样点数须小于128define PI //宏定义圆周率struct XKstruct //频域信号采样点结构体{ double real。 //实部 double image。 //虚部 double absolutevalue。 //绝对值 double phaseangle。 //相位角 double radianmeasureangle。 //用圆周率表示的角度}。 struct plexnum //复数结构体{ double real。 //实部 double image。 //虚部}。 struct plexnum plexmul(struct plexnum ,struct plexnum )。 //函数声明语句,在定义处进行功能介绍void ComplexnumToXKStruct(int,struct plexnum*,struct XKstruct*)。 void DFTfunction(int ,double*,struct plexnum*)。 void FFTfunction(int ,double *,struct plexnum *)。 void xndistribute(int N,double *xn,double *an,double *bn)。 void initfunction()。 void display(int ,struct XKstruct*)。 void stardivision()。 void timedomainsignalsample(int ,double *)。 void main(){ int i,N。 //i为辅助变量,N为时域信号取样点数 double xn[maxnum]。 //xn[N]存放时域信号采样值 struct plexnum XK[maxnum]。 //XK[N]存放频域信号采样值 struct XKstruct XK1[maxnum],XK2[maxnum]。 //XK1[N]存放DFT变换后的频域信号采样值,XK2[N]存放FFT变换后的频域信号采样值 //double w。 //基波角频率 //double a[maxnum]。 //谐波分量系数 initfunction()。 //初始化函数,在定义出进行功能介绍 while(1) { printf(开始运行:\n)。 printf(输入时域信号取样点数N \n N=)。 //步骤1:输入时域信号取样点数N scanf(%d,amp。 N)。 printf(\n输入时域信号N点离散取样值,存于数组xn[N]\n)。 //步骤2:依次输入时域信号N点离散取样值,存于数组xn[N] printf( 选项1:直接输入离散取样值\n 选项2:输入正弦谐波分量信息,让计算机进行取样\n 选择(1/2))。 scanf(%d,amp。 i)。 while((i!=1)amp。 amp。 (i!=2)) { printf(请重新选择:(1/2))。 scanf(%d,amp。 i)。 } switch(i) { case 1: for(i=0。 iN。 i++) { printf( xn[%d]=,i)。 scanf(%lf,amp。 (xn[i]))。 }break。 case 2: timedomainsignalsample(N,xn)。 break。 } printf(\n进行DFT变换并显示变换结果\n )。 //步骤3:进行DFT变换并显示变换结果 DFTfunction(N,xn,XK)。 //DFT函数,将时域信号采样数组xn[N]进行DFT,在定义处进行功能介绍 ComplexnumToXKStruct(N,XK,XK1)。 //将复数结构体XK转化成复频域信号取样点XK1 display(N,XK1)。 //显示函数,在定义处进行功能介绍 printf(\n进行FFT变换并显示变换结果\n )。 //步骤4:进行FFT变换并显示变换结果 switch(N) //根据N的值判定能否进行FFT,仅当N是以2为底的正指数数时才可进行,否则直接跳出 { case 1: return。 case 0: case 2: case 4: case 8: case 16: case 32: case 64: case 128: { FFTfunction(N,xn,XK)。 //FFT函数,将时域信号采样数组xn[N]进行FFT,在定义处进行功能介绍 ComplexnumToXKStruct(N,XK,XK2)。 //将复数结构体XK转化成复频域信号取样点XK1 display(N,XK2)。 //显示函数,在定义处进行功能介绍 printf()。 //格式控制语句 stardivision()。 printf(\n)。 stardivision()。 }break。 default: { printf( 错误:无法进行FFT变换!!\n 原因:时域信号取样点数N不是以2为底的正指数,或者N大于128\n\n)。 stardivision()。 //格式控制语句 printf(\n)。 stardivision()。 } } }}void stardivision() //格式控制函数:输出一整排星号作为分隔符{ printf(*******************************************************************************\n)。 }void initfunction() //初始化函数{ stardivision()。 //输出一排星号,以下为学生信息 printf( 班级:1106班\n)。 printf( 学号:U201111932\n)。 printf( 姓名:曾超\n)。 stardivision()。 stardivision()。 //本程序解说语句,程序总共分为4个步骤,然后为重复 printf(运行。
阅读剩余 0%
本站所有文章资讯、展示的图片素材等内容均为注册用户上传(部分报媒/平媒内容转载自网络合作媒体),仅供学习参考。 用户通过本站上传、发布的任何内容的知识产权归属用户或原始著作权人所有。如有侵犯您的版权,请联系我们反馈本站将在三个工作日内改正。