北邮通原GMSK实验.docx

上传人:b****8 文档编号:30489950 上传时间:2023-08-15 格式:DOCX 页数:37 大小:3.07MB
下载 相关 举报
北邮通原GMSK实验.docx_第1页
第1页 / 共37页
北邮通原GMSK实验.docx_第2页
第2页 / 共37页
北邮通原GMSK实验.docx_第3页
第3页 / 共37页
北邮通原GMSK实验.docx_第4页
第4页 / 共37页
北邮通原GMSK实验.docx_第5页
第5页 / 共37页
点击查看更多>>
下载资源
资源描述

北邮通原GMSK实验.docx

《北邮通原GMSK实验.docx》由会员分享,可在线阅读,更多相关《北邮通原GMSK实验.docx(37页珍藏版)》请在冰豆网上搜索。

北邮通原GMSK实验.docx

北邮通原GMSK实验

通信原理实验报告

“GMSK调制器”系统实验

指导老师韩玉芬

 

一、实验内容

1、了解GMSK调制器工作原理,推导GMSK信号相位路径的计算公式,掌握GMSK调制器数字化实现的原理。

2、掌握GMSK调制器数字化、实现地址逻辑的工作原理,用可编程逻辑器件实现地址逻辑的设计,并仿真各点波形,分析检验其时序逻辑关系。

3、了解GMSK相位路径的编程流程图,并用计算机编出相位路径的余弦与正弦表。

4、为了检验所编码表的正确性,可进一步利用计算机软件检验从上述码表得出的GMSK基带波形的眼图与理论计算是否一致,若两者一致,说明所编码表正确,可将它写入EPROM中,并将EPROM片子插在GMSK调制器硬件实验板上。

5、在通信实验板上,正确使用测试仪表观看GMSK基带信号眼图。

(1)用示波器观看GMSK基带信号眼图;

(2)用逻辑分析仪观看地址逻辑电路各点波形与其时序关系;

(3)用频谱仪观看GMSK调制器基带波形的功率谱。

6、按上述要求写出实验报告。

二、实验思路

1、实验中为获得GMSK信号,在MSK调制前加入高斯滤波器,得到成形信号,再通过h=0.5的MSK调制器即可获得GMSK信号。

GMSK是恒包络连续相位调制信号,实验中要通过电路中输入码元以得到基带信号sin(phi)以与cos(phi),于是可以通过计算得到相位phi,进而得到相应的正弦与余弦值,由于一个码元周期内相位信号是连续的,可以通过采样,量化,编码的方法得到相位对应的量化值。

2、在Phi的计算中,可以将其作为分段处理,当t选定时,截短g(t)运算后发现,从负无穷到k-3区间内积分值为0.5,在k-2到t内为部分积分需要用公式计算,而超出此X围内积分为0.

3、将写好的正弦余弦数据表烧入ROM中,电路实际操作中通过编码规则找到对应逻辑地址存储的数据进行DA转化得到模拟信号

4、MATLAB的相位路径:

取5位bn作为输入,计算得到相应的phi,然后对bn进行移位,重新得到下一个phi值,一个码元周期取8个点画一小段,10个小段作为一条完整的相位路径;循环40次得到整个的相位路径图。

5、MATLAB的眼图仿真:

通过产生随机序列数组bn,取每五位一组作为输入,对相应的相位phi进行8次采样并计算相应(正)余弦值在图中画出一次GMSK相位路径,然后通表中的过对数组的移位重复上述过程,连续画40次形成眼图。

6、对(正)余弦表中的1024个点每样值进行10bit量化,量化规则(地址)是高五位存储五位bn输入序列的组合,然后两位存储(L)4个象限,低三位用作8bit量化,由于采用均匀量化,且量化间隔较小,其误差很小,所以量化后的眼图的(正)余弦值通过查表得到。

7、由于ROM数据位只有8位,有3块ROM,分别用作存储cos(phi)量化值的低八位、sin(phi)量化值的低八位,以与cos和sin的高两位。

而且由于ROM每次读八字节,所以每次存储时要间8字节。

最后将表写入bin文件,以便实验后续硬件部分的进行。

8.最后眼图观察采用了两种方法,分别是烧录bin文件以与通过mif文件的实现,由于一开始bin文件方法的人数较多,所以我在完成第一种方法同时将mif方法也做了出来,第一天验收成功bin文件的方法,第二天将mif的验收也取得成功。

三、实验原理分析

3.1GMSK调制器工作原理和相位路径的计算

