北邮通原GMSK实验.docx
- 文档编号:30489950
- 上传时间:2023-08-15
- 格式:DOCX
- 页数:37
- 大小:3.07MB
北邮通原GMSK实验.docx
《北邮通原GMSK实验.docx》由会员分享,可在线阅读,更多相关《北邮通原GMSK实验.docx(37页珍藏版)》请在冰豆网上搜索。
北邮通原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模块
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 北邮通原 GMSK 实验
![提示](https://static.bdocx.com/images/bang_tan.gif)