频谱分析仪模拟仿真设计

  • 格式:doc
  • 大小:1.16 MB
  • 文档页数:10

.专业整理.数字信号处理课程设计题目:频谱分析仪模拟仿真专业:电子信息工程班级::日期:2015-03-26目录1.设计目的------------------------------------------------------------------------12.程序流程------------------------------------------------------------------------23.软件设计------------------------------------------------------------------------34.心得体会------------------------------------------------------------------------45.参考文献------------------------------------------------------------------------5一、设计目的1、通过对频谱分析仪的模拟掌握其基本原理和基本功能;2、学习掌握用计算机输出基波包括:方波、正弦波、余弦波等;3、掌握倒位序、离散傅里叶变换(DFT)、快速傅里叶变换(FFT)的原理及算法;4、分别用DFT和FFT分析比较32位方波序列对比,体会快速算法的意义;5、学会用turbo c编程软件并且对c语言编程算法进行实践,加深理解。

二、软件设计1、方波8位加DFT抽样#include <stdio.h>#include <math.h>#define N 8#define PI 3.1415926int sam[8];void sample(){int i,j;printf("抽样结果:\n");for(i=0;i<N;i++){if(i<N/2){j=1;sam[i]=j;printf("sam[%d]=%d ",i,j);}if(i>=N/2){j=-1;sam[i]=j;printf("sam[%d]=%d ",i,j);}}printf("\n");}void DFT(){int k,n,a;float sum1=0,sum2=0;float xi[N],xj[N],xk[N];printf("DFT变换结果:\n");for(k=0;k<N;k++){for(n=0;n<N;n++){xi[n]=sam[n]*cos(-(2*PI/N)*k*n);sum1+=xi[n];xj[n]=sam[n]*sin(-(2*PI/N)*k*n);sum2+=xj[n];}xk[k]=sqrt(sum1*sum1+sum2*sum2);sum1=0;sum2=0;}for(a=0;a<N;a++){printf("X[%d]=%f ",a,xk[a]);}printf("\n");}void main(){sample();DFT();}截图2、方波32位程序#include <stdio.h> void main(){int i,a,N;N=32;for(i=0;i<N/2;i++) {a=1;printf("%d ",a); }for(i=N/2;i<N;i++) {A=-1printf("%d ",a);}system("pause");}软件截图2、DFT程序#include<stdio.h> #include<math.h> void main(){float t,re=0,im=0,sum,mod,P=3.1415926; int n,k,N=32,*x;for(n=0;n<N/2;n++){x[n]=1;}for(n=N/2;n<N;n++){x[n]=-1;}for(k=0;k<N;k++){for(n=0;n<N;n++){t=(-2*P/N)*n*k;re+=x[n]*cos(t);}for(n=0;n<N;n++){t=(-2*P/N)*n*k;im+=x[n]*sin(t);}sum=re*re+im*im;mod=sqrt(sum);printf("x[%d]=%f,\n",k,mod);re=0,im=0;sum=0;mod=0;}}软件截图3、倒位序程序#include<stdio.h>#include<math.h>#define N 32void main(){int nv2,nm1,i,k,j=0,x[100],t; nv2=N/2;nm1=N-1;printf("请输入自然序:\n"); for(i=0;i<N;i++)scanf("%d",&x[i]);for(i=0;i<nm1;i++){if(i<j){t=x[j];x[j]=x[i];x[i]=t;}k=nv2;while(k<=j){j=j-k;k=k/2;}j=j+k;}printf("输出倒位序:\n");for(j=0;j<N;j++)printf("%d ",x[j]);printf("\n");}软件截图4、FFT程序#include <stdio.h>#include <math.h>struct cmplex{float r;float i;};struct cmplex ss(struct cmplex a1,struct cmplex a2) {struct cmplex c;c.r=a1.r*a2.r-a1.i*a2.i;c.i=a1.r*a2.i+a1.i*a2.r;return(c);}void main(){int i,k,N=32,nv,nm,j=0,m,le,le0,ip;float pai=3.1415926,tmp,sum,*a;struct cmplex u,w,t,x[32];for(i=0;i<N;i++){x[i].r=1;x[i].i=0;}for(i=N/2;i<N;i++){x[i].r=-1;x[i].i=0;}nv=N/2;nm=N-1;for(i=0;i<nm;i++){if(i<j){t=x[j];x[j]=x[i];x[i]=t;}k=nv;while(k<=j){j-=k;k=k/2;}j+=k;}for(m=1;m<=5;m++){le=pow(2,m);le0=le/2;u.r=1;u.i=0;tmp=pai/le0;w.r=cos(-tmp);w.i=sin(-tmp);for(j=0;j<le0;j++){for(i=j;i<N;i+=le){ip=i+le0;t=ss(x[ip],u);x[ip].r=x[i].r-t.r;x[ip].i=x[i].i-t.i;x[i].r+=t.r;x[i].i+=t.i;}u=ss(u,w);}}printf("\n");for(i=0;i<N;i++){sum=x[i].r*x[i].r+x[i].i*x[i].i;a[i]=sqrt(sum);printf("a[%d]=%f\n",i,a[i]);}}软件截图三、心得体会该实验巩固了我们上学期所学的数字信号处理和信号与系统知识,通过C语言上机操作仿真信号,不仅能够加深我们对各种信号抽样和变换的认识,也能让我们真真切切体会到计算机仿真系统带给我们学生和技术人员的巨大便利。

总而言之,本次DSP仿真为我们以后在信号领域的探索和研究打下了良好的基础。

四、参考文献1、程佩清《数字信号处理教程》清华大学出版社 2013 第四版2、王宝祥《信号与系统》工业大学出版社(修订版)3、谭浩强《C语言程序设计》清华大学出版社 2008 第二版。