多径衰落信道下不同调制方式的误码率性能Word格式.docx
《多径衰落信道下不同调制方式的误码率性能Word格式.docx》由会员分享,可在线阅读,更多相关《多径衰落信道下不同调制方式的误码率性能Word格式.docx(10页珍藏版)》请在冰点文库上搜索。
![多径衰落信道下不同调制方式的误码率性能Word格式.docx](https://file1.bingdoc.com/fileroot1/2023-5/4/306f12f7-738c-439a-82fc-c320f8c95b52/306f12f7-738c-439a-82fc-c320f8c95b521.gif)
它规定了四种载波相位,分别为45°
,135°
,225°
,275°
,调制器输入的数据是二进制数字序列,为了能和四进制的载波相位配合起来,则需要把二进制数据变换为四进制数据,这就是说需要把二进制数字序列中每两个比特分成一组,共有四种组合,即00,01,10,11,其中每一组称为双比特码元。
每一个双比特码元是由两位二进制信息比特组成,它们分别代表四进制四个符号中的一个符号。
QPSK中每次调制可传输2个信息比特,这些信息比特是通过载波的四种相位来传递的。
解调器根据星座图及接收到的载波信号的相位来判断发送端发送的信息比特。
DQPSK调制将信息插入到发送信号的相位差中,若以前一码元相位作为参考,并令△φ为本码元与前一码元的初相差,则信息编码与载波相位变化仍可用QPSK信号相位编码逻辑关系表来表示。
不过,φ应变为△φ。
对于DQPSK而言,可先将输入的双比特码经码型变换,再用码型变换器输出的双比特码进行四相绝对移相,则所得到的输出信号便是四相相对移相信号。
在多径信道下,QPSK的理论误比特率为
DQPSK的理论误比特率为
二、仿真程序设计说明
上图为平坦瑞利衰落信道下QPSK的误码率仿真原理图。
首先使用rand函数产生0到1的随机数,根据随机数的大小,将数据映射为QPSK复包络信号,复包络信号分别对应着不同的相位信息。
使用raylrnd()函数产生服从瑞利分布的随机数,由于在平坦衰落情况下,多径衰落模型可以用乘性失真来表示,因此将信号与瑞利随机数相乘。
根据所输入的归一化信噪比信息,计算出噪声的功率谱密度,产生相对应的高斯随机噪声。
将噪声与信号相加。
然后将经过平坦衰落及高斯信道的信号进行判决,恢复复包络信号,并与加噪声之前信号相比对,统计误比特个数,计算出误码率。
在仿真程序中,为保证数据的准确性,加入while循环语句,使之产生一定数量的错误比特。
下图为平坦瑞利衰落信道下DQPSK的误码率仿真原理图。
相对于QPSK,DQPSK中多了编码部分,后半部分大体一致。
在仿真程序中,与QPSK不同的是,先产生二进制随机序列,然后使用xor函数,将产生的随机数列编码,将编码后的数据按进行奇偶位串并转换,将转换后的数据按一定的规则映射为复包络信号,后面经过瑞利衰落以及加噪声、判决与QPSK一致,最后再使用xor译码恢复原随机序列,然后比对统计误比特个数,计算出误码率。
三、仿真结果
上图为在平坦瑞利衰落信道下两种调制方式的仿真信噪比及理论信噪比。
从图中可以看出,在相同误码率情况下,DQPSK所需Eb/No比QPSK要高2dB左右。
附录:
%RayleighFading.m
clearall;
EbNo1=0:
1:
16;
EbNo2=0:
0.5:
%QPSK调制
fori=1:
length(EbNo1),
pb=qpsk(EbNo1(i));
sim_qpsk_err_bit(i)=pb;
disp(pb);
echooff;
end;
%DQPSK调试
echoon;
pb=dqpsk(EbNo1(i));
sim_dqpsk_err_bit(i)=pb;
%理论曲线
length(EbNo2),
EbN0=exp(EbNo2(i)*log(10)/10);
theo_qpsk_err_bit(i)=0.5*(1-1/sqrt(1+1/EbN0));
theo_dqpsk_err_bit(i)=0.5*(1-EbN0/sqrt(EbN0^2+2*EbN0+0.5));
semilogy(EbNo2,theo_dqpsk_err_bit,'
r'
),title('
平坦瑞利衰落信道下误码率曲线'
);
holdon;
semilogy(EbNo1,sim_dqpsk_err_bit,'
r*-'
semilogy(EbNo2,theo_qpsk_err_bit,'
b'
semilogy(EbNo1,sim_qpsk_err_bit,'
b*-'
xlabel('
Eb/No'
ylabel('
BER'
legend('
理论DQPSK'
'
仿真DQPSK'
理论QPSK'
仿真QPSK'
%qpsk.m
function[pb]=qpsk(EbNo_dB)
N=100;
%符号数
Eb=1;
num_err_bit=0;
counter=0;
EbNo=10^(EbNo_dB/10);
sgma=sqrt(Eb/EbNo)/2;
s00=[10];
s01=[01];
s11=[-10];
s10=[0-1];
while(num_err_bit<
80)
N,
temp=rand;
if(temp<
0.25),
dsource1(i)=0;
dsource2(i)=0;
elseif(temp<
0.5),
dsource2(i)=1;
0.75),
dsource1(i)=1;
else
end;
ray=raylrnd(0.7);
n=sgma*randn(1,2);
if((dsource1(i)==0)&
(dsource2(i)==0)),
r=ray*s00+n;
elseif((dsource1(i)==0)&
(dsource2(i)==1)),
r=ray*s01+n;
elseif((dsource1(i)==1)&
r=s10*ray+n;
r=s11*ray+n;
c00=dot(r,s00);
c01=dot(r,s01);
c10=dot(r,s10);
c11=dot(r,s11);
c_max=max([c00,c01,c10,c11]);
if(c00==c_max),decis1=0;
decis2=0;
elseif(c01==c_max),decis1=0;
decis2=1;
elseif(c10==c_max),decis1=1;
elsedecis1=1;
if(decis1~=dsource1(i)),num_err_bit=num_err_bit+1;
if(decis2~=dsource2(i)),num_err_bit=num_err_bit+1;
end
counter=counter+1;
pb=num_err_bit/(2*N*counter);
%dqpsk.m
function[pb]=dqpsk(EbNo_dB)
data_pr=round(rand(1,2*N));
data_com=zeros(1,2*N);
data_mod1=zeros(1,N);
data_mod2=zeros(1,N);
data_demod1=zeros(1,N);
data_demod2=zeros(1,N);
s_rece1=zeros(1,N);
s_rece2=zeros(1,N);
datab_rece=zeros(1,2*N);
dataa_rece=zeros(1,2*N);
data_com
(1)=xor(0,data_pr
(1));
forl=2:
(2*N)
data_com(l)=xor(data_pr(l),data_com(l-1));
end
fori=1:
N
ifdata_com(2*i-1)==0&
&
data_com(2*i)==0
data_mod1(i)=1,data_mod2(i)=0;
elseifdata_com(2*i-1)==0&
data_com(2*i)==1
data_mod1(i)=0,data_mod2(i)=1;
elseifdata_com(2*i-1)==1&
data_com(2*i)==0
data_mod1(i)=0,data_mod2(i)=-1;
data_mod1(i)=-1,data_mod2(i)=0;
ray=raylrnd(0.7,1,length(data_mod1));
n=sgma*randn(1,length(data_mod1));
s_rece1=data_mod1.*ray+n;
s_rece2=data_mod2.*ray+n;
fork=1:
N
c00=dot([s_rece1(k),s_rece2(k)],s00);
c01=dot([s_rece1(k),s_rece2(k)],s01);
c10=dot([s_rece1(k),s_rece2(k)],s10);
c11=dot([s_rece1(k),s_rece2(k)],s11);
if(c00==c_max)
data_demod1(k)=0;
data_demod2(k)=0;
elseif(c01==c_max)
data_demod2(k)=1;
elseif(c10==c_max)
data_demod1(k)=1;
elsedata_demod1(k)=1;
datab_rece(2*k-1)=data_demod1(k);
datab_rece(2*k)=data_demod2(k);
dataa_rece
(1)=xor(0,datab_rece
(1));
forn=2:
(2*N)
dataa_rece(n)=xor(datab_rece(n),datab_rece(n-1));
end
form=1:
if(dataa_rece(m)~=data_pr(m))
num_err_bit=num_err_bit+1;
counter=counter+1;