通信原理现代通信技术QPSK仿真报告.docx
《通信原理现代通信技术QPSK仿真报告.docx》由会员分享,可在线阅读,更多相关《通信原理现代通信技术QPSK仿真报告.docx(14页珍藏版)》请在冰豆网上搜索。
通信原理现代通信技术QPSK仿真报告
《通信原理》实验课程
课程实验报告
一、实验要求
QPSK调制仿真与分析
使用matlab仿真实现QPSK相干调制与解调,要求:
1)调制载波中心频率为5MHz,二进制数据比特率为2Mbps,基带信号波形采用滚降系数为0.4的平方根升余弦滤波器,画出4个载波周期I、Q调制分量的时域波形和对应的二进制码。
2)画出基带|、Q信号和已调信号的频谱。
3)通过AWGN信道,Eb/N0在0到20dB之间变化,画出误比特率曲线,并和理论误比特率进行对比;
4)画出Eb/N0分 别为5dB和10dB时的星座图;
二、实验环境
软件:
MATLABR2018a
三、实验原理
1、四进制相移键控(QPSK)的载波信号有四种可能的离散相位状态
,每个载波相位携带两个二进制码元。
双bite码元与载波相位的常见对应关系有A\B两种方式。
双比特码元
载波相位
A方式
B方式
00
π
-3π/4
10
-π/2
-π/4
11
0
π/4
01
π/2
3π/4
B方式的另一种表示:
B方式的QPSK信号的正交调制原理如下图。
公式有:
式中,同相分量
,
2、误比特率与信噪比
信噪比SNR=10lg(Ps/Pn),其中Ps和Pn分别代表信号和噪声的有效功率
Eb/N0为比特信噪比。
显然,信噪比越大,信号的误码率越小。
3、星座图
数字通信系统中,每个符号间隔输出一个符号,对应一个信号波形。
M进制数字通信系统在发送端需要设计出M种不同的信号。
如前所述,信号s;()可以通过矢量空间分析器得到矢量,这样M个能量信号波形就可映射为N维空间中的M个点。
将所对应的N维空间中的M个点的集合称为M进制信号的星座图,或称为信号空间图,或称为信号矢量图。
相对于前面介绍的一般信号波形,数字信号波形一般限定在一个符号间隔内,二进制数字信号限定在0≤1≤T,多进制数字信号限定时间在0≤1≤T。
四、实验设计与运行结果
首先声明:
因为题目要求的频率过高,电脑配置不足,每次调制用时过长,先将所有的数据等比例缩小,如调制载波中心频率5MHz→5Hz,二进制数据比特率2Mbps→2bps。
1、调制
使用调相法产生B方式的QPSK信号。
1基带信号生成:
随机数判决+比特率为节奏的for函数。
2穿并行转换与极性变换:
条件判决即可。
如:
生成{a2n+1}
ifstt(2*n-1)==1st1(n)=1;else
st1(n)=-1;end
运行结果如下图,
3与载波信号调制合成:
使双极性码与相互正交的载波相乘,同相支路和正交之路分别完成2PSK,最后叠加,得到B方式的QPSK信号。
实验即用代码复述上述过程,得到结果如下图:
2、加噪声
使用matlab函数awgn(x,SNR)。
其意义为:
在信号x中加入高斯白噪声。
信噪比SNR以dB为单位。
x的强度假定为0dBW。
如果x是复数,就加入复噪声。
结果在上一张图已经呈现,再次给出:
3、求频谱
Matlab中求函数频谱的过程是:
对函数做傅里叶变换后,进行快速傅里叶变换计算。
程序中使用的函数是:
function[f,sf]=T2F(t,st)
得到如下的结果图:
4、误码率曲线的得到与对比
5、星座图
五、程序源代码
i=10;%基带信号码元数*106
j=5000;
j1=2000;
t=linspace(0,5,j);%0-5之间产生5000个点行矢量,即将[0,5]分成5000份
t1=linspace(0,2,j1)
f=5;%载波频率*106
fm=i/5;%基带信号频率,码元数是10*106,而时域长度是5,也就是一个单位2*106个码元
a=round(rand(1,i));%产生随机序列
%产生基带信号
stt=t;
forn=1:
10
ifa(n)<1
form=j/i*(n-1)+1:
j/i*n
stt(m)=0;
end
else
form=j/i*(n-1)+1:
j/i*n
stt(m)=1;
end
end
end
figure
(1);
subplot(311);
plot(t,stt);
title('基带信号stt');
axis([0,5,-1,2]);
%并行信号
st1=t;
forn=1:
j/2
ifstt(2*n-1)==1
st1(n)=1;
else
st1(n)=-1;
end
end
subplot(312);
s1=st1(1:
2000);
plot(t1,s1);
title('基带信号码st1');
axis([0,2,-1,2]);
st2=t;
forn=1:
j/2
ifstt(2*n)==1
st2(n)=1;
else
st2(n)=-1;
end
end
subplot(313);
s2=st2(1:
2000);
plot(t1,s2);
title('基带信号码st2');
axis([0,2,-1,2]);
%载波信号
s1=cos(2*pi*f*t);
s2=-sin(2*pi*f*t);
%调制
F1=st1.*s1;%加入载波1同相I
F2=st1.*s2;%加入载波2正交Q
figure
(2);
subplot(411);
plot(t,F1);
title('I:
F1=s1*st1');
axis([0,2,-1,2]);
subplot(412);
plot(t,F2);
title('Q:
F2=s2*st2');
axis([0,2,-1,2]);
e_fsk=F1+F2;
subplot(413);
plot(t,e_fsk);
title('QPSK信号');
axis([0,2,-1,2]);
%加噪
fsk=awgn(e_fsk,20)%在信号x中加入高斯白噪声。
信噪比SNR以dB为单位。
x的强度假定为0dBW。
如果x是复数,就加入复噪声。
subplot(414);
plot(t,fsk);
title('加噪声后信号')
axis([0,2,-1,2]);
[f,sf1]=T2F(t,st1);
[f,sf2]=T2F(t,st2);
[f,sf3]=T2F(t,fsk);%傅里叶变换
figure(3);
subplot(311);
plot(t,sf1);axis([2.3,2.7,-1,10]);title('s1');
subplot(312);
plot(t,sf2);axis([2.3,2.7,-1,10]);title('s2');
subplot(313);
plot(t,sf3);axis([2.3,2.7,-1,10]);title('加噪后的信号');
%误码率计算
Maxbit=1000;
Eb=1;
fori=1:
20%信噪比从1到20dB
forcnt=1:
10%对于每个信噪比,进行10次实验,最后求平均
SNR=10^(0.1*i);%信噪比
N0=Eb/SNR;
Sigma=sqrt(N0/2);
b=rand(1,Maxbit);%随机数据
b_bin=round(b);%01比特流
b2=sign(b_bin-0.5);%调制后的-1和+1比特流
Noise=Sigma*randn(1,Maxbit);
%snt调制信号与噪声叠加后的信号
fsk1=fsk(1:
1000);
Snt=fsk1+Noise;
%解调过程,抽样判决,<0,判为-1,>0,判为+1
res(Snt<0)=-1;
res(Snt>=0)=1;
%Snt.*b2,解调正确,相乘结果为+1,若发生误码,结果为-1
St=res.*fsk1;
%err为误码的个数
err(cnt)=length(find(St<0));
end
%Pb计算信噪比为idB时的误比特率
Pb(i)=(mean(err)/Maxbit)*100;
end
figure(4);
subplot(211);
semilogy(Pb);
xlabel('信噪比(dB)');
ylabel('实际误码率Pe')
%同上计算理论
Maxbit=1000;
Eb=1;
fori=1:
15
forcnt=1:
10
b=rand(1,Maxbit);
b_bin=round(b);
b2=sign(b_bin-0.5);
SNR=10^(0.1*i);
N0=Eb/SNR;
Sigma=sqrt(N0/2);
Noise=Sigma*randn(1,Maxbit);
Snt=b2+Noise;
res(Snt<0)=-1;
res(Snt>=0)=1
St=res.*b2;
err(cnt)=length(find(St<0));
end
Pb(i)=(mean(err)/Maxbit)*100;
end
figure(4);
subplot(212);
semilogy(Pb);
xlabel('信噪比(dB)');
ylabel('理论误码率Pe')
axis([0,10,0.1,10]);
clearall;
msg=randi([0,3],1,5000);%4进制,20个符号
figure
(1);stem(msg);
msg1=pskmod(msg,4,pi/4);%4psk调制初始相位为pi/4
msg2=awgn(msg1,5)
scatterplot(msg2);
title('SNR=5dB');axis([-1.2,1.2,-1.2,1.2]);%画星座图
xlabel('f1')
ylabel('f2')
holdon;
rectangle('Position',[-1,-1,2,2],'Curvature',[1,1]);axisequal;%画圆
clearall;
msg=randi([0,3],1,5000);%4进制,20个符号
figure
(2);stem(msg);
msg1=pskmod(msg,4,pi/4);%4psk调制初始相位为pi/4
msg2=awgn(msg1,10)
scatterplot(msg2);title('SNR=10dB');axis([-1.2,1.2,-1.2,1.2]);%画星座图
xlabel('f1')
ylabel('f2')
holdon;
rectangle('Position',[-1,-1,2,2],'Curvature',[1,1]);axisequal;%画圆
%用于频谱的函数
function[f,sf]=T2F(t,st)
%利用FFT计算信号的频谱并与信号的真实频谱的抽样比较。
%脚本文件T2F.m定义了函数T2F,计算信号的傅立叶变换。
%Inputisthetimeandthesignalvectors,thelengthoftimemustgreater
%than2
%Outputisthefrequencyandthesignalspectrum
dt=t
(2)-t
(1);
T=t(end);
df=1/T;
N=length(st);
f=-N/2*df:
df:
N/2*df-df;
sf=fft(st);
sf=T/N*fftshift(sf);
end
六、总结
对于这次仿真实践,我最大的感想就是“太难了!
”。
之前我接触的matlab只是较为简单的编程和simulink的应用,对QPSK调制这种长而复杂的编程不但心存恐惧,还完全没有头绪。
一开始我希望求助于书本已经有的模型,但发现资料少有后,决定自己仔细研究。
QPSK(4psk)等是数字信号常用的调制信号,它的原理模型并不复杂,但是由于matlab语言的兼容性强大,它的语言类型太复杂,很多函数使用时我对参数非常茫然,好在经过研究,最后完成了设计和这份报告。
总结一下,在设计QPSK调制解调系统时,需要对参数的正确了解、对采样概念的理解。
在对一个软件不理解的时候,原版的说明书是非常好的工具,比如matlab有专门的网站放置说明文件和社区分享使用者的程序。
通过这次设计实验,我更加深入了解了QPSK等调制方法的可行性,也熟悉了matlab诸多通信工具函数的使用,还巩固了通信原理中基础参数的知识。
七、参考文献
[1]张祖凡,等通信原理.北京:
电子工业出版社,2018
[2]樊昌信,等通信原理第七版.北京:
国防工业出版社,2012