CN102386935B - 维特比译码方法及维特比译码器 - Google Patents

维特比译码方法及维特比译码器 Download PDF

Info

Publication number
CN102386935B
CN102386935B CN201110344079.6A CN201110344079A CN102386935B CN 102386935 B CN102386935 B CN 102386935B CN 201110344079 A CN201110344079 A CN 201110344079A CN 102386935 B CN102386935 B CN 102386935B
Authority
CN
China
Prior art keywords
metric
path
state
states
metric states
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
CN201110344079.6A
Other languages
English (en)
Other versions
CN102386935A (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.)
Zhuhai Institute Of Advanced Technology Chinese Academy Of Sciences Co ltd
Original Assignee
Shenzhen Institute of Advanced Technology of CAS
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 Shenzhen Institute of Advanced Technology of CAS filed Critical Shenzhen Institute of Advanced Technology of CAS
Priority to CN201110344079.6A priority Critical patent/CN102386935B/zh
Publication of CN102386935A publication Critical patent/CN102386935A/zh
Application granted granted Critical
Publication of CN102386935B publication Critical patent/CN102386935B/zh
Active legal-status Critical Current
Anticipated expiration legal-status Critical

Links

Landscapes

  • Error Detection And Correction (AREA)

Abstract

本发明涉及一种维特比译码方法,用于对(n,k,v)型卷积码进行译码,包括如下步骤:步骤A:t=m时,获取每一状态下的幸存路径及量度;步骤B:t增加一个时间单元,更新每一状态下的幸存路径及量度;步骤C:如果t<m+t0,重复步骤B;否则,将当前2n个路径的量度转化为相应的度量状态码x;步骤D:t增加u个时间单元,根据度量状态码x和输入的待译码序列y查询状态迁移数组TM[X][Y],并从数据项TM[x][y]中得到新的度量状态码和更新所有2n条幸存路径所需的信息;并以此更新并保存新的幸存路径;步骤E:输出译码序列,如果t<h+m,重复步骤D;否则停止;其中h为待译码序列传输时间。此外还提供一种维特比译码器。上述译码器及译码方法能够极大地提高译码速度。

Description

