北邮通原GMSK实验_第1页
北邮通原GMSK实验_第2页
北邮通原GMSK实验_第3页
北邮通原GMSK实验_第4页
北邮通原GMSK实验_第5页
已阅读5页,还剩27页未读 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

通信原理实验报告“GMSK调制器”系统实验指导老师韩玉芬目录一、实验内容 3二、实验思路 3三、实验原理分析 43.1GMSK调制器工作原理和相位路径的计算 43.2数字信号处理方法实现GMSK调制器 7四、实验步骤 8五、软件实现 95.1仿真眼图流程 95.2g(t)信号产生 95.3φ(t)函数的实现及及相位路径的画图 105.4正弦表和余弦表的生成 145.5量化前的眼图绘制 145.6正(余)弦表的均匀量化及Bin文件的生成 165.7量化后的眼图 205.8mif文件的生成 21六、硬件部分 226.1地址逻辑设计 226.2CLOCKMGDF模块 236.3ADDRLOGIC模块 246.4整体的仿真波形图 266.5mif文件及相应电路逻辑 27七、实验结果展示 297.1bin文件方法 297.2MIF文件方法 317.3结果分析 31八、拓展部分——眼图的功率谱密度 31九、实验总结及心得体会 错误!未定义书签。十、参考文献 34因而在具体计算时,取g(t)的截短长度为5T,就可达到足够精度。BT=0.3的高斯滤波器矩形脉冲响应如图2所示:图2BT=0.3的高斯滤波器矩形脉冲响应在KT≤t≤(K+1)T时,图3表示不归零矩阵脉冲序列通过BT=0.3的高斯滤波器的相响应示意图。 图3BT=0.3的高斯滤波器矩形脉冲序列响应示意图3.2数字信号处理方法实现GMSK调制器在算得后,可得出值。首先将的值离散化,固化在ROM中。由随机数据{bn}形成ROM表的地址,根据地址取出ROM中的相应的基带信号离散值,然后利用D/A将其数模变换成模拟基带信号,再由正交调制器将基带频谱搬移至载频上。本实验的电路原理框图如图4:图4用数字化方法实现GMSK的原理框图
为得到的余弦表和正弦表,必须将基带信号离散化,即抽样、量化。根据随机信号功率谱估计仿真方法,对不同采样速率、不同量化电平值的GMSK基带信号进行谱估计,最后选用采样速率为每比特抽8个样,每个样值量化编码为10比特(Q=10)。在采样速率fs=8fb=2.166664MHz的情况下,由于存在采样造成的副主瓣,影响了功率谱特性,因此必须在D/A转化后加低通滤波器来抑制高频分量,选用3dB带宽的330KHZ的6阶贝塞尔函数低通滤波器,数/模变换后的基带信号经低通滤波器后的功率谱满足GSM05.05建议的要求。四、实验步骤仔细阅读实验原理后,推导gt编写GMSK高斯滤波器的矩形脉冲响应gt编写计算∅t编写计算cos∅t及sin∅t将余弦和正弦码表中的每个样值的10bit码字,按照地址逻辑进行存放,并用matlab程序实现得到ROM存储的基本波形表,利用信号源产生的伪随机序列{an}经预编码后得到{bn},经过地址逻辑运算由ROM中顺序取出cos∅t及把得到的正余弦表进行数字量化,写入BIN文件,下载到硬件系统中,通过示波器观察实际硬件实现的GMSK信号眼图。将bin文件用matlab转换为mif文件,并导入到quartus连接好电路生成ROM模块,后烧录入FPGA,观察示波器上的GMSK信号眼图。五、软件实现5.1仿真眼图流程图5:眼图仿真流程5.2g(t)信号产生首先编写q(t)函数,g(t)通过调用q(t)函数实现,其代码如下:①functiony=q(x)%调用erfc函数实现Q(t)y=erfc(x./(sqrt(2)))./2;end②functiongt=g(t)%调用Q(t)函数实现g(t)T=3.6923*10^-6;B=0.3/T;alpha=(1/B)*sqrt((log(2)/2));gt=(1/(2*T))*(q(sqrt(2)*pi*(t-T/2)/alpha)-q(sqrt(2)*pi*(t+T/2)/alpha));end绘制g(t)的函数和结果如下:③T=3.6923*10^-6;t=linspace(-1,1,20000);fori=1:20000y(i)=g(t(i)*2.5*T);endplot(t,y),title('BT=0.3截断长度为5T的g(t)'),xlabel('时间t(*2.5T)'),ylabel('g(t)')图6BT=0.3高斯滤波器矩形脉冲响应5.3φ(t)函数的实现及及相位路径的画图计算相位路径φ(t图7相位路径正余弦表流程图具体在计算时,将φ(t)分解为两个部分其中但在以下Ph(t,b,L)函数中,参数t不是绝对时间,而是绝对时间除以T的倍数,如1/8,1等数。计算时可写成两个积分,但由于积分的函数相同,只是上下限不同,故程序中写为一个积分,调用了matlab中的quad函数。函数如下:①functionphase=Ph(t,b,L)%计算phi(t);这里t是与T的相对时间T=3.6923*10^-6;ph=0;%初始化相位fori=-2:2%循环叠加求出phi(0)+deltaphi(t),ph=ph+quad(@g,-2.5*T,t*T-i*T-T/2)*pi*b(i+3);%此处是phi的积分公式endphase=ph+L*pi/2;%得到相位phi(t)end下面验证相位路径ph(t,b,l)的正确性,采用绘制出相位路径图方法,代码如下:②a=randint(1,1024);%随机产生0/1序列ab=2*a-1;%经预编码和电平变换后得到序列bscreen=40;path=zeros(1,80);%初始路径长度fori=1:screentemp=[b(1),b(2),b(3),b(4),b(5)];%赋初值LL=0;%LL表示绝对的LL=0;%模4后的Lfork=1:10forj=1/8:1/8:1path((k-1)*8+j*8)=Ph(j,temp,L)+(LL-L)*pi/2;%加上因为模4而带来的相位上的损失endLL=LL+temp(1);%得到连续相位,l为不模4的L=mod(LL,4);%因为写的函数Phi是要输入模4的L的,所以也要同时求出forkk=1:4temp(kk)=temp(kk+1);%移位,得到新的temptemp(5)=b((i-1)*10+k+5);%给temp(5)赋值,得到完整的temp,作为次输入endendplot(path);holdon;endholdoff;由MATLAB画出的图像如下:其中图2是将进入循环时的输入相同情况的路径图,更为明显。 图8相位路径图图9相位路径图5.4正弦表和余弦表的生成计算出的b(n)有2种状态,L有4个象限,在采样速率fs下每比特采样8次,故有1024个点,代码中对应数组phi(1024)。代码中用到3重循环,最外层是32种状态的循环,第二层是象限的循环,最内层是采样次数的循环。最后用计算出的phi值进行余弦、正弦的运算,得到两个表存正弦和余弦值。其代码如下:①clear;phi(1024)=0;%大小为1024的数组用于存放存phibn(5)=0;%T=3.6923*10^-6;fori=0:1:31bn=de2bi(i,5);%将十进制转换为二进制bn=seqreverse(bn);forii=1:5%得到输入序列bnbb(ii)=2*bn(ii)-1;endforj=0:1:3%4个象限fork=0:1:7%采样8次phi(i*32+j*8+k+1)=Ph(k/8,bb,j);%计算phiendendendendcos_table=cos(phi);sin_table=sin(phi);5.5量化前的眼图绘制原理为:首先产生足够长的0,1序列,经预测编码及变化后得到bn序列,作为Ph函数的输入,初始化循环次数,象限数,及路径等,设立两级循环计算每次输入情况下的相位值(注意此处连续相位),进行采样八次画出一条正弦值的图,然后移位bn数组及改变其他输入量,重新画出下一次的正弦值的图,循环多次在屏幕上画出一个眼图,其代码实现如下:①a=randint(1,1024);%等概率生成0/1b=2*a-1;screen=40;%刷屏screengmsk=zeros(1,80);%初始化pathtemp=[b(1),b(2),b(3),b(4),b(5)];%赋初值%LL表示绝对的LL=0;%模4后的Lfori=1:screenfork=1:10forj=1/8:1/8:1%采样8次gmsk((k-1)*8+j*8)=sin(Ph(j,temp,L));%不用加上因为模4而带来的相位上的损失endL=mod(L+temp(1),4);%因为写的函数Phi是要输入模4的L的,所以也要同时求出forkk=1:4%移位,得到新的temptemp(kk)=temp(kk+1);temp(5)=b((i-1)*10+k+5);%给temp(5)赋值,得到完整的tempendendplot(gmsk);title('GMSK基带正弦信号眼图');holdon;endholdoff;绘图如下:图10量化前GMSK基带余弦,正弦信号眼图5.6正(余)弦表的均匀量化及Bin文件的生成对正(余)弦表的量化范围为[-1,1],且每个样值量化为10bit,故量化为1024个电平。若采用均匀量化,则量化间隔为,其误差较小,不足以对整个编解码产生不可恢复的影响,且考虑到其实现简单的因素,所以采用均匀量化,既能满足实验对精确度的要求,又将运算复杂度降低到了能够接受的程度。具体步骤如下:1)对正(余)弦表中1024个点的每个样值进行10bit量化。2)实验板上只有插接8KB的ROM,所以ROM的数据位只有8位,共有3块ROM。存储方式是:ROM1存储量化值的低8位;ROM3存储量化值的低8位;ROM2存储和的高两位;由于ROM每次读8位,所以存储也要按此方式,其代码如下①M=1024;%量化delta=2/M;quancos=zeros(1,8*1024);quansin=zeros(1,8*1024);quansc=zeros(1,8*1024);forn=1:1024qcos=floor((cos(phi(n))+1)/delta);%量化后的cosqsin=floor((sin(phi(n))+1)/delta);%量化后的sincosh=floor(qcos/256);%cos高两位cosl=floor(mod(qcos,256));%cos低8位quancos(n*8-7)=cosl;sinh=floor(qsin/256);sinl=floor(mod(qsin,256));quansin(n*8-7)=sinl;end②cosfile=fopen('cosl.bin','w');%写入bin文件fwrite(cosfile,quancos);fclose(cosfile);sinfile=fopen('sinl.bin','w');fwrite(sinfile,quansin);fclose(sinfile);scfile=fopen('sc.bin','w');fwrite(scfile,quansc);fclose(scfile); 图11SIN低八位bin表图12COS低八位bin表 图13SIN和COS的高位5.7量化后的眼图绘制原理与量化前眼图原理相同,区别在于绘制时正弦和余弦值要通过查表得到,其代码实现和绘制眼图如下:①M=1024;delta=2/M;cos_table_lh(1024)=0;sin_table_lh(1024)=0;forn=1:1024qcos=floor((cos(phi(n))+1)/delta);%量化后的coscos_table_lh(n)=qcos*delta-1;qsin=floor((sin(phi(n))+1)/delta);%量化后的sinsin_table_lh(n)=qsin*delta-1;enda=randint(1,1024);%等概率生成0/1b=2*a-1;screen=40;%刷屏screengmsk=zeros(1,80);%初始化pathtemp=[b(1),b(2),b(3),b(4),b(5)];%赋初值L=0;%模4后的Lc(5)=0;fori=1:screenfork=1:10temp(5)=b((i-1)*10+k+5);%给temp(5)赋值,得到完整的tempforj=0:1:7%采样8次forx=1:5if(temp(x)==-1)c(x)=0;elsec(x)=1;endendn=16*c(1)+8*c(2)+4*c(3)+2*c(4)+c(5)+1;%第n个状态gmsk((k-1)*8+j+1)=cos_table_lh((n-1)*32+L*8+j+1);%endL=mod(L+temp(1),4);%因为写的函数Phi是要输入模4的L的,所以也要同时求出forkk=1:4%移位,得到新的temptemp(kk)=temp(kk+1);endendplot(gmsk);title('量化后GMSK基带余弦信号眼图');holdon;endholdoff;图14量化后GMSK基带余弦信号、正弦信号图5.8mif文件的生成fori=1:8192data(i)=quansc(i);endfid=fopen('/Users/zhouliang/Desktop/GMSK/sc.mif','w');fprintf(fid,'WIDTH=8;\n');fprintf(fid,'DEPTH=1024;\n');%指定数值的个数,即ROM的深度(本工程用256个)fprintf(fid,'ADDRESS_RADIX=UNS;\n');%指定地址的数制(UNS:无符号数。推荐UNS)fprintf(fid,'DATA_RADIX=DEC;\n');%指定数据基数(DEC:十进制(有符号数),推荐DEC)fprintf(fid,'CONTENTBEGIN\n');%固定格式%在读不同的文件时需要改变number=[0:8191];data_temp=[number;data];fprintf(fid,'%d:%d;\n',data_temp);fprintf(fid,'END;\n');%固定格式fclose(fid);六、硬件部分6.1地址逻辑设计地址逻辑可以由伪随机序列{an}经预编码之后得到{bn},再经地址逻辑运算形成,电路设计可分为时钟分频,伪随机序列的产生,地址逻辑的生成3部分。预编码及10位地址码产生电路的原理为:图15预编码及10位地址码产生电路原理图由图中可以看出,实验板上的13MHz晶振产生的频率经过分频器后可产生信号A5、A4、A3的频率,分别为fb、2fb、4fb,fb=270.833KHz为码元速率。fb作为M序列发生器的输入时钟,产生伪随机序列DATA。在上图的下方,由DATA经过两个D触发器74LS74(状态方程Qn+1=D),延时一个周期T后与DATA的下一个值相异或,完成预编码dn=an⊕an-1之后,dn在经74LS74得到bn(如图中部),由端口B进入移位寄存器74LS164。74LS164是一种8位移位寄存器芯片,只能单向移位,在A端口取“1”时,移位方式是:B->Q0,Q0->Q1,Q1->Q2,Q2->Q3,Q3->Q4,分别代表A8,A9,A10,A11,A12。Q4移出后进入图中加减计数器前面的D触发器,输出bk-3作为加减计数器74LS169的输入。74LS169是一种可预置4位二进制可逆计数器,这里只用到了输出的低两位。根据芯片手册,当bk-3=1时,为加计数;当bk-3=0时,为减计数。这样,就可以控制相位在00~11之间变化。此部分电路地址逻辑电路框图如图所示图16地址逻辑电路框图CLK是时钟脉冲发生器,DATA为伪随机序列输出信号;A5、A4、A3为8个采样值的逻辑地址码;A6、A7为两位象限逻辑地址码,对应L从0到3;A8、A9、A10、A11、A12为信息地址码。6.2CLOCKMGDF模块①时钟分频,生成8个抽样值逻辑地址码,并输出伪随机序列DATA;②码元速率fb为270.833khz,抽样速率为8fb。抽样地址A5,A4,A3从000到111变化,因此A5,A4,A3频率依次为fb,2fb,4fb③查表可得(223-1)M序列的反馈函数为Q0n+1=Q4n+Q22n。同时为防止进入全0状态LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYCLOCKMGDFISPORT( CLK:INSTD_LOGIC; A3:OUTSTD_LOGIC;A4:OUTSTD_LOGIC;A5:OUTSTD_LOGIC; DATA:OUTSTD_LOGIC);ENDENTITYCLOCKMGDF;ARCHITECTUREMOFCLOCKMGDFISSIGNALTMP:STD_LOGIC_VECTOR(2DOWNTO0);--暂存000~111变化SIGNALQ:STD_LOGIC_VECTOR(22DOWNTO0);BEGINP1:PROCESS(CLK) BEGINIF(CLK'EVENTANDCLK='0') THENTMP<=TMP+'1'; IFQ(22DOWNTO0)="00000000000000000000000"THEN Q(0)<='1';--防止进入全零状态 ELSE Q<=Q(21DOWNTO0)&(Q(4)XORQ(22)); ENDIF; DATA<=Q(22);--产生伪随机序列 A3<=TMP(0);--频率4fb A4<=TMP(1);--频率2fb A5<=TMP(2);--频率fb ENDIF;ENDPROCESSP1;ENDM;仿真波形为图17CLOCKMGDF模块仿真波形图6.3ADDRLOGIC模块ADDRLOGIC模块用于生成两位象限地址码A6,A7以及五位信息地址码

A8~A12。其中:1)输入端口为时钟信号CLOCK(fb=270.833kHz)。2)A6、A7两位二进制数表示L,00~11即0~3象限,由TMPB(4)的值决定递增或递减。3)A8、A9、A10、A11、A12代表电路中的移位寄存器。VHDL代码如下LIBRARYIEEE;USEIEEE.STD_LOGIC_1164.ALL;USEIEEE.STD_LOGIC_ARITH.ALL;USEIEEE.STD_LOGIC_UNSIGNED.ALL;ENTITYADDRLOGICISPORT(CLK:INSTD_LOGIC;DATA:INSTD_LOGIC;A6:OUTSTD_LOGIC;A7:OUTSTD_LOGIC;A8:OUTSTD_LOGIC;A9:OUTSTD_LOGIC;A10:OUTSTD_LOGIC;A11:OUTSTD_LOGIC;A12:OUTSTD_LOGIC);ENDADDRLOGIC;ARCHITECTUREADDRESSOFADDRLOGICISSIGNALTMPL:STD_LOGIC_VECTOR(1DOWNTO0);SIGNALTMPB:STD_LOGIC_VECTOR(4DOWNTO0);BEGINPROCESS(CLK,DATA)BEGINIF(CLK'EVENTANDCLK='0')THENIFTMPB(4)='0'THENTMPL<=TMPL-'1';ELSETMPL<=TMPL+'1';ENDIF;TMPB<=TMPB(3DOWNTO0)&DATA;A6<=TMPL(0);A7<=TMPL(1);A8<=TMPB(0);A9<=TMPB(1);A10<=TMPB(2);A11<=TMPB(3);A12<=TMPB(4);ENDIF;ENDPROCESS;ENDADDRESS;仿真波形图如下: 图18ADDRLOGIC仿真波形图6.4整体的仿真波形图 图19系统总体仿真波形图可看出仿真结果与电路设计相符:DATA为0,1随机;A5-A3从000-111连续变化;A8-12以为顺序为新值,A12决定加减计数器工作方式;A12为0,A6,A7减计数,A12为1,A6,A7加计数。6.5mif文件及相应电路逻辑在实际操作中,我们使用mif作为虚拟ROM,使用EP1C3T100C8作为主控芯片,mif中存储的是按10bit量化的cos和sin的量化值,由于寻址部分不需要再考虑空出的三条地位地址线,我们在存量化值得时候不需要空出7个0。同时由于这块板子的晶振是48MHz的,所以在前面还加了一个分频的模块,将48MHz的时钟分频为2MHz的时钟。图20总体电路逻辑mif文件为图21COS的mif文件图22SIN的mif文件七、实验结果展示7.1bin文件方法1)用编程器将量化后的码表的二进制bin文件下载到8*1024的三片ROM,插在GMSK通信系统实验箱上,注意芯片的位置和方向;将GMSK通信系统实验箱的JTAG接口与计算机相连。将双路稳压电源调整至16V。接通电源后,用示波器观察正弦经低通滤波器LPF后的输出波形如下图所示图23实验结果由于bin文件方法我是第一天晚上验收的,老师的板子也是在这天很晚才调好的,验收前我就按照大家说的把采样时候循环的0:1:7改成了1:1:8,又将存储sin和cos高位的bin表(sc)的高位和低位换了一下,于是第一次烧录bin表出现了第一个错误的眼图,后面再一检查发现原本的bin表是正确的,于是又将高位的bin表的高低位换了回来,于是出现了第二个正确的眼图,这也验证了本来bin表的正确性;由于这次验收的时候已经很晚了,实验室只剩我们5位同学,所以才会忙中出错第一次没有成功,不过好在我们坚持到最后,成为了第一批验收bin表成功的同学,当然这里十分感谢韩老师陪我们5个到11点,十分感谢!7.2MIF文件方法 图24实验结果7.3结果分析示波器上观察到了眼图,从眼图的张开程度可观察码间干扰和加性噪声对接收基带信号波形的影响,从而可估计出系统的性能。若不经过低通滤波器直接观察眼图,可以明显看到波形上的锯齿,说明波形存在高频部分,主要是由于采样和量化误差引起的。在经过低通滤波之后,波形平滑很多,更加接近matlab量化前仿真的波形。八、拓展部分——眼图的功率谱密度思路:仿真功率谱密度与仿真眼图类似,都是使用伪随机序列提供地址逻辑,最后生成的值运用编写的t2f函数进行傅立叶变换,再平方,运用对数刻度将其plot即可仿真功率谱密度。functionS=fly(s,fs)%s代表输入信号,S代表s的频谱,fs是采样频率N=length(s);%样点总数T=1/fs*N;%观察时间f=[-N/2:(N/2-1)]/T;%频率采样点tmp1=fft(s)/fs;tmp2=N*ifft(

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论