通信原理实验报告
“GMSK调制器”系统实验
学生姓名班级学号联系电话电子邮件报告日期
指导老师 韩玉芬
_________李鹏飞 ___ ___ 05119班 07号 ___ 13241705355 62284789 lpf111222@bupt.cn _ 2008 年 6_ _月 5 日
电信工程院实验中心一、实验内容
了解GMSK调制器工作原理,并用数字化的方法用硬件产生GMSK调制器的基带波形。 具体要求如下:
1.了解GMSK调制器工作原理,GMSK信号相位路径的计算及GMSK调制器数字化实现的原理。
2.在掌握了GMSK调制器数字化实现地址逻辑的工作原理后,用可编程逻辑器件实现地址逻辑的设计,并仿真各点波形,分析检验其时序逻辑关系。
3.了解GMSK数字基带波形余弦表的编程流程图,并用计算机编出余弦及正弦表。 4.为了检验所编码表的正确性,可进一步利用计算机软件检验从上述码表得出的GMSK基带波形的眼图与理论计算是否一致,若两者一致,说明所编码表正确,可将它写入EPROM中,并将EPROM片子插在GMSK调制器硬件实验板上。
5.在TX2000通信实验板上,正确使用示波器观看GMSK基带信号眼图。
二、实验原理
GMSK(高斯最小移频键控)是GSM蜂窝移动通信系统中使用的数字调制技术,其方法是将基带脉冲信号经过高斯低通滤波器成形为高斯脉冲后,对其进行MSK调制,因而具有恒包络,连续相位的特点。对恒包络的已调信号我们可以使用功率效率高的非线性放大器,相位连续使已调信号的功率谱主瓣窄,旁瓣衰减比MSK更快,因此频谱利用率更高。
本实验通过理论仿真与硬件实现相结合的方式,先利用Matlab编程产生高斯滤波器矩形脉冲响应,并得到GMSK基带信号的正弦余弦表,再用仿真眼图和理论对比,检验编程是否正确,把正余弦表中的数据量化并写入BIN文件,下载到硬件系统中,通过示波器来观察GMSK信号的眼图。最后用Quartus软件仿真并分析地址逻辑。
三、系统设计
1.软件部分
1.1 g(t)函数的产生 g.m文件的源代码:
function x=g(t) global dt t f N fb sx fb=270833; T=1/fb; dt=T/1000; B=0.3/T;
a=sqrt(log(2)/2)/B; t=-2.5*T:dt:2.5*T;
x=1/(4*T)*(erfc(pi/a*(t-T/2))-erfc(pi/a*(t+T/2)));
图一为g(t)函数的波形图:
图表 1 g(t)函数的波形图
函数g(t)的生成代码很简单,只要按照书上的公式打入代码即可,但实验资料书上的公式印刷有错误,造成一些麻烦。按照通原书上的公式就对了。
1.2 GMSK信号相位路径的计算: rom.m文件的源代码:
global dt t f N fb cos_rom sin_rom close all Q=10; fb=270833; fs=8*fb; T=1/fb; B=0.3/T; n=0:31; L=0:3; i=0:7;
fait=zeros(1,1024);
cos_rom=zeros(1,1024); %初始化cos,sin的rom表 sin_rom=zeros(1,1024); for n=0:31 for L=0:3 for i=0:7
m=n; %把当前的n值转化为五位移存器里的地址 n1=fix(m/16); if n1,m=n-16;end; n2=fix(m/8); if n2,m=m-8;end; n3=fix(m/4); if n3,m=m-4;end; n4=fix(m/2); if n4,m=m-2;end; n5=m;
b1=n1; %把单极性的b1、b2、b3、b4、b5变为双极性,为下一步求相位做准备 if b1==0,b1=-1;end; b2=n2;
if b2==0,b2=-1;end; b3=n3;
if b3==0,b3=-1;end; b4=n4;
if b4==0,b4=-1;end; b5=n5;
if b5==0,b5=-1;end;
sx=dt*cumtrapz(g); %等效面积求积分 tt=(i/8)*1000; jifen1=sx(4000+tt); jifen2=sx(3000+tt); jifen3=sx(2000+tt); jifen4=sx(1000+tt); jifen5=sx(1+tt);
jifen=jifen1*b1+jifen2*b2+jifen3*b3+jifen4*b4; fai=pi*jifen+L*pi/2;
nn=n*32+L*8+i+1; %当前地址 fait(nn)=fai; cos_rom(nn)=cos(fai); sin_rom(nn)=sin(fai); end end end
这里我直接形成1×1024的矩阵,我觉得这样地址逻辑比较清楚。最外层为五位移存器形成的状态数n的的循环,然后是象限计数器提供的L的循环,最后是8次抽样的循环。这样与实际硬件的地址逻辑笔记比较符合,会省去很多麻烦。在积分的计算上,我用了cumtrapz函数,用等效面积的方法求积分,这样更加符合我对积分的理解。
1.3 眼图的仿真
yantu.m文件的源代码:
global dt t f N fb close all
times=100; Na=10; l=8; M=Na*times; N=times*Na*l;
an=round(rand(1,(M+1))); bn=zeros(1,M); b=zeros(1,(M+5)); c=zeros(1,(M+5));
for ii1=1:M %预编码 bb(ii1)=xor(an(ii1),an(ii1+1)); end
for ii2=1:M
b(ii2+5)=bb(ii2); end c=b;
for ii3=1:(M+5) %生成一组对应的双极性,为下面象限计数器L的计算做准备 if b(ii3)==0,c(ii3)=-1;end; end
cos_fai=zeros(1,N); sin_fai=zeros(1,N); LL=0; for k=1:M
nnn=b(k+1)*16+b(k+2)*8+b(k+3)*4+b(k+4)*2+b(k+5); %当前对应的状态数n值 LL=LL+c(k); LL=mod(LL,4); for ii=1:8
address=nnn*32+LL*8+ii; %当前对应的地址 cos_fai(k*8+ii-8)=cos_rom(address); %用当前的地址读出相位 sin_fai(k*8+ii-8)=sin_rom(address); end end ttt=0:Na*l; figure(1)
set(1,'Position',[10,100,500,400]) %设定窗口位置及大小