CN102594507B - 一种软件无线电系统中的高速并行Turbo译码方法及系统 - Google Patents

一种软件无线电系统中的高速并行Turbo译码方法及系统 Download PDF

Info

Publication number
CN102594507B
CN102594507B CN201210043251.9A CN201210043251A CN102594507B CN 102594507 B CN102594507 B CN 102594507B CN 201210043251 A CN201210043251 A CN 201210043251A CN 102594507 B CN102594507 B CN 102594507B
Authority
CN
China
Prior art keywords
segmentation
recursion
data
moment
state
Prior art date
Legal status (The legal status is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the status listed.)
Active
Application number
CN201210043251.9A
Other languages
English (en)
Other versions
CN102594507A (zh
Inventor
齐心
Current Assignee (The listed assignees may be inaccurate. Google has not performed a legal analysis and makes no representation or warranty as to the accuracy of the list.)
Innomicro Technology Tianjin Co Ltd
Original Assignee
Innomicro Technology Tianjin Co Ltd
Priority date (The priority date is an assumption and is not a legal conclusion. Google has not performed a legal analysis and makes no representation as to the accuracy of the date listed.)
Filing date
Publication date
Application filed by Innomicro Technology Tianjin Co Ltd filed Critical Innomicro Technology Tianjin Co Ltd
Priority to CN201210043251.9A priority Critical patent/CN102594507B/zh
Publication of CN102594507A publication Critical patent/CN102594507A/zh
Application granted granted Critical
Publication of CN102594507B publication Critical patent/CN102594507B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Detection And Correction Of Errors (AREA)
  • Error Detection And Correction (AREA)

Abstract

本发明提出了一种软件无线电系统中的高速并行Turbo译码方法及系统。该方法包括如下步骤:将待译码数据分为M段,并进行重排,使M个分段中对应相同位置的数据连续存储;对重排后的待译码数据进行迭代译码,包括对M个分段的数据进行并行的分量码译码,以及使用事先计算好的交织表对两个分量码之间互相交换的外信息进行交织和解交织;计算系统比特的对数似然值并进行符号判决,将判决后的译码比特序列进行重排恢复自然顺序。本发明的实施例实现了软件无线电系统中的高速并行Turbo译码,大大减少了译码时间,提高了译码吞吐率。

Description

一种软件无线电系统中的高速并行Turbo译码方法及系统
技术领域
本发明涉及无线通信技术领域,特别涉及在软件无线电系统中,基于SIMD处理器的并行Turbo译码方法及系统。
近年来,软件无线电技术的出现备受关注。它突破传统通信平台扩展性差、功能单一、开发成本高的局限性,它把硬件作为无线通信的基本平台,尽可能多得用软件实现无线通信功能。软件无线电的主要优点是它的灵活性。在软件无线电中,诸如信道带宽、调制以及编码等可以动态调整,以适应不同的标准和环境、网络通信负荷以及用户需求的变化。软件无线电中主要组成部分为射频单元和基带处理部分,以及连接它们的接口。基带处理部分由软件实现运行在处理器上。由于无线通信系统支持的数据速率和对时延的要求越来越高,因此基带处理算法如何在处理器上高效地实现就显得至关重要,尤其是复杂度相对较高的Turbo译码算法。
目前主流的CPU都支持单指令多数据(Single Instruction Multiple Data,SIMD)扩展。SIMD表示单个指令并行地完成对多个数据条目的操作,比如加减乘等算术运算、逻辑运算、移位运算等操作。SIMD通过在单个指令内同时完成多个操作而显著提高了执行速度,因此成为基带处理算法在处理器上高效实现的重要手段。典型的SIMD指令集包括Intel的流SIMD扩展(Streaming SIMD Extensions,SSE)系列(包括SSE、SSE2、SSE3、SSE4)和高级矢量扩展(Advanced Vector Extensions,AVX)指令集,以及ARM的NEON指令集。例如,SSE2/3/4系列指令集使用128位的SIMD寄存器,支持2路并行双精度浮点运算、4路并行单精度浮点运算、4路并行32位整数运算、8路并行16位整数运算以及16路并行8位整数运算。
Turbo码是一种并行级联卷积码,将两个简单的分量码通过随机交织器并行级联从而构造出近似随机的长码。分量码一般选择为递归系统卷积码(RSC)。由于其纠错性能远远超过了分组码、卷积码等传统的信道编码方式,因此在无线通信领域得到了广泛的应用。UMTS、LTE等移动通信标准中均采用了Turbo码。
一个典型的Turbo译码过程是多次迭代的过程,其中每一次迭代按顺序包括四个步骤:第一个分量码进行软输入软输出(Soft Input Soft Output,SISO)译码、对第一个分量码译码输出的外信息进行交织操作并将交织结果作为第二个分量码的先验信息输入、第二个分量码进行SISO译码、对第二个分量码译码输出的外信息进行解交织操作并将交织结果作为第一个分量码的先验信息输入。主要的Turbo码分量码译码算法包括最大后验概率(MAP)译码算法及其对数域形式的Log-MAP译码算法、在Log-MAP基础上简化的Max-Log-MAP译码算法、软输出维特比译码算法(SOVA)等。其中Max-Log-MAP算法复杂度较低,同时相比Log-MAP算法性能损失不大,因此得到了广泛的应用。
为了满足宽带无线通信系统对高数据率的要求,需要设计出Turbo译码在SIMD处理器上的高效优化实现方法,而这是一项充满挑战性和技巧性的任务。具体来自于以下几点:
1)Max-Log-MAP算法本身分为前向状态递推、后向状态递推以及外信息计算三部分。为了充分利用SIMD指令提供的指令级并行度,需要在系统允许的译码性能损失的前提下仔细设计算法的并行化方法,并合理地安排数据存储方式,以方便SIMD指令的操作。
2)为了获得好的译码性能,Turbo码所采用的交织器往往经过了精心的设计,因此交织表的生成方法也相应地具有较高的计算复杂度(比如WCDMA和LTE所采用的交织表设计方法)。而迭代译码过程中需要多次进行交织和解交织操作。为了提高译码速率,需要设计出高效的生成交织地址的方法。
发明内容
本发明所要解决的技术问题是在软件无线电系统中实现高速的Turbo译码,以满足UMTS、LTE等宽带无线通信系统对高数据率的要求。
为此,本发明的一个目的在于提出一种软件无线电系统中的高速并行Turbo译码方法。
本发明的另一目的在于提出一种软件无线电系统中的高速并行Turbo译码系统。
为了实现上述目的,本发明第一方面的实施例提出了一种软件无线电系统中的高速并行Turbo译码方法,所述方法包括以下步骤:将待译码数据分为M段并进行重排,使M个分段中对应相同位置的数据连续存储,其中,所述M为正整数;对重排后的待译码数据进行迭代译码,包括对M个分段的数据进行并行的分量码译码,并对分量码之间互相交换的外信息进行交织和解交织,其中交织和解交织互为逆过程;迭代译码停止后,将译码结果进行重排,使其恢复自然顺序。
另外,根据本发明上述实施例的软件无线电系统中的高速并行Turbo译码方法还可以 具有如下附加的技术特征:
根据本发明的一个实施例,将待译码数据分为M段时,前M-1段数据长度相同,最后一段数据长度小于等于前M-1段数据的单段长度。
根据本发明的一个实施例,将分段后的待译码数据进行重排的过程进一步包括:将M段数据按行顺序分别写入一个P行L1列的矩阵中连续的M行,若有未填满的部分可用0或其他值填充,其中所述P为大于等于M的正整数,所述L1为正整数,表示第1段数据的长度;将所述矩阵中的数据按列顺序读出。
根据本发明的一个实施例,对M个分段的数据进行并行的分量码译码的过程进一步包括:
M个分段并行后向状态递推的训练阶段,为后向状态递推的计算阶段提供初始值,共包括Tb次递推,对第i个分段而言,以时刻(i-1)*L1+Tb作为起始时刻,以时刻(i-1)*L1作为结束时刻,其中所述Tb为小于等于最后一段数据分段长度的自然数,i=1,2,...,M,L1为正整数,表示第1段数据的长度;
M个分段并行后向状态递推的计算阶段,共包括L1-1次递推,对第i个分段而言,以时刻i*L1作为起始时刻,以时刻(i-1)*L1+1作为结束时刻;
M个分段并行前向状态递推的训练阶段,为前向状态递推的计算阶段提供初始值,共包括Ta次递推,对第i个分段而言,以时刻i*L1-Ta作为起始时刻,以时刻i*L1作为结束时刻,其中所述Ta为小于等于L1的自然数;
M个分段并行前向状态递推的计算阶段,共包括L1-1次递推,对第i个分段而言,以时刻(i-1)*L1作为起始时刻,以时刻i*L1-1作为结束时刻;
M个分段并行计算系统比特外信息;
其中前向状态递推和后向状态递推过程中,对应于M个分段分别在(i-1)*L1+k(i=1,2,...,M)时刻、同一状态的状态度量值存储位置是连续的,其中所述k为小于等于L1的自然数。
根据本发明的一个实施例,所述后向状态递推的计算阶段,需将M个分段分别在时刻(i-1)*L1+Tb(i=1,2,...,M)的各个状态的后向递推状态度量值存储下来,作为下一次迭代时同一分量码执行后向状态递推训练阶段的后向递推状态度量初始值;前向状态递推的计算阶段,需将M个分段分别在时刻i*L1-Ta(i=1,2,...,M)的各个状态的前向递推状态度量值存储下来,作为下一次迭代时同一分量码执行前向状态递推训练阶段的前向递推状态度量初始值。
根据本发明的一个实施例,所述并行前向状态递推的计算阶段和并行计算系统比特外信息两个步骤可以合并进行,每进行一次M个分段并行的前向状态递推得到一组前向递推状态度量值后,则紧接着进行一次M个分段并行的外信息计算,这样只需存储当前时刻的前向递推状态度量值,而不必存储所有时刻的前向递推状态度量值。
根据本发明的一个实施例,所述每一步前向状态递推和后向状态递推均包括多组M个分段并行执行的蝶形运算以及M个分段并行执行的对状态度量值的防溢出控制运算。
根据本发明的一个实施例,对外信息进行交织的过程进一步包括:步骤一,矩阵解交织;步骤二,使用Turbo码交织表对矩阵解交织结果中的前N个数据进行交织,其中所述N为正整数,表示Turbo码信息比特长度;步骤三,矩阵交织;其中矩阵解交织和矩阵交织互为逆过程,三个步骤的串行级联可以等效成一次单独的交织过程,事先计算好执行步骤一之前与执行步骤三之后同一元素位置的对应关系,作为一个新的交织表存储起来,每次迭代过程中进行交织和解交织步骤时调用该交织表。
根据本发明的一个实施例,所述矩阵交织的过程进一步包括:将所述数据按行顺序写入一个P行L1列的矩阵中,其中所述P为大于等于M的正整数,所述L1为正整数,表示第1段数据的长度;将所述矩阵中的数据按列顺序读出。
本发明第二方面的实施例提出了一种软件无线电系统中的高速并行Turbo译码系统,包括:
第一部件,用于将待译码数据分为M段并进行重排,使M个分段中对应相同位置的数据连续存储,其中,所述M为正整数;
第二部件,用于对重排后的待译码数据进行迭代译码,包括对M个分段的数据进行并行的分量码译码,并对分量码之间互相交换的外信息进行交织和解交织,其中交织和解交织互为逆过程;
第三部件,用于迭代译码停止后,将译码结果进行重排,使其恢复自然顺序。
根据本发明实施例的软件无线电系统中的高速并行Turbo译码方法及系统,通过将待译码数据进行分段并重排,并采用一种有效的数据组织方式对译码过程的内部数据进行存储,从而便于对多段数据的并行译码,大大减少了译码时间,提高了译码吞吐率;并通过事先计算好交织表并存储起来以便正式译码时直接调用的方式,省去了在线计算交织表的时间;并将串行的多次交织过程等效为一个单独的交织过程,减少了数据在内存中的搬移次数。该译码方法具有高的灵活性,实用性强。
附图说明
本发明的上述和/或附加的方面和优点从结合下面附图对实施例的描述中将变得明显和容易理解,其中:
图1为本发明实施例的软件无线电系统中的高速并行Turbo译码方法的流程图;
图2为本发明实施例采用的UMTS标准中的Turbo码分量码的网格图;
图3a为本发明实施例的待译码数据分段的示意图;
图3b为本发明实施例的待译码数据重排的示意图;
图4为使用SIMD指令对重排后的待译码数据进行迭代译码过程的流程图;
图5为Turbo码分量码Max-Log-MAP译码算法的基本流程图;
图6a为分量码译码中M个分段并行的后向状态递推示意图;
图6b为分量码译码中M个分段并行的前向状态递推示意图;
图7a为分量码译码中单步后向状态递推的具体结构示意图;
图7b为分量码译码中单步前向状态递推的具体结构示意图;
图8为单步后向(前向)状态递推中单独一组SIMD指令执行蝶形运算的具体结构示意图;
图9a为对后向状态递推正式计算阶段状态度量初始值的存储位置进行重排的示意图;
图9b为对前向状态递推正式计算阶段状态度量初始值的存储位置进行重排的示意图;
图10为M个分段并行的系统比特外信息计算的具体运算结构示意图;以及
图11为迭代译码过程中对第一分量码的输出进行交织的流程图。
图12为本发明实施例的软件无线电系统中的高速并行Turbo译码系统的结构图。
具体实施方式
下面详细描述本发明的实施例,所述实施例的示例在附图中示出,其中自始至终相同或类似的标号表示相同或类似的元件或具有相同或类似功能的元件。下面通过参考附图描述的实施例是示例性的,仅用于解释本发明,而不能理解为对本发明的限制。
在本发明的描述中,需要理解的是,术语“纵向”、“横向”、“上”、“下”、“前”、“后”、“左”、“右”、“竖直”、“水平”、“顶”、“底”“内”、“外”等指示的方位或位置关系为基于附图所示的方位或位置关系,仅是为了便于描述本发明和简化描述,而不是指示或暗示所指的装置或元件必须具有特定的方位、以特定的方位构造和操作,因此不能理解为对本发明的限制。
此外,术语“第一”、“第二”仅用于描述目的,而不能理解为指示或暗示相对重要性。
在本发明的描述中,除非另有规定和限定,需要说明的是,术语“安装”、“相连”、“连接”应做广义理解,例如,可以是机械连接或电连接,也可以是两个元件内部的连通,可以是直接相连,也可以通过中间媒介间接相连,对于本领域的普通技术人员而言,可以根据具体情况理解上述术语的具体含义。
以下结合附图描述根据本发明实施例的软件无线电系统中的高速并行Turbo译码方法。
参考图1,本发明实施例的软件无线电系统中的高速并行Turbo译码方法,包括如下步骤:
步骤S101,接收已经过解速率匹配处理的待译码数据。待译码数据包含系统比特信息序列x1、第一分量码校验比特信息序列z1和第二分量码校验比特信息序列z2三个序列。这三个序列分别存储在内存中的指定位置。
步骤S102,将待译码数据分为M段,并进行重排,使M个分段中对应相同位置的数据位于连续的存储单元,便于读入SIMD寄存器。
步骤S103,使用SIMD指令对重排后的待译码数据进行迭代并行译码。其中SIMD指令并行操作的多个操作数分别对应多个分段。
步骤S104,计算系统比特的对数似然值并进行符号判决,将判决后的译码比特序列进行重排恢复自然顺序后输出。
为了对本发明上述实施例有更深入的理解,以下结合具体例子对本发明的原理进行详细描述。
本发明实施例采用UMTS标准中的Turbo码作为具体例子进行说明。图2示出了该Turbo码的分量码的网格图。Turbo译码过程中对两个分量码的译码将基于该网格图进行。对于系统信息比特长度为N的Turbo码,网格图包含N+1个时刻,每个时刻包含8个状态,分别记为状态0至状态7。网格图说明了不同状态间的转移关系。每两个状态间的转移关系都对应一种特定的输入比特和输出比特的组合,这些组合共有四种,即:输入0输出0、输入0输出1、输入1输出0、输入1输出1。以下说明中均假设N=2557。
下面对步骤S102进行详细说明。
首先,根据Turbo码块长度N以及SIMD指令所能支持的并行操作数个数(以下简称SIMD并行度)P,按照预先设定的规则分别将序列x1、z1和z2分为M段,其中M为大于等于1且小于等于P的整数;前M-1段数据长度相同,记为L1,最后一段数据长度小于等于前M-1段数据的长度,记为L2,即L2≤L1。由N和P导出M、L1和L2的具体方法可以 由本领域技术人员依据实际测试或研究确定,本发明并不对此加以限定。本实施例中,P=M=8,L1=320,L2=317。数据分段的示意图如图3a所示,图中方格内的数字表示序列x1(或z1或z2)中各元素的序号。
然后,使用相同的重排方法将系统比特信息序列x1、第一分量码校验比特信息序列z1、第二分量码校验比特信息序列z2分别进行重排。该重排方法可用矩阵交织的形式进行描述,如图3b所示。具体为:将序列x1(或z1或z2)中的第1段数据从左至右顺序写入一个P行L1列的矩阵的第1行;将序列x1(或z1或z2)中的第2段数据从左至右顺序写入该矩阵的第2行;以此类推直至第M段数据。若第M段数据长度小于前几段数据,则第M行不能填满,剩下未填满的部分可用0或其他值填充;若M小于P,则矩阵中剩下的P-M行也可用0或其他值填充。然后将矩阵中第1列的P个数据从上至下顺序读出并连续存储在内存空间中;将矩阵中第2列的P个数据从上至下顺序读出并连续存储在内存空间中第1列数据的存储位置之后;以此类推直至第L1列。通过重排后,序列x1(或z1或z2)中对应于M个分段中相同位置的数据,比如 现在处于内存中连续的位置,从而便于SIMD处理器从内存中一次性读取M个分段的数据并加载到SIMD寄存器中,使用SIMD指令进行并行译码。具体来说,SIMD处理器根据数据的起始地址从内存中一次性读入连续的P个数据并加载到SIMD寄存器中,若M=P,则P个数据均为有效数据,对应于M个分段;若M<P,则前M个数据为有效数据,对应于M个分段,剩下的P-M个数据为无效数据。
下面对步骤S103进行详细说明。使用SIMD指令对重排后的待译码数据进行迭代译码的过程如图4所示,进一步包括:
步骤S401,迭代前的初始化操作,包括:对步骤S102中重排后的序列x1进行交织操作,交织方法与以下步骤S403中的交织操作方法相同,将交织后的序列记为x2并作为第二个分量码译码的输入;利用待译码数据中两个分量码的尾比特(tail bits)信息分别计算出两个分量码在第N时刻8个状态的后向递推状态度量值,通常也称为beta度量值,用于步骤S402和步骤S404分别对两个分量码并行译码过程中第M个分段后向递推的起始状态进行初始化;以及其他必要的初始化操作。
然后迭代开始。每一次迭代包括:
步骤S402,使用SIMD指令对第一个分量码的M个分段的数据进行并行译码并输出外信息序列Le1
步骤S403,对序列Le1进行交织,并将交织结果作为第二个分量码译码的输入先验信息序列Lp2
步骤S404,使用SIMD指令对第二个分量码的M个分段的数据进行并行译码并输出外信息序列Le2
步骤S405,对序列Le2进行解交织,并将解交织结果作为第一个分量码译码的输入先验信息序列Lp1
步骤S406,判断是否达到预设迭代次数,若没有达到,则继续进行下一次迭代,重复执行步骤S402至S405,否则停止迭代。
需要说明的是,以上迭代过程的预设迭代次数可以由本领域技术人员根据具体通信系统对Turbo译码误码性能以及对译码吞吐量的要求进行实际测试或研究后确定,本发明对此并没有限制。
迭代译码停止除了采用以上迭代固定次数后停止的方式,还可以采用迭代提前截止的方式,具体为:每一次迭代中,分别在步骤S402和步骤S405之后根据预设的提前截止准则进行判定,如满足提前截止要求则终止迭代过程,否则继续执行当前步骤之后的步骤。提前截止的准则和方法可以由本领域技术人员研究确定,本发明的实施例对此并没有限制。
步骤S402和S404采用的是相同的方法和流程,下面对此进行详细说明。分量码Max-Log-MAP译码过程的基本流程如图5所示。输入包括先验信息序列Lp(对步骤S402来说为上一次迭代过程中步骤S405的输出Lp1,对步骤S404来说为本次迭代过程中步骤S403的输出Lp2)、系统比特信息序列x(对步骤S402来说为上述序列x1,对步骤S404来说为上述序列x2)以及校验比特信息序列z(对步骤S402来说为上述序列z1,对步骤S404来说为上述序列z2)。译码过程包括以下步骤:
步骤S501,后向状态递推(也称beta递推)的训练阶段。为beta递推的正式计算阶段提供初始值。
步骤S502,后向状态递推(也称beta递推)的正式计算阶段。
步骤S511,前向状态递推(也称alpha递推)的训练阶段。为alpha递推的正式计算阶段提供初始值。
步骤S512,前向状态递推(也称alpha递推)的正式计算阶段。
步骤S521,计算并输出系统比特外信息Le
以上步骤S501和步骤S502的基本原理相同,每一步递推可用下式表示:
βk(sk)=max{βk+1(sk+1)+γk(sk,sk+1),βk+1(s′k+1)+γk(sk,s′k+1)}。(1)
上式中假设时刻k的状态sk与时刻k+1的状态sk+1和s’k+1在图2所示网格图上存在状态转移关系,βk(sk)表示网格图上时刻k、状态sk的后向递推状态度量值(beta度量值), γk(sk,sk+1)表示在网格图上从时刻k的状态sk转移到时刻k+1的状态sk+1所对应的路径度量值,该路径度量值有四种取值,对应系统比特和校验比特的四种组合{00,01,10,11},分别表示为 计算方法如下式所示:
γ k ij = ( 1 - i ) · L k p + ( 1 - 2 i ) · x k + ( 1 - 2 j ) · z k , i=0,1;j=0,1。(2)
步骤S501进行的是M个分段并行的beta递推训练阶段,如图6a所示。共包括Tb次递推,对第i(i=1,2,...,M)个分段而言,以时刻(i-1)*L1+Tb作为起始时刻,以时刻(i-1)*L1作为结束时刻。其中Tb为大于等于0且小于等于L2的整数,Tb的具体取值可以由本领域技术人员依据实际测试或研究确定,本发明并不对此加以限定。起始时刻(i-1)*L1+Tb的8个状态的beta度量值初始化为上一次迭代过程中同一个分量码进行步骤S502所述beta递推正式计算阶段时,时刻(i-1)*L1+Tb的8个状态相应的beta度量值。因此在进行步骤S502时,需将M个分段分别在时刻(i-1)*L1+Tb(i=1,2,...,M)的8个beta度量值 s=0,1,...,7存储下来,以便下一次迭代时使用。
每一步beta递推的具体结构如图7a所示。具体包括4组SIMD指令执行的蝶形运算以及beta度量值的防溢出控制。
每一组SIMD指令执行的蝶形运算并行完成对应M个分段的相邻时刻间的递推运算,其中对应第i个分段为(i-1)*L1+k+1时刻的2个状态到(i-1)*L1+k时刻的2个状态的递推蝶形运算。图中Beta[k][s]表示内存空间中连续的P个存储单元,其中前M个连续的存储单元存储着对应M个分段的beta度量值βk(s),...,  Gamma_ij[k](i=0,1;j=0,1)表示内存空间中连续的P个存储单元,其中前M个连续的存储单元存储着对应M个分段的路径度量值 Beta[k][s]和Gamma_ij[k]的存储方式便于SIMD处理器从内存中一次性读出对应M个分段的数据并载入SIMD寄存器进行运算。
单独一组SIMD指令执行蝶形运算的具体结构如图8所示。图中Gamma_0[k]和Gamma_1[k]表示存储M个分段的路径度量值的存储单元。SIMD处理器从内存中读取路径度量值以及Beta[k+1][s1]和Beta[k+1][s2]并加载到SIMD寄存器,然后执行四条SIMD加法指令和两条SIMD求最大值指令,并将结果存储到内存空间的Beta[k][s3]和Beta[k][s4]。SIMD指令执行蝶形运算的一种伪代码实施例如下:
(1)LOAD xmm0,Beta[k+1][s1] ;将Beta[k+1][s1]载入SIMD寄存器xmm0
(2)LOAD xmm1,Beta[k+1][s2] ;将Beta[k+1][s2]载入SIMD寄存器xmm1
(3)LOAD xmm2,Gamma_1[k]    ;将Gamma_1[k]载入SIMD寄存器xmm2
(4)LOAD xmm3,Gamma_0[k]    ;将Gamma_0[k]载入SIMD寄存器xmm3
(5)VECADD xmm0,xmm2         ;SIMD加法,并行执行P组加法
(6)VECADD xmm1,xmm3         ;SIMD加法,并行执行P组加法
(7)VECMAX xmm0,xmm1         ;SIMD求最大值,并行执行P组两个数求最大值
(8)STORE Beta[k][s3],xmm0   ;将最大值存储到内存中的Beta[k][s3]
(9)LOAD xmm0,Beta[k+1][s1]  ;将Beta[k+1][s1]载入SIMD寄存器xmm0
(10)LOAD xmm1,Beta[k+1][s2] ;将Beta[k+1][s2]载入SIMD寄存器xmm1
(11)VECADD xmm0,xmm3        ;SIMD加法,并行执行P组加法
(12)VECADD xmm1,xmm2        ;SIMD加法,并行执行P组加法
(13)VECMAX xmm0,xmm1        ;SIMD求最大值,并行执行P组两个数求最大值
(14)STORE Beta[k][s4]        ,xmm0;将最大值存储到内存中的Beta[k][s4]
以上伪代码中LOAD指令执行将内存空间中P个连续的存储单元中的内容加载到SIMD寄存器的操作;STORE指令执行将SIMD寄存器中的内容存储到内存空间中P个连续的存储单元中的操作;VECADD指令并行执行P组加法操作;VECMAX指令并行执行P组求两个数中最大值的操作。
图7a中的防溢出控制目的在于保证随着递推过程的进行,每个时刻对应8个状态的beta度量值不会超出存储这些度量值使用的数据类型所支持的数值范围,比如采用8比特有符号整数的数据类型存储度量值,则数值范围为-128~127。一种防止溢出的方式是对每次递推计算出时刻k的8个beta度量值后,求出这8个值的最大值,并将8个度量值分别减去这个最大值。具体实现时,使用SIMD指令对M个分段并行执行该防溢出控制操作,一种伪代码实施例如下:
(1)LOAD xmm0,Beta[k][0]  ;将Beta[k][0]载入SIMD寄存器xmm0
(2)LOAD xmm1,Beta[k][1]  ;将Beta[k][1]载入SIMD寄存器xmm1
(3)VECMAX xmm0,xmm1      ;求Beta[k][0]和Beta[k][1]的最大值
(4)LOAD xmm1,Beta[k][2]  ;将Beta[k][2]载入SIMD寄存器xmm1
(5)LOAD xmm2,Beta[k][3]  ;将Beta[k][3]载入SIMD寄存器xmm2
(6)VECMAX xmm1,xmm2      ;求Beta[k][2]和Beta[k][3]的最大值
(7)LOAD xmm2,Beta[k][4]  ;将Beta[k][4]载入SIMD寄存器xmm2
(8)LOAD xmm3,Beta[k][5]  ;将Beta[k][5]载入SIMD寄存器xmm3
(9)VECMAX xmm2,xmm3      ;求Beta[k][4]和Beta[k][5]的最大值
(10)LOAD xmm3,Beta[k][6] ;将Beta[k][6]载入SIMD寄存器xmm3
(11)LOAD xmm4,Beta[k][7];将Beta[k][7]载入SIMD寄存器xmm4
(12)VECMAX xmm3,xmm4    ;求Beta[k][6]和Beta[k][7]的最大值
(13)VECMAX xmm0,xmm1
(14)VECMAX xmm2,xmm3
(15)VECMAX xmm0,xmm2    ;M个分段、每分段8个beta度量值的最大值存储在SIMD寄存器xmm0中
(16)LOAD xmm1,Beta[k][0];Beta[k][0]减去最大值
(17)VECSUB xmm1,xmm0
(18)STORE Beta[k][0],xmm1
(19)LOAD xmm1,Beta[k][1];Beta[k][1]减去最大值
(20)VECSUB xmm1,xmm0
(21)STORE Beta[k][1],xmm1
(22)......
(23)LOAD xmm1,Beta[k][7];Beta[k][7]减去最大值
(24)VECSUB xmm1,xmm0
(25)STORE Beta[k][7],xmm1
以上伪代码中,VECSUB指令并行执行P组减法操作,其他指令含义与上文所述相同。
由于步骤501的目的是计算Beta[0][s](s=0,1,...,7),因此执行过程中间的Beta[k][s](k>0)的值不必要都存储下来,以节省内存空间的占用。
步骤501执行完成后,得到了Beta[0][s](s=0,1,...,7),其中前M个值为M个分段在第(i-1)*L1(i=1,2,...,M)时刻的beta度量值β0(s),...,  s=0,1,...,7。其中第i个分段的beta度量值 作为第i-1个分段进行步骤502beta递推的正式计算阶段时的初始值。因此需要对β0(s),...,  的存储位置进行重排,将 移动到对应于第i-1个分段的位置,第M个分段的beta度量值的初始值则使用步骤S401中利用尾比特递推得到的值βN(s),具体如图9a所示。该操作可使用SIMD重排或移位指令实现。
步骤S502进行的是M个分段并行的beta递推正式计算阶段,如图6a所示。共包括L1-1次递推,对第i个分段而言,以时刻i*L1作为起始时刻,以时刻(i-1)*L1+1作为结束时刻。起始时刻i*L1的8个状态的beta度量值初始化为步骤501执行结果经过图9a所示重排后的值。每一次递推的具体操作与以上步骤S501所述相同,此处不再赘述。每一次递推 的计算结果Beta[k][s]均需存储在内存空间中,用于后续的步骤S521。
在进行步骤S502时,若第M个分段的数据长度L2小于前M-1段的数据长度L1,则当递推计算得到Beta[L2][s]后,第M段的后向递推才真正开始,因此需要将Beta[L2][s]中对应第M段的beta度量值用βN(s)替代,以使第M个分段的后向递推获得正确的状态初始值。
在进行步骤S502时,需将M个分段分别在时刻(i-1)*L1+Tb(i=1,2,...,M)的8个beta度量值即Beta[Tb][s](s=0,1,...,7)存储下来,以便下一次迭代时作为同一分量码执行步骤501时的初始值。
图5中步骤S511和步骤S512的基本原理相同,每一步递推可用下式表示:
αk+1(sk+1)=max{αk(sk)+γk(sk,sk+1),αk(s′k)+γk(s′k,sk+1)}。(3)
上式中假设时刻k的状态sk和s’k与时刻k+1的状态sk+1在图2所示网格图上存在状态转移关系,αk(sk)表示网格图上时刻k、状态sk的前向递推状态度量值(alpha度量值),γk(sk,sk+1)表示在网格图上从时刻k的状态sk转移到时刻k+1的状态sk+1所对应的路径度量值,该路径度量值有四种取值,分别表示为 计算方法与上述beta递推中路径度量计算方法相同。
步骤S511进行的是M个分段并行的alpha递推训练阶段,如图6b所示。共包括Ta次递推,对第i(i=1,2,...,M)个分段而言,以时刻i*L1-Ta作为起始时刻,以时刻i*L1作为结束时刻。其中Ta为大于等于0且小于等于L1的整数,Ta的具体取值可以由本领域技术人员依据实际测试或研究确定,本发明并不对此加以限定。此处Ta的取值也可与上述步骤S501中Tb的取值不同,本发明并不对此加以限定。起始时刻i*L1-Ta的8个状态的alpha度量值初始化为上一次迭代过程中同一个分量码进行步骤S512所述alpha递推正式计算阶段时,时刻i*L1-Ta的8个状态相应的alpha度量值。因此在进行步骤S512时,需将M个分段分别在时刻i*L1-Ta(i=1,2,...,M)的8个alpha度量值 s=0,1,...,7存储下来,以便下一次迭代时使用。
每一步alpha递推的具体结构与beta递推类似,如图7b所示。包括4组SIMD指令执行的蝶形运算以及alpha度量值的防溢出控制。
每一组SIMD指令执行的蝶形运算并行完成对应M个分段的相邻时刻间的递推运算,其中对应第i个分段为(i-1)*L1+k时刻的2个状态到(i-1)*L1+k+1时刻的2个状态的递推蝶形运算。图中Alpha[k][s]表示内存空间中连续的P个存储单元,其中前M个连续的存储单元存储着对应M个分段的alpha度量值αk(s),...,  Gamma_ij[k](i=0,1; j=0,1)表示内存空间中连续的P个存储单元,其中前M个连续的存储单元存储着对应M个分段的路径度量值 Alpha[k][s]和Gamma_ij[k]的存储方式便于SIMD处理器从内存中一次性读出对应M个分段的数据并载入SIMD寄存器进行运算。
单独一组SIMD指令执行蝶形运算的具体结构如图8所示,与beta递推的蝶形运算基本相同。SIMD处理器从内存中读取路径度量值以及Alpha[k][s1]和Alpha[k][s2]并加载到SIMD寄存器,然后执行四条SIMD加法指令和两条SIMD求最大值指令,并将结果存储到内存空间的Alpha[k+1][s3]和Alpha[k+1][s4]。SIMD指令执行蝶形运算的一种伪代码实施例可参考上述beta递推时的伪代码实施例,此处不再赘述。
图7b中的防溢出控制目的与beta递推中的相同,即保证随着递推过程的进行,每个时刻对应8个状态的alpha度量值不会超出存储这些度量值使用的数据类型所支持的数值范围。一种防止溢出的方式是对每次递推计算出时刻k+1的8个alpha度量值后,求出这8个值的最大值,并将8个度量值分别减去这个最大值。具体实现时,使用SIMD指令对M个分段并行执行该防溢出控制操作,一种伪代码实施例可参考上述beta递推时的伪代码实施例,此处不再赘述。
由于步骤511的目的是计算Alpha[L1][s](s=0,1,...,7),因此执行过程中间的Alpha[k][s](k<L1)的值不必要都存储下来,以节省内存空间的占用。
步骤511执行完成后,得到了Alpha[L1][s](s=0,1,...,7),其中前M个值为M个分段在第i*L1(i=1,2,...,M)时刻的alpha度量值 s=0,1,...,7。其中第i个分段的alpha度量值 作为第i+1个分段进行步骤512alpha递推的正式计算阶段时的初始值。因此需要对 的存储位置进行重排,将 移动到对应于第i+1个分段的位置,第1个分段的alpha度量值的初始值直接赋为:α0(0)=0,α0(s)=-∞,s≠0(实际实现时,负无穷值可用一个较大的负数代替),具体如图9b所示。该操作可使用SIMD重排或移位指令实现。
步骤S512进行的是M个分段并行的alpha递推正式计算阶段,如图6b所示。共包括L1-1次递推,对第i个分段而言,以时刻(i-1)*L1作为起始时刻,以时刻i*L1-1作为结束时刻。起始时刻(i-1)*L1的8个状态的alpha度量值初始化为步骤511执行结果经过图9b所示重排后的值。每一次递推的具体操作与以上步骤S511所述相同,此处不再赘述。每一次递推的计算结果Alpha[k][s]均需存储在内存空间中,用于后续的步骤S521。
在进行步骤S512时,需将M个分段分别在时刻i*L1-Ta(i=1,2,...,M)的8个alpha度量值,即Alpha[L1-Ta][s](s=0,1,...,7)存储下来,以便下一次迭代时作为同一分量码执行步 骤511时的初始值。
下面对图5中步骤S521计算并输出系统比特外信息Le进行详细说明。计算系统比特外信息的基本原理如下式所示:
L k e = SF · ( max ( s k , s k + 1 ) ∈ S 0 { α k ( s k ) + γ k e ( s k , s k + 1 ) + β k + 1 ( s k + 1 ) } - max ( s k , s k + 1 ) ∈ S 1 { α k ( s k ) + γ k e ( s k , s k + 1 ) + β k + 1 ( s k + 1 ) } ) - - - ( 4 )
其中(sk,sk+1)∈S0表示在网格图上时刻k的状态sk转移到时刻k+1的状态sk+1的路径所对应的系统比特为0,这样的路径共8条;(sk,sk+1)∈S1表示在网格图上时刻k的状态sk转移到时刻k+1的状态sk+1的路径所对应的系统比特为1,这样的路径也共8条; 表示另一种定义下的从时刻k的状态sk转移到时刻k+1的状态sk+1所对应的路径度量值,该路径度量值有两种取值,对应校验比特的两种取值0和1,分别表示为 计算方法为 j=0,1;上式中的SF是一个预先设定的取值小于1的比例因子,用于对计算出的系统比特外信息进行调整,该比例因子的取值会影响Max-Log-MAP译码算法相对于Log-MAP算法的性能损失,其取值可以由本领域技术人员依据实际测试或研究确定,本发明并不对此加以限定。
步骤S521进行的是M个分段并行的系统比特外信息计算,共需循环计算L1次,每次分别计算出M个分段各自1个系统比特的外信息,其具体运算结构如图10所示。图中Z[k]表示内存空间中连续的P个存储单元,其中前M个连续的存储单元存储着对应M个分段的zk,...,  Le[k]表示内存空间中连续的P个存储单元,其中前M个连续的存储单元存储着对应M个分段的 对第k(k=0,1,...,L1-1)次循环,系统将对应的Z[k]、Alpha[k][sk]、Beta[k+1][sk+1]三元组共16组加载到SIMD寄存器并使用SIMD加减法指令按照图10所示的规则进行计算,共24次SIMD加法(VECADD)和8次SIMD减法(VECSUB),得到16个值;然后按照路径对应系统信息比特是0还是1分为两组,分别使用VECMAX指令求出组内8个值的最大值;再使用VECSUB指令将0组的最大值减去1组的最大值;最后使用SIMD乘法指令将以上计算结果乘以SF因子,并将结果存储到Le[k]。在SF值给定的情况下,最后一步SIMD乘法也可使用SIMD移位指令和SIMD加减法指令的组合进行代替或近似。
图5所示的分量码Max-Log-MAP译码过程的基本流程也可有另一种实现方式,其中步骤S512和S521合并,每进行一次alpha递推得到一组Alpha[k][s](s=0,1,...,7)后,则紧接着进行一次Le[k]的计算,这样则只需存储当前时刻的Alpha[k][s],而不必存储所有时 刻的Alpha[k][s],从而节省了存储空间。
下面对图4中的步骤S403和S405进行详细说明。步骤S403的交织过程与步骤S405的解交织过程互为逆过程,因此以下仅对步骤S403进行详细说明。
步骤S403的具体流程如图11所示。具体包括:
步骤S111,矩阵解交织。该步骤是图1中步骤S102重排过程的逆过程,具体为:将长度为P*L1的序列Le1按列顺序写入一个P行L1列的矩阵,即从上至下顺序写满第一列,然后从上至下顺序写满第二列,以此类推直至写满第L1列;然后将矩阵中的数据按行顺序读出,即将第一行数据从左至右顺序读出,然后将第二行数据从左至右顺序读出,以此类推直至第P行。执行该步骤前,序列Le1中对应M个分段中相同位置的数据 存储于相邻的存储单元,执行该步骤后的序列Le1恢复自然顺序,即 其中前N个数据 为有效数据。
步骤S112,使用Turbo码交织表对步骤S111的输出序列中的前N个数据进行交织,得到按自然顺序存储的序列Lp2
步骤S113,矩阵交织。该步骤是步骤S111的逆过程,也就是与图1中步骤S102重排过程相同。具体为:将长度为P*L1的序列按行顺序写入一个P行L1列的矩阵,即从左至右顺序写满第一行,然后从左至右顺序写满第二行,以此类推直至写满第P行;然后将矩阵中的数据按列顺序读出,即将第一列数据从上至下顺序读出,然后将第二列数据从上至下顺序读出,以此类推直至第L1列。经过执行该步骤,序列Lp2中对应M个分段中相同位置的数据 存储于相邻的存储单元,从而便于SIMD处理器从内存中一次性读取M个分段的数据并加载到SIMD寄存器中。
一种高效地实现步骤S403的方法是,将步骤S111、S112和S113三次交织过程的串行级联等效成一次单独的交织过程,事先计算好交织前与交织后同一元素在内存中存储位置的对应关系,作为一个新的交织表存储在内存中。每次迭代过程中进行步骤S403时调用该交织表完成相应的交织过程。新的等效交织表计算方法具体描述如下:
为了描述方便,假设步骤S111的输入序列记为a0[k],k=0,1,...,P·L1-1,输出序列记为a1[k],k=0,1,...,P·L1-1,步骤S112的输出序列记为a2[k],k=0,1,...,P·L1-1,步骤S113的输出序列记为a3[k],k=0,1,...,P·L1-1。记步骤S112中使用的Turbo码交织表为П0[k],k=0,1,...,N-1,并令П0[k]=k,k=N,N+1,...,P·L1-1,则有如下对应关系: a2[k]=a10[k]]。步骤S113矩阵交织的交织表地址计算公式为П1[j·L1+i]=P·i+j,i=0,...,L1,j=0,...,P-1,则有a1[k]=a01[k]]和a31[k]]=a2[k]。则a31[k]]=a010[k]]]。将新的等效交织表记为П[k],k=0,1,...,P·L1-1,并令a3[k]=a0[П[k]],则有:
П[П1[k]]=П10[k]],k=0,1,...,P·L1-1。
该公式即为新的等效交织表的计算公式。
以上等效方法减少了数据在内存中的搬移次数,从而提高了程序运行效率。
以上所述步骤S112中使用的Turbo码交织表П0[k],k=0,1,...,N-1往往需要复杂的运算来获得,为了减少译码过程耗费的时间,一种高效的方法是事先将对应所有编码长度的交织表计算好存储在内存空间中,并建立编码长度与相应交织表的查找关系,在正式译码时通过编码长度快速查找出相应的交织表以便调出使用。在一些通信标准中,系统支持的编码长度只有有限的若干种(比如LTE支持固定的188种码长),在这种情况下直接将每种编码长度对应的交织表事先计算并存储起来不会占用很多内存空间;在另一些通信标准中,多个编码长度对应的交织表是同一个基本交织表的变形(比如UMTS中多个码长会共用相同的基本矩阵交织表),而这些基本交织表的数目也是很有限的,因此只需存储这些基本交织表即可,也不会占用很多内存空间。
下面对图1中的步骤S104进行详细说明。首先计算系统比特的对数似然值,计算公式为 同样,该计算也是利用SIMD指令对M个分段并行执行的,其中乘2的计算可用SIMD左移操作指令代替;然后对计算出的LLRk进行符号判决,LLRk≥0则判决为比特0,LLRk<0则判决为比特1,同样,该判决过程也是利用SIMD的比较指令并行实现;最后将判决得到的译码比特序列使用与图11中步骤S111相同的方法进行重排,恢复自然顺序后输出其中的前N个比特作为最终的译码结果。
参考图12,根据本发明实施例的软件无线电系统中的高速并行Turbo译码系统包括第一部件210、第二部件220和第三部件230,其中:
第一部件210,用于将待译码数据分为M段并进行重排,使M个分段中对应相同位置的数据连续存储,其中,所述M为正整数;
第二部件220,用于对重排后的待译码数据进行迭代并行译码;
第三部件230,用于迭代译码停止后,将译码结果进行重排,使其恢复自然顺序。
以上第一部件210实现将待译码数据分为M段并进行重排的具体过程与图1中步骤S102执行的操作相同,此处不再赘述。
以上第二部件220对重排后的待译码数据进行迭代并行译码的具体过程与图1中步骤S103执行的操作相同,此处不再赘述。
以上第三部件230实现将译码结果进行重排使其恢复自然顺序的具体过程与图1中步骤S104执行的操作相同,此处不再赘述。
根据本发明实施例的软件无线电系统中的高速并行Turbo译码方法及系统,将待译码数据进行分段并重排,同时采用了一种有效的数据组织方式对译码过程的内部数据在内存中进行存储,从而便于SIMD处理器一次从内存中读取多个分段的数据并加载到SIMD寄存器中,使用SIMD指令实现了对多段数据的并行译码,大大减少了译码时间,提高了译码吞吐率;并通过事先计算好交织表并存储在内存空间中以便正式译码时直接调用的方式,省去了在线计算交织表的时间;并将串行的多次交织过程等效为一个单独的交织过程,减少了数据在内存中的搬移次数。该译码方法具有高的灵活性,实用性强。
在本说明书的描述中,参考术语“一个实施例”、“一些实施例”、“示例”、“具体示例”、或“一些示例”等的描述意指结合该实施例或示例描述的具体特征、结构、材料或者特点包含于本发明的至少一个实施例或示例中。在本说明书中,对上述术语的示意性表述不一定指的是相同的实施例或示例。而且,描述的具体特征、结构、材料或者特点可以在任何的一个或多个实施例或示例中以合适的方式结合。
尽管已经示出和描述了本发明的实施例,本领域的普通技术人员可以理解:在不脱离本发明的原理和宗旨的情况下可以对这些实施例进行多种变化、修改、替换和变型,本发明的范围由权利要求及其等同物限定。

