8PSK通信系统的蒙特卡罗仿真分析最终.docx
《8PSK通信系统的蒙特卡罗仿真分析最终.docx》由会员分享,可在线阅读,更多相关《8PSK通信系统的蒙特卡罗仿真分析最终.docx(18页珍藏版)》请在冰豆网上搜索。
8PSK通信系统的蒙特卡罗仿真分析最终
西南科技大学
课程设计报告
课程名称:
数字信号处理与通信原理课程设计
设计名称:
8PSK通信系统的蒙特卡罗仿真分析
姓名:
李烨
学号:
20064611
班级:
通信0601
指导教师:
龙惠民
起止日期:
2009.6.20-2009.7.3
西南科技大学信息工程学院制
课程设计任务书
学生班级:
通信0601学生姓名:
李烨学号:
20064611
设计名称:
8PSK通信系统的蒙特卡罗仿真分析
起止日期:
2009.6.20-2009.7.3指导教师:
龙惠民
设计要求:
●产生等概率且相互独立的二进制序列,画出波形;
●产生均值为0,方差为1的加性高斯随机噪声;
●进行8PSK调制,画出波形;
●进行蒙特卡罗分析;
●解调8PSK,画出眼图。
课程设计学生日志
时间
设计内容
6.25-6.27
查阅资料,确定系统方案
6.28-6.29
设计总体方案
7.1-7.3
学习MATLAB方面相关知识并编写调试程序
7.4-7.5
验证实验结果
7.6
完成课程设计,撰写报告
7.7
答辩
课程设计考勤表
周
星期一
星期二
星期三
星期四
星期五
课程设计评语表
指导教师评语:
成绩:
指导教师:
年月日
8PSK通信系统的蒙特卡罗仿真分析
一、设计目的和意义
1.对8psk进行调制和解调,通过MATLAB编程,掌握MATLAB的使用,熟练掌握8PSK的调制原理,解调原理。
2.对8PSK通信系统进行蒙特卡罗仿真分析,分析起信噪比和差错率。
为现实中通信系统的调制,解调,及信道传输进行理论指导。
二、设计原理
1.8PSK的调制
八进制移相键控(8PSK)调制。
由于8PSK将GMSK的信号空间从2扩展到8,因此每个符号可以包括的信息是原来的4倍。
8PSK的符号率保持在271kbps,每个时隙可以得到69.2kbps的总速率,并且仍然能够完成GSM频谱屏蔽。
对于高速传输,为了提高频带利用率,多采用多进制调制方法,在一个波形周期(0,TS)内发送多个二进制符号。
频带利用率能成倍增加。
8PSK,载波有(0,/4,/2,3/4,,5/4,3/2,7/4)八种不同的初相,可以在一个波形周期(0,TS)内发送3个二进制符号(000,001,010,011,100,101,110,111)。
频带利用率能达到6b/S/HZ。
由于8PSK信号幅度不是恒定的,因此,被调制信号将不再保持恒定幅度,它必须能够从任何起点到达任何相位位置。
这意味着8-PSK信号的幅度变化很大,这给RF放大器带来了较大压力,而且可能会导致进一步失真。
通过8PSK设计的增强功能,即3π/8旋转则能够降低较大的幅度变化。
所以,经过符号映射后的符号,应再按照F式进行3π/8弧度的符号旋转。
矢量图见图1:
图18PSK矢量图
函数首先将产生的二进制序列送入,在串并变换处分成3个电平,b1,b2和b3,其中b1用于决定同相路信号的极性,当其为1时,同路信号的极性为1,当其为0时,同路信号的极性为-1。
b2用于确定正交路信号的极性,当其为1时,正交路信号的极性为,当其为0时,正交路信号的极性为-1。
b3用于确定同相路和正交路的幅度,当8PSK信号幅度为1时,若b3为1时同相路的基带信号幅度应为0.924,而正交路幅度为0.383;若b3为0时,同相路信号幅度为0.383,而正交路信号幅度为0.924。
求出I和Q以后就分别与相位相反的载波叠加。
最后相加就得到了调制后的8PSK信号。
原理图见图2
图28PSK的调制原理图
2.8PSK的解调采用双正交相干解调。
8PSK信号与信道中的噪声叠加后输入解调器,首先将信号分解成四个独立的信号,然后分别与相位不同的载波相叠加,然后就是判决电路,当不对时,计数器加1。
判决出以后的信号就是b1,b2,b3最后将3个信号叠加起来就得到了输出信号。
蒙特卡罗分析就是分析信号信噪比的误码率和误比特率,然后对信号进行分析,与理论的误码率和误比特率进行对比。
原理图见图3。
图38PSK的双正交相干解调
3.眼图
眼图是信号由垂直扫描进入与同周期的水平扫描锯齿波叠加到示波器上时到得图案。
眼图能够反映信号在传输过程中受到的信道噪声影响的强度,眼图越模糊,眼睛越闭合,则说明噪声越强,反之,则说明噪声强度弱,也能说明信道性能更优良。
三、详细设计步骤
1、8PSK调制部分
本设计采用相位选择法进行8PSK调制。
其三位二进制序列与对应控制相位对应如下表
表1
111------π/8
110------3π/8
010------5π/8
011------7π/8
001------9π/8
000------11π/8
100------13π/8
101------15π/8
对应上表,首先生成对应相位的同频载波,再根据输入二进制序列对每连续三位进行判决,输出相应相位的载波即可。
其MATLAB程序如下:
functionmpskout=mpsk8(bin)
t=linspace(0,2*pi,600);%取600个采样点(一周期)
%--------制作八个相位波形------
x111=sin(t+pi/8);
x110=sin(t+pi*3/8);
x010=sin(t+pi*5/8);
x011=sin(t+pi*7/8);
x001=sin(t+pi*9/8);
x000=sin(t+pi*11/8);
x100=sin(t+pi*13/8);
x101=sin(t+pi*15/8);
c=0;%结果缓冲
%-----------计算码组数-----------
bpsknum=fix(length(bin)/3);%每三位进行调制
%---------8PSK调制---------
k=1;
form=1:
bpsknum
ifbin(k)==1&&bin(k+1)==1&&bin(k+2)==1
c=[c,x111];
elseifbin(k)==1&&bin(k+1)==1&&bin(k+2)==0
c=[c,x110];
elseifbin(k)==0&&bin(k+1)==1&&bin(k+2)==0
c=[c,x010];
elseifbin(k)==0&&bin(k+1)==1&&bin(k+2)==1
c=[c,x011];
elseifbin(k)==0&&bin(k+1)==0&&bin(k+2)==1
c=[c,x001];
elseifbin(k)==0&&bin(k+1)==0&&bin(k+2)==0
c=[c,x000];
elseifbin(k)==1&&bin(k+1)==0&&bin(k+2)==0
c=[c,x100];
else
c=[c,x101];
end
k=k+3;
end
mpskout=c;
mpskout
(1)=[];%清除第一个元素0
2、8PSK解调部分
采用双正交相干解调。
这里有四个不周相位的本地载波,分别分0,π/2,-π/4,π/4,其频率与发送端载波一样。
四个不同相位的载波分别与一个周期的已调信号作乘法运算,然后进行判决。
具体判决方法是,把所乘结果的离散数据相累加,如果其和大于0,则相应判决码输出1,否则输出0。
实际上,由于作乘法运算之后的离散也为一对称的正弦离散信号,故只需取出此信号内的最大值与最小值,进行相加并判断其正负即可,这样减少了运算量。
对应2,b2对应于输入二进制序列的第一位,b1对应于输入二进制序列的第二位,b3和b4则对应于第三位,第三位的取值是b3b4求同或的值。
因此,程序首先生成四种相位的本地载波,然后对输入的已调信号的每一个周期内作乘法,再进行上述的判决。
程序如下:
functionbinout=mpsk8opp(sqwave)
t=linspace(0,2*pi,600);
%--------产生与载波同频率但不同相位的信号-------
xc1=sin(t);
xc2=sin(t+pi/2);
xc3=sin(t+pi/4);
xc4=sin(t-pi/4);
binout1=0;%结果输出缓冲
k=fix(length(sqwave)/600);%解调抽样点为600
num=1;
%-----------双正交相关解调----------
form=1:
k
wave=sqwave(num:
num+599);%一周期取600个采样点
b1=xc1.*wave;
b2=xc2.*wave;
b3=xc3.*wave;
b4=xc4.*wave;
c1=fix(max(b1)+min(b1)+1);
c2=fix(max(b2)+min(b2)+1);
c3=fix(max(b3)+min(b3)+1);
c4=fix(max(b4)+min(b4)+1);
ifc3==c4
c3=1;
else
c3=0;
end
binout1=[binout1,c1,c2,c3];%结果保存
num=num+600;
end
binout=binout1;
binout
(1)=[];%第一个元素清除
3、高斯噪声、眼图
直接调用MATLAB的函数RANDN产生均值为0,方差为1的加性高斯随机噪声,眼图用MATLAB系统的函数EYEDIAGRAM对加入噪声的已调信号进行眼图观察。
误码统计中,对每一次加入噪声后解调输出的二进制序列与输入的二进制序列进行对比,计算解调后的误码数及其比率。
相应程序见附录。
四、设计结果及分析
(一)8PSK调制
图48PSK调制
二)加性高斯噪声情况下解调输出
图3噪声情况下解调输出
有加性噪声的情况下,解调端会出现错误解调输出,图3所示为出现7误码,误码率为23.33%。
因为,加入噪声后,对其进行相乘然后判决时,会因为噪声的影响出现错误判决。
三)眼图
图4眼图1
mmm=randn(1,600*fix(m/3))./20
将被除数改为20.眼图如下
图5眼图2
由上图可知,眼图越模糊,眼睛越闭合,则说明噪声越强,反之,则说明噪声强度弱,也能说明信道性能更优良。
五、体会
通过这次课程设计,培养了我综合运用所学知识,发现、提出、分析和解决实际问题、锻炼实践的能力,是对我们以后的实际工作能力的具体训练和一个考察过程。
在这次课程设计中,我能够比较系统的了解数字信号的载波传输,尤其是多进制相移监控MPSK。
把理论和实践相结合。
在做设计的过程中难免总会出现各种问题,通过查阅资料,自学其中的相关知识,无形间提高了我们的动手,动脑能力,通过课程设计让我知道了,我们平时所学的知识如果不加以实践的话等于纸上谈兵。
课程设计主要是我们理论知识的延伸,它的目的主要是要在设计中发现问题,并且自己要能找到解决问题的方案,形成一种独立的意识。
我们还能从设计中检验我们所学的理论知识到底有多少,巩固我们已经学会的,不断学习我们所遗漏的新知识,把这门课学的扎实。
六、参考文献
[1]吴伟陵,续大我,庞沁华.通信原理.北京邮电大学出版社,2005
[2]曹志刚,钱亚生.现代通信原理.清华大学出版社,1992
[3]苗长云等主编.现代通信原理及应用.电子工业出版社,2005
[4]通信原理(第五版)樊昌信张甫翊徐炳祥吴成柯编著国防工业出版社
[5]MATLAB工具箱应用苏金明张莲花刘波等编电子工业出版社
附录:
程序如下
%---------FILE
(1)主程序psk.m----------
m=30;%更改m调制输出波形为m/3的整数个
bin=fix(rand(1,m)+0.5);%输入序列
tt2=mpsk8(bin);%tt1->8PSK已调信号
%产生高斯噪声
mmm=randn(1,600*fix(m/3))./10;%更改被除数决定噪声大小
tt1=sqwave(bin);%tt2->输入转换为显示方波
tt3=mpsk8opp(tt2);%tt3->解调输出序列
tt4=sqwave(tt3);%tt4->输出转换为显示方波
%已调至信号加入噪声
ttnoi=tt2+mmm;
ttnoi3=mpsk8opp(ttnoi);%ttnoi3->加噪后解调输出序列
ttnoi4=sqwave(ttnoi3);%ttnoi4->加噪后输出转换为显示方波
%********对加噪后信号解调进行误码统计*****
[nrate,numb]=noirate(bin,ttnoi3);
disp('----本次误码数-----:
')
disp(numb)
disp('----本次误码率-----:
')
disp(nrate)
%********未加噪声前显示效果********
figure
(1);
subplot(311);
plot(tt1,'.-');
title('输入待调制二进制序列');
gridon;
axis([0,fix(m/3)*600,0,1]);
%--------------------
subplot(312);
plot(tt2,'-g');
gridon;
axis([0,fix(m/3)*600,-1,1]);
title('8PSK已调信号');
%--------------------
subplot(313);
plot(tt4,'.-m');
gridon;
axis([0,fix(m/3)*600,0,1]);
title('8PSK解调输出二进制序列');
%********加噪声后显示效果*******
figure
(2);
subplot(311);
plot(tt1,'.-');
title('输入待调制二进制序列');
gridon;
axis([0,fix(m/3)*600,0,1]);
%--------------------
subplot(312);
plot(ttnoi,'-g');
gridon;
axis([0,fix(m/3)*600,-1,1]);
title('8PSK已调信号加噪后');
%--------------------
subplot(313);
plot(ttnoi4,'.-m');
gridon;
axis([0,fix(m/3)*600,0,1]);
title('加噪后8PSK解调输出二进制序列');
%-------眼图-------------
eyediagram(ttnoi,300,1,150,'-g')
gridon
%---FILE
(2)-----mpsk8.m-----------------%
functionmpskout=mpsk8(bin)
t=linspace(0,2*pi,600);
%-----制作八个相位波形------
x111=sin(t+pi/8);
x110=sin(t+pi*3/8);
x010=sin(t+pi*5/8);
x011=sin(t+pi*7/8);
x001=sin(t+pi*9/8);
x000=sin(t+pi*11/8);
x100=sin(t+pi*13/8);
x101=sin(t+pi*15/8);
c=0;%结果缓冲
%--------计算码组数-----------
bpsknum=fix(length(bin)/3);%每三位进行调制
%---------8PSK调制---------
k=1;
form=1:
bpsknum
ifbin(k)==1&&bin(k+1)==1&&bin(k+2)==1
c=[c,x111];
elseifbin(k)==1&&bin(k+1)==1&&bin(k+2)==0
c=[c,x110];
elseifbin(k)==0&&bin(k+1)==1&&bin(k+2)==0
c=[c,x010];
elseifbin(k)==0&&bin(k+1)==1&&bin(k+2)==1
c=[c,x011];
elseifbin(k)==0&&bin(k+1)==0&&bin(k+2)==1
c=[c,x001];
elseifbin(k)==0&&bin(k+1)==0&&bin(k+2)==0
c=[c,x000];
elseifbin(k)==1&&bin(k+1)==0&&bin(k+2)==0
c=[c,x100];
else
c=[c,x101];
end
k=k+3;
end
mpskout=c;
mpskout
(1)=[];%清除第一个元素0
%---FILE(3)-----noirate.m------%
function[norate,noinum]=noirate(bininp,binout)
%功能:
误解调率统计
l=length(binout);
c=0;
form=1:
l
ifbinout(m)~=bininp(m)
c=c+1;
end
end
noinum=c;
norate=c/l;
%----FILE(4)—sqwave.m,----%
functionsquout=sqwave(bin)
%把二进制序列转化为对应显示波形序列
%一周期采样400点
up=ones(1,200);%低电平
down=zeros(1,200);%高电平
k=length(bin);
c=0;
form=1:
k
ifbin(m)==1
c=[c,up];
elsec=[c,down];
end
end
squout=c;
squout
(1)=[];
%-----FILE(5)----mpsk8oop.m----------%
functionbinout=mpsk8opp(sqwave)
t=linspace(0,2*pi,600);
%--------产生与载波同频率但不同相位的信号-------
xc1=sin(t);
xc2=sin(t+pi/2);
xc3=sin(t+pi/4);
xc4=sin(t-pi/4);
binout1=0;%结果输出缓冲
k=fix(length(sqwave)/600);%解调抽样点为600
num=1;
%-----------双正交相关解调----------
form=1:
k
wave=sqwave(num:
num+599);%取600个采样点(一周期)
b1=xc1.*wave;
b2=xc2.*wave;
b3=xc3.*wave;
b4=xc4.*wave;
c1=fix(max(b1)+min(b1)+1);
c2=fix(max(b2)+min(b2)+1);
c3=fix(max(b3)+min(b3)+1);
c4=fix(max(b4)+min(b4)+1);
ifc3==c4
c3=1;
else
c3=0;
end
binout1=[binout1,c1,c2,c3];%结果保存
num=num+600;
end
binout=binout1;
binout
(1)=[];%清除第一个元素