利用FPGA实现3GPPTurbo编码译码器

turbo卷积码(tcc)是3g无线系统中所采用的前向错误校正(fec)机制的整体部分。然而,turbo译码器所带来的计算负担非常重,并不太适合采用传统dsp或risc处理器实现。由于现场可编程逻辑阵列(fpga)内在的并行结构,fpga为解决3g基站收发器中所需要的符号速率fec和其它计算密集的任务提供了一个高性能信号处理平台基础。

  turbo 编码

  级联码方案(concatenated coding schemes)是为了通过结合两个或更多相对简单的分量或构造模块码来获得较高的编码增益。turbo码认为是对级联码结构的一种改进,其中采用迭代算法对相关的码序列进行译码。turbo码是通过将两个或更多分量码应用到同一数据序列的不同交织版本上构成的。对于任何传统单分量编码,译码器的最后一级生成的都是硬判决译码数据位。为了使象turbo码这样的级联码方案工作得更好,译码算法不应被限制为只能在译码器间传递硬判决。为最好地利用每个译码器获得的信息,译码算法必须可以实现软判决交换,而不是采用硬判决。对于采用两个分量码的系统,译码的概念是指将来自一个译码器的软判决输入到另一个译码器的输入,并将此过程重复几次以获得更好的判决。

  3gpp turbo 编码器

  输入数据流输入到rsc1,它为每个输入比特生成一个对等比特(parity bit)。输入数据还经过交织后由rsc2处理生成第二个对等比特流。
3gpp标准定义,输入块的长度在40至5114 位之间。编码器生成一个速率为1/3的包括原始输入位和两个对等位的系统码。通过打孔方法可以获得1/2编码速度的编码。递归系统编码器的实现比较直接,然而交织器则不那么简单,要比标准的卷积或块交织器复杂。

  一旦将输入数据块长度k 提供给编码器以后,编码器将计算交织矩阵行数r和列数 c,并创建相应的交织数据结构。r 和 c 是数据块长度k的函数。在输入符号被加载到交织矩阵以后,那么将根据一定的顺序进行行间交换和列间交换。交换模式是根据块长度k选择的(即依赖于k)。行和列交换完成后,通过逐列读出交织矩阵数据就可以得到最终的交织序列。在数据读出时需要进行删减操作,以保证在输出中只有正确的输入符号,请注意,交织阵列包含的数据位通常比k个原始输入符号要多 ,因为r c>k。然后,新的序列经过rsc2编码生成第二个对等位流。

  实现交织器的一种方法是在存储器中存储完整的交换序列。即,一旦k 给定,即调用一个初始化例程(运行在处理器上的软件例程或利用fpga中的功能单元)生成相应的交换序列,然后将这一信息存储在存储器中。然而,这一方法需要大量的存储器。利用virtex -e fpga 技术提供的 4096位每块的片上存储器,将需要[5114 13/4096]=17个存储器块。

  在我们的方法中,采用一个预处理引擎生成一个序列值(存储),这一序列值被存储起来,交织器地址发生器将使用这些序列值。这一硬件单元采用几个小型数据结构(素数表)来计算所需要的序列。这一准备过程需要的时钟周期数与信息块的长度成比例。例如,对于k=40的块需要280时钟周期,而对于最大块长度k=5114,则需要 5290个时钟周期。该过程只需要在块长度变化时进行。地址发生器利用这些更为紧凑的数据结构来实时生成交织地址。

  3gpp turbo 译码器

  译码器包括两个map(最大后验概率)译码器和几个交织器。turbo算法的优良的性能源于可以在两个map译码器间共享可靠性信息(extrinsic data,外数据,或称先验数据)。

  在我们的设计中,map译码器采用的是bahl, cocke, jelinek 和 rajiv (bcjr) 算法。bcjr算法计算每个符号的最大后验对数似然率,并且是一种真正的软判决算法。考虑到数据是以块的形式传输的,因此可以在时间维中前向或反向搜索一个符号序列。对于任一序列,其出现概率都是单独符号出现概率的乘积。由于问题是线性的,因此序列概述可以利用概率的对数和来代替。

  • 利用FPGA实现3GPPTurbo编码译码器已关闭评论
    A+
发布日期:2019年07月02日  所属分类:参考设计