频谱分析仪模拟仿真设计.docx
- 文档编号:5946772
- 上传时间:2023-01-02
- 格式:DOCX
- 页数:12
- 大小:126.45KB
频谱分析仪模拟仿真设计.docx
《频谱分析仪模拟仿真设计.docx》由会员分享,可在线阅读,更多相关《频谱分析仪模拟仿真设计.docx(12页珍藏版)》请在冰豆网上搜索。
频谱分析仪模拟仿真设计
数字信号处理课程设计
题目:
频谱分析仪模拟仿真
专业:
电子信息工程
班级:
:
日期:
2015-03-26
1.设计目的------------------------------------------------------------------------1
2.程序流程------------------------------------------------------------------------2
3.软件设计------------------------------------------------------------------------3
4.心得体会------------------------------------------------------------------------4
5.参考文献------------------------------------------------------------------------5
一、设计目的
1、通过对频谱分析仪的模拟掌握其基本原理和基本功能;
2、学习掌握用计算机输出基波包括:
方波、正弦波、余弦波等;
3、掌握倒位序、离散傅里叶变换(DFT)、快速傅里叶变换(FFT)的原理及算法;
4、分别用DFT和FFT分析比较32位方波序列对比,体会快速算法的意义;
5、学会用turboc编程软件并且对c语言编程算法进行实践,加深理解。
二、软件设计
1、方波8位加DFT抽样
#include
#include
#defineN8
#definePI3.1415926
intsam[8];
voidsample()
{
inti,j;
printf("抽样结果:
\n");
for(i=0;i { if(i { 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"); } voidDFT() { intk,n,a; floatsum1=0,sum2=0; floatxi[N],xj[N],xk[N]; printf("DFT变换结果: \n"); for(k=0;k { for(n=0;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 { printf("X[%d]=%f",a,xk[a]); } printf("\n"); } voidmain() { sample(); DFT(); } 截图 2、方波32位程序 #include voidmain() { inti,a,N; N=32; for(i=0;i { a=1; printf("%d",a); } for(i=N/2;i { A=-1 printf("%d",a); } system("pause"); } 软件截图 2、DFT程序 #include #include voidmain() { floatt,re=0,im=0,sum,mod,P=3.1415926; intn,k,N=32,*x; for(n=0;n { x[n]=1; } for(n=N/2;n {x[n]=-1;} for(k=0;k { for(n=0;n { t=(-2*P/N)*n*k; re+=x[n]*cos(t); } for(n=0;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 #include #defineN32 voidmain() { intnv2,nm1,i,k,j=0,x[100],t; nv2=N/2; nm1=N-1; printf("请输入自然序: \n"); for(i=0;i scanf("%d",&x[i]); for(i=0;i { if(i { 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 printf("%d",x[j]); printf("\n"); } 软件截图 4、FFT程序 #include #include structcmplex { floatr; floati; }; structcmplexss(structcmplexa1,structcmplexa2) { structcmplexc; c.r=a1.r*a2.r-a1.i*a2.i; c.i=a1.r*a2.i+a1.i*a2.r; return(c); } voidmain() { inti,k,N=32,nv,nm,j=0,m,le,le0,ip; floatpai=3.1415926,tmp,sum,*a; structcmplexu,w,t,x[32]; for(i=0;i { x[i].r=1; x[i].i=0; } for(i=N/2;i { x[i].r=-1; x[i].i=0; } nv=N/2; nm=N-1; for(i=0;i { if(i { 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 { for(i=j;i { 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 { 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第二版
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 频谱 分析 模拟 仿真 设计