维特比译码方法及维特比译码器
【技术领域】
本发明涉及信道编解码,尤其是涉及一种维特比译码方法及维特比译码器。
【背景技术】
在信道编解码领域,采用卷积码进行信道编码可以提高通信质量。传统一般采用维特比译码器对采用卷积码的信道编码进行译码输出。
以(2,1,3)卷积码为例,(2,1,3)卷积码共有4个状态,传统的维特比译码器对每一个状态必须有一个路径寄存器以存储路径或其信息序列,并且各状态还有一个度量值寄存器。译码器每次接收两比特待译码数据,并以上一个时间单元的各状态路径寄存器和度量值寄存器为基础,计算当前时间单元的各寄存器数值,完成各寄存器的更新,然后,任选一路径寄存器,采用截尾译码方式,输出1比特译码序列。至此,完成了一个时间单元的译码流程。
根据维特比卷积码译码原理可知,上述译码过程中一次译码一个时间单元的待译码序列,同时存在大量的加比选操作,花费大量时间。在对译码速度要求不断提高的过程中,传统的维特比译码器仍然不能满足应用系统对译码速率的要求。
【发明内容】
基于此,有必要提供一种能够提高译码速度的维特比译码方法。
一种维特比译码方法,用于对(n,k,v)型卷积码进行译码,包括如下步骤:步骤A:在时间单元t=m开始,计算进入每一状态的单个路径的部分量度,存储每一状态下的幸存路径及量度;步骤B:t增加一个时间单元,将进入某一状态的分支量度与前一时间单元有关的幸存路径的量度相加,计算进入该状态的所有2k路径的部分量度,从该状态的2k个路径的量度中选取具有最大量度的路径,将该路径及量度存储;其他状态同此操作;步骤C:如果t<m+t0,重复步骤B;否则,将当前2n个路径的量度转化为相应的度量状态码x;其中,t0是令所有2n个状态都能拥有幸存路径及其量度所需要的时间,所述度量状态码x与具有有限个度量状态的度量状态集中的度量状态一一对应且无重复,所述度量状态为某一时间单元内所有2n个分支量度按照顺序形成的向量的差值模式;步骤D:t增加u个时间单元,根据度量状态码x和输入的待译码序列y查询预先计算得到并存储的状态迁移数组TM[X][Y],获取数组中的数据项TM[x][y],并从数据项TM[x][y]中得到如下信息:新的度量状态码;更新所有2n条幸存路径所需的信息;并以此更新并保存新的幸存路径;其中,X是度量状态集中的度量状态的数量,Y=2nu,0≤x≤X-1,0≤y≤2nu-1,u≥2;步骤E:输出译码序列,如果t<h+m,重复步骤D;否则停止;其中h为待译码序列传输时间。
优选地,获取所述步骤C中的度量状态集的步骤包括:步骤C1:从t=m到t=m+t0的时间段内,从状态0开始,向译码器输入0~2nu-1共2nu种不同的待译码序列,获得所有可能的度量状态,将获得的度量状态加入所述度量状态集;步骤C2:对于所述度量状态集中的每一个度量状态,从该处于度量状态的时刻开始的u个时间单元内,向译码器输入0~2nu-1共2nu种不同的待译码序列,获得所有可能的度量状态;步骤C3:判断是否有新的度量状态,若有,则将获得的新的度量状态加入所述度量状态集,执行步骤C2;否则结束。
优选地,获取所述步骤D中的状态迁移数组TM[X][Y]的步骤包括:对于所有的0≤x≤X-1、0≤y≤2nu-1,模拟度量状态码为x且输入待译码序列为y时,在维特比译码器中的解码过程,获得所述2n条幸存路径在经过u个时间单元后,各条新的幸存路径对u个时间单元以前的旧的幸存路径的继承关系、以及继承所经过的路径,从而得到状态迁移数组中的数据项TM[x][y]。
优选地,所述的(n,k,v)型卷积码为(2,1,3)型卷积码,所述步骤A开始于t=0。
优选地,所述u个时间单元为2个时间单元。
优选地,所述步骤E采用截尾译码方式输出信息序列,且在译码停止后继续将存留的信息序列输出。
此外,还提供一种维特比译码器。
一种维特比译码器,用于对(n,k,v)型卷积码进行译码,包括输入待译码序列的输入单元、进行译码工作的加比选单元以及更新译码信息并输出信息序列的更新单元,其特征在于,还包括状态迁移模块,其中:所述加比选单元在时间单元t=m开始,计算进入每一状态的单个路径的部分量度,存储每一状态下的幸存路径及量度,此后t每增加一个时间单元,将进入某一状态的分支量度与前一时间单元有关的幸存路径的量度相加,计算进入该状态的所有2k路径的部分量度,从该状态的2k个路径的量度中选取具有最大量度的路径;其他状态同此操作,更新单元将得到的各个状态下的路径及量度更新存储;所述状态迁移模块在t≥m+t0后,将当前2n个路径的量度转化为相应的度量状态码x,且使输入单元每隔u个时间单元获取一段待译码序列y,其中,t0是令所有2n个状态都能拥有幸存路径及其量度所需要的时间,所述度量状态码x与具有有限个度量状态的度量状态集中的度量状态一一对应且无重复,所述度量状态为某一时间单元内所有2n个分支量度按照顺序形成的向量的差值模式;所述状态迁移模块根据度量状态码x和输入的待译码序列y查询预先计算得到并存储的状态迁移数组TM[X][Y],获取数组中的数据项TM[x][y],并从数据项TM[x][y]中得到如下信息:新的度量状态码;更新所有2n条幸存路径所需的信息;其中,X是度量状态集中的度量状态的数量,Y=2nu,0≤x≤X-1,0≤y≤2nu-1,u≥2;更新模块以此更新并保存新的幸存路径;所述状态迁移模块在t<h+m重复上述译码流程,并在时间到达h+m后停止,其中h为待译码序列传输时间。
优选地,所述的(n,k,v)型卷积码为(2,1,3)型卷积码,所述加比选单元开始于t=0。
优选地,所述u个时间单元为2个时间单元。
优选地,所述更新单元对获得的序列采用截尾译码方式输出信息序列,且在译码停止后继续将存留的信息序列输出
上述译码方法和译码器,在所有的状态都拥有幸存路径后,每次可以译码至少4位数据,同时在获取译码更新信息上使用了新的查询状态迁移数组的方法,相对于传统每次仅能译码2位数据的维特比译码方法,速度大大提高。
【附图说明】
图1为一实施例的维特比译码器的结构框图;
图2为(2,1,3)卷积码的网格图;
图3为构建过程中的集合S的扩展过程示意图;
图4表示幸存路径之间的继承关系图;
图5表示多条幸存路径之间的继承关系图。
【具体实施方式】
以下结合具体实施例对译码流程进行详细说明。
步骤A:在时间单元t=m开始,计算进入每一状态的单个路径的部分量度。存储每一状态下的幸存路径及其量度。
步骤B:t增加一个时间单元,获取该时间单元内各个状态下的幸存路径及量度。将进入某一状态的分支量度与前一时间单元有关的幸存路径的量度相加,计算进入该状态的所有2k路径的部分量度。对每一状态,比较进入该状态的所有2k路径的量度,选择具有最大量度的路径(幸存路径),存储该路径及其量度,并删除其他所有路径。其他状态同此操作。
上述步骤A和步骤B与传统的维特比译码方法相同,在此不赘述。
步骤C:如果t<m+t0,重复步骤B;否则,将当前2n个路径的量度转化为相应的度量状态码x。其中,t0是令所有2n个状态都能拥有幸存路径及其量度所需要的时间。由卷积码原理及状态的可达性知,在刚开始的若干时间单元,不是所有2n个状态都能拥有幸存路径及其量度。要令所有2n个状态都能拥有幸存路径及其量度所需要的时间为t0。一旦卷积码的参数被确定,t0也就随之确定,即一种型号的卷积码对应一个确定的t0。例如(2,1,3)型卷积码,t0为2个时间单元。
以下对度量状态码及得到其的相关概念进行说明。
差值模式:由自然数组成的一个向量,例如[7 14 13 19 22],找出向量中数值最小的数,向量的各元素减去该最小数值,并保持各元素顺序关系不变,形成的新的向量被称为原向量的差值模式,例子中最小的是7,各元素减去7,得到该向量的差值模式为[0 7 6 12 15]。不同的向量可以具有相同的差值模式,例如[17 24 23 29 32]的差值模式同样为[0 7 6 12 15]。
度量状态:在维特比译码中,1)将2n条路径的分支量度按顺序排列,组成一个向量,排列顺序一旦确定,就不再变更;2)将该向量差值模式化,该差值模式称作原量度向量所对应的度量状态。度量状态在译码过程中和2n个幸存路径的量度是等效的。这一点通过分析原维特比算法可以得到。
由于引入了差值模式表示的度量状态这一概念,译码器不再是基于各状态的分支量度值即量度向量,而是基于各状态量度的差值模式即度量状态。
通过对网格图的观察可知,对于任意卷积码,不同的度量状态的数量是有限的。因此,可以建立一个完整度量状态集,将有限的度量状态包括在内,任何时间单元译码器都处于这个完整度量状态集的某一度量状态。
完整度量状态集:对于一种卷积码和一个确定的u值,度量状态的数量是确定的,称该卷积码在确定的u值下所有的度量状态组成的集合为完整度量状态集。根据度量状态的有限性,在某一具体实现中,将完整度量状态集中所有的度量状态进行编号,生成度量状态码x。度量状态码x与具有有限个度量状态的度量状态集中的度量状态一一对应且无重复。
以下是一种完整度量状态集S的实现方法:
令S=空集。
步骤C1:从t=m到t=m+t0的时间段内,从状态0开始,向译码器输入0~2nu-1共2nu种不同的待译码序列,获得所有可能的度量状态,将获得的度量状态加入所述度量状态集;
步骤C2:对于所述度量状态集中的每一个度量状态,从处于该度量状态的时刻开始的u个时间单元内,向译码器输入0~2nu-1共2nu种不同的待译码序列,获得所有可能的度量状态;对S中的每个元素s做如下运算:
s属于S。假设t=i,度量状态为s。从t=i到i+u这段时间内只有有限种不同的待译码序列,穷举所有的待译码序列,得到i+u时刻所有可能的度量状态,并在本步的最后阶段,将新出现的度量状态添加到S中。
步骤C3:判断是否有新的度量状态,若有,则将获得的新的度量状态加入所述度量状态集,执行步骤C2;否则结束。
如果知道译码器u个时间单元以前的度量状态和这u个时间单元到来的待译码序列,那么当前时刻的度量状态和2n条幸存路径均可确定。把这些信息提前计算出来并存在一个状态迁移数组TM中。这样一来,在译码过程中就可以直接调用这些计算好的结果,而不用实时的通过ACS(加比选运算)去计算,达到减少运算、节省时间的目的。
步骤D:t增加u个时间单元,根据度量状态码x和输入的待译码序列y查询预先计算得到并存储的状态迁移数组TM[X][Y],获取数组中的数据项TM[x][y],并从数据项TM[x][y]中得到如下信息:新的度量状态码;更新所有2n条幸存路径所需的信息;并以此更新并保存新的幸存路径。
用X表示完整度量状态集的基数(度量状态的个数),用Y表示u个时间单元不同的待译码序列的种数。TM是一个X×Y大小的数组。TM[x][y]的x表示度量状态码,y表示该u个时间单元到来的待译码序列。对于(2,1,3)型卷积码,u=2,则y是2个时间单元内到来的,即4位的待译码序列。
u是根据具体的应用环境而定。
u越大表示一次可译码更多数据,整个译码器译码速度相比与传统的译码器速度更快。以(2,1,3)卷积码译码器为例,传统的译码器一次译码n=2bit的待译码信息序列。而u取2时,表示新的译码器一次译码u×n=2×2=4bit的待译码信息序列,在这个层面上译码器速度至少提高了一倍。而再考虑到节省了大量加比选运算,效率将进一步提高。实际中,在TI的ARM处理器平台上,分别实现新型译码器和一般的ACS译码器,并进行比较。测试结果是新型译码器速度提高了241%,也就是说速度是一般ACS译码器的3.4倍。
但u越大,系统内存消耗越高。系统内存的消耗主要是由于状态迁移数组存储于内存中。考虑TM[X][Y]中X是度量状态的数量,当选定了某种(n,k,v)卷积码,X一般就确定下来了,而Y=2nu,由n和u决定,n由卷积码的参数决定,但u可由实际应用决定。为了加快译码速度,u越大越好,但Y是随着u呈指数增长,而整个TM数组所占的内存是X×Y=X×2nu,随着u增大,内存消耗将急剧增加。
通常在实现中,应该在速度和内存之间找到一个平衡。这个平衡就是选取合适的u值,提高译码器的速度(u越大越好);同时又要考虑系统内存的限制(u不能过大),以确保内存足够用于存储TM以及系统的其它数据。
TM[x][y]记录了以下信息:1)新的度量状态码;2)更新所有幸存路径所需的信息。
新的度量状态码:根据u个时间单元前的度量状态和这u个时间单元的待译码序列,便可确定当前时刻的度量状态,以及相应的新的度量状态码。
更新所有幸存路径所需的信息:1)当前时刻各条幸存路径对u个时间单元以前的旧幸存路径的继承关系;2)这u个时间单元内各条幸存路径在所继承的旧幸存路径后所经过的新路径。
获取上述状态迁移数组可采用如下方法:
对于所有的0≤x≤X-1、0≤y≤2nu-1,模拟度量状态码为x且输入待译码序列为y时的维特比译码器中的解码过程,从而获得所述2n条幸存路径在经过u个时间单元后,各条新的幸存路径对u个时间单元以前的旧的幸存路径的继承关系、以及继承所经过的路径,从而得到状态迁移数组中的数据项TM[x][y]。当获得所有的TM[x][y]后,即可得到状态迁移数组。
在本实施例中,事先使用matlab仿真来计算TM中的每一个元素,并将结果记录下来,整理成表。如何使用matlab仿真一个卷积码编码译码系统,是一项简单的普遍的公开的技术,因此,在此不再展开。至此,可按上述具体方法得到TM的每个元素,以致得到整个TM。在译码过程中,一旦译码器启动,TM将被写入内存,以便译码时直接调用。
步骤E:输出译码序列,如果t<h+m,重复步骤D;否则停止;其中h为待译码序列传输时间。例如,对(2,1,3)卷积码,一个时间单元发送2位待译码序列,假设待译码序列总长度为100位,待译码序列的传输时间h=100/2=50个时间单元,也就是说译码器需要50个时间单元才能接收完所有待译码序列。
采用查状态迁移数组获取译码信息,译码器一旦获取了正确的译码信息,作为后续操作的信息序列的输出可以采用现有的公开技术,例如维特比译码的截尾译码输出,在此略去。
从上述描述中可以看出,步骤A和步骤B,译码算法和采用ACS(加比选)方式实现的维特比算法一致。但当t达到m+t0后(此实例t0=2),进入到步骤C和步骤D时,译码算法发生了如下变化:
1)以度量状态码取代原来的2n条路径的量度;
2)由一次处理一个时间单元待译码序列变为一次处理u个时间单元的待译码序列。
在传统的维特比算法具有步骤:“将进入某一状态的分支量度与前一时间单元有关的幸存路径的量度相加,计算进入该状态的所有2k路径的部分量度。对每一状态,比较进入该状态的所有2k路径的量度,选择具有最大量度的路径(幸存路径),存储该路径及其量度,并删除其他所有路径”,因此可以采用差值模式替代各个分支量度,也就是,用度量状态替代量度向量,证明如下:
该步骤对每一状态,选择具有最大量度的路径(幸存路径),存储该路径及其量度,并删除其他所有路径。当译码器处于某一状态,在给定待译码序列的情况下,相应的分支量度随之确定。于是,决定该状态的幸存路径及其量度的唯一因素是前一时间单元各幸存路径的量度或者说各状态的量度,共有2k个。用一向量表示这组量度,记为C=[c1 c2…c2 k],设其按维特比算法经过加比选运算后得到的译码信息为:新的一组幸存路径L=[l1 l2…l2 k](注,此处li指代一条幸存路径,由于译码器共有2k条幸存路径,这些幸存路径共同组成了一个幸存路径向量L),量度为D=[d1 d2…d2 k](注,此后的论述中,凡提及量度这一概念,均指代由所有状态的分支量度共同组成的量度向量)。把量度C换成量度C+v=[c1+v c2+v…c2 k+v],v可为任意整数,且其它条件不变。按维特比算法经过加比选运算后得到的译码信息为:新的幸存路径仍为L,量度变为D+v=[d1+v d2+v…d2 k+v]。C改变为C+v未对随后的幸存路径造成影响,而只是使得量度从D变为了D+v。简单的观察可知,同样可以将作为下一次译码的条件的量度D+v改变为D+v+u而不影响后续译码所得到的幸存路径。由维特比译码原理可知,若幸存路径不受影响,这也就不会影响维特比译码器的译码结果。特别是,当使u=-v时,D+v+u=D+v-v=D,这将抵消掉前一次译码过程中译码器量度从C改变为C+v所造成的影响。简而言之,像将量度C改变为C+v这种操作不会对译码器的正确性及其结果造成影响。而由差值模式的定义可知,一个量度C,其差值模式C*=C-min{c1 c2…c2 k},(min{}表示取{}中的最小值)。这也就是说,C*=C+v,v=-min{c1 c2…c2 k}。上式表明,在译码过程中用量度的差值模式代替量度本身用于译码不会对译码器造成影响。
正是由于差值模式的引入,使得可以用查表方式代替实时的ACS运算单元,这将极大的提高译码速度。
图1为与上述译码流程相应的一实施例的维特比译码器结构框图。
该维特比译码器包括输入单元110、加比选单元120、状态迁移模块130以及更新单元140。
输入单元110从外界接收待译码序列,根据卷积码的不同和译码方式(加比选/查询状态迁移数组)的不同,将待译码序列按规定大小发送给下一个单元。例如在案例中,(2,1,3)卷积码译码器的输入单元每个时间单元从外界接收2位的待译码序列;在m+t0以前,输入单元选择加比选译码方式并每次向加比选单元发送2位的待译码序列,而当时间达到m+t0后,输入单元选择查询状态迁移数组译码方式并每次向状态迁移模块发送4位的待译码序列。
加比选单元120是传统的维特比译码器的译码核心单元。在本实施例中,其输入是2位的待译码序列和旧的分支度量和幸存路径,经过相加、比较和选择,计算出新的分支度量和幸存路径,输出新分支度量和幸存路径。具体为在时间单元t=m开始,计算进入每一状态的单个路径的部分量度,存储每一状态下的幸存路径及量度,此后t每增加一个时间单元,将进入某一状态的分支量度与前一时间单元有关的幸存路径的量度相加,计算进入该状态的所有路径的部分量度,从该状态的所有路径的量度中选取具有最大量度的路径。
更新单元130从加比选单元120获得各个状态下的幸存路径及分支量度并更新存储。
状态迁移模块140在t≥m+t0后,将当前2n个路径的量度转化为相应的度量状态码x,且使输入单元每隔u个时间单元获取一段待译码序列y,其中,t0是令所有2n个状态都能拥有幸存路径及其量度所需要的时间,所述度量状态码x与具有有限个度量状态的度量状态集中的度量状态一一对应且无重复,所述度量状态为某一时间单元内所有2n个分支量度按照顺序形成的向量的差值模式。
状态迁移模块140还根据度量状态码x和输入的待译码序列y查询预先计算得到并存储的状态迁移数组TM[X][Y],获取数组中的数据项TM[x][y],并从数据项TM[x][y]中得到如下信息:新的度量状态码;更新所有2n条幸存路径所需的信息;其中,X是度量状态集中的度量状态的数量,Y=2nu,0≤x≤X-1,0≤y≤2nu-1,u≥2。
更新单元130从状态迁移模块140获得译码信息并保存新的幸存路径和度量状态,输出译码序列。
该译码器采用上述的译码方法,可以极大地提高译码效率。
以下将以(2,1,3)卷积码为例进行具体方案的描述。
图2为(2,1,3)卷积码的网格图。由该网格图可以确定该卷积码的所有编码参数。图中带箭头横线旁的数据表示原始数据即信息序列,括号内的数据表示编码器输出的待译码序列,例如当编码器处在状态0,收到原始数据1,将输出待译码序列11,并进入状态1。
构建(2,1,3)卷积码的完整度量状态集S的方法如下。
第一步:令S=空集。
第二步:从m到m+t0这段时间内只有有限种不同的待译码序列,穷举所有的待译码序列,得到t=m+t0时刻所有可能的度量状态,并添加到S中;
具体描述如下:
令卷积码编码器和译码器都是从状态0出发的,图2中显示经过2个时间单元后,所有四个状态都将可达,都将获得各自的幸存路径及量度,所以t0=2。
从m到m+t0(即m+2)这段时间内只有24种不同的待译码序列,0000、0001、0010、0011、0100、0101、0110、0111、1000、1001、1010、1011、1100、1101、1110和1111。根据维特比算法进行计算,便能得到在上述16种待译码序列分别作为输入,译码器处在状态0的情况下,到m+2时译码器的各个状态的幸存路径及其量度。有了这些信息,并进行差值模式运算,我们便能得到m+2时刻可达到的所有的度量状态。
经计算得第一批度量状态:(注:度量状态用向量[x1 x2 x3 x4]表示,xi对应状态i的分支量度在差值模式下的数值)
[0 2 3 3],[2 0 3 3],[3 3 0 2],[3 3 2 0],[0 2 1 1],[2 0 1 1],[1 1 0 2],[1 1 2 0],[0 0 1 3],[0 0 3 1],[1 3 0 0],[3 1 0 0]共12个。
将这些度量状态添加到S当中。结果是,
S={[0 2 3 3],[2 0 3 3],[3 3 0 2],[3 3 2 0],[0 2 1 1],[2 0 1 1],[1 1 0 2],[1 1 2 0],[0 0 1 3],[0 0 3 1],[1 3 0 0],[3 1 0 0]}。
第三步:对S中的每个元素s做如下运算:
s属于S。假设i时刻,度量状态为s。从i到i+u这段时间内只有有限种不同的待译码序列,穷举所有的待译码序列,得到i+u时刻所有可能的度量状态,并在本步的最后阶段,将新出现的度量状态添加到S中。
具体描述如下:
本案例中,取u=2(u的取值受系统的内存限制,u取值越大,实现时需要的内存越多)。
由第二步知当前集合S={[0 2 3 3],[2 0 3 3],[3 3 0 2],[3 3 2 0],[0 2 1 1],[2 0 1 1],[1 1 0 2],[1 1 2 0],[0 0 1 3],[0 0 3 1],[1 3 0 0],[3 1 0 0]}。
假定在i=m+t0=m+2时刻,译码器的度量状态为[0 2 3 3]。在u=2个时间单元内只有24,即16种不同的待译码序列,0000、0001、0010、0011、0100、0101、0110、0111、1000、1001、1010、1011、1100、1101、1110和1111(当然,若取u=3,在3个时间单元内将有26=64种不同的待译码序列,000000、000001、……、111110和111111)。以上述16种待译码序列分别作为输入,在译码器处在度量状态[0 2 3 3]的情况下,计算得到t=i+u=m+2+2=m+4时译码器的各个状态的幸存路径和译码器的新的度量状态。
例如,在度量状态为[0 2 3 3]时分别输入前述的16种不同的待译码序列,经计算,将得到的度量状态有:
[0 2 3 3],[2 0 3 3],[3 3 2 0],[3 3 0 2],[0 0 2 1],[0 0 1 2],[1 2 0 0],[2 1 0 0],[0 2 1 1],[2 0 1 1],[1 1 1 0],[1 1 0 1],[0 1 1 1],[1 0 1 1],[1 1 2 0]和[1 1 0 2]共16个度量状态。
又例如,在度量状态为[0 2 1 1]时分别输入前述的16种不同的待译码序列,经计算,得到度量状态:
[0 2 2 2],[2 0 2 2],[2 2 2 0],[2 2 0 2],[0 0 1 0],[0 0 0 1],[0 1 0 0],[1 0 0 0],[0 0 1 1],[1 1 1 0],[1 1 0 1],[0 1 1 1],[1 0 1 1]和[1 1 0 0]共14个度量状态(存在重复,所以少于16)。
类似,将当前集合S中所有的度量状态都计算一次,并在本步的最后,把新得到的不属于S的度量状态添加到S中。
例如,在对度量状态[0 2 3 3]的计算中,得到了度量状态[0 2 3 3],[2 0 3 3],[3 3 2 0],[3 3 0 2],[0 0 2 1],[0 0 1 2],[1 2 0 0],[2 1 0 0],[0 2 1 1],[2 0 1 1],[1 1 1 0],[1 1 0 1],[0 1 1 1],[1 0 1 1],[1 1 2 0]和[1 1 0 2]。
经过与当前S中的度量状态比较,发现[0 2 3 3],[2 0 3 3],[3 3 2 0],[3 3 0 2],[0 2 1 1],[2 0 1 1],[1 1 2 0]和[1 1 0 2]均已在S中,而新的度量状态[0 0 2 1],[0 0 1 2],[1 2 0 0],[2 1 0 0],[1 1 1 0],[1 1 0 1],[0 1 1 1]和[1 0 1 1]不在S中。
这新出现的8个度量状态,在本步的最后,也就是对S中现有的12个度量状态[0 2 3 3],[2 0 3 3],[3 3 0 2],[3 3 2 0],[0 2 1 1],[2 0 1 1],[1 1 0 2],[1 12 0],[0 0 1 3],[0 0 3 1],[1 3 0 0],[3 1 0 0]都按上述方式计算完毕后,将被添加到S中。
当然被添加的不仅仅是在计算[0 2 3 3]过程中得到的这8个新度量状态,在计算其他度量状态的过程中得到的新度量状态也同样被添加进去,例如在计算[0 2 1 1]时得到的14个度量状态[0 2 2 2],[2 0 2 2],[2 2 2 0],[2 2 0 2],[0 0 1 0],[0 0 0 1],[0 1 0 0],[1 0 0 0],[0 0 1 1],[1 1 1 0],[1 1 0 1],[0 1 1 1],[1 0 1 1]和[1 1 0 0],经比较发现均不属于当前集合S中,因此,它们也将在本步的最后阶段一并被添加进集合S。
第四步:是否有新的元素被添加到S中。若有,返回第三步;否则,当前的S即为完整度量状态集,结束。
由于度量状态是有限的,因此,必然在经过若干次第三步第四步的循环后将不会有新的度量状态出现,否则,将违背度量状态的有限性。一旦没有新的度量状态被添加到S中,这就说明当前的度量状态集合S是完备的,也就是说译码器处在S中的任意状态,当收到任一u个时间单元的待译码序列,进行译码后,都只会进入到一个同样属于S度量状态。
表1给出(2,1,3)型卷积码经计算所得到的完整度量状态集及各个度量状态所对应的度量状态码(即表中的“编码”,度量状态码是人为约定,也就是说不同的实现可以采用不同的度量状态码,但对于一次具体的译码器实例,度量状态码一经确定,就不允许变更)。
表1 度量状态码和度量状态的对应关系表
例如,度量状态码14表示度量状态[1 0 1 1]。
图3是对上述构建过程中的集合S的扩展过程的简要表示。方框代表计算过程中的不完整的度量状态集S。
构建状态迁移数组TM的方法如下。
在本实施例中,完整度量状态集中度量状态的数量M=35,又因u=2,知待译码序列的种数N=16,知TM是一个35×16大小的数组。在此,我们通过描述TM中任一数据项TM[x][y]的构建过程,来进一步阐明TM的构建。
以本实施例中TM[0][4]的构建过程为例。
已知度量状态码x=0,参考表1,即知译码器处在度量状态[0 0 0 0];待译码序列y=4(十进制),表示长度为两个时间单元的待译码序列0100(二进制)。当译码器处在度量状态[0 0 0 0],收到待译码序列0100,按维特比卷积码译码原理,计算可得译码器将进入度量状态[1 0 1 1],其对应的度量状态码为14。
通过计算得到各条新幸存路径对两个时间单元以前的旧幸存路径的继承关系,分别是:
新幸存路径0继承旧幸存路径2;
新幸存路径1继承旧幸存路径3;
新幸存路径2继承旧幸存路径1;
新幸存路径3继承旧幸存路径1。
其中“幸存路径0”表示状态0所对应的幸存路径,其它幸存路径也用同样的表示方法。
再计算各条新幸存路径在所继承的旧幸存路径后所经过的新路径,例如新幸存路径0在继承旧幸存路径2后将经过的新路径,经计算知,该新路径用信息序列表示为00,00的具体含义如图4所示(加粗路径)。表示路径从状态2出发,经过一个时间单元,沿着信息序列为0的路径到达状态0,再经过一个时间单元,沿着信息序列为0的路径到达状态0,走过的新路径用信息序列表示为00。只有通过这条路径,处于图中最右侧的幸存路径0才能与图中最左侧的幸存路径2联系到一起,形成继承关系。
类似的也可得到其它新幸存路径有关新路径的信息。例如,新幸存路径1继承旧幸存路径3后,新路径用信息序列表示为01,新幸存路径2继承旧幸存路径1后,新路径用信息序列表示为10,新幸存路径3继承旧幸存路径1后,新路径用信息序列表示为11。
将上述4条新路径信息整合到一张图中便得到图5。图中加粗部分表示新路径。
对这些计算得到的信息进行整合并存储到TM[0][4]当中,便完成了状态迁移数组元素TM[0][4]的构建。按照上述过程计算获得TM中的每个元素TM[x][y]。
基于上述的状态迁移数组TM[X][Y],下面给出对(2,1,3)型卷积码的具体译码流程。
步骤a:在时间单元t=0开始(设首个待译码数据在时刻0到达),计算进入每一状态的单个路径的部分量度。存储每一状态下的幸存路径及其量度。
步骤b:t增加1个时间单元。将进入某一状态的分支量度与前一时间单元有关的幸存路径的量度相加,计算进入该状态的所有2k路径的部分量度。对每一状态,比较进入该状态的所有2k路径的量度,选择具有最大量度的路径(幸存路径),存储该路径及其量度,并删除其他所有路径。上述k=1。
上述两步和一般的ACS维特比译码器相同,在此不再详述。
步骤c:如果t<2,重复步骤b;否则,参考表1根据当前4个路径的量度,获得相应的度量状态码x。
至此译码器将进入第四步,开始采用新的译码方式。
步骤d:t增加u=2个时间单元。在过去的2个时间单元接收到的数据的值用y表示。查询状态迁移数组TM,从TM[x][y]中读取以下信息:
1)新的度量状态码:TM[x][y].新的度量状态码。此处采用嵌入式C语言形式的伪代码。a.b表示一个数据结构a中的元素b。
2)用于更新所有4条幸存路径所需的信息,包括:
TM[x][y].新幸存路径0继承关系,TM[x][y].新幸存路径0的新路径;
TM[x][y].新幸存路径1继承关系,TM[x][y].新幸存路径1的新路径;
TM[x][y].新幸存路径2继承关系,TM[x][y].新幸存路径2的新路径;
TM[x][y].新幸存路径3继承关系,TM[x][y].新幸存路径3的新路径。
译码器的度量状态从“TM[x][y].新的度量状态码”中读取;并根据上述相关信息按维特比译码原理完成对幸存路径0,1,2,3的更新。
本实施案例采用截尾译码输出,当幸存路径达到预定长度16后,每执行一次步骤d,便从幸存路径0输出2比特的信息序列。截尾译码输出在卷积码译码领域是一项公开技术,在此不再详述。
步骤e:如果t<h(h为待译码序列传输时间),重复步骤d;否则停止。在本实施例中,一旦译码停止(全部待译码序列到达),和一般的维特比译码器一样,还要将剩余在幸存路径中的信息序列输出。本译码器采用把幸存路径0中剩下的信息序列作为输出。
参考图1,输入单元完成译码方式的选择和待译码序列长度的匹配工作:当t<2,译码器通过ACS加比选单元完成译码工作,一次译码一个时间单元即2比特的待译码序列;当t≥2,译码器采用效率更高,获取信息更快速的TM状态迁移数组来完成译码工作,一次译码两个时间单元即4比特的待译码序列。更新单元在开始的2个时间单元从ACS获取所需的译码信息,之后将从TM获取译码信息,完成对幸存路径,度量状态码等的更新,并采用截尾译码输出,根据幸存路径的长度是否达到设定值16判断是否需要输出信息序列。当幸存路径长度达到16,开始输出译码序列。
以下对“u个时间单元译码流程”进行具体的描述。
本部分将对新译码方式“待译码序列-输入单元-TM-信息序列”该流程的单独一轮计算过程进行描述。
设t=100,m=0,系统处在度量状态码x=0的度量状态下,接收到待译码序列y=0100时,
1)由于t=100>m+t0=2,所以输入单元将接收到待译码序列y=0100发送至TM模块。
2)TM模块接收到x=0,y=0100,并查询内存中的TM,得TM[0][4]中的信息,如下:
TM[0][4].新的度量状态码=14;表示经过2个时间单元,进入度量状态为[1 0 1 1],参考表1。
TM[0][4].新幸存路径0继承关系=2,TM[0][4].新幸存路径0的新路径=00;表示新的幸存路径0继承自旧的幸存路径2,且继承经过的路径是00。
TM[0][4].新幸存路径1继承关系=3,TM[0][4].新幸存路径1的新路径=01;表示新的幸存路径1继承自旧的幸存路径3,且继承经过的路径是01。
TM[0][4].新幸存路径2继承关系=1,TM[0][4].新幸存路径2的新路径=10;表示新的幸存路径2继承自旧的幸存路径1,且继承经过的路径是10。
TM[0][4].新幸存路径3继承关系=1,TM[0][4].新幸存路径3的新路径=11;表示新的幸存路径3继承自旧的幸存路径1,且继承经过的路径是11。
3)更新单元按TM模块提供的更新信息更新译码信息。
为了便于描述,用System表示当前系统,则更新单元将做如下操作:
System.度量状态码=TM[0][4].新的度量状态码=14;
System.幸存路径0←System.幸存路径2;
System.幸存路径0:在尾部添加00;
System.幸存路径1←System.幸存路径3;
System.幸存路径1:在尾部添加01;
System.幸存路径2←System.幸存路径1;
System.幸存路径2:在尾部添加10;
System.幸存路径3←System.幸存路径1;
System.幸存路径3:在尾部添加11。
“←”运算表示将某项2个时间单元前的值赋给当前项。例如,System.幸存路径0←System.幸存路径2,表示用2个时间单元前的System.幸存路径2覆盖System.幸存路径0;本案例编程使用嵌入式C语言,“System.幸存路径0:在尾部添加00(二进制)”,表示System.幸存路径0左移2位并在低位添加00。这便得到了更新后的System.幸存路径0。类似的我们也可完成其它3条路径的更新。
4)更新单元输出译码信息
将System.幸存路径0的最高2位作为译码信息输出。如当System.幸存路径0=1100 0000 0000 0000时,系统将输出11。
以上所述实施例仅表达了本发明的几种实施方式,其描述较为具体和详细,但并不能因此而理解为对本发明专利范围的限制。应当指出的是,对于本领域的普通技术人员来说,在不脱离本发明构思的前提下,还可以做出若干变形和改进,这些都属于本发明的保护范围。因此,本发明专利的保护范围应以所附权利要求为准。

