跳转到主要内容

位交织

judy 提交于

文章来源:<a href="https://mp.weixin.qq.com/s?__biz=MzA5Mzc4OTA4Mw==&amp;mid=2247483846&am…;

当调制方式为16-AQM,64-QAM和256-QAM时需要做位交织,交织的目的是将突发的错误分散开来,把一个较长的突发差错离散成随机差错,再用随机差错的编码(FEC)等信道编码技术消除随机差错,提高通信的可靠性。交织的越深,抗突发错误的能力也越强。位交织的本质是做矩阵的转置运算,需要转置的数据包括信息位和校验位,在交织的过程中分两步完成,第一步为检验位交织,第二步为列旋转交织。

<strong>1.QAM调制方式介绍</strong>

QAM正交振幅调制,其幅度和相位同时变化,属于非恒包络二维调制。它把2ASK和2PSK两种调制结合起来,使得带宽得到双倍扩展。ASK和PSK调制方式如下图所示:
<center><img src="http://xilinx.eetrend.com/files/2020-03/wen_zhang_/100048039-91843-tu1a…; alt=""></center>

QAM调制技术用两路独立的基带信号对频率相同、相位正交的两个载波进行调幅,并将已调信号加在一起进行传输。nQAM代表n个状态的正交调幅,一般有二进制(4QAM)、四进制(16QAM)、八进制(64QAM)、十六进制(256QAM)。得到多进制的QAM信号,需要将二进制信号转换为m电平的多进制信号,然后进行正交调制,最后相加输出。

通信系统中通常把信号矢量端点的分布图成为星座图,同眼图相比,星座图可以看成数字信号的一个二维眼图阵列,屏幕上的图形对应着幅度和相位,通过星座图,可以发现诸如幅度噪声,相位噪声,相位误差等调制问题,采用格雷码编码技术,16QAM星座图编码映射关系如下图所示:
<center><img src="http://xilinx.eetrend.com/files/2020-03/wen_zhang_/100048039-91844-tu21…; alt=""></center>

横纵、坐标的取值均有4种,分别为±1、±3,每种坐标需要3bit二进制来表示,差分编码后输入的符号与QAM调制系统中的I、Q之路幅值映射关系如下表所示:
<center><img src="http://xilinx.eetrend.com/files/2020-03/wen_zhang_/100048039-91845-tu3i…; alt=""></center>

<strong>2. 检验位交织</strong>

检验位进行交织的时候,信息为的数据需要保持不变,检验位交织需要满足以下方程:
<center><img src="http://xilinx.eetrend.com/files/2020-03/wen_zhang_/100048039-91846-tu4f…; alt=""></center>

根据校验位交织地址生成公式可知,交织前的矩阵为Qldpc*360,即依次向数据每行写入360个数,第361个数为第二行第一列数,依次类推。存放Rom地址如图所示:
<center><img src="http://xilinx.eetrend.com/files/2020-03/wen_zhang_/100048039-91847-tu5c…; alt=""></center>

交织的本质是行进列出,即取数据依次如下地址取数据,重新生成新的一组向量
<center><img src="http://xilinx.eetrend.com/files/2020-03/wen_zhang_/100048039-91848-tu6c…; alt=""></center>

Matlab 中,重新产生读数据的地址索引,即可实现矩阵的转置,使用两个for循环
<center><img src="http://xilinx.eetrend.com/files/2020-03/wen_zhang_/100048039-91849-tu7…; alt=""></center>

在硬件平台上实现上述操作则需要两个计数器来实现地址的累加,实现的波形如图所示
<center><img src="http://xilinx.eetrend.com/files/2020-03/wen_zhang_/100048039-91850-tu8s…; alt=""></center>

<strong>3. 列旋转交织</strong>

校验位交织输出u<sub>i</sub>按列顺序依次写入列旋转交织器,然后按行依次读出,完成列旋转交织,每列写入的起始位置由t<sub>c</sub>决定,整个旋转交织见下图
<center><img src="http://xilinx.eetrend.com/files/2020-03/wen_zhang_/100048039-91851-tu9z…; alt=""></center>

列旋转交织用公式表示如下:
输入为u<sub>i</sub>,0≤i≤N<sub>ldpc</sub>,写入交织器的c<sub>i</sub>列,r<sub>i</sub>行,其中
<center><img src="http://xilinx.eetrend.com/files/2020-03/wen_zhang_/100048039-91852-tu10…; alt=""></center>

列旋转交织器的输出为u<sub>i</sub>,0≤i≤Nldpc,从交织器的ri行,ci列读出,其中
<center><img src="http://xilinx.eetrend.com/files/2020-03/wen_zhang_/100048039-91853-tu11…; alt=""></center>

列旋转交织测参数为Nldpc = 16200,Rows N<sub>r</sub> =2025,Columns N<sub>c</sub> = 8,列旋转参数t<sub>c</sub>见下表
<center><img src="http://xilinx.eetrend.com/files/2020-03/wen_zhang_/100048039-91854-tu12…; alt=""></center>

交织之前的数据地址为
<center><img src="http://xilinx.eetrend.com/files/2020-03/wen_zhang_/100048039-91855-tu13…; alt=""></center>

对于列旋转交织,每列T<sub>c</sub>的值都是确定的,因此可以按照一定规律求出每列的地址,如下图所示,以第四列T<sub>c</sub>为7为例,即数据整体往后移7行,最后7行的数据,移到最前面的几行。求出新的地址后,依次将行地址数据读出即完成位旋转交织。
<center><img src="http://xilinx.eetrend.com/files/2020-03/wen_zhang_/100048039-91856-tu14…; alt=""></center>

在计算列旋转交织的时候需要考虑固定延迟T<sub>c</sub>,在matlab中,可以这样得到交织的结果
<center><img src="http://xilinx.eetrend.com/files/2020-03/wen_zhang_/100048039-91857-tu15…; alt=""></center>

相比奇偶校验,列旋转交织多了T<sub>c</sub>的延迟,需要在正常产生地址的情况下再进行操作,正常地址产生的操作同奇偶校验。T<sub>c</sub>最大是21,因此可以定义一个状态机来完成此操作,如下:
<center><img src="http://xilinx.eetrend.com/files/2020-03/wen_zhang_/100048039-91858-tu16…; alt=""></center>

对照交织之后得到的地址矩阵,在状态Row_1读取第一行的地址,前三列T<sub>c </sub>=0,不做任何操作,正常读出转置后的地址即可;第四列需要加上2025-1,第五列加2025-7,后面的三列也按照T<sub>c</sub>的延迟进行操作。Row_2代表第二行,依次类推,读完21行之后,相同的列对应的操作都一样,都在Row_last中完成Gen_end表示交织完成,跳转到状态0,等待下一帧的操作。