您好,欢迎来到九壹网。
搜索
您的当前位置:首页通信原理实验QPSK及汉明码纠错

通信原理实验QPSK及汉明码纠错

来源:九壹网


实验报告

——QPSK 通信系统的Monte Carlo 仿真

马涛、米廷振

一、实验目的

1. 提高学习的能力

2. 培养发现问题,解决问题,分析问题的能力

3. 学习 Matlab 的使用

4. 掌握 4PSK 通信系统的Monte Carlo 仿真方法

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)

=Smc cos(2πfct)-Sms sin(2πfct) + nc (t)cos(2πfct)− ns (t)sin(2πfct)

=rc cos(2πfct)-rs sin(2πfct)

r(t)可用二维向量[rc,rs]表示

(2)解调

有两种方法:

最大投影点准则进行判决:将接收到的信号向量r 投射到M 个可能的传输信号向量{ }

sm 之一上去,并选取对应与最大投影的向量;

最小距离法:分别计算信号到星座图上符号间的距离选取最小距离对应的符号。

2、 信道纠错编码

由发送端的信道编码器在信息码元序列中增加一些监督码元。这些监督码元和信码之间有一定的关系,使接收端可以利用这种关系由信道译码器来发现或纠正可能存在的错码。

汉明码:

发送端按照规定,计算出监督位S1 S2 S3的数值。S1 S2 S3 的值最终与错码位置的对应。

接收端收到每个码组后,先按式(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)

function s=source(N)

s=rand(1,N);%产生二进制序列

for i=1:N

if s(i)>=0.5

s(i)=1;

else

s(i)=0;

end

end

(2)噪声(nr)

function[nc,ns]=nr(sigma2,n) %噪声

sigma=sqrt(sigma2);

for i=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----11

N=length(s);

for i=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)

function r=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;

for i=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)

function r=ipskdis(rc,rs) %最小距离法判决

%判决方法:依次计算出每对rc,rs构成的坐标距离各码元对应坐标的距离

std=[0,0,0,1,1,0,1,1];

k=1;

for i=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);% 求得最小距离

for j=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个码元错误

for i=1:length(s)

if(s(i)~=r(i))

b=b+1;

end

end

for i=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.0900

pbdis =

0.0550

pBdis =

0.0900

噪声方差为1.0:

pb =

0.2700

pB =

0.3200

pbdis =

0.2700

pBdis =

0.3200

b, 画出在每种σ 2时,在检测器输入端1000 个接收到的信号加噪声的样本(星座图);

N=1000

噪声方差为0:

噪声方差为0.1:

噪声方差为0.5:

噪声方差为1.0:

c, 分别画出数据点为1000、5000、10000、100000 时的Monte Carlo 仿真误比特率曲

线和理论误比特率曲线,比较差别,分析数据点的数量对仿真结果的影响;

主程序:

subplot(2,1,1);

sigma2=[0,0.1,0.5,1];

for N=[1000,5000,10000,100000]

figure;

for i=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);hold on;

subplot(2,1,2);plot(sigma2,pq);hold on;

end

子程序

function [y]=Qfunct(sigma2,s)

e=0;

for i=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);

if q~=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调制

for i=(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);

for i=(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)

function s=source(N)

s=rand(1,N);%产生二进制序列

for i=1:N

if s(i)>=0.5

s(i)=1;

else

s(i)=0;

end

end

(2)噪声(nr)

function[nc,ns]=nr(sigma2,n) %噪声

sigma=sqrt(sigma2);

for i=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----11

N=length(s);

for i=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)

function r=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;

for i=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个码元错误

for i=1:length(s)

if(s(i)~=r(i))

b=b+1;

end

end

for i=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)纠错

function r=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);

for i=(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);

if s==0

s=s+8; %第一位为插入的无用的0,对最终结果没有影响

end

k=std(s);

r(i*8+k)=not(rham(i*8+k)); %错码取反进行纠错

end

(8)四输入异或

function s=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.1250

pB = 0.2000

比较相同信道状态下的误码性能及星座图可发现:

编码信号的传输的可靠性明显高于无编码信号。这个结果可以看做是通过牺牲有效性来提高了可靠性。

因篇幅问题不能全部显示,请点此查看更多更全内容

Copyright © 2019- 91gzw.com 版权所有 湘ICP备2023023988号-2

违法及侵权请联系:TEL:199 18 7713 E-MAIL:2724546146@qq.com

本站由北京市万商天勤律师事务所王兴未律师提供法律服务