君.docx
- 文档编号:27694765
- 上传时间:2023-07-04
- 格式:DOCX
- 页数:41
- 大小:653.76KB
君.docx
《君.docx》由会员分享,可在线阅读,更多相关《君.docx(41页珍藏版)》请在冰豆网上搜索。
君
数字信号处理实验指导书
淮北煤炭师范学院物理与电子信息学院
电子技术实验室
目录
实验一数字信号处理系统结构和编程1
实验二用FFT作谱分析4
实验三IIR滤波器的设计10
实验四FIR滤波器的设计17
附录一24
附录二26
附录三31
实验一数字信号处理系统结构和编程
一、实验目的
1.学习C语言的编程;
2.掌握在CCS环境下的C程序设计方法;
3.学会使用C和汇编语言混合编程;
4.熟悉用C语言开发DSP程序的流程。
二、实验设备
计算机,仿真器,THRS-1实验箱
三、实验步骤与内容
1.连接好DSP开发系统,实验箱上电,运行CCS;
2.按流程图编写C程序,实现所要求的功能;
3.例程序操作说明。
启动CCS2.0,用Project/Open打开“DSP54X-01”目录下的“DSP54X01.pjt”工程文件,双击“DSP54X01.pjt”及“Source”可查看各源程序;并加载“DSP54X01.out”;单击“Run”运行程序;可以观察到D8指示灯闪烁;
用View/Graph/Time/Frequency打开一个图形观察窗口;设置该观察图形窗口变量及参数;观察变量为x,长度为500,数值类型为16位有符号整型变量;如下图所示,图中下半部分为观察图形窗口的设置,上半部分为观察的图形。
四、程序框图
五、实验说明
CCS包含C编译器,支持标准C以及C和汇编混合编程。
C编译器包括三个功能模块:
语法分析、代码优化和代码产生,如下图所示。
其中,语法分析(Parser)完成C语法检查和分析;代码优化(Optimizer)对程序进行优化,以便提高效率;代码产生(CodeGenerator)将C程序转换成C54x的汇编源程序。
本实验通过一些对数组及数据指针的基本操作,让实验者能够对使用C语言在CCS环境下编程有一个一目了然的认识。
并使用汇编语句,以体会两者综合运用时的优越性。
实验源程序如下:
#include
#definepi3.1415926
#defineN500
voidmain()
{inti,j;
int*p;
intx[500];
for(i=0;i x[i]=0; for(i=0;i {x[i]=(int)100*sin(2*pi*i/250); } p=(int*)0x100; for(i=0;i {*p=x[i]; p++; } for(;;) {asm("rsbxxf"); for(i=0;i<30000;i++) for(j=0;j<10;j++) {asm("nop"); asm("nop"); } asm("ssbxxf"); for(i=0;i<30000;i++) for(j=0;j<10;j++) { asm("nop"); asm("nop"); } } } 实验二用FFT作谱分析 一、实验目的 1.加深对DFT算法原理和基本性质的理解; 2.熟悉FFT算法原理和FFT子程序的应用; 3.学习用FFT对连续信号和时域信号进行谱分析的方法,了解可能出现的分析误差及其原因,以便在实际中正确应用FFT。 二、实验设备 计算机、CCS2.0版软件、实验箱、DSP仿真器 三、基本原理 1.离散傅立叶变换DFT的定义: 将时域的采样变换成频域的周期性离散函数,频域的采样也可以变换成时域的周期性离散函数,这样的变换称为离散傅立叶变换,简称DFT。 2.FT是DFT的一种快速算法,将DFT的N2步减少为(N/2)log2N步,极大地提高了运算的速度。 3.旋转因子的变化规律。 4.蝶形运算规律。 5.基2FFT算法。 四、实验步骤 1.复习DFT的定义、性质和用DFT作谱分析的有关内容; 2.复习FFT算法原理与编程思想,并对照DIT-FFT运算流程图和程序框图,了解本实验提供的FFT子程序; 3.阅读本实验所提供的样例子程序; 4.运行CCS软件,对样例程序进行跟踪,分析结果;记录必要的参数。 5.填写实验报告; 6.提供样例程序实验操作说明。 A.实验前准备 1)正确完成计算机、DSP仿真器和实验箱的连接后,系统上电; 2)设置模数转换单元的拨动开关,1、5、6置“ON”,其它置“OFF”; 注: 有关以上连接说明,可参见第一章中模数转换单元跳线说明以及信号源单元跳线说明。 B.实验 启动CCS2.0,Project/Open打开“DSP54X-02”目录下的“ExpFFT.pjt”工程文件;双击“ExpFFT.pjt”及“Source”可查看各源程序;并加载“ExpFFT.out”;在主程序处设置断点;单击“Run”运行程序,程序将运行到断点处停止; 用View/Graph/Time/Frequency打开一个图形观察窗口;设置该观察图形 及参数;采用双踪观察启始地址分别为0x3000H和0x3080h,长度为128单元中数模变化,数值类型为16位有符号整型变量,这两段存储单元中分别存放的是经过AD782转换的混叠信号(信号源单元产生)和对该信号进行FFT变换的结果; 单击“Animate”运行程序,或按F10运行;调整观察窗口并观察输入信号波形及其FFT变换结果;调节信号源单元中两路信号的波形选择调节、频率调节、幅值调节,观察混叠信号以及其FFT变换结果如何变化; 单击“Halt”暂停程序运行,关闭窗口,本实验结束。 实验结果: 在CCS2.0环境,同步观察混叠信号波形及其FFT变换结果。 五、思考题 1.对于不同的N,幅频特性会相同吗? 为什么? 2.FFT进行谱分析,可以应用的什么方面? 六、程序参数说明 Externvoidinitial(void); ExternvoidREADAD7822(void); Voidkfft(pr,pi,n,k,fr,fi,l,il);基2快速傅立叶变换子程序,n为变换点数,应满足2的整数次幂,k为幂次(正整数); 数组x: 输入信号数组,A/D转换数据存放于地址为3000H~307FH存储器中,转为浮点型后,生成x数组,长度128; 数组mo: FFT变换数组,长度28,浮点型,整型后,写入3080h~30FFH存储器中。 实验源程序如下: externvoidinitial(void); externvoidREADAD7822(void); externvoidWRITEDAC08(void); /*********************************************************************** **MainFunctionProgram ***********************************************************************/ #include"stdio.h" #include"math.h" voidkfft(pr,pi,n,k,fr,fi,l,il) intn,k,l,il; doublepr[],pi[],fr[],fi[]; {intit,m,is,i,j,nv,l0; doublep,q,s,vr,vi,poddr,poddi; for(it=0;it<=n-1;it++) {m=it;is=0; for(i=0;i<=k-1;i++) {j=m/2;is=2*is+(m-2*j);m=j;} fr[it]=pr[is];fi[it]=pi[is]; } pr[0]=1.0;pi[0]=0.0; p=6.283185306/(1.0*n); pr[1]=cos(p);pi[1]=-sin(p); if(l! =0)pi[1]=-pi[1]; for(i=2;i<=n-1;i++) {p=pr[i-1]*pr[1];q=pi[i-1]*pi[1]; s=(pr[i-1]+pi[i-1])*(pr[1]+pi[1]); pr[i]=p-q;pi[i]=s-p-q; } for(it=0;it<=n-2;it=it+2) {vr=fr[it];vi=fi[it]; fr[it]=vr+fr[it+1];fi[it]=vi+fi[it+1]; fr[it+1]=vr-fr[it+1];fi[it+1]=vi-fi[it+1]; } m=n/2;nv=2; for(l0=k-2;l0>=0;l0--) {m=m/2;nv=2*nv; for(it=0;it<=(m-1)*nv;it=it+nv) for(j=0;j<=(nv/2)-1;j++) {p=pr[m*j]*fr[it+j+nv/2]; q=pi[m*j]*fi[it+j+nv/2]; s=pr[m*j]+pi[m*j]; s=s*(fr[it+j+nv/2]+fi[it+j+nv/2]); poddr=p-q;poddi=s-p-q; fr[it+j+nv/2]=fr[it+j]-poddr; fi[it+j+nv/2]=fi[it+j]-poddi; fr[it+j]=fr[it+j]+poddr; fi[it+j]=fi[it+j]+poddi; } } if(l! =0) for(i=0;i<=n-1;i++) {fr[i]=fr[i]/(1.0*n); fi[i]=fi[i]/(1.0*n); } if(il! =0) for(i=0;i<=n-1;i++) {pr[i]=sqrt(fr[i]*fr[i]+fi[i]*fi[i]); if(fabs(fr[i])<0.000001*fabs(fi[i])) {if((fi[i]*fr[i])>0)pi[i]=90.0; elsepi[i]=-90.0; } else pi[i]=atan(fi[i]/fr[i])*360.0/6.283185306; } } voidmain(void) {inti,n,k=0; doublex[128],pr[128],pi[128],fr[128],fi[128],mo[128]; intxm,zm; int*px=(int*)0x3000; int*pz=(int*)0x3080; n=128; initial(); for(;;) { READAD7822(); px=(int*)0x3000; for(i=0;i<=n-1;i++) {xm=*px; x[i]=(xm-128)/100.0; pr[i]=x[i]; pi[i]=0; px++; } kfft(pr,pi,128,7,fr,fi,0,1); pz=(int*)0x3080; for(i=0;i<=n-1;i++) {mo[i]=sqrt(fr[i]*fr[i]+fi[i]*fi[i]); zm=(int)(mo[i]*100.0); *pz=zm; pz++; } k++; } } /*********************************************************************** **EndofFile––ExpFFT.c ***********************************************************************/ 实验三IIR滤波器的设计 一、实验目的 1.熟悉设计IIR数字滤波器的原理与方法; 2.掌握数字滤波器的计算机仿真方法; 3.通过观察对实际信号的滤波作用,获得对数字滤波的感性认识。 二、实验设备 计算机、CCS2.0版软件、实验箱、DSP仿真器 三、实验原理 1.无限冲击响数字滤波器的基础理论; 2.模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、贝塞尔滤波器); 3.双线性变换的设计原理。 四、实验步骤 1.复习有关巴特沃斯滤波器设计和用双线性变换法设计IIR数字滤波器的知识; 2.阅读本实验所提供的样例子程序; 3.运行CCS软件,对样例程序进行跟踪,分析结果; 4.填写实验报告; 5.样例程序实验操作说明 A.实验前准备 1)正确完成计算机、DSP仿真器和实验箱的连接后,系统上电; 2)设置模数转换单元的拨动开关,1、5置“ON”,其它置“OFF”; 3)用示波器分别观测信号源单元的S1和S2输出的模拟信号,分别调节信号波形选择、信号频率、信号输出幅值等旋钮,直到满意为止; 本样例实验程序建议: 采用两路正弦波信号的混叠信号为输入信号; 低频正弦波信号: 峰峰值11V,频率<4KHz; 高频正弦波信号: 峰峰值5V,频率>40KHz; 4)设置模数转换单元的拨动开关,1、5、6置“ON”,其它置“OFF”,即采样频率选择181KHz,两路信号混叠输入,可在引出点“SC”处(模数转换单元)用示波器观察混叠信号。 注: 有关以上连接说明,可参见使用说明书中模数转换单元跳线说明以及信号源单元跳线说明。 B.实验 启动CCS2.0,用Project/Open打开“DSP54X-03”目录下的“ExpIIR.pjt”工程文件;双击“ExpIIR.pjt”,双击“Source”可查看各源程序;并加载“ExpIIR.out”;在主程序中, K++处,设置断点;单击“Run”运行程序,程序将运行至断点处停止。 用View/Graph/Time/Frequency打开一个图形观察窗口;采用双踪示波器在启动地址分别为0X3000H和0X3100H,长度为256的单元中数值的变化,数值类型为16位有符号整型变量,这两段存储单元中分别存放的是经A/D转换后的混叠信号和对该信号进行低通IIR滤波后的输出信号; 单击“Animate”运行程序,或按F10运行程序;调整观察窗口,并观察滤波结果;单击“Halt”暂停程序运行,激活“ExpIIR.c”的编辑窗口;该IIR低通滤波器性能参数为: 采样频率为181KHz,通带内最大允许衰减3dB,阻带内最小衰减大于 30dB,过渡带宽度约为36KHz;通带上限频率: 4KHz;阻带下限截止频率: 40KHz。 可以修改以上参数归一化参数“npass”和“mstop”来改变滤波器性能。 修改“ExpIIR.c”程序中“nlpass”和“nlstop”参数可改变IIR低通滤波器的滤波性能。 重新“RebuildALL”后,加载,单击“Animate”,可得到不同的结果。 实验结果: 在CCS2.0环境下,同步观察输入信号及其IIR低通滤波结果。 五、思考题 1.试述用双线性变换法设计数字滤波器的过程? 2.实验中,计算每个二阶滤波器的输出序列时,如何确定计算点数? 3.对滤波前后的信号波形,说明数字滤波器的滤波过程与滤波作用。 六、实验报告要求 1.简述IIR滤波器的基本原理; 2.对比FIR滤波器与IIR滤波器的异同; 3.描绘出输入、输出数组的曲线。 七、IIR程序参数说明 系统函数: 对应的常系数线性差分方程是: 程序参数说明: ExternvoidInitC5402(void) ExternvoidREADAD7822(void) voidbiir2lpdes(doublefs,doublenlpass,doublenlstop,doublea[],doubleb[]) IIR低通滤波器参数设计子程序参数说明: fs: 采样频率; nlpass: 通带上限频率归一化参数; nlstop: 阻带下限截止频率归一化参数; 设置时,采样频率对应为1,应使“nlpass”和“nlstop”两参数均要小于0.5,且“nlpass”要比“nlstop”小0.2,否则将不能满足阻带的最大衰减大于30dB。 数组a: 存放IIR低通滤波器传递函数的极点计算结果,浮点型; 数组b: 存放IIR低通滤波器传递函数的零点计算结果,浮点型; 输入信号: 输入信号经A/D转换后,写入地址3000H~30FFH单元,16位整型; 输出信号: 滤波后信号,写入地址3100H~31FFH单元,16位整型。 八、子程序流程图 实验源程序如下: externvoidInitC5402(void); externvoidREADAD7822(void); /*********************************************************************** **MainFunctionProgram ***********************************************************************/ #include"stdio.h" #include"math.h" #definepi3.1415926 doublefs,nlpass,nlstop,nhpass,nhstop,a[3],b[3],x,y; voidbiir2lpdes(doublefs,doublenlpass,doublenlstop,doublea[],doubleb[]); voidbiir2lpdes(doublefs,doublenlpass,doublenlstop,doublea[],doubleb[]) { inti,u,v; doublewp,omp,gsa,t; wp=nlpass*2*pi; omp=tan(wp/2.0); gsa=omp*omp; for(i=0;i<=2;i++) { u=i%2; v=i-1; a[i]=gsa*pow(2,u)-sqrt (2)*omp*v+pow(-2,u); } for(i=0;i<=2;i++) {u=i%2; b[i]=gsa*pow(2,u); } t=a[0]; for(i=0;i<=2;i++) {a[i]=a[i]/t; b[i]=b[i]/t; } } voidmain(void) { intk=0; intn,x_ad,y_da; int*px=(int*)0x3000; int*py=(int*)0x3100; doublew2,w1,w0; w2=w1=w0=0.0; InitC5402();/*initializeC5402DSP*/ fs=181000; /*IIRLPfilter*/ nlpass=0.022; nlstop=0.222; biir2lpdes(fs,nlpass,nlstop,a,b); for(;;) { READAD7822(); for(n=0;n<=255;n++) { px=(int*)(0x3000+n); x_ad=*px; x=x_ad; w2=x-a[1]*w1-a[2]*w0; y=b[0]*w2+b[1]*w1+b[2]*w0; w0=w1; w1=w2; y_da=(int)y; py=(int*)(0x3100+n); *py=y_da; } k++; } } /*********************************************************************** **EndofFile––ExpIIR.c ***********************************************************************/ 实验四FIR滤波器的设计 一、实验目的 1.掌握用窗函数法设计FIR数字滤波器的原理和方法; 2.熟悉线性相位FIR数字滤波器特性; 3.了解各种窗函数对滤波特性的影响。 二、实验设备 计算机、CCS2.0版软件、实验箱、DSP仿真器 三、实验原理 1.有限冲击响应数字滤波器的基础理论; 2.模拟滤波器原理(巴特沃斯滤波器、切比雪夫滤波器、贝塞尔滤波器); 3.数字滤波器系数的确定方法。 四、实验步骤 1.复习如何设计FIR数字滤波;阅读本实验原理,掌握设计步骤; 2.阅读本实验所提供的样例子程序; 3.运行CCS软件,对样例程序进行跟踪,分析结果; 4.填写实验报告; 5.样例程序实验操作说明。 A.实验前准备 1)正确完成计算机、DSP仿真器和实验箱的连接后,系统上电; 2)设置模数转换单元的拨动开关,1、5置“ON”,其它置“OFF”; 3)用示波器分别观测信号源单元的S1和S2输出的模拟信号,分别调节信号波形选择、信号频率、信号输出幅值等旋钮,直到满意为止; 本样例实验程序建议: 采用两路正弦波信号的混叠信号作为输入信号; 低频正弦波信号: 峰峰值11V,频率<4KHz; 高频正弦波信号: 峰峰值5V,频率>40KHz; 4)设置模数转换单元的拨动开关,1、5、6置“ON”,其它置“OFF”,即采样频率选择181KHz,两路信号混叠输入,可在“SC”点用示波器观察混叠信号。 注: 有关以上连接说明,可参见使用说明书中模数转换单元跳线说明以及信号源单元跳线说明。 B.实验 启动CCS2.0,用Project/Open打开“DSP54X-04”目录下的“ExpFIR.pjt”工程文件; 双击“ExpFIR.pjt”及“Source”可查看各源程序;并加载“ExpFIR.out”;在主程序中,K++处,设置断点;单击“Run”运行程序,程序将运行至断点处停止。 用View/Graph/Time/Frequency打开一个图形观察窗口;设置观察图形窗口变量及参数为: 采用双踪观察在启动地址分别为0x3000H和0x3100H,长度为256的单元中数值的变化,数值类型为16位有符号整型变量,这两段存储单元中分别存放的是经A/D转换后的输入混叠信号(输入信号)和对该信号进行FIR滤波的结果。 单击“Animate”运行程序,或按F10运行程序;调整观察窗口并观察滤波结果,单击“Halt”暂停程序运行,激活“
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- docx