Claims (9)

1.一种软件无线电系统中的高速并行Turbo译码方法,其特征在于,包括以下步骤:
将待译码数据分为M段并进行重排,使M个分段中对应相同位置的数据连续存储,其中,所述M为正整数;
对重排后的待译码数据进行迭代译码,包括对M个分段的数据进行并行的分量码译码,并对分量码之间互相交换的外信息进行交织和解交织,其中交织和解交织互为逆过程;
迭代译码停止后,将译码结果进行重排,使其恢复自然顺序;
其中,对M个分段的数据进行并行的分量码译码的过程进一步包括:
M个分段并行后向状态递推的训练阶段,为后向状态递推的计算阶段提供初始值,共包括Tb次递推,对第i个分段而言,以时刻(i-1)*L1+Tb作为起始时刻,以时刻(i-1)*L1作为结束时刻,其中所述Tb为小于等于最后一段数据分段长度的自然数,i=1,2,...,M,L1为正整数,表示第1段数据的长度;
M个分段并行后向状态递推的计算阶段,共包括L1-1次递推,对第i个分段而言,以时刻i*L1作为起始时刻,以时刻(i-1)*L1+1作为结束时刻;
M个分段并行前向状态递推的训练阶段,为前向状态递推的计算阶段提供初始值,共包括Ta次递推,对第i个分段而言,以时刻i*L1-Ta作为起始时刻,以时刻i*L1作为结束时刻,其中所述Ta为小于等于L1的自然数;
M个分段并行前向状态递推的计算阶段,共包括L1-1次递推,对第i个分段而言,以时刻(i-1)*L1作为起始时刻,以时刻i*L1-1作为结束时刻;
M个分段并行计算系统比特外信息;
其中前向状态递推和后向状态递推过程中,对应于M个分段分别在(i-1)*L1+k时刻、同一状态的状态度量值存储位置是连续的,其中所述k为小于等于L1的自然数。
2.如权利要求1所述的软件无线电系统中的高速并行Turbo译码方法,其特征在于,将待译码数据分为M段时,前M-1段数据长度相同,最后一段数据长度小于等于前M-1段数据的单段长度。
3.如权利要求1所述的软件无线电系统中的高速并行Turbo译码方法,其特征在于,将分段后的待译码数据进行重排的过程进一步包括:
将M段数据按行顺序分别写入一个P行L1列的矩阵中连续的M行,若有未填满的部分可用0或其他值填充,其中所述P为大于等于M的正整数,所述L1为正整数,表示第1段数据的长度;
将所述矩阵中的数据按列顺序读出。
4.如权利要求1所述的软件无线电系统中的高速并行Turbo译码方法,其特征在于,
后向状态递推的计算阶段,需将M个分段分别在时刻(i-1)*L1+Tb的各个状态的后向递推状态度量值存储下来,作为下一次迭代时同一分量码执行后向状态递推训练阶段的后向递推状态度量初始值;
前向状态递推的计算阶段,需将M个分段分别在时刻i*L1-Ta的各个状态的前向递推状态度量值存储下来,作为下一次迭代时同一分量码执行前向状态递推训练阶段的前向递推状态度量初始值。
5.如权利要求1所述的软件无线电系统中的高速并行Turbo译码方法,其特征在于,其中并行前向状态递推的计算阶段和并行计算系统比特外信息两个步骤可以合并进行,每进行一次M个分段并行的前向状态递推得到一组前向递推状态度量值后,则紧接着进行一次M个分段的外信息的并行计算,这样只需存储当前时刻的前向递推状态度量值,而不必存储所有时刻的前向递推状态度量值。
6.如权利要求1所述的软件无线电系统中的高速并行Turbo译码方法,其特征在于,每一步前向状态递推和后向状态递推均包括多组M个分段并行执行的蝶形运算以及M个分段并行执行的对状态度量值的防溢出控制运算。
7.如权利要求1所述的软件无线电系统中的高速并行Turbo译码方法,其特征在于,对外信息进行交织的过程进一步包括:
步骤一,矩阵解交织;
步骤二,使用Turbo码交织表对矩阵解交织结果中的前N个数据进行交织,其中所述N为正整数,表示Turbo码信息比特长度;
步骤三,矩阵交织;
其中矩阵解交织和矩阵交织互为逆过程,三个步骤的串行级联可以等效成一次单独的交织过程,事先计算好执行步骤一之前与执行步骤三之后同一元素位置的对应关系,作为一个新的交织表存储起来,每次迭代过程中进行交织和解交织步骤时调用该交织表。
8.如权利要求7所述的软件无线电系统中的高速并行Turbo译码方法,其特征在于,其中矩阵交织的过程进一步包括:
将所述数据按行顺序写入一个P行L1列的矩阵中,其中所述P为大于等于M的正整数,所述L1为正整数,表示第1段数据的长度;将所述矩阵中的数据按列顺序读出。
9.一种软件无线电系统中的高速并行Turbo译码系统,其特征在于,包括:
第一部件,用于将待译码数据分为M段并进行重排,使M个分段中对应相同位置的数据连续存储,其中,所述M为正整数;
第二部件,用于对重排后的待译码数据进行迭代译码,包括对M个分段的数据进行并行的分量码译码,并对分量码之间互相交换的外信息进行交织和解交织,其中交织和解交织互为逆过程;
第三部件,用于迭代译码停止后,将译码结果进行重排,使其恢复自然顺序;
其中,对M个分段的数据进行并行的分量码译码的过程进一步包括:
M个分段并行后向状态递推的训练阶段,为后向状态递推的计算阶段提供初始值,共包括Tb次递推,对第i个分段而言,以时刻(i-1)*L1+Tb作为起始时刻,以时刻(i-1)*L1作为结束时刻,其中所述Tb为小于等于最后一段数据分段长度的自然数,i=1,2,...,M,L1为正整数,表示第1段数据的长度;
M个分段并行后向状态递推的计算阶段,共包括L1-1次递推,对第i个分段而言,以时刻i*L1作为起始时刻,以时刻(i-1)*L1+1作为结束时刻;
M个分段并行前向状态递推的训练阶段,为前向状态递推的计算阶段提供初始值,共包括Ta次递推,对第i个分段而言,以时刻i*L1-Ta作为起始时刻,以时刻i*L1作为结束时刻,其中所述Ta为小于等于L1的自然数;
M个分段并行前向状态递推的计算阶段,共包括L1-1次递推,对第i个分段而言,以时刻(i-1)*L1作为起始时刻,以时刻i*L1-1作为结束时刻;
M个分段并行计算系统比特外信息;
其中前向状态递推和后向状态递推过程中,对应于M个分段分别在(i-1)*L1+k时刻、同一状态的状态度量值存储位置是连续的,其中所述k为小于等于L1的自然数。
CN201210043251.9A 2012-02-24 2012-02-24 一种软件无线电系统中的高速并行Turbo译码方法及系统 Active CN102594507B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201210043251.9A CN102594507B (zh) 2012-02-24 2012-02-24 一种软件无线电系统中的高速并行Turbo译码方法及系统

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201210043251.9A CN102594507B (zh) 2012-02-24 2012-02-24 一种软件无线电系统中的高速并行Turbo译码方法及系统

