标题：交织编码
交织编码的目的与决定因素
交织编码的目的是把一个较长的突发差错离散成随机差错，再用纠正随机差错的编码（FEC）技术消除随机差错。交织深度越大，则离散度越大，抗突发差错能力也就越强。但交织深度越大，交织编码处理时间越长，从而造成数据传输时延增大，也就是说，交织编码是以时间为代价的。因此，交织编码属于时间隐分集。在实际移动通信环境下的衰落，将造成数字信号传输的突发性差错。利用交织编码技术可离散并纠正这种突发性差错，改善移动通信的传输特性。
交织编码的仿真实验原理
在实际通信系统中常常存在突发性错误。突发错误一般是一个错误序列。纠正突发错误的通常采用交织编码。交织编码的基本思路是，将i个能纠t个错的分组码（n，k）中的码元比特排列成i行n列的方阵。每个码元比特记作B（i，n）。交织前如果遇到连续j个比特的突发错误（用阴影方块表示），且j>>t，对其中的连续两个码组而言，错误数已远远大于纠错能力t，因而无法正确对出错码组进行纠错。交织后，总的比特数不变，传输次序由原来的B（1，1），B（1，2），B（1，3）…B（1，n），B（2，1），B（2，2），B（2，3）…B（2，n），……B（i，1），B（i，2），B（i，3）…B（i，n）转变为B（1，1），B（2，1），B（3，1）…B（i，1），B（1，2），B（2，2），B（3，2）…B（i，2）………B（1，n），B（2，n），B（3，n），…B（i，n）的次序。此时因干扰或衰落引起的突发错误图样正好落在分组码的纠错能力范围内，可以正确纠错错误。通常把码组数i称为交织度，用这种方法构造的码称为交织码。 使用交织编码的好处是提高了抗突发错误的能力但不增加新的监督码元，从而不会降低编码效率。理论上交织度i越大，抗突发错误的能力就越强，但是要求译码器的暂存区就越大，而且译码延时也相应加大。因此，实际工程中会根据设计成本和系统的延时要求选取合适的i。 
交织编码的仿真实验原理在进行交织编码以前，先将数据用戈雷码编码器进行了纠错编码，然后再进行23行、23列的交织编码。在传输信道上用了一个周期为1Hz、脉宽为100ms、幅度为2V的方波信号模拟突发错误。图12.28为输入数据、解码输出及被干扰产生突发错误的波形覆盖示意图。100ms的突发错误被完全纠正。由于使用交织编码所以应该存在2倍的编码、解码延时，即2×23×23个采样。因此要观察到一个以上完整的反交织周期的数 
据信号，系统的采样点数应该稍微设置长一些。 
除此之外，SystemView还提供了另外一个交织编码器图符——卷积交织编码。当使用较短的移位寄存器时，该编码器比上述实验中先进行BCH编码再交织的方法实时性要好，而且参数设置也相对简单。
移动通信系统中交织编码器的设计
软件无线电是一种实现无线通信的新的体系结构，是无线通信产业从模拟到数字、从固定到移动这两次革命后的第三次革命，是从硬件无线通信到软件无线通信的革命。
在从事使用软件无线实现GSM基站研究中，在深入研究GSM通信系统信道编码结构、交织方式的基础上，利用VHDL硬件描述语言完成GSM基站信道编码中使用的交织器的具体设计，为进一步研究软件无线技术在GSM基站系统中应用打下基础。
1GSM的话音编码与信道编码
在GSM通信系统中，全速率话音编码算法为规则脉冲激励及长期预测算法(RPE-LTP)。模拟话音首先通过一个ADC以8kHz采样频率进行采样，每个采样点用均匀13b编码。话音编码器对每20ms一段的话音进行压缩编码，编码结果为每20 ms产生260 b的数据块。这260 b的数据根据他们的重要性分成为3类：Ia类、Ib类和Ⅱ类。Ia类共50 b，为非常重要的数据。如果这些数据被修改，恢复的话音将发生很大的错误，甚至无法恢复正常的话音，因此这些数据需要严格保护。Ib类数据共132 b，是比较重要的数据，需要进行较好的保护。Ⅱ类数据共78 b，为一般重要的数据，发生一些差错也不会对恢复的话音有太大的影响，通常不对其进行保护。根据数据重要性的不同，决定信道编码中采用不同的保护方法。
GSM通信系统的信道编码首先对Ia类数据进行差错检测编码，产生3个循环冗余校验(CRC)比特，这些比特的产生使用多项式为G(x)=X3？X？1。3个CRC比特附在Ia类的50b后面，再与Ib类数据组合在一起进行K=5，r=1/2的卷积编码，卷积编码器使用的2个多项式为P1(x)=X4？X3？1和P2(x)=X4？X3？X？1，卷积编码产生的结果是两个189b的序列，将他们与不需要保护的Ⅱ类数据复合在一起，产生一个完整的经过信道编码的话音帧，共456b。
2交织编码器工作原理
信道编码中采用交织技术，可打乱码字比特之间的相关性，将信道中传输过程中的成群突发错误转换为随机错误，从而提高整个通信系统的可靠性。交织编码根据交织方式的不同，可分为线性交织、卷积交织和伪随机交织。其中线性交织编码是一种比较常见的形式。所谓线性交织编码器，是指把纠错编码器输出信号均匀分成m个码组，每个码组由n段数据构成，这样就构成一个n×m的矩阵。这里把这个矩阵称为交织矩阵。如图1所示，数据以a11，a12，…，a1n，a21，a22，…，a2n，…，aij，…，am1，am2，…，amn(i=1，2，…，m;j=1，2，…，n)的顺序进入交织矩阵，交织处理后以a11，n21，…，am1，a12，a22，…，am2，…，a1n，a2n，…，amn的顺序从交织矩阵中送出，这样就完成对数据的交织编码。还可以按照其他顺序从交织矩阵中读出数据，不管采用哪种方式，其最终目的都是把输入数据的次序打乱。如果aij只包含1个数据比特，称为按比特交织;如果aij包含多个数据比特，则称为按字交织。接收端的交织译码同交织编码过程相类似。
一般来说，如果有n个(m，k)码，排成，n×m矩阵，按列交织后存储或传送，读出或接收时恢复原来的排列，若(m，k)码能纠t个错误，那么交织后就可纠m个错误。对纠正信道传输过程中出现的突发错误效果明显。
GSM中使用这种比特交织器。其交织方式为将信道编码后的每20ms的数据块m=456b拆分到8组中，每组57b，然后这每组57 b分配到不同的Burst中。
3交织编码器的软件设计
GSM通信系统必须满足实时性的要求，因此，交织编码引入的延时应尽可能小。为了同时满足块内交织进行(57，8)矩阵转置变换和延时尽可能小的要求，该交织器利用2片双口RAM实现，记作RAM_和RAM_B。交织处理时，按地址从0～455将456b输入数据全部写入RAM_A，待456b数据全部送入RAM_A后，控制信号使RAM_A由写状态转换到读状态，同时，将输入的待交织数据写入RAM_B，RAM_B为写状态，交织器由RAM_A输出数据。经过456个时钟周期后，从RAM_A读出456b数据的同时，RAM_B写入一个时隙的456 b数据。此时，改变RAM_A和RAM_B的读写状态，RAM_A开始写，从RAM_B中读取数据。如此反复完成数据的实时连续交织处理。
完成交织处理的核心问题是处理好读/写地址之间的关系，该交织器读/写地址的变换采用如下算法完成：
为减少FPGA运算量，可利用Matlab，C语言等实现读/写地址矩阵转置运算。这里采用Matlab完成读/写地址矩阵转置运算，具体程序为：x=0：1：455;reshape(x，57，8)。读/写地址的变换结果存储在address_ROM.mif文件中。利用VHDL语言描述该交织编码器完整代码如下：
4仿真分析
利用Altera公司的QuartusⅡ工具软件，对该交织器仿真分析，得到的时序仿真波形如图2所示。从读地址(rd_addr_A)和写地址(wr_addr_A)以及(data_in)和(intlv_out)可以看出，该交织器完成既定的交织功能，延时相当小，该设计方法正确可行。
5结语
本文提出基于FPGA实现交织器的方法，给出利用VHDL语言描述该交织器的全部代码。通过仿真分析验证该实现方案的正确性和可行性。为进一步研究GSM通信系统基站软件化打下了良好的基础。