文章和代码曾经归档至【Github仓库:communication-system-simulation】或者公众号【AIShareLab】回复 通信零碎仿真 也可获取。

一、QPSK背景

二、原理概述

2.1 PSK调制

发送端发送的是一连串离散而随机的二进制比特流,应用PSK载波相位调制的办法,这样发送端发送的音讯便蕴含在了相位中,此种调制办法能够非常无效地节约带宽。

$$u_{m}(t)=A g_{T}(t) \cos (2 \pi f_{c} t+\frac{2 \pi m}{M}), m=0,1, \ldots, M-1$$

其中, $g_{T}(t)$ 是发送滤波器的脉冲形态, 传输信号的频谱个性由它决定。A则是信号 的幅度。在 psk 调制中, 所有的 psk 信号对于所有的 $\mathrm{m}$ 都具备雷同的能量。能量为:

$$\varepsilon_{m}=\int_{-\infty}^{+\infty} u_{m}^{2}(t) d t=\varepsilon_{s}$$

$ \varepsilon_{s}$ 代表每个传输符号的能量。
在本次试验中, 为了不便剖析, 咱们令 $\mathrm{A}=1$, $g_{T}(t)=\sqrt{\frac{2 \varepsilon_{s}}{T}}, 0 \leq t \leq T$ , 那么, 相应的 $\mathrm{psk}$ 调制信号的波形为

$$\begin{array}{c}u_{m}(t)=\sqrt{\frac{2 \varepsilon_{s}}{T}} \cos (2 \pi f_{c} t+\frac{2 \pi m}{M})=\sqrt{\frac{2 \varepsilon_{s}}{T}}(A_{m c} \cos 2 \pi f_{c} t-A_{m s} \cos 2 \pi f_{c} t), \\m=0,1, \ldots, M-1,0 \leq t \leq T\end{array}$$

咱们规定:

$$\{\begin{array}{l}A_{m c}=\cos \frac{2 \pi m}{M} \\A_{m s}=\sin \frac{2 \pi m}{M}\end{array}, m=0,1, \ldots, M-1.$$

通过上述剖析, 咱们不难得出, 这样一个相位调制信号能够看作两个正交载波, 因而, 数字相位调制信号能够在几何上可用二维向量的模式来示意, 即

$$\vec{s}_{m}=(\sqrt{\varepsilon_{s}} \cos \frac{2 \pi m}{M}, \sqrt{\varepsilon_{s}} \sin \frac{2 \pi m}{M})$$

正交基函数为:

$$\{\begin{array}{l}\psi_{1}(t)=g_{T}(t) \cos 2 \pi f_{c} t \\\psi_{2}(t)=-g_{T}(t) \sin 2 \pi f_{c} t\end{array}.$$

2.2 信号传输

调制信号在 AWGN 信道传输的时候, 会有噪声混淆进来, 此时输入信号变为:

$$r(t)=u_{m}(t)+n_{c}(t) \cos (2 \pi f_{c} t)-n_{s}(t) \sin (2 \pi f_{c} t)$$

其中, n_{c}(t) 和 n_{s}(t) 别离是加性噪声的同相重量和正交重量, 之后, 咱们将输入信号和 给出的基函数作相干, 则两个相关器的输入为:

$$r=s_{m}+n=(\sqrt{\varepsilon_{s}} \cos \frac{2 \pi m}{M}+n_{c}, \sqrt{\varepsilon_{s}} \sin \frac{2 \pi m}{M}+n_{s})$$

须要留神的是 $n_{c}(t)$ 和 $n_{s}(t)$ 这两个正交噪声的重量是零均值, 互不相干的高斯随机过程。

2.3 解调形式

(1)最小欧式间隔准则裁决

最小欧式间隔准则裁决:求出接管到的信号向量与M个传输向量的欧式间隔,选取对应的最小欧式间隔的向量,该向量对应的符号即为裁决输入符号。此种办法须要把握间隔度量的概念并纯熟使用,上面给出对于间隔度量具体的实践剖析:

在接管音讯尚不确定 (即还没有接管到矢量 $\vec{r}$ ) 的状况下, 要使得先验概率为最大, 最好的裁决办法就是抉择具备最高先验概率 $P(\vec{s}_{m})$ 的信号; 承受到矢量 $\vec{r}$ 后, 其办法与 前者相似, 前者是寻找先验概率的最大值, 此时是寻找后验概率的最大值, 换言之, 选 择使 $P(\vec{s}_{m} \mid \vec{r})$ 最大的 $\vec{s}_{m}$ ,这个裁决准则称为最大后验概率 (MAP) 准则。

依据贝叶斯公式, 后验概率可示意为:

$$P(\vec{s}_{m} \mid \vec{r})=\frac{f(\vec{r} \mid \vec{s}_{m}) P(\vec{s}_{m})}{f(\vec{r})}$$

当 M 个信号先验概率相等, 因为 $f(\vec{r})$ 和 $P(\vec{s}_{m})$ 均为确定的值 $(P(\vec{s}_{m})=\frac{1}{M})$ 。则寻找 $P(\vec{s}_{m} \mid \vec{r})$ 的最大值就等价于寻找 $f(\vec{r} \mid \vec{s}_{m})$ 的最大值。此时 MAP 准则简化为 $\mathrm{ML}$ 准则。

咱们无妨对接管到的矢量 $\vec{r}$ 进行简要的剖析, $\vec{r}=\vec{s}_{m}+\vec{n}, \vec{s}_{m}$ 是信号矢量, $\vec{n}$ 是 AWGN 信道中的噪声矢量, 噪声矢量的重量 $n_{k}$ 遵从散布 $N(0, \frac{N_{o}}{2})$ , 则 $r_{k}$ 遵从散布 $N(s_{m k}, \frac{N_{o}}{2})$ 。
因而

$$\begin{aligned}f(\vec{r} \mid \vec{s}_{m}) & =\prod_{k=1}^{N} \frac{1}{\sqrt{\pi N_{0}}} \mathrm{e}^{-\frac{(r_{k}-s_{m k})^{2}}{N_{0}}} \\& =\frac{1}{(\pi N_{0})^{\frac{N}{2}}} e^{\frac{|\vec{r}-\vec{s}_{m}|^{2}}{N_{0}}}, m=1,2, \ldots, M\end{aligned}$$

右端取对数有:

$$\ln f(\vec{r} \mid \vec{s}_{m})=-\frac{N}{2} \ln (\pi N_{0})-\frac{1}{N_{0}} \sum_{k=1}^{N}(r_{k}-s_{m k})^{2}$$

上式若要获得最大值, 不言而喻 $\sum_{k=1}^{N}(r_{k}-s_{m k})^{2}$ 须要取最小值。这也是合乎咱们直观印象的, 信号空间里两个信号点的欧氏间隔越小, 阐明它们越靠近。

因而,定义间隔度量 $D(\vec{r} \mid \vec{s}_{m})$ 如下:

$$D(\vec{r} \mid \vec{s}_{m})=\sum_{k=1}^{N}(r_{k}-s_{m k})^{2}, m=1,2, \ldots, M$$

(2) 最佳检测器

最佳检测器将收到的信号向量 $\mathrm{r}$ 投射到 M 个可能的传输信号向量 $\{s_{m}\}$ 之一下来, 并 选取对应与最大投影的向量。将上述定义的间隔度量开展:

$$D(\vec{r} \mid \vec{s}_{m})=|\vec{r}|^{2}-2 \vec{r} \cdot \vec{s}_{m}+|\vec{s}_{m}|^{2}, m=1,2, \ldots, M$$

其中, $|\vec{r}|^{2}$ 项对所有的裁决度量是等价的的, 咱们疏忽这一项, 则失去相干度量:

$$C(\vec{r} \mid \vec{s}_{m})=2 \vec{r} \cdot \vec{s}_{m}-|\vec{s}_{m}|^{2}, m=1,2, \ldots, M$$

能够看出, 间隔度量越小, 则相干度量越大。即相干度量与间隔度量是齐全等价的。

2.4 谬误概率

实践谬误概率:

$$\begin{array}{l}\text { 8PSK: } \operatorname{erfc}(\sqrt{3 \times 10^{\frac{S N R}{10}}} \times \sin (\frac{\pi}{8})) ; \\\text { QPSK: } \operatorname{erfc}(\sqrt{10^{\frac{S N R}{10}}}) \times(1-0.25 \times \operatorname{erfc} \sqrt{10^{\frac{S N R}{10}}})\end{array}$$

理论谬误概率:

误码率: 错误码元/传输总码元

误比特率: 谬误比特/传输总比特

三、零碎框图

8PSK:

四、子函数设计

4.1 随机比特序列的产生

1.设计原理:

应用函数rand随机产生0到1之间的一串数,且依照0.5的裁决门限标准化为0和1。

2.代码实现

function[a1]=bit(N)%N为想生成的随机序列的长度y=rand(1,N);%生成一行N列在0~1之间的随机数a1=zeros(1,N);for i=1:N    if y(i)>=0.5        a1(i)=1;    else        a1(i)=0;%以0.5为门限对信号进行裁决    endendend

4.2 比特序列进行格雷编码转换成四进制符号序列

1.设计原理

利用函数f(xy)=|3x-y|可将相应的比特序列xy用格雷码映射成对应的四进制符号。8psk中也能够用相似的函数将比特序列xyz用格雷码映射成对应的八进制符号。

2.代码实现

%四进制格雷码转换function[a1,a2]= GrayEncode(N)%a1是二进制随机比特序列,a2是四进制符号序列a1=bit(2*N);%2L长度的随机比特序列a2=zeros(1,N);% a2用来寄存长度为L的码元序列for i=1:2:2*N-1    a2((i+1)/2)=abs(a1(i)*3-a1(i+1));%将比特序列用格雷码映射转换成四进制数end   end%八进制格雷码转换function[a1,a2]=GrayEncode8(N)%a1是二进制随机比特序列,a2是八进制符号序列a1=bit(3*N);%3L长度的随机比特序列a2=zeros(1,N);%a2用来寄存长度为L的码元序列for i=1:3:3*N-2   a2((i+2)/3)=abs(a1(i)*7-abs(a1(i+1)*3-a1(i+2)));%将二进制比特序列进行格雷编码码转换成八进制序列end end

4.3 映射函数

1.设计原理

利用原比特序列求出码元能量,之后依据

$$\vec{s}_{m}=(\sqrt{\varepsilon_{s}} \cos \frac{2 \pi m}{M}, \sqrt{\varepsilon_{s}} \sin \frac{2 \pi m}{M})$$

用for循环遍历,对横纵坐标别离进行映射即可。

2.代码实现

%QPSK坐标映射function [y2]=ShineUpon(x,bit)%x是编码后的四进制序列,bit是原来生成的二进制随机序列N=length(x);Es=bit*bit'/N;y2=zeros(2,N);%y2的第一行用来存储横坐标,第二行用来存储纵坐标for i=1:N%实现坐标映射    y2(1,i)=sqrt(Es)*cos(pi/2*x(i));    y2(2,i)=sqrt(Es)*sin(pi/2*x(i));endend %8PSK坐标映射function [y3]=ShineUpon8(x1,bit)%x1是编码后的八进制序列,bit是原来生成的二进制随机序列N=length(x1);Es=bit*bit'/N;y3=zeros(2,N);%y3的第一行用来存储横坐标,第二行用来存储纵坐标for i=1:N%坐标映射    y3(1,i)=sqrt(Es)*cos(pi/4*x1(i)+pi/8);    y3(2,i)=sqrt(Es)*sin(pi/4*x1(i)+pi/8);endend

4.4 噪声生成函数

1.设计原理

不再赘述。

2.代码实现

function [n]=NoiseOutput(N,sigma) %产生高斯随机噪声的子函数,sigma为标准差,N为噪声序列的长度    nc=zeros(1,N);        ns=zeros(1,N);  for i=1:N u=rand; z=sigma*sqrt(2*log(1/(1-u))); u=rand; nc(i)=z*cos(2*pi*u); ns(i)=z*sin(2*pi*u); endn=zeros(2,N);     n(1,:)=nc;     n(2,:)=ns; %输入两路互相正交的高斯信号end

4.5 信道输入函数

1.设计原理

行将映射后的信号的横纵坐标别离叠加输入的两路正交噪声。

2.代码实现

function[y]=ChannelOutput(y1,n)y=zeros(2,length(y1));y(1,:)=y1(1,:)+n(1,:);y(2,:)=y1(2,:)+n(2,:);end

4.6 裁决函数

1.设计原理

通过不同的裁决办法对加噪信号进行裁决:

最大投影准则求加噪信号在各发送信号的投影值求最大值。将最大值对应的发送信号作为此接管信号的发送信号。

最小欧式间隔求各加噪信号和各发送信号之间的间隔求最小值。将最小值对应的发送信号作为此接管信号的发送信号。

记录裁决后的发送信号对应的点(0到M-1),依照格雷码编码规定,不同的点对应不同的比特组合,最初将各个点的比特组合连接成裁决之后的比特流。

2.代码实现

%QPSK最小间隔裁决函数function [y4]=MinDistance(y,Es)%Es是每码元的能量,y是AWGN信道输入函数,a是裁决之后失去的序列N=length(y);y4=zeros(1,N);b=zeros(4,N);c=zeros(1,N);for i=1:N %最小间隔裁决    b(1,i)=(y(1,i)-sqrt(Es)*cos(0))^2+(y(2,i)-sqrt(Es)*sin(0))^2;    b(2,i)=(y(1,i)-sqrt(Es)*cos(pi/2))^2+(y(2,i)-sqrt(Es)*sin(pi/2))^2;    b(3,i)=(y(1,i)-sqrt(Es)*cos(pi))^2+(y(2,i)-sqrt(Es)*sin(pi))^2;    b(4,i)=(y(1,i)-sqrt(Es)*cos(3*pi/2))^2+(y(2,i)-sqrt(Es)*sin(3*pi/2))^2;c(i)=min([b(1,i),b(2,i),b(3,i),b(4,i)]);%找出最小间隔度量    switch c(i)%裁决并恢复原序列        case{b(1,i)}            y4(i)=0;        case{b(2,i)}            y4(i)=1;        case{b(3,i)}            y4(i)=2;        case{b(4,i)}            y4(i)=3;    endendend%8PSK最小间隔裁决函数function [y4]=MinDistance8(y,Es)%Es是每码元的能量,y是AWGN信道输入函数,a是裁决之后失去的序列N=length(y);y4=zeros(1,N);b=zeros(8,N);c=zeros(1,N);for i=1:N %最小间隔裁决    b(1,i)=(y(1,i)-sqrt(Es)*cos(pi/8))^2+(y(2,i)-sqrt(Es)*sin(pi/8))^2;    b(2,i)=(y(1,i)-sqrt(Es)*cos(pi/8+pi/4))^2+(y(2,i)-sqrt(Es)*sin(pi/8+pi/4))^2;    b(3,i)=(y(1,i)-sqrt(Es)*cos(pi/8+pi/2))^2+(y(2,i)-sqrt(Es)*sin(pi/8+pi/2))^2;    b(4,i)=(y(1,i)-sqrt(Es)*cos(pi/8+3*pi/4))^2+(y(2,i)-sqrt(Es)*sin(pi/8+3*pi/4))^2;    b(5,i)=(y(1,i)-sqrt(Es)*cos(pi/8+pi))^2+(y(2,i)-sqrt(Es)*sin(pi/8+pi))^2;    b(6,i)=(y(1,i)-sqrt(Es)*cos(pi/8+5*pi/4))^2+(y(2,i)-sqrt(Es)*sin(pi/8+5*pi/4))^2;    b(7,i)=(y(1,i)-sqrt(Es)*cos(pi/8+6*pi/4))^2+(y(2,i)-sqrt(Es)*sin(pi/8+6*pi/4))^2;    b(8,i)=(y(1,i)-sqrt(Es)*cos(pi/8+7*pi/4))^2+(y(2,i)-sqrt(Es)*sin(pi/8+7*pi/4))^2;    c(i)=min([b(1,i),b(2,i),b(3,i),b(4,i),b(5,i),b(6,i),b(7,i),b(8,i)]);%找出最小间隔度量    switch c(i)% 裁决并恢复原序列        case{b(1,i)}            y4(i)=0;        case{b(2,i)}            y4(i)=1;        case{b(3,i)}            y4(i)=2;        case{b(4,i)}            y4(i)=3;        case{b(5,i)}            y4(i)=4;        case{b(6,i)}            y4(i)=5;         case{b(7,i)}            y4(i)=6;        case{b(8,i)}            y4(i)=7;    endendend%QPSK最大投影裁决函数function [y4]=MaxProjection(y,Es)%Es是每码元的能量,y是AWGN信道输入函数,a是裁决之后失去的序列N=length(y);y4=zeros(1,N);b=zeros(4,N);c=zeros(1,N);for i=1:N %最大投影裁决    b(1,i)=y(1,i)*sqrt(Es)*cos(0)+y(2,i)*sqrt(Es)*sin(0);    b(2,i)=y(1,i)*sqrt(Es)*cos(pi/2)+y(2,i)*sqrt(Es)*sin(pi/2);    b(3,i)=y(1,i)*sqrt(Es)*cos(pi)+y(2,i)*sqrt(Es)*sin(pi);    b(4,i)=y(1,i)*sqrt(Es)*cos(3*pi/2)+y(2,i)*sqrt(Es)*sin(3*pi/2);c(i)=max([b(1,i),b(2,i),b(3,i),b(4,i)]);%找出最大投影度量    switch c(i)%裁决并恢复原序列        case{b(1,i)}            y4(i)=0;        case{b(2,i)}            y4(i)=1;        case{b(3,i)}            y4(i)=2;        case{b(4,i)}            y4(i)=3;    endendend

4.7星座图绘制函数

1.设计原理

通过码元个数N为基准循环相应的次数,并通过四进制码元序列的值将星座图中的点归类,QPSK信号中应该有4种星座点,因而归为4类。归类结束后,应用scatter函数绘制星座图。

2.代码实现

function Constellaion(y1,y2)%y1为四进制码元序列,y2为有噪信道输入的信号 figure for i=1:length(y1)         switch y1(i)                 case {0}%0信号的星座点            plot(y2(1,i),y2(2,i),'B.');hold on;grid on;            axis([-2 2 -2 2]);            line([2,-2],[0,0],'linewidth',1,'color','black');            line([0,0],[2,-2],'linewidth',1,'color','black');        case {1}%1信号的星座点            plot(y2(1,i),y2(2,i),'Y.');hold on;grid on;            axis([-2 2 -2 2]);            line([2,-2],[0,0],'linewidth',1,'color','black');            line([0,0],[2,-2],'linewidth',1,'color','black');        case {2}%2信号的星座点            plot(y2(1,i),y2(2,i),'R.');hold on;grid on;            axis([-2 2 -2 2]);            line([2,-2],[0,0],'linewidth',1,'color','black');            line([0,0],[2,-2],'linewidth',1,'color','black');        case {3}%3信号的星座点            plot(y2(1,i),y2(2,i),'G.');hold on;grid on;            axis([-2 2 -2 2]);            line([2,-2],[0,0],'linewidth',1,'color','black');            line([0,0],[2,-2],'linewidth',1,'color','black');    end  endhold off;end

4.8误码率及误比特率计算函数

1.设计原理

计算误码率应用矩阵转置相乘法,特点是代码简略,然而短少直观;计算误比特率采纳for循环中嵌套switch语句失去,特点是代码量繁冗,然而比拟直观。

2.代码实现

%误码率计算函数function [Pe]=SER(y1,y2)%y1为原本输入的符号序列,y2为裁决输入的符号序列,Pe是计算出来的误码率N=length(y2);%N是裁决输入符号的长度y3=(y1~=y2);%y1(i)不等于y2(i)则为真,此时y3(i)等于1 y3=double(y3);error_num=y3*y3';%y3和它的转置相乘,就可计算出总的误符号数Pe=error_num/N;%Pe:误码率end%误比特率计算函数function [Pb]=BER(y1,y2)%y1为原本输入的符号序列,y2为裁决输入的符号序列,Pe是计算出来的误比特率N=length(y2);k=zeros(1,2*N);t=zeros(1,2*N);for i=1:Nswitch y2(i)%依据多进制信号的后果复原出原来的比特序列    case 0        k(2*i-1)=0;k(2*i)=0;    case 1        k(2*i-1)=0;k(2*i)=1;    case 2        k(2*i-1)=1;k(2*i)=1;    case 3        k(2*i-1)=1;k(2*i)=0;endendfor i=1:Nswitch y1(i)    case 0        t(2*i-1)=0;t(2*i)=0;    case 1        t(2*i-1)=0;t(2*i)=1;    case 2        t(2*i-1)=1;t(2*i)=1;    case 3        t(2*i-1)=1;t(2*i)=0;endendb=0;for i=1:2*N    if k(i)~=t(i)        b=b+1;    endendPb=b/(2*N);%输入误比特率

五、主函数代码

5.1 星座图绘制主函数

1.编程思路

采纳程序构造顺次调用GrayEncode(比特序列生成与格雷编码函数),ShineUpon(坐标映射函数),再调用ChannelOutput函数叠加噪声,最初用Constellaion函数绘制出星座图即可。

2.流程图


图5.1 星座图绘制主函数流程图

3.代码实现

clc;close all;clear;N=1000;%传输码元个数sigma2=0.5;sigma=sqrt(sigma2);[bit,source]=GrayEncode(N);%bit为长度为2N的二进制随机比特序列,source为长度为N的四进制码元序列Es=bit*bit'/N;%码元符号能量symbol=ShineUpon(source,bit);%四进制码元序列映射成坐标noise=NoiseOutput(N,sigma2);%两路正交噪声信号的生成channel_out=ChannelOutput(symbol,noise);%噪声叠加Constellaion(source,channel_out);%星座图绘制

5.2 QPSK误比特率剖析主函数

1.编程思路

前半部分和星座图绘制的思路大体一致,即噪声叠加子函数以及其之前的函数都顺次依照程序构造调用,后半局部使用抉择构造,若flag=1,调用MaxProjection(最大投影裁决)函数,否则调用MinDistance(最小间隔裁决)函数。当然,整个主函数被嵌套进了一个for循环中,为了计算在多个不同信噪比下的误比特率,搭配semilogy函数画出咱们心愿的误比特率曲线来。

2.流程图

图5.2 qpsk误比特率剖析主函数流程图

3.代码实现

clc;close all;clear;N=100000;传输码元个数flag=1;%裁决形式:1. 最大投影法 0. 最小间隔法;Pe=zeros(1,101);theoretic_Pe=zeros(1,101);SNR=0:0.1:10;for i=1:101    [bit,source]=GrayEncode(N);%产生二进制比特序列和四进制码元序列    Eb=bit*bit'/(2*N);    c=ShineUpon(source,bit);%星座点映射    r=10^(SNR(i)/10);      sigma2=Eb/(2*r);%噪声方差      sigma=sqrt(sigma2);    noise=NoiseOutput(N,sigma);%产生两路正交的高斯噪声    cn=ChannelOutput(c,noise);%噪声叠加     if flag==1    decision1=MaxProjection(cn,Eb*2);%最大投影裁决    Pe(i)=BER(source,decision1);%最大投影的误比特率     else    decision2=MinDistance(cn,Eb*2);%最小间隔裁决后果    Pe(i)=BER(source,decision2);%最小间隔的误比特率     end     %实践误比特率    theoretic_Pe(i)=0.5*erfc(sqrt(r));end  figuresemilogy(SNR,Pe,'-r*');%仿真误码率曲线hold on;  semilogy(SNR,theoretic_Pe,'-b.');%实践误比特率曲线legend('qpsk仿真误比特率曲线','qpsk实践误比特率曲线');xlabel('Es/N0');ylabel('BER');grid on;hold off;

5.3 QPSK与8PSK误码率比照主函数

1.编程思路

将主函数嵌套进一个for循环中,为了计算在多个不同信噪比下的误比特率,搭配semilogy函数画出咱们心愿的误比特率曲线来。对于主函数而言,仅仅是依照程序构造顺次次调用咱们编写好的主函数即可,这里不再赘述。(这里波及到了8PSK的误码率剖析,所以调用了函数MinDistance8,用于以最小间隔度量裁决8PSK信号)

2.流程图

图5.3 qpsk与8psk误码率比照主函数流程图

3.代码实现

clc;  close all;clear;N=10000;SNR=0:0.1:10;Pe4=zeros(1,101);Pe8=zeros(1,101);theoreticPe4=zeros(1,101);theoreticPe8=zeros(1,101);for i=1:101    r=10^(SNR(i)/10);        [bit4,source4]=GrayEncode(N);%产生长度为2N的二进制比特序列和长度为N的四进制码元序列    Eb4=bit4*bit4'/(2*N);    sigma2a=Eb4/(2*r);%噪声方差     y4=ShineUpon(source4,bit4);%星座点映射    [bit8,source8]=GrayEncode8(N);%产生长度为3N的二进制比特序列和长度为N的八进制码元序列     Eb8=bit8*bit8'/(3*N);    sigma2b=Eb8/(2*r);%噪声方差    y8=ShineUpon8(source8,bit8);%星座点映射noise4=NoiseOutput(N,sqrt(sigma2a));%产生两路正交的高斯噪声noise8=NoiseOutput(N,sqrt(sigma2b));    r4=ChannelOutput(y4,noise4);%噪声叠加     r8=ChannelOutput(y8,noise8);%噪声叠加     decision4=MinDistance(r4,Eb4*2);%QPSK最小间隔裁决    decision8= (r8,Eb8*3);%8PSK最小间隔裁决Pe4(i)=SER(source4,decision4);%QPSK仿真误码率 Pe8(i)=SER(source8,decision8);%8PSK仿真误码率 theoreticPe4(i)=erfc(sqrt(r));%QPSK实践误码率    theoreticPe8(i)=erfc(sqrt(3*r)*sin(pi/8));%8PSK实践误码率end  figuresemilogy(SNR,Pe4,'-rx');%QPSK仿真误码率曲线hold on;  semilogy(SNR,theoreticPe4,'-gv');%QPSK实践误码率曲线hold on;  semilogy(SNR,Pe8,'-b.');%8PSK仿真误码率曲线hold onsemilogy(SNR,theoreticPe8,'-kd');%8PSK实践误码率曲线legend('QPSK仿真误码率','QPSK实践误码率','8PSK仿真误码率','8PSK实践误码率');xlabel('Es/N0(dB)');ylabel('SER'); hold off;

六、性能剖析与试验后果

6.1 未加信道纠错编码的QPSK调制通信零碎

1.最大投影点准则进行裁决

a.画出噪声方差$\sigma^{2}$别离为0,0.1,0.5,1时在检测器输出端1000个接管到的信号加噪声的样本(星座图);

图6.1 QPSK星座图(L=1000,$\sigma^{2}$=0)

图6.2 QPSK星座图(L=1000,$\sigma^{2}$=0.1)

图6.3 QPSK星座图(L=1000,$\sigma^{2}$=0.5)

图6.4 QPSK星座图(L=1000,$\sigma^{2}$=1)

后果剖析:

比照图5.1,5.2,5.3,5.4中散点的离散水平,能够得出,随着噪声方差的增大,加噪信号星座图离散水平更大;若高斯噪声减小,则加噪信号星座图离散水平更小。这合乎高斯噪声的特点。

b. 在AWGN信道下,别离画出数据点为1000,10000,100000时的Monte Carlo仿真误比特率曲线和实践误比特率曲线,比拟差异,剖析数据点的数量对仿真后果的影响(横坐标时snr=Eb/N0 dB,格雷码映射)

图6.5 QPSK仿真误码率和误符号率,实践误码率(1000点)

图6.6 QPSK仿真误码率和误符号率,实践误码率(10000点)

图6.7 QPSK最大投影准者仿真误码率和误符号率,实践误码率(100000点)

比照图5.5,5.6,5.7中最大投影准则裁决条件下,各实践误比特率,仿真误比特率的图像,能够得出:随着数据点变多,曲线更加平滑,更加贴合理论值。另外,雷同的码元传输数量下实践误码率和仿真误码率大致相同,且信噪比越小,两者越统一。

2.将检测器的间隔改为最小间隔法

在2.3节的剖析中,咱们曾经证实了两种办法必然是等价的。因为这两种裁决办法基于的都是ML准则。上面,咱们用最小间隔法做出数据点为100000时的仿真误比特率曲线和实践误比特率曲线,并与应用最大投影点法做比拟,来更加直观地领会到两者的等价性。

图6. 8 相干度量法(上)与最小欧氏间隔法(下)比拟

可实践证实QPSK的误比特率与BPSK的一样。

6.2 QPSK与8PSK性能比拟

在AWGN信道下,未加信道纠错码的8PSK调制通信零碎检测器的裁决准则选为最小间隔法(星座图上符号间的间隔),格雷码映射,比拟数据点为100000时8PSK与QPSK的Monte Carlo仿真误符号率曲线,实践误符号率曲线,比拟差异(横坐标是SNR=Eb/N0)。(一张图上出现4条曲线)

图6. 9 QPSK与8PSK性能比拟

QPSK的误码率显著小于8PSK的误码率,这是因为QPSK发送信号只有四种可能,而8PSK有八种可能,反映在星座图上,QPSK相邻两点的间隔更大,抗干扰能力更强。

不过,更高阶的PSK零碎能带来更高的带宽利用率。

七、问题回顾与总结

1.对二进制序列进行格雷编码的问题

刚开始思路是先编写一个生成格雷码表的子函数,而后用原序列对码表逐行相减,检测全零行,用检测到的行数减去1就失去对应M进制的格雷编码。然而最初在实际的过程中,发现这种办法思路还是过于繁冗,短少直观,编写难度比拟大,容易出错;而且不知何故,用这种办法编成的零碎最初误码率的曲线与理论值偏差很大;还可在QPSK零碎中,利用函数可将相应的比特序列xy用格雷码映射成对应的四进制符号;在8PSK中也有一个相似的映射函数(见4.2中“八进制格雷码转换”)。这里不再赘述。

2.在编写计算误码率的函数SER中,对办法进行简化的问题

其实谈到计算误码率,本来的第一反馈是利用for循环遍历不相等的码元并相加,除以传输码元的总数即可失去,然而这种办法代码量微小,非常不节俭空间。回想到之前见到一种比拟奇异的办法,即矩阵转置相乘法(见4.8节“误码率计算函数”)。这种办法绝对for循环而言短少直观,然而在理论运行中的速度要快于for循环。

3.对于用Legend函数增加图例的问题

在刚绘制完误码率曲线,应用Legend为绘图增加图例的时候,图例中所有的线形和色彩都是一样的。查找文档得悉,在建设相干的变量时,应用zeros函数为变量设置大小,参数设置谬误,建设的变量不是1维N列矩阵,而是N维N列的方阵,导致增加的图例的时候是每个点增加一个图例。改过zeros参数,使建设的矩阵为1维N列即可。