Claims (10)

1.一种维特比译码方法,用于对(n,k,v)型卷积码进行译码,包括如下步骤:
步骤A:在时间单元t=m开始,计算进入每一状态的单个路径的部分量度,存储每一状态下的幸存路径及量度;
步骤B:t增加一个时间单元,将进入某一状态的分支量度与前一时间单元有关的幸存路径的量度相加,计算进入该状态的所有2k路径的部分量度,从该状态的2k个路径的量度中选取具有最大量度的路径,将该路径及量度存储;其他状态同此操作;
步骤C:如果t<m+t0,重复步骤B;否则,将当前2n个路径的量度转化为相应的度量状态码x;其中,t0是令所有2n个状态都能拥有幸存路径及其量度所需要的时间,所述度量状态码x与具有有限个度量状态的度量状态集中的度量状态一一对应且无重复,所述度量状态为某一时间单元内所有2n个分支量度按照顺序形成的向量的差值模式;其中,通过找出向量中数值最小的数,向量的各元素减去该最小数值,并保持各元素顺序关系不变,形成的新的向量被称为原向量的差值模式;
步骤D:t增加u个时间单元,根据度量状态码x和输入的待译码序列y查询预先计算得到并存储的状态迁移数组TM[X][Y],获取数组中的数据项TM[x][y],并从数据项TM[x][y]中得到如下信息:新的度量状态码;更新所有2n条幸存路径所需的信息;并以此更新并保存新的幸存路径;其中,X是度量状态集中的度量状态的数量,Y=2nu,0≤x≤X-1,0≤y≤2nu-1,u≥2;
步骤E:输出译码序列,如果t<h+m,重复步骤D;否则停止;其中h为待译码序列传输时间。
2.根据权利要求1所述的维特比译码方法,其特征在于,获取所述步骤C中的度量状态集的步骤包括:
步骤C1:从t=m到t=m+t0的时间段内,从状态0开始,向译码器输入0~2nu-1共2nu种不同的待译码序列,获得所有可能的度量状态,将获得的度量状态加入所述度量状态集;
步骤C2:对于所述度量状态集中的每一个度量状态,从处于该度量状态的时刻开始的u个时间单元内,向译码器输入0~2nu-1共2nu种不同的待译码序列,获得所有可能的度量状态;
步骤C3:判断是否有新的度量状态,若有,则将获得的新的度量状态加入所述度量状态集,执行步骤C2;否则结束。
3.根据权利要求2所述的维特比译码方法,其特征在于,获取所述步骤D中的状态迁移数组TM[X][Y]的步骤包括:
对于所有的0≤x≤X-1、0≤y≤2nu-1,模拟度量状态码为x且输入待译码序列为y时,在维特比译码器中的解码过程,获得所述2n条幸存路径在经过u个时间单元后,各条新的幸存路径对u个时间单元以前的旧的幸存路径的继承关系、以及继承所经过的路径,从而得到状态迁移数组中的数据项TM[x][y]。
4.根据权利要求3所述的维特比译码方法,其特征在于,所述的(n,k,v)型卷积码为(2,1,3)型卷积码,所述步骤A开始于t=0。
5.根据权利要求4所述的维特比译码方法,其特征在于,所述u个时间单元为2个时间单元。
6.根据权利要求4所述的维特比译码方法,其特征在于,所述步骤E采用截尾译码方式输出信息序列,且在译码停止后继续将存留的信息序列输出。
7.一种维特比译码器,用于对(n,k,v)型卷积码进行译码,包括输入待译码序列的输入单元、加比选单元以及更新译码信息并输出信息序列的更新单元,其特征在于,还包括状态迁移模块,其中:
所述加比选单元在时间单元t=m开始,计算进入每一状态的单个路径的部分量度,存储每一状态下的幸存路径及量度,此后t每增加一个时间单元,将进入某一状态的分支量度与前一时间单元有关的幸存路径的量度相加,计算进入该状态的所有2k路径的部分量度,从该状态的2k个路径的量度中选取具有最大量度的路径;其他状态同此操作,更新单元将得到的各个状态下的路径及量度更新存储;
所述状态迁移模块在t≥m+t0后,将当前2n个路径的量度转化为相应的度量状态码x,且使输入单元每隔u个时间单元获取一段待译码序列y,其中,t0是令所有2n个状态都能拥有幸存路径及其量度所需要的时间,所述度量状态码x与具有有限个度量状态的度量状态集中的度量状态一一对应且无重复,所述度量状态为某一时间单元内所有2n个分支量度按照顺序形成的向量的差值模式;其中,通过找出向量中数值最小的数,向量的各元素减去该最小数值,并保持各元素顺序关系不变,形成的新的向量被称为原向量的差值模式;
所述状态迁移模块根据度量状态码x和输入的待译码序列y查询预先计算得到并存储的状态迁移数组TM[X][Y],获取数组中的数据项TM[x][y],并从数据项TM[x][y]中得到如下信息:新的度量状态码;更新所有2n条幸存路径所需的信息;其中,X是度量状态集中的度量状态的数量,Y=2nu,0≤x≤X-1,0≤y≤2nu-1,u≥2;更新模块以此更新并保存新的幸存路径;
所述状态迁移模块在t<h+m重复上述译码流程,并在时间到达h+m后停止,其中h为待译码序列传输时间。
8.根据权利要求7所述的维特比译码器,其特征在于,所述的(n,k,v)型卷积码为(2,1,3)型卷积码,所述加比选单元开始于t=0。
9.根据权利要求8所述的维特比译码器,其特征在于,所述u个时间单元为2个时间单元。
10.根据权利要求7所述的维特比译码器,其特征在于,所述更新单元对获得的序列采用截尾译码方式输出信息序列,且在译码停止后继续将存留的信息序列输出。
CN201110344079.6A 2011-11-03 2011-11-03 维特比译码方法及维特比译码器 Active CN102386935B (zh)

Priority Applications (1)

Application Number Priority Date Filing Date Title
CN201110344079.6A CN102386935B (zh) 2011-11-03 2011-11-03 维特比译码方法及维特比译码器

Applications Claiming Priority (1)

Application Number Priority Date Filing Date Title
CN201110344079.6A CN102386935B (zh) 2011-11-03 2011-11-03 维特比译码方法及维特比译码器

Publications (2)

Publication Number Publication Date
CN102386935A CN102386935A (zh) 2012-03-21
CN102386935B true CN102386935B (zh) 2014-10-08

Family

ID=45825954

Family Applications (1)

Application Number Title Priority Date Filing Date
CN201110344079.6A Active CN102386935B (zh) 2011-11-03 2011-11-03 维特比译码方法及维特比译码器

Country Status (1)

Country Link
CN (1) CN102386935B (zh)

Families Citing this family (5)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN104184481A (zh) * 2013-05-24 2014-12-03 成都林海电子有限责任公司 一种高速viterbi译码器及译码算法的FPGA实现方法
CN107682115B (zh) * 2017-09-02 2020-09-22 中国人民解放军91388部队 基于ClassA海洋环境噪声模型的卷积码维特比软判决译码方法
CN108881088B (zh) * 2018-08-01 2021-05-18 上海华虹集成电路有限责任公司 一种卷积编码的gfsk信号的联合解调和译码方法
CN111614363B (zh) * 2019-02-26 2023-03-24 扬智科技股份有限公司 维特比算法的改进方法和接收装置
CN111404560B (zh) * 2020-03-24 2023-08-25 上海集成电路研发中心有限公司 一种对状态机中序列的纠错方法

Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101662293A (zh) * 2009-08-26 2010-03-03 深圳华为通信技术有限公司 一种译码方法和设备
CN101997553A (zh) * 2009-08-13 2011-03-30 中兴通讯股份有限公司 一种卷积码译码方法及装置

Family Cites Families (1)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
JP2005294898A (ja) * 2004-03-31 2005-10-20 Matsushita Electric Ind Co Ltd ビタビ復号方法、復号化装置、移動局無線装置、基地局無線装置および移動通信システム

Patent Citations (2)

* Cited by examiner, † Cited by third party
Publication number Priority date Publication date Assignee Title
CN101997553A (zh) * 2009-08-13 2011-03-30 中兴通讯股份有限公司 一种卷积码译码方法及装置
CN101662293A (zh) * 2009-08-26 2010-03-03 深圳华为通信技术有限公司 一种译码方法和设备

Non-Patent Citations (1)

* Cited by examiner, † Cited by third party
Title
JP特开2005-294898A 2005.10.20

Also Published As

Publication number Publication date
CN102386935A (zh) 2012-03-21

Similar Documents

Publication Publication Date Title
CN102386935B (zh) 维特比译码方法及维特比译码器
CN109409518A (zh) 神经网络模型处理方法、装置及终端
CN101635611B (zh) 一种信道译码方法和装置
CN105791828A (zh) 二进制算术编码器及其编码方法
CN106682343A (zh) 一种基于图的邻接矩阵的形式化验证方法
CN103262081A (zh) 用于驱动从架构优化到物理设计闭合的设计收敛的基于集成数据模型的框架
CN102176750A (zh) 高性能自适应二进制算术编码器
CN106656205A (zh) 一种降低存储器消耗的极化码译码方法和系统
CN105677521B (zh) 一种面向移动智能终端处理器的基准测试程序合成方法
CN106656214A (zh) 一种基于串行抵消列表极化码译码的动态分布排序算法
CN105874774B (zh) 用于在帧的处理过程中保持计数表的计数表保持装置以及相关的保持方法
CN111597801B (zh) 一种基于自然语言处理的文本自动结构化方法和系统
CN102724506B (zh) Jpeg_ls常规编码硬件实现方法
CN107343201B (zh) Cabac编码方法和系统
CN103491370B (zh) 一元/k阶指数哥伦布码的解码方法及解码器
CN111327706B (zh) 远程抄表数据处理方法、装置、燃气表系统及燃气云平台
CN103117748B (zh) 一种bwt实现方法中对后缀进行排序的方法及系统
CN102855120B (zh) 超长指令字vliw的处理器和处理方法
CN101587467B (zh) 一种应用于可重构计算架构的重构信息发送引擎
CN105610550B (zh) 一种用于电力线载波通信的Viterbi译码方法
CN105306075A (zh) 一种三值fprm电路功耗最佳极性搜索方法
CN102684710B (zh) 基于SSE的咬尾卷积码Viterbi译码方法
CN107678953A (zh) 基于uml图形的路径生成方法、系统及存储介质
CN101106385B (zh) 一种维特比译码装置及方法
EP3610387A1 (en) Distributed data structures for sliding window aggregation or similar applications

Legal Events

Date Code Title Description
C06 Publication
PB01 Publication
C10 Entry into substantive examination
SE01 Entry into force of request for substantive examination
C14 Grant of patent or utility model
GR01 Patent grant
TR01 Transfer of patent right

Effective date of registration: 20240222

Address after: 519085 101, Building 5, Longyuan Smart Industrial Park, No. 2, Hagongda Road, Tangjiawan Town, High-tech Zone, Zhuhai City, Guangdong Province

Patentee after: ZHUHAI INSTITUTE OF ADVANCED TECHNOLOGY CHINESE ACADEMY OF SCIENCES Co.,Ltd.

Country or region after: China

Address before: 1068 No. 518055 Guangdong city in Shenzhen Province, Nanshan District City Xili University School Avenue

Patentee before: SHENZHEN INSTITUTES OF ADVANCED TECHNOLOGY CHINESE ACADEMY OF SCIENCES

Country or region before: China

TR01 Transfer of patent right