DSP课程设计-基于C6000的QPSK解调器设计与实现(17页).doc
-DSP课程设计-基于C6000的QPSK解调器设计与实现-第 13 页 湖 南 工 业 大 学课 程 设 计资料袋 计算机与通信 学院(系、部) 20152016 学年第 一 学期课程名称: DSP应用 课程设计 指导教师: 职称 副教授 学生姓名: 专业班级 通信1201班 学号 设计题目: 基于C6000的QPSK解调器设计与实现 成 绩: 起止日期: 2015 年 12 月 7 日 至 2015 年 12 月 18 日 目录清单序号材料名称资料数量备注1课程设计任务书12课程设计说明书13课程设计图纸0张456DSP应用课程设计设计说明书基于C6000的QPSK解调器设计与实现起止日期: 2015年 12 月 7 日 至 2015年 12 月 18 日学生姓名班级通信1201学号成绩指导教师(签字)计算机与通信学院2015年 12 月 18 日课题名称基于C6000的QPSK解调器设计与实现人 数6组 长同组人员课题的主要内容和要求1.主要内容:(1)编写程序。 (2)程序要完善、优化,能运行于C5402开发板,能演示输入输出数据的完整图形,显示结果,并对程序或相关设计予以解释。2.主要任务:(1)算法设计;(2)程序设计;(3)程序的调试与各项性能的测试。具体任务1、编写程序,对 QPSK调制信号进行解调。在 DSP 编程时,直接把载波放入存储器,然后通过统计的方法判断是“1”还是“0” ,最后通过并串转换还原出原来信号。2、程序完善、优化,面向C6000开发调试。3、能演示输入输出数据的完整图形,显示结果,并对程序或相关设计予以解释。时间安排与完成情况12月07日:分组、任务分配、课题理解。12月08日-12月14日:功能、程序设计、系统设计和实现。12月15日-12月17日:实验验证和考核。12月18日:总结、书写课程设计说明书。一、设计目的1、熟悉QPSK解调器的原理、特点和应用 2、掌握QPSK解调器设计方法 3、熟悉使用DSP实现QPSK信号解调的设计过程通过该设计,熟悉QPSK解调器的原理和方法,掌握其DSP程序设计与实现过程,以及程序的调试技巧。是对DSP应用技术理论学习的总结和补充,为DSP应用系统的开发设计打下基础。二、设计原理 QPSK 信号解调可以采用相干解调的方法实现,下图为方框图:三、设计所需仪器与设备1、PC微机1台,安装CCS3.02、DSP仿真器TDS510-USB2.0,1套四、设计内容1、编写程序,对 QPSK调制信号进行解调。在 DSP 编程时,直接把载波放入存储器,然后通过统计的方法判断是“1”还是“0” ,最后通过并串转换还原出原来信号。2、程序完善、优化,面向C6000开发调试。3、能演示输入输出数据的完整图形,显示结果,并对程序或相关设计予以解释。五、设计步骤1、用仿真机将计算机与TI C54x开发板连接好,然后运行CCS软件。2、新建一个项目:点击Project-New,将项目命名为DEQPSK,并将项目保存在自己定义的文件夹下,注意文件夹一定要用英文名,不要将文件夹取名为中文名,因为CCS软件不能识别以中文命名的文件夹。3、新建一个源文件:点击点击FileNewSource File可以打开一个文本编辑窗口,点击 保存按键,保存在和项目相同的一个文件夹下面(DEQPSK),保存类型选择*.C(如果源文件 是C语言编写的,保存类型选择*.C,如果使用汇编语言编写的,选择*.ASM为保存类型),我们在这里将保存名字命名为DEQPSK.c 。 4、在项目中添加源文件:在新建立了一个源文件以后,要想使用CCS编译器对该源文件 进行编译还需要将源文件添加到项目中去。添加方法是在工程管理器中右键单击DEQPSK.pjt, 在弹出的菜单中选择Add Files,然后将刚才建立的DEQPSK.c文件添加到该项目中去。 5、编写源程序: 在工程管理器中双击DEQPSK.c ,将出现文本编辑窗口,在该文本编辑窗口中输入如 下内容:#include <math.h>#define InputLength 15 /*IQ两路的长度*/#define SineLenth 64 /*一个周期正谐波的长度*/#define p1(sineLength/8)*1 /*第一相位*/#define p2(sineLength/8)*3/*第二相位*/#define p3(sineLength/8)*5 /*第三相位*/#define p4(sineLength/8)*7 /*第四相位*/#define OutputLength InputLength*SineLength /*输出数据的总长度*/#define pi 3.14159/*/*子函数和子程序定义开始*/void main()int i=0,j=0,a=0,n,x,b=0;int IInputLength=0,0,0,1,0,0,1,1,0,0,0,1,1,1,1;int QInputLength=0,1,1,1,1,1,0,0,0,0,0,1,1,1,1;void PhaseSelection(int a); /*相位选择函数声明*/IER=0;for(i=0;i<SineLength;i+) /*在sin_data里面存储一个正弦波*/sin_datai=2047+(sin)(2047.0*sin(2*pi*i/(SineLength); /*调用sin函数*/for(j=0;j<SineLength;j+) /* 再往sin_data里面存储一个sin波形,这样sin_data里有两个sin波形*/sin_datai+=sin_dataj;for(j=0;j<OutputLength+64;j+) /将输出数组初始化QPSKj=0;for(j=0;j<InputLength;j+) /OQPSK相位选择if(Ij=1&&Qj=1)phaseSelection(p1); /*选择pi/4的相位*/if(Ij=0&&Qj=1)phaseSelection(p2); /*选择3pi/4的相位*/if(Ij=0&&Qj=0)phaseSelection(p3); /*选择5pi/4的相位*/if(Ij=1&&Qj=0)phaseSelection(p3); /*选择5pi/4的相位*/for(i=OutputLength;i<OutputLength+64;i+)QPSKi=0;for(i=0;i<OutputLength+8;i+)*(int*)(0x30000+4*i)=QPSKi; /把数据给一个地址,然后从这个地址看结果(xt1029)a=*(int*)(0x30000+4*i);*(int *)(0x8000+4*i)=a;for(;)submit_qdma();wait();/*相位选择函数定义结束*/解调程序部分源代码#include <math.h>#define InputLength 15 /*IQ两路的长度*/#define SineLenth 64 /*一个周期正谐波的长度*/#define p1(sineLength/8)*1 /*第一相位*/#define p2(sineLength/8)*3/*第二相位*/#define p3(sineLength/8)*5 /*第三相位*/#define p4(sineLength/8)*7 /*第四相位*/#define OutputLength InputLength*SineLength /*输出数据的总长度*/#define pi 3.14159int w=0;static int m=0;static int IInputLength=0,0,0,1,0,0,1,1,0,0,0,1,1,1,1; /*输入数据1路*/static int QInputLength=0,1,1,1,1,1,0,0,0,0,0,1,1,1,1; /*输入数据Q路*/static int QPSKOutputLength;static int sin_dataSineLength*2;static int cos_dataSineLength;static int I_multply_cosOutputLength;static int Q_multply_sinOutputLength;static int I_DeQPSKInputLength;static int Q_DeQPSKInputLength;/*子函数和子程序定义*/void main()int i=0,j=0;void PhaseSelection(int a);void multply();void IQ_Decision();for(i=0;i<SineLength;i+)sin_datai=(int)(64.0*sin(2*pi*i/(SineLength);cos_datai=(int)(64.0*cos(2*pi*i/(SineLength);i=SineLength;for(j=0;j<SineLength;j+)sin_datai+=sin_dataj;for(j=0;j<InputLength;j+)if(Ij=1&&Qj=1)PhaseSelection(p1);else if(Ij=0&&Qj=1)PhaseSelection(p2);else if(Ij=0&&Qj=0)PhaseSelection(p3);else PhaseSelection(p4);asm('nop');multply();IQ_Decision();for(i=0;i<OutputLength+8;i+)*(int*)(0x30000+4*i)=I_DeQPSKi;*(int*)(0x31000+4*i)=Q_DeQPSKi;for(;);/*相位选择函数定义开始*/void PhaseSelection(int a)int count=0;for(m;m<OutputLength;m+)QPSKm=sin_dataa+if(count+=SineLength)break/*本地信号相乘函数定义开始*/void multply()int i=0,j=0;for(i=0;i<OutputLength;i+)I_multply_cosi=QPSKi*cos_dataj;Q_multply_sini=QPSKi*sin_dataj;j+;if(j=SineLength)j=0;6 、编写链接配置文件如下: vectors.obj DEQPSK.obj -o DEQPSK.out -m DEQPSK.map -estart MEMORY PAGE 0: EPROM: org=0090H,len=0F70H VECS: org=0080H,len=0010H PAGE 1: DARAM: org=1000H,len=2000H SECTIONS .text :> EPROM PAGE 0 data :> DARAM PAGE 1 STACK :> DARAM PAGE 1 .bss :> DARAM PAGE 1 .vectors :> VECS PAGE 0 7 、编写中断向量表文件 /* vectors.asm */ .title “vectors.asm” /*中断向量表的文件名*/ .ref start /*引用外部定义的标号*/ .sect “.vectors” /* 定义初始化段名 */B start /* 引用start */.end8 、建立文件sin_cos.inc,文件内容如下: sin: .word 9512, 18204, 25329, 30273, 32610, 32138, 28898,23170 .word 15446, 6392, -3211, -12539, -20787, -27245, -31356, -32767 .word -31357, -27245, -20787, -12539, -3211, 6392, 15446, 23170 .word 28898, 32138, 32610, 30273, 25330, 18205, 9512, 0 cos: .word 31357, 27245, 20787, 12539, 3211, -6392, -15446, -23170 .word -28898, -32138, -32610, -30273, -25330, -18205, -9512, 0 .word 9511, 18204, 25329, 30273, 32610, 32138, 28898,23170 .word 15446, 6392, -3211, -12539, -20787, -27245, -31356, -32767 9、对项目进行编译和链接: 把DEQPSK.c、vectors.c、DEQPSK.cmd、sin_cos.inc依次添加到项目后,点击ProjectCompile File,在项目编译成功之后点击ProjectBuild选项对该项目进行链接,生成*.out文件。 10、装载可执行文件:要让程序代码在DSP内部运行必需将生成的*.OUT文件装载到DSP内部,装载方法是点击:FileLoad Programe再选择生成DEQPSK.out文件就可以将程序装载到DSP的内部存储器中。 11、运行程序并查看结果:a) 在“loop”处设置探针,在标号“J1”的下一行设置探针和断点,在标号“J2”的下一行设置探针和断点。 b) 使第一个探针和工程目录中的source.dat(QPSK调制后的数据文件)相关联(作为文件输入),设置如下: c) 使第二个和第三个探针和工程目录中的DECODE.dat(用于保存解调数据)相关联(作为文件输出),设置如下:探针与文件的关联操作步骤与QPSK的调制部分相同,关联后如以下界面,在被关联文件中都打了钩。 d) 点击ViewGraphTime/Frequence,出现“Graph Property Dialog,按下图所示设置,然后点击OK,即会出现一个图形窗口此步骤用于观察调制信号经过相乘器后的波形。 e) 点击ViewGraphTime/Frequence,出现“Graph Property Dialog,按下图所示设置,然后点击OK,即会出现一个图形窗口此步骤用于观察调制信号经过相乘器后的波形。 f) 按F12以Animate方式运行程序(注意不要直接运行程序)。此时即可看到如下图所示的结果,且图形不断闪烁(在更新)。 g) 运行完程序后,将会弹出如下窗口,点击确定,此时即可通过图形方式观察解调数据是否与调制数据一致;也可通过记事本或者其它程序打开生成的文件DEQPSK.dat来看结果。 七、 设计心得通过此次课程设计,使我更加扎实的掌握了有关高频电子线路方面的知识,在设计过程中虽然遇到了一些问题,但经过一次又一次的思考,一遍又一遍的检查终于找出了原因所在,也暴露出了前期我在这方面的知识欠缺和经验不足。实践出真知,通过亲自动手制作,使我们掌握的知识不再是纸上谈兵。也感谢老师在这段时间对我的照顾,让我很多问题得到解答,日后定好好学习理论知识再将知识运用到实践中去。