MSK调制可以看成是调制指数为0.5的连续相位2FSK调制器,为了满足移动通信对发送信号功率普的带外辐射要求,在MSK调制前加入高斯滤波器。

产生GMSK信号的原理图如图1所示:

GMSK是恒包络连续相位调制信号,它的表示式如下:

相位路径为

其中,g(t)为BT=0.3的高斯滤波器矩形脉冲响应。

调制指数h=0.5,为双极性不归零码序列的第n个码元,bn为+1或-1。

高斯滤波器的传递函数为H(f)为

式中,

是与高斯滤波器的3dB带宽

有关的一个常数。

由3dB带宽定义有

所以

由此可见,改变

将随之改变;改变

将随之改变。

高斯滤波器冲击响应为h(t)

矩形脉冲为

式中u(t)为单位阶跃函数,其表达式为

高斯滤波器的矩形脉冲响应为

其中

可证明

将g(t)截短,对BT=0.3的g(t)经计算,取最短长度为5T时,有

因而在具体计算

时,取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建议的要求。

 

四、实验步骤

1、仔细阅读实验原理后,推导

的计算公式。

2、编写GMSK高斯滤波器的矩形脉冲响应

的函数。

3、编写计算

程序。

4、编写计算

的程序,并设计余弦与正弦ROM表。

5、将余弦和正弦码表中的每个样值的10bit码字,按照地址逻辑进行存放,并用matlab程序实现

6、得到ROM存储的基本波形表,利用信号源产生的伪随机序列{

}经预编码后得到{

},经过地址逻辑运算由ROM中顺序取出

的离散值,然后利用计算机绘图程序(功能相当于数模变换DAC),得到基带波形的输出,观察仿真眼图。

7、把得到的正余弦表进行数字量化,写入BIN文件,下载到硬件系统中,通过示波器观察实际硬件实现的GMSK信号眼图。

8、将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:

20000

y(i)=g(t(i)*2.5*T);

end

plot(t,y),title('BT=0.3截断长度为5T的g(t)'),xlabel('时间t(*2.5T)'),ylabel('g(t)')

图6BT=0.3高斯滤波器矩形脉冲响应

5.3

函数的实现与与相位路径的画图

计算相位路径

与计算余弦正弦值的流程图如下:

图7相位路径正余弦表流程图

具体在计算时,将

分解为两个部分,

其中

但在以下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的积分公式

end

phase=ph+L*pi/2;%得到相位phi(t)

end

下面验证相位路径ph(t,b,l)的正确性,采用绘制出相位路径图方法,代码如下:

②a=randint(1,1024);%随机产生0/1序列a

b=2*a-1;%经预编码和电平变换后得到序列b

screen=40;

path=zeros(1,80);%初始路径长度

fori=1:

screen

temp=[b

(1),b

(2),b(3),b(4),b(5)];%赋初值

LL=0;%LL表示绝对的L

L=0;%模4后的L

fork=1:

10

forj=1/8:

1/8:

1

path((k-1)*8+j*8)=Ph(j,temp,L)+(LL-L)*pi/2;%加上因为模4而带来的相位上的损失

end

LL=LL+temp

(1);%得到连续相位,l为不模4的

L=mod(LL,4);%因为写的函数Phi是要输入模4的L的,所以也要同时求出

forkk=1:

4

temp(kk)=temp(kk+1);%移位,得到新的temp

temp(5)=b((i-1)*10+k+5);%给temp(5)赋值,得到完整的temp,作为次输入

end

end

plot(path);

holdon;

end

holdoff;

由MATLAB画出的图像如下:

其中图2是将进入循环时的输入一样情况的路径图,更为明显。

图8相位路径图

图9相位路径图

5.4正弦表和余弦表的生成

计算出的b(n)有2种状态,L有4个象限,在采样速率fs下每比特采样8次,故

有1024个点,代码中对应数组phi(1024)。

代码中用到3重循环,最外层是32种状态的循环,第二层是象限的循环,最内层是采样次数的循环。

最后用计算出的phi值进行余弦、正弦的运算,得到两个表存正弦和余弦值。

其代码如下:

①clear;

phi(1024)=0;%大小为1024的数组用于存放存phi

bn(5)=0;%

T=3.6923*10^-6;

fori=0:

1:

31

bn=de2bi(i,5);%将十进制转换为二进制

bn=seqreverse(bn);

forii=1:

5%得到输入序列bn

bb(ii)=2*bn(ii)-1;

end

forj=0:

1:

3%4个象限

fork=0:

1:

7%采样8次

