HUT基于C6000的QPSK解调器设计与实现解读.docx
《HUT基于C6000的QPSK解调器设计与实现解读.docx》由会员分享,可在线阅读,更多相关《HUT基于C6000的QPSK解调器设计与实现解读.docx(16页珍藏版)》请在冰豆网上搜索。
![HUT基于C6000的QPSK解调器设计与实现解读.docx](https://file1.bdocx.com/fileroot1/2022-11/16/9db857e4-da36-4b85-aec5-7ef40754aedc/9db857e4-da36-4b85-aec5-7ef40754aedc1.gif)
HUT基于C6000的QPSK解调器设计与实现解读
湖南工业大学
课程设计
资料袋
计算机与通信学院(系、部)2015—2016学年第一学期
课程名称:
DSP应用课程设计
指导教师:
龙永新职称副教授
学生姓名:
戴勇建专业班级通信1201班学号12408200115
设计题目:
基于C6000的QPSK解调器设计与实现
成绩:
起止日期:
2015年12月7日至2015年12月18日
目录清单
序号
材料名称
资料数量
备注
1
课程设计任务书
1
2
课程设计说明书
1
3
课程设计图纸
0
张
4
5
6
DSP应用课程设计
设计说明书
基于C6000的QPSK解调器设计与实现
起止日期:
2015年12月7日至2015年12月18日
学生姓名
戴勇建
班级
通信1201
学号
12408200115
成绩
指导教师(签字)
计算机与通信学院
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.0
2、DSP仿真器TDS510-USB2.0,1套
四、设计内容
1、编写程序,对QPSK调制信号进行解调。
在DSP编程时,直接把载波放入存储器,然后通过统计的方法判断是“1”还是“0”,最后通过并串转换还原出原来信号。
2、程序完善、优化,面向C6000开发调试。
3、能演示输入输出数据的完整图形,显示结果,并对程序或相关设计予以解释。
五、设计步骤
1、用仿真机将计算机与TIC54x开发板连接好,然后运行CCS软件。
2、新建一个项目:
点击Project-New,将项目命名为DEQPSK,并将项目保存在自己定义的文件夹下,注意文件夹一定要用英文名,不要将文件夹取名为中文名,因为CCS软件不能识别以中文命名的文件夹。
3、新建一个源文件:
点击点击File-New-SourceFile可以打开一个文本编辑窗口,点击保存按键,保存在和项目相同的一个文件夹下面(DEQPSK),保存类型选择*.C(如果源文件是C语言编写的,保存类型选择*.C,如果使用汇编语言编写的,选择*.ASM为保存类型),我们在这里将保存名字命名为DEQPSK.c。
4、在项目中添加源文件:
在新建立了一个源文件以后,要想使用CCS编译器对该源文件进行编译还需要将源文件添加到项目中去。
添加方法是在工程管理器中右键单击DEQPSK.pjt,在弹出的菜单中选择AddFiles,然后将刚才建立的DEQPSK.c文件添加到该项目中去。
5、编写源程序:
在工程管理器中双击DEQPSK.c,将出现文本编辑窗口,在该文本编辑窗口中输入如下内容:
#include
#defineInputLength15/*IQ两路的长度*/
#defineSineLenth64/*一个周期正谐波的长度*/
#definep1(sineLength/8)*1/*第一相位*/
#definep2(sineLength/8)*3/*第二相位*/
#definep3(sineLength/8)*5/*第三相位*/
#definep4(sineLength/8)*7/*第四相位*/
#defineOutputLengthInputLength*SineLength/*输出数据的总长度*/
#definepi3.14159
/************************************/
/********子函数和子程序定义开始*************/
voidmain()
{
inti=0,j=0,a=0,n,x,b=0;
intI[InputLength]={0,0,0,1,0,0,1,1,0,0,0,1,1,1,1};
intQ[InputLength]={0,1,1,1,1,1,0,0,0,0,0,1,1,1,1};
voidPhaseSelection(inta);/*相位选择函数声明*/
IER=0;
for(i=0;i{
sin_data[i]=2047+(sin)(2047.0*sin(2*pi*i/(SineLength)));/*调用sin函数*/
}
for(j=0;j{
sin_data[i++]=sin_data[j];
}
for(j=0;j{
QPSK[j]=0;
}
for(j=0;j{
if(I[j]==1&&Q[j]==1)
{
phaseSelection(p1);/*选择pi/4的相位*/
}
if(I[j]==0&&Q[j]==1)
{
phaseSelection(p2);/*选择3pi/4的相位*/
}
if(I[j]==0&&Q[j]==0)
{
phaseSelection(p3);/*选择5pi/4的相位*/
}
if(I[j]==1&&Q[j]==0)
{
phaseSelection(p3);/*选择5pi/4的相位*/
}
}
for(i=OutputLength;i{
QPSK[i]=0;
}
for(i=0;i{
*(int*)(0x30000+4*i)=QPSK[i];//把数据给一个地址,然后从这个地址看结果(xt1029)
a=*(int*)(0x30000+4*i);
*(int*)(0x8000+4*i)=a;
}
for(;;)
{
submit_qdma();
wait();
}
}
/****************相位选择函数定义结束*****************/
解调程序部分源代码
#include
#defineInputLength15/*IQ两路的长度*/
#defineSineLenth64/*一个周期正谐波的长度*/
#definep1(sineLength/8)*1/*第一相位*/
#definep2(sineLength/8)*3/*第二相位*/
#definep3(sineLength/8)*5/*第三相位*/
#definep4(sineLength/8)*7/*第四相位*/
#defineOutputLengthInputLength*SineLength/*输出数据的总长度*/
#definepi3.14159
intw=0;
staticintm=0;
staticintI[InputLength]={0,0,0,1,0,0,1,1,0,0,0,1,1,1,1};/*输入数据1路*/
staticintQ[InputLength]={0,1,1,1,1,1,0,0,0,0,0,1,1,1,1};/*输入数据Q路*/
staticintQPSK[OutputLength];
staticintsin_data[SineLength*2];
staticintcos_data[SineLength];
staticintI_multply_cos[OutputLength];
staticintQ_multply_sin[OutputLength];
staticintI_DeQPSK[InputLength];
staticintQ_DeQPSK[InputLength];
/****************子函数和子程序定义*****************/
voidmain()
{
inti=0,j=0;
voidPhaseSelection(inta);
voidmultply();
voidIQ_Decision();
for(i=0;i{
sin_data[i]=(int)(64.0*sin(2*pi*i/(SineLength)));
cos_data[i]=(int)(64.0*cos(2*pi*i/(SineLength)));
}
i=SineLength;
for(j=0;j{
sin_data[i++]=sin_data[j];
}
for(j=0;j{
if(I[j]==1&&Q[j]==1)
{
PhaseSelection(p1);
}
elseif(I[j]==0&&Q[j]==1)
{
PhaseSelection(p2);
}
elseif(I[j]==0&&Q[j]==0)
{
PhaseSelection(p3);
}
else
{
PhaseSelection(p4);
}
}
asm('nop');
multply();
IQ_