Publications (2)

Publication Number Publication Date
CN102594507A CN102594507A (zh) 2012-07-18
CN102594507B true CN102594507B (zh) 2015-09-23

Family

ID=46482738

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201210043251.9A Active CN102594507B (zh) 2012-02-24 2012-02-24 一种软件无线电系统中的高速并行Turbo译码方法及系统

Country Status (1)

Country Link
CN (1) CN102594507B (zh)

Families Citing this family (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN108712232A (zh) * 2018-05-04 2018-10-26 北京邮电大学 一种用于连续变量量子密钥分发系统中的多码字并行译码方法
CN109831217B (zh) * 2018-12-24 2023-04-14 北京时代民芯科技有限公司 一种Turbo码译码器、用于Turbo码的分量译码器及分量译码方法

Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1794590A (zh) * 2005-10-27 2006-06-28 中国科学院研究生院 联合信源信道可变长符号Turbo编译码方法
CN101222233A (zh) * 2007-12-26 2008-07-16 山东大学 基于酋空时符号的Turbo编译码方法
CN101286817A (zh) * 2008-04-03 2008-10-15 浙江大学 传统二进制和双二进制Turbo码通用译码方法

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
US7979775B2 (en) * 2006-10-30 2011-07-12 Motorola Mobility, Inc. Turbo interference suppression in communication systems

Patent Citations (3)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN1794590A (zh) * 2005-10-27 2006-06-28 中国科学院研究生院 联合信源信道可变长符号Turbo编译码方法
CN101222233A (zh) * 2007-12-26 2008-07-16 山东大学 基于酋空时符号的Turbo编译码方法
CN101286817A (zh) * 2008-04-03 2008-10-15 浙江大学 传统二进制和双二进制Turbo码通用译码方法

Also Published As

Publication number Publication date
CN102594507A (zh) 2012-07-18

Similar Documents

Publication Publication Date Title
Sarkis et al. Flexible and low-complexity encoding and decoding of systematic polar codes
US20190190545A1 (en) Flexible polar encoders and decoders
CN106936446A (zh) 一种基于多进制ldpc码的高速译码器及其译码方法
CN107204782B (zh) 一种bch译码器及生成该译码器的编译器的实现方法
CN100425000C (zh) 双涡轮结构低密度奇偶校验码解码器及解码方法
CN102412850B (zh) Turbo码并行交织器及其并行交织方法
WO2018036178A1 (zh) 一种ldpc的解码方法
CN101777926B (zh) 一种Turbo乘积码的通用译码器及其方法
CN106301390A (zh) LDPC/Turbo码双模译码器
CN101478314A (zh) 一种里德-所罗门编码译码器及其译码的方法
CN101771421A (zh) 基于tdmp的超高速低功耗qc-ldpc码解码器
CN101682336A (zh) 用于卷积、Turbo和LDPC码的统一解码器
CN102340320B (zh) 卷积Turbo码双向并行译码方法
CN102594507B (zh) 一种软件无线电系统中的高速并行Turbo译码方法及系统
CN102158235A (zh) turbo译码的方法及装置
CN106374940A (zh) 一种多进制ldpc译码方法及译码器
Xiong et al. An FPGA emulation platform for polar codes
Ahmed et al. VLSI architectures for soft-decision decoding of Reed-Solomon codes
CN105812000A (zh) 一种改进的bch软判决译码方法
CN102045073B (zh) 一种bch码译码方法和装置
US20030123563A1 (en) Method and apparatus for turbo encoding and decoding
CN103957016B (zh) 一种低存储容量的Turbo码译码器及其设计方法
CN101847999B (zh) 一种用循环冗余校验码进行并行校验的方法
CN102594369A (zh) 基于fpga的准循环低密度校验码译码器及译码方法
CN104242956B (zh) 基于随机计算的高性能低复杂度ldpc译码器

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C53 Correction of patent of invention or patent application
CB02 Change of applicant information

Address after: 100094 Beijing city Haidian District Xibeiwang Road No. 5 benevolent Baiwang jasmine garden 2-801

Applicant after: Qi Xin

Address before: 100039 No. 1605, building 8, Taiping Road, 36, Beijing, Haidian District 1, China

Applicant before: Miao Wei

Co-applicant before: Qi Xin

Co-applicant before: Zhao Ming

CB03 Change of inventor or designer information

Inventor after: Qi Xin

Inventor before: Miao Wei

Inventor before: Qi Xin

Inventor before: Zhao Ming

COR Change of bibliographic data

Free format text: CORRECT: INVENTOR; FROM: MIAO WEI QI XIN ZHAO MING TO: QI XIN

Free format text: CORRECT: APPLICANT; FROM: MIAO WEI TO: QI XIN

DD01 Delivery of document by public notice

Addressee: Qi Xin

Document name: Notification of Passing Examination on Formalities

ASS Succession or assignment of patent right

Owner name: INNOVEM TECHNOLOGY (TIANJIN) CO., LTD.

Free format text: FORMER OWNER: QI XIN

Effective date: 20121227

C41 Transfer of patent application or patent right or utility model
COR Change of bibliographic data

Free format text: CORRECT: ADDRESS; FROM: 100094 HAIDIAN, BEIJING TO: 300384 NANKAI, TIANJIN

TA01 Transfer of patent application right

Effective date of registration: 20121227

Address after: The 300384 Tianjin City Huayuan Industrial Zone Development Road six No. 6 Haitai green industry base building G Room 401 -12-25

Applicant after: Innomicro Technology (Tianjin) Co.,Ltd.

Address before: 100094 Beijing city northwest of Haidian District Wang Road No. 5 benevolent Baiwang jasmine garden 2-801

Applicant before: Qi Xin

C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant