通信原理实验QPSK及汉明码纠错.docx
《通信原理实验QPSK及汉明码纠错.docx》由会员分享,可在线阅读,更多相关《通信原理实验QPSK及汉明码纠错.docx(19页珍藏版)》请在冰豆网上搜索。
通信原理实验QPSK及汉明码纠错
通信原理实验QPSK及汉明码纠错
实验报告
——QPSK通信系统的MonteCarlo仿真
马涛、米廷振一、实验目的
1.提高独立学习的能力
2.培养发现问题,解决问题,分析问题的能力
3.学习Matlab的使用
4.掌握4PSK通信系统的MonteCarlo仿真方法
5.掌握4PSK通信系统的组成原理
6.比较编码信号与未编码信号在随机信道中的传输,加深对纠错编码原理的理解。
二、实验原理
1、调制解调原理:
4PSK将四进制符号映射到四种相位,利用相位传递信息。
(1)调制
经变换后可发现一个相位调制信号可以看作两个正交载波Smc和Sms的矢量和,起幅度取决于在每个信号区间内的相位。
数字相位调
制信号在几何上可用Smc和Sms的二维向量来表示。
在AWGN信道中,在一个区间内接受到的带通信号可以表示为
r(t)=um(t)+n(t)=um(t)+nc(t)cos(2πfct)?
ns(t)sin(2πfct)=Smccos(2πfct)-Smssin(2πfct)+nc(t)cos(2πfct)?
ns(t)sin(2πfct)=rccos(2πfct)-rssin(2πfct)
r(t)可用二维向量[rc,rs]表示
(2)解调
有两种方法:
最大投影点准则进行判决:
将接收到的信号向量r投射到M个可能的传输信号向量{}sm之一上去,并选取对应与最大投影的向量;
最小距离法:
分别计算信号到星座图上符号间的距离选取最小距离对应的符号。
2、信道纠错编码
由发送端的信道编码器在信息码元序列中增加一些监督码元。
这些监督码元和信码之间有一定的关系,使接收端可以利用这种关系由信道译码器来发现或纠正可能存在的错码。
汉明码:
发送端按照规定,计算出监督位S1S2S3的数值。
S1S2S3的值最终与错码位置的对应。
接收端收到每个码组后,先按式(8,2),(8,4)计算出S1、S2和S3,再按表
8-2判断错码情况。
按上述方法构造的码称为汉明码。
表8-2中所列的(7,4)汉明码的最小码距d0,3,因此,这种码能纠正一个错码或检测两个错码。
三、系统框图
(一)未加信道纠错编码的4PSK调制通信系统
(二)信道纠错编码(7,4)汉明码+4PSK调制的通信系统
四、实验过程
(一)未加信道纠错编码的4PSK调制通信系统
1.实验程序:
主程序(main)
clc
N=100;%码元长度
sigma2=1;
s=source(2*N);%产生信源bit序列,每个码元由2bit构成,故二进制序列长度为2*N[nc,ns]=nr(sigma2,N);%nr(eb,snr_db,n)
subplot(2,2,1);stem(s,'.');axis([0,2*N,0,1.5]);
[mc,ms]=psk(s);%调制
rc=mc+nc;
rs=ms+ns;
subplot(2,2,2);stem(rc,rs,'.');
r=ipsk(rc,rs);%最大投影法解调
subplot(2,2,3);stem(r,'.');axis([0,2*N,0,1.5]);
[pb,pB]=pe(s,r)%pb,pB分别为误比特率和误码率rdis=ipskdis(rc,rs);%最小距离法解调
subplot(2,2,4);stem(rdis,'.');axis([0,2*N,0,1.5]);
[pbdis,pBdis]=pe(s,rdis)%pbdis,pBdis分别为误比特率和误码率
子程序:
(1)信源(source)
functions=source(N)s=rand(1,N);%产生二进制序列
fori=1:
N
ifs(i)>=0.5
s(i)=1;
else
s(i)=0;
end
end
(2)噪声(nr)
function[nc,ns]=nr(sigma2,n)%噪声
sigma=sqrt(sigma2);
fori=1:
n
u=rand;
z=sigma*sqrt(2*log10(1/(1-u)));
u=rand;
nc(i)=z*cos(2*pi*u);
ns(i)=z*sin(2*pi*u);
end
(3)调制(psk)
function[mc,ms]=psk(s)
%映射关系:
由2bit二进制数转成四进制m=(0,1,2,3)带入映射公式
%mc=1,ms=0----00
%mc=0,ms=1----01
%mc=-1,ms=0----10
%mc=0,ms=-1----11N=length(s);
fori=1:
2:
N-1
mc((i+1)/2)=cos(2*pi*(s(i)*2+s(i+1))/4);
ms((i+1)/2)=sin(2*pi*(s(i)*2+s(i+1))/4);end
(4)最大投影法(ipsk)
functionr=ipsk(rc,rs)%最大投影点准则判决
%判断依据:
无噪声干扰时rc=mc,ms=rs
%mc=1,ms=0----00--靠近*c轴(abs(rc)>abs(rs))且在第一、四象限%mc=0,ms=1----01--靠近*s轴(abs(rc)abs(rs))且在第二、三象限%mc=0,ms=-1----11--靠近*c轴(abs(rc)j=1;
fori=1:
length(rc)
if(abs(rc(i))>abs(rs(i)))
if(rc(i)>0)
r(j:
j+1)=[0,0];
else
r(j:
j+1)=[1,0];
end
else
if(rs(i)>0)
r(j:
j+1)=[0,1];
else
r(j:
j+1)=[1,1];
end
end
j=j+2;
end
(5)最小距离法(ipskdis)
functionr=ipskdis(rc,rs)%最小距离法判决
%判决方法:
依次计算出每对rc,rs构成的坐标距离各码元对应坐标的距离std=[0,0,0,1,1,0,1,1];
k=1;
fori=1:
length(rc)
dis
(1)=(rc(i)-1)^2+rs(i)^2;
dis
(2)=rc(i)^2+(rs(i)-1)^2;
dis(3)=(rc(i)+1)^2+rs(i)^2;
dis(4)=rc(i)^2+(rs(i)+1)^2;%与std中码元的顺序对应求取距离
p=min(dis);%求得最小距离
forj=1:
4
if(dis(j)==p)%得到最小距离的序号,由于dis的标号是与std码元的顺序相对应%的,
因此可由下面的语句得到对应的码元
r(k:
k+1)=std(2*j-1:
2*j);
k=k+2;
end
end
end
end
(6)误比特率和误码率计算
function[b,B]=pe(s,r)b=0%误bit率
B=0;%误码元率,每个码元由两个bit构成,>=1个bit错误均会引起1个码元错误
fori=1:
length(s)
if(s(i)~=r(i))
b=b+1;
end
end
fori=1:
2:
length(s)-1
if(s(i)~=r(i))
B=B+1;
elseif((s(i+1)~=r(i+1)))
B=B+1;
end
end
b=b/length(s);
B=B*2/length(s);
2、实验结果:
(1)最大投影点准则、最小距离法进行判决
a,计算噪声方差σ2分别为0、0.1、0.5、1.0时的符号差错概率和比特差错概率;
N=100:
噪声方差为0:
pb=
0
pB=
0
pbdis=
0
pBdis=
0
噪声方差为0.1:
pb=
0
pB=
0
pbdis=
0
pBdis=
0
噪声方差为0.5:
pb=
0.0550
pB=
0.0900pbdis=
0.0550pBdis=
0.0900噪声方差为1.0:
pb=
0.2700pB=
0.3200pbdis=
0.2700pBdis=
0.3200b,画出在每种σ2时,在检测器输入端1000个接收到的信号加噪声的样本(星座图);
N=1000
噪声方差为0:
噪声方差为0.1:
噪声方差为0.5:
噪声方差为1.0:
c,分别画出数据点为1000、5000、10000、100000时的MonteCarlo仿真误比特率曲
线和理论误比特率曲线,比较差别,分析数据点的数量对仿真结果的影响;
主程序:
subplot(2,1,1);
sigma2=[0,0.1,0.5,1];
forN=[1000,5000,10000,100000]
figure;
fori=1:
length(sigma2)
s=source(2*N);%?
úÉúÐÅÔ?
bitÐòÁÐ?
?
Ã?
?
öÂëÔªÓÉ2bit?
?
?
É?
?
?
Ê?
þ?
øÖÆÐòÁÐ?
?
?
ÈÎ
ª2*N
[nc,ns]=nr(sigma2(i),N);%nr(eb,snr_db,n)
[mc,ms]=psk(s);
rc=mc+nc;
rs=ms+ns;
r=ipsk(rc,rs);
[pb,pB]=pe(s,r);
px(i)=pb;
pq(i)=qfunct(sigma2(i),s);
end
subplot(2,1,1);plot(sigma2,px);holdon;
subplot(2,1,2);plot(sigma2,pq);holdon;end
子程序
function[y]=Qfunct(sigma2,s)
e=0;
fori=1:
length(s)
e=e+s(i)^2;
end
eb=e/length(s);
x=eb/sigma2;
y=(1/2)*erfc(x/sqrt
(2));结果:
sigma2=0:
均为0
sigma2=0.1:
sigma2=0.5:
sigma2=1:
(二)信道纠错编码(7,4)汉明码+4PSK调制的通信系统
1.实验程序:
主程序(main)
clear;
N=100;
sigma2=1;
s=source(2*N);%产生信源bit序列subplot(2,2,1);stem(s,'.');axis([0,2*N,0,1.5]);
%(7,4)汉明码四个原始信息比特一组,若序列长度非4的整数倍,补齐
q=mod(N,4);
ifq~=0
s(N+1:
N+4-q)=zeros(1,N+4-q);end
n=length(s);
%加入监督码sham(5:
8)对应源信息序列的是s(1:
4)和a3-a6,sham(5:
8)对应a2-a0
%sham(0)插入一个0,使序列为2(8)的整数倍,以便于4psk调制
fori=(1:
n/4)-1
sham(8*i+1)=0;
sham(8*i+5:
8*i+8)=s(4*i+1:
4*i+4);
[sham(8*i+2),sham(8*i+3),sham(8*i+4)]=watchout(sham(8*i+5),sham(8*i+6),sham(8*i+7),
sham(8*i+8));
end
m=length(sham);
[nc,ns]=nr(sigma2,m/2);
[mc,ms]=psk(sham);
rc=mc+nc;
rs=ms+ns;
subplot(2,2,2);stem(rc,rs,'.');rham=ipsk(rc,rs);
subplot(2,2,3);stem(rham,'.');rham=checkerror(rham);
r=zeros(1,N*2);
fori=(1:
n/4)-1
r(4*i+1:
4*i+4)=rham(8*i+5:
8*i+8);end
subplot(2,2,4);stem(r,'.');
[pb,pB]=pe(s,r)
子程序:
(1)信源(source)
functions=source(N)s=rand(1,N);%产生二进制序列
fori=1:
N
ifs(i)>=0.5
s(i)=1;
else
s(i)=0;
end
end
(2)噪声(nr)
function[nc,ns]=nr(sigma2,n)%噪声
sigma=sqrt(sigma2);
fori=1:
n
u=rand;
z=sigma*sqrt(2*log10(1/(1-u)));
u=rand;
nc(i)=z*cos(2*pi*u);
ns(i)=z*sin(2*pi*u);
end
(3)调制(psk)
function[mc,ms]=psk(s)%映射关系:
由2bit二进制数转成四进制m=(0,1,2,3)带入映射公式
%mc=1,ms=0----00
%mc=0,ms=1----01
%mc=-1,ms=0----10
%mc=0,ms=-1----11N=length(s);
fori=1:
2:
N-1
mc((i+1)/2)=cos(2*pi*(s(i)*2+s(i+1))/4);
ms((i+1)/2)=sin(2*pi*(s(i)*2+s(i+1))/4);end
(4)最大投影法(ipsk)
functionr=ipsk(rc,rs)%最大投影点准则判决%判断依据:
无噪声干扰时rc=mc,ms=rs%mc=1,ms=0----00--靠近*c轴(abs(rc)>abs(rs))且在第一、四象限
%mc=0,ms=1----01--靠近*s轴(abs(rc)%mc=-1,ms=0----10--靠近*c轴(abs(rc)>abs(rs))且在第二、三象限
%mc=0,ms=-1----11--靠近*c轴(abs(rc)j=1;
fori=1:
length(rc)
if(abs(rc(i))>abs(rs(i)))
if(rc(i)>0)
r(j:
j+1)=[0,0];
else
r(j:
j+1)=[1,0];
end
else
if(rs(i)>0)
r(j:
j+1)=[0,1];
else
r(j:
j+1)=[1,1];
end
end
j=j+2;
end
(5)误比特率和误码率计算
function[b,B]=pe(s,r)
b=0%误bit率
B=0;%误码元率,每个码元由两个bit构成,>=1个bit错误均会引起1个码元错误fori=1:
length(s)
if(s(i)~=r(i))
b=b+1;
end
end
fori=1:
2:
length(s)-1
if(s(i)~=r(i))
B=B+1;
elseif((s(i+1)~=r(i+1)))
B=B+1;
end
end
b=b/length(s);
B=B*2/length(s);
(6)加监督码
function[a,b,c]=watchout(d,e,f,g)
std=[0,0,0,0,1,1,1,0,1,1,1,0,1,1,0,1,0,1,0,1,1,0,0,0,1,1,1,1,0,0,0,1,0,0,0,1,0,0,1,
0,1,0,1,0,0,1,1,1];
s=d+e*2+f*4+g*8;
a=std(3*s+1);
b=std(3*s+2);
c=std(3*s+3);
(7)纠错
functionr=checkerror(rham)
r=rham;
std=[4,3,5,2,6,7,8,1];%001-a0-sham(4);010-a1-sham(3);011-a3-sham(5);
%100-a2-sham
(2);101-a4-sham(6);110-a5-sham(7);
%111-a6-sham(8);000-sham
(1)
%第一位为插入的无用的0,对最终结果没有影响n=length(rham);
fori=(1:
n/8)-1
s
(1)=xor4(rham(i*8+8),rham(i*8+7),rham(i*8+6),rham(i*8+2));
s
(2)=xor4(rham(i*8+8),rham(i*8+7),rham(i*8+5),rham(i*8+3));
s(3)=xor4(rham(i*8+8),rham(i*8+6),rham(i*8+5),rham(i*8+4));
s=s(3)+2*s
(2)+4*s
(1);
ifs==0
s=s+8;%第一位为插入的无用的0,对最终结果没有影响
end
k=std(s);
r(i*8+k)=not(rham(i*8+k));%错码取反进行纠错
end
(8)四输入异或
functions=xor4(a,b,c,d)%四输入异或
s=xor(a,b);
s=xor(s,c);
s=xor(s,d);
2.实验结果
误码率和误比特率:
N=100
星座图:
N=1000噪声方差为0:
pb=
0
pB=
0
噪声方差为0.1:
pb=
0
pB=
0
噪声方差为0.5:
pb=
0.0250
pB=
0.0300
噪声方差为1.0:
pb=
0.1250pB=
0.2000
比较相同信道状态下的误码性能及星座图可发现:
编码信号的传输的可靠性明显高于无编码信号。
这个结果可以看做是
通过牺牲有效性来提高了可靠性。