文章和代码曾经归档至【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列即可。