phi(i*32+j*8+k+1)=Ph(k/8,bb,j);%计算phiend

end

end

end

cos_table=cos(phi);

sin_table=sin(phi);

5.5量化前的眼图绘制

原理为:

首先产生足够长的0,1序列,经预测编码与变化后得到bn序列,作为Ph函数的输入,初始化循环次数,象限数,与路径等,设立两级循环计算每次输入情况下的相位值(注意此处连续相位),进行采样八次画出一条正弦值的图,然后移位bn数组与改变其他输入量,重新画出下一次的正弦值的图,循环多次在屏幕上画出一个眼图,其代码实现如下:

①a=randint(1,1024);%等概率生成0/1

b=2*a-1;

screen=40;%刷屏screen

gmsk=zeros(1,80);%初始化path

temp=[b

(1),b

(2),b(3),b(4),b(5)];%赋初值

%LL表示绝对的L

L=0;%模4后的L

fori=1:

screen

fork=1:

10

forj=1/8:

1/8:

1%采样8次

gmsk((k-1)*8+j*8)=sin(Ph(j,temp,L));%不用加上因为模4而带来的相位上的损失

end

L=mod(L+temp

(1),4);%因为写的函数Phi是要输入模4的L的,所以也要同时求出

forkk=1:

4%移位,得到新的temp

temp(kk)=temp(kk+1);

temp(5)=b((i-1)*10+k+5);%给temp(5)赋值,得到完整的temp

end

end

plot(gmsk);

title('GMSK基带正弦信号眼图');holdon;

end

holdoff;

绘图如下:

图10量化前GMSK基带余弦,正弦信号眼图

5.6正(余)弦表的均匀量化与Bin文件的生成

对正(余)弦表的量化X围为[-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:

1024

qcos=floor((cos(phi(n))+1)/delta);%量化后的cos

qsin=floor((sin(phi(n))+1)/delta);%量化后的sin

cosh=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:

1024

qcos=floor((cos(phi(n))+1)/delta);%量化后的cos

cos_table_lh(n)=qcos*delta-1;

qsin=floor((sin(phi(n))+1)/delta);%量化后的sin

sin_table_lh(n)=qsin*delta-1;

end

a=randint(1,1024);%等概率生成0/1

b=2*a-1;

screen=40;%刷屏screen

gmsk=zeros(1,80);%初始化path

temp=[b

(1),b

(2),b(3),b(4),b(5)];%赋初值

L=0;%模4后的L

c(5)=0;

fori=1:

screen

fork=1:

10

temp(5)=b((i-1)*10+k+5);%给temp(5)赋值,得到完整的temp

forj=0:

1:

7%采样8次

forx=1:

5

if(temp(x)==-1)

c(x)=0;

elsec(x)=1;

end

end

n=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);%

end

L=mod(L+temp

(1),4);%因为写的函数Phi是要输入模4的L的,所以也要同时求出

forkk=1:

4%移位,得到新的temp

temp(kk)=temp(kk+1);

end

end

plot(gmsk);

title('量化后GMSK基带余弦信号眼图');

holdon;

end

holdoff;

图14量化后GMSK基带余弦信号、正弦信号图

5.8mif文件的生成

fori=1:

8192

data(i)=quansc(i);

end

fid=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序列的反馈函数为

同时为防止进入全0状态,当Q全零时转入000001状态,继续循环。

LIBRARYIEEE;

USEIEEE.STD_LOGIC_1164.ALL;

USEIEEE.STD_LOGIC_ARITH.ALL;

USEIEEE.STD_LOGIC_UNSIGNED.ALL;

ENTITYCLOCKMGDFIS

PORT(

CLK:

INSTD_LOGIC;

A3:

OUTSTD_LOGIC;

A4:

OUTSTD_LOGIC;

A5:

OUTSTD_LOGIC;

DATA:

OUTSTD_LOGIC);

ENDENTITYCLOCKMGDF;

ARCHITECTUREMOFCLOCKMGDFIS

SIGNALTMP:

STD_LOGIC_VECTOR(2DOWNTO0);--暂存000~111变化

SIGNALQ:

STD_LOGIC_VECTOR(22DOWNTO0);

BEGIN

P1:

PROCESS(CLK)

BEGIN

IF(CLK'EVENTANDCLK='0')

THENTMP<=TMP+'1';

IFQ(22DOWNTO0)="000000"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模块

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > IT计算机 > 电脑基础知识

copyright@ 2008-2022 冰豆网网站版权所有

经营许可证编号:鄂ICP备2022015515号-1