CN102361460B - 一种通用高速并行循环交错维特比译码方法 - Google Patents
一种通用高速并行循环交错维特比译码方法 Download PDFInfo
- Publication number
- CN102361460B CN102361460B CN 201110214224 CN201110214224A CN102361460B CN 102361460 B CN102361460 B CN 102361460B CN 201110214224 CN201110214224 CN 201110214224 CN 201110214224 A CN201110214224 A CN 201110214224A CN 102361460 B CN102361460 B CN 102361460B
- Authority
- CN
- China
- Prior art keywords
- data
- byte
- viterbi decoder
- decoding
- viterbi
- 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
Links
Images
Landscapes
- Error Detection And Correction (AREA)
Abstract
一种通用高速并行循环交错维特比译码方法,通过将数据循环交错并行处理,通过数据交错送入译码核,使译码核循环并行处理,从而利用少数译码核实现高速Viterbi译码,并降低资源占用;通过采用通用模块化设计,使循环交错Viterbi译器具有通用性,适用于CCSDS标准的Viterbi译码;由于循环并行的模块化设计,在需要时可以通过增加循环译码核个数提高性能,从而增加少量资源换取更高的译码速率。通过大量软件仿真和实际测试结果表明,使用本发明方法可使Viterbi译码速率达到960Mbit/s,优于目前文献中发表的同类型译码器的性能指标。
Description
技术领域
本发明涉及一种通用高速并行循环交错维特比译码方法,主要用于对解调后的高速数据进行维特比译码,纠正数据在信道传输过程产生的错误,属于通信技术领域。
背景技术
卷积码是由伊莱亚提出的一种非分组码,主要用于纠正信道传输中产生的随机错误,已被CCDSS(国际空间通信咨询委员会)列为空间通信的信道编码标准。卷积码主要有三种的译码算法:
(1)门限译码,又称大数逻辑译码,这是一种利用码代数结构的代数译码方法;
(2)序列译码,这是基于码树图结构上的一种准最佳的概率译码;
(3)维特比译码(Viterbi),这是基于码的网格图(Trellis)基础上的一种最大似然算法,是一种最佳概率译码方法。
代数译码仅用于简单的卷积码,优点是译码电路简单而且延时小,适用于高速应用;缺点是编码增益一般都不大,而且只能适用于硬判决译码。序列译码和Viterbi译码都属于概率译码,由于它们不仅基于码的代数结构,而且利用了信道的统计特性,因而能充分发挥卷积码的特点,使译码错误概率达到很小。Viterbi译码在码的约束度较小时,比序列译码算法效率更高,速度更快,译码器也更简单。因此Viterbi译码得到了广泛应用,特别是在空间通信系统中。CCSDS建议采用3比特量化的Viterbi译码。
国内外在Viterbi译码算法的研究主要取得了以下三方面的进展:一是为了减少Viterbi译码器的复杂性,使其小型化、集成化;二是在性能下降不多的情况下,减少Viterbi译码中的计算量,出现了一些减少运算量和提高译码速率的新算法;三是从算法上寻找新的突破,更有利于VLSI上实现,以大幅度地提高Viterbi译码器的译码速率,以便能应用于更高速、更高性能的场合。
Viterbi译码算法的原理是将接收码和本地生成码比较,基于卷积码的网格图表示法,依据接收到的信息作为先验信息,从所有可能的路径中选择出最可能的序列作为输出。Viterbi译码器一般由三部分组成:
(1)BMU(分支度量值单元);
(2)ACSU(加比选单元);
(3)SMU(幸存路径存储单元)。
如附图1所示,由于Viterbi译码算法中存在反馈回路,如果只利用Viterbi译码算法本身的并行结构,Viterbi译码器的速率将受到限制,目前一般单路Viterbi译码器的译码速率最高只能达到300Mbit/s左右。要实现更高速率的Viterbi译码器,就需要在Viterbi译码算法中引入额外的并行结构。但是由于Viterbi译码过程是一个连续的译码过程,必须接收连续输入的比特流,在网格图上按照最大似然原理寻找编码序列,这就导致无法直接将输入数据转换为并行数据进行并行译码处理。上述问题造成了在目前技术基础下,Viterbi译码算法能够实现的最高译码速率有一个上限,这个上限取决于器件水平以及译码算法的优化程度。此时,即使还有足够多的硬件资源可用,但由于无法并行实现,Viterbi译码器的译码速率也无法再提高。为了解决该难题,通常采取的措施是在发送端采用多个卷积编码器,再结合多进制调制,接收端解调后同样采用多个Viterbi译码器进行译码,这样也相当于进行了并行译码。但是上述措施并没有从根本上解决问题,当单路Viterbi译码需要较高的速率时,上诉措施将失效。本发明主要解决单路Viterbi译码的并行译码方法,提高译码速率。
发明内容
本发明的技术解决问题是:针对现有技术的不足,提供了一种通用高速并行循环交错Viterbi方法,通过对数据进行循环交错并行处理,实现了高速Viterbi译码。
本发明的技术解决方案是:
一种通用高速并行循环交错Viterbi译码方法,步骤如下:
(1)将虚拟比特插入输入数据中,之后进入步骤(2);所述输入数据为卷积编码器输出的串行数据经1:8串并转换形成的8bit并行数据;
(2)将步骤(1)中得到的输入数据写入分配FIFO中,所述分配FIFO是指用于临时存储输入数据的缓存;
(3)判断步骤(2)中的分配FIFO中是否已经写入(n-J)×m个字节,若已经写入(n-J)×m个字节,则进入步骤(4);若写入的输入数据不足(n-J)×m个字节,则返回步骤(2);其中,n为每个Viterbi译码器单次译码处理的数据长度,且n>6×k;k为卷积编码器的约束长度且k=7;所述J为连续两个Viterbi译码器单次译码处理数据的交错长度,且J>14bit;m为并行的Viterbi译码器的个数;
(4)读取分配FIFO中的数据,送给第i个Viterbi译码器的输入存储寄存器,当读取了n-J个字节之后,进入步骤(5);其中,i为自然数且i∈[1,m];
(5)将分配FIFO中的第n-J+1个字节同时写入第i个Viterbi译码器的输入存储寄存器和第i+1个Viterbi译码器的输入存储寄存器中;
(6)判断是否将分配FIFO中的从第n-J+1个字节到第n个字节共J个字节的数据同时写入第i个Viterbi译码器的输入存储寄存器和第i+1个Viterbi译码器的输入存储寄存器中,若已经写入,则进入步骤(7);若写入的数据不足J个,则继续写入直到写完J个字节的数据;
(7)将分配FIFO中的从第n+1个字节到第2n-2j个字节共n-2J个字节的数据写入第i+1个Viterbi译码器的输入存储寄存器中,之后进入步骤(8);
(8)判断i是否等于m,若不等于,则将i+1赋值给i,之后返回步骤(4);若等于,则将分配FIFO中的从第2n-2j+1个字节到第2n-j个字节共J个字节的数据同时写入第m个Viterbi译码器的输入存储寄存器和第1个Viterbi译码器的输入存储寄存器中,之后令i=1,返回步骤(4),同时进入步骤(9);
(9)将m个Viterbi译码器的输入存储寄存器中的数据开始进行译码并将译码结果存入对应的各Viterbi译码器的输出存储寄存器中,之后进入步骤(10);
(10)从步骤(9)中所述各Viterbi译码器的输出存储寄存器中读取数据,针对第1个Viterbi译码器的输出存储寄存器判断是否是第一次从其中读取数据,若是第一次,则读取从所述第1个Viterbi译码器的输出存储寄存中的第一个字节到第n个字节共n个字节的数据;若不是第一次,则进入步骤(11);
(11)针对第i个Viterbi译码器的输出存储寄存器中的数据,从第J+1个字节开始读取,共读取n-J个字节的数据,之后进入步骤(12);
(12)判断i是否等于m,若不等于,则将i+1赋值给i,之后返回步骤(11);若等于,令i=1,之后返回步骤(11)。
本发明与现有技术相比的有益效果是:
(1)单路Viterbi译码器受到器件限制而速率有限,Viterbi译码是个连续的过程,不能通过简单的并行结构处理来提高速度。本发明通过将数据循环交错并行处理,通过数据交错送入译码核,使译码核循环并行处理,从而利用少数译码核实现高速Viterbi译码,并降低资源占用。
(2)本发明通过采用通用模块化设计,使循环交错Viterbi译器具有通用性,适用于CCSDS标准的Viterbi译码;由于循环并行的模块化设计,在需要时可以通过增加循环译码核个数提高性能,从而增加少量资源换取更高的译码速率。
附图说明
图1是Viterbi译码器组成框图;
图2是并行循环交错维特比译码总体框图;
图3是本发明维特比译码方法流程图。
具体实施方式
下面结合附图对本发明的具体实施方式进行进一步的详细描述。
1、卷积码是一种信道编码格式,广泛应用于深空通信中,Viterbi译码算法是一种有效的卷积码译码算法。卷积码的主要用途是克服衰落信道中产生的随机错误,它还常常作为内码与RS码级联使用,以便获得更大的编码增益。伴随着空间通信技术的发展,数据传输码速率不断提高,Viterbi译码速率也需要相应提高以适应发展需求。本发明主要解决Viterbi译码器实现中如何提高译码速率的问题,通过采用本发明提出的译码方法,可以大幅度提高译码速率,兼容各种卷积编码打孔模式,能够直接应用于高速率遥感卫星地面接收系统。
2、高速并行循环交错维特比译码方法的具体实施方式如下:
(1)将虚拟比特插入输入数据中,之后进入步骤(2);所述输入数据为卷积编码的串行数据经1:8串并转换形成的8bit并行数据;
数据发送端的卷积编码器输出数据格式为:
a.I支路C1C1C1C1;
b.Q支路C2C2C2C2或C2C2C2C2(下划线表示取反,下同)。
I路和Q路数据将送往调制器调制后发射;解调器将采用逆过程恢复I路和Q路数据。本译码方法的输入数据为8bit并行数据,该8bit并行数据指下述格式:
C1C2C1C2C1C2C1C2或C1C2C1C2C1C2C1C2经过1:8串并转换后形成的各支路输出交错排列的并行数据。译码器采用软判决译码时,该并行数据需要相应的扩展为软判决量化位数。
(2)将步骤(1)中得到的数据写入分配FIFO中,所述分配FIFO是指用于临时存储输入数据的缓存;
(3)判断步步骤(2)中的分配FIFO是否已经写入(n-J)×m个字节,若已经写入(n-J)×m个字节,则进入步骤(4);若写入的输入数据不足(n-J)×m个字节,则返回步骤(2);其中,n为每个Viterbi译码器单次译码处理的数据长度,且n>6×k;k为卷积编码器的约束长度(k=7);所述J为连续两个Viterbi译码器单次译码处理数据的交错长度,且J>14bit;m为并行的Viterbi译码器的个数;
(4)读取分配FIFO中的数据,送给第i个Viterbi译码器的输入存储寄存器,当共读取了n-J个字节之后,进入步骤(5);所述i起始值为1,n为每个Viterbi译码器单次译码处理的数据长度,且n>6×k,k为卷积编码器的约束长度;所述J为连续两个Viterbi译码器单次译码处理的数据的交错长度;
(5)将步骤(4)中写入n-J个字节之后的第一个字节写入第i个Viterbi译码器的输入存储寄存器和第i+1个Viterbi译码器的输入存储寄存器中。当共将步骤(3)中写入n-J个字节之后的J个字节的数据同时写入第i个Viterbi译码器的输入存储寄存器和第i+1个Viterbi译码器的输入存储寄存器中之后,再将写入J个字节之后的n-2J个字节的数据写入第i+1个Viterbi译码器的输入存储寄存器中,之后进入步骤(6);
(6)判断是否将分配FIFO中的从第n-J+1个字节到第n个字节共J个字节的数据同时写入第i个Viterbi译码器的输入存储寄存器和第i+1个Viterbi译码器的输入存储寄存器中,若已经写入,则进入步骤(7);若写入的数据不足J个,则继续写入直到写完J个字节的数据;
(7)将分配FIFO中的从第n+1个字节到第2n-2j个字节共n-2J个字节的数据写入第i+1个Viterbi译码器的输入存储寄存器中,之后进入步骤(8);
(8)判断i是否等于m,若不等于,则将i+1赋值给i,之后返回步骤(4);若等于,则将分配FIFO中的从第2n-2j+1个字节到第2n-j个字节共J个字节的数据同时写入第m个Viterbi译码器的输入存储寄存器和第1个Viterbi译码器的输入存储寄存器中,之后令i=1,返回步骤(4),同时进入步骤(9);
步骤(2)至(8)即为高速并行Viterbi译码过程的数据循环交错过程,它是为了解决Viterbi译码算法无法直接并行处理的问题。基本原理是先将输入数据先进行串并转换,将时钟频率降低,然后将输入数据循环交错后分配给多个译码器核,从而实现并行处理。每个译码器中设置数据缓冲区,将输入数据缓存后再译码。数据交错的目的在于保留一定长度的前一段数据,进而保留相关信息,否则下一段译码过程将出现错误。最小的相关长度应该是约束长度除以码率。对于卷积(2,1,7)码为:
7/(1/2)=14
在满足最小分段长度和交错深度的条件下,为了提高Viterbi译码器的使用效率,分段长度不宜太短,如果将分段长度确定为n=40Byte=320bits>42bits(译码截尾长度),交错长度确定为J=10Byte=80bits>14bits。此时,由于交错过程造成的数据冗余,需要多个Viterbi译码器同时处理才能保证连续译码。假定使用8个Viterbi译码器,当每个译码器译码速率为240Mbps的前提条件下,整个Viterbi译码器总的译码速率将可达到:
240X8=1920Mbps=1.92Gbps
但由于数据交错造成了冗余,因此实际译码速率将低于该值,降低的比例将取决于交错长度与分段长度之比。实际的译码速率可达到:
1.92X(320-120)/320=1.2Gbps
(9)m个Viterbi译码器的输入存储寄存器数据分别送入m个Viterbi译码器开始进行译码并将译码结果存入各Viterbi译码器对应的输出存储寄存器中,之后进入步骤(7);
(10)从步骤(9)中所述各Viterbi译码器的输出存储寄存器中读取数据,针对第1个Viterbi译码器的输出存储寄存器判断是否是第一次从其中读取数据,若是第一次,则读取从所述第1个Viterbi译码器的输出存储寄存中的第一个字节到第n个字节共n个字节的数据;若不是第一次,则进入步骤(11);
(11)针对第i个Viterbi译码器的输出存储寄存器中的数据,从第J+1个字节开始读取,共读取n-J个字节的数据,之后进入步骤(12);
(12)判断i是否等于m,若不等于,则将i+1赋值给i,之后返回步骤(11);若等于,令i=1,之后返回步骤(11)。
步骤(9)至(12)是并行Viterbi译码的输出数据交错拼接过程,交错位数与输入数据交错位数相同;由于译码大是串行输出数据,去掉交错冗余,进行1:8转换,输出8bit并行译码数据。
经过大量仿真及工程测试,使用该方法可使Viterbi译码速率达到960Mbit/s,(采用8个译码核)优于目前文献中发表的同类型译码器的性能指标,在需要时可以进一步通过增加并行度提高性能。
本发明说明书中未作详细描述的内容属于本领域的公知技术。
Claims (1)
1.一种通用高速并行循环交错Viterbi译码方法,其特征在于步骤如下:
(1)将虚拟比特插入输入数据中,之后进入步骤(2);所述输入数据为卷积编码器输出的串行数据经1:8串并转换形成的8bit并行数据;
(2)将步骤(1)中得到的输入数据写入分配FIFO中,所述分配FIFO是指用于临时存储输入数据的缓存;
(3)判断步骤(2)中的分配FIFO中是否已经写入(n-J)×m个字节,若已经写入(n-J)×m个字节,则进入步骤(4);若写入的输入数据不足(n-J)×m个字节,则返回步骤(2);其中,n为每个Viterbi译码器单次译码处理的数据长度,且n>6×k;k为卷积编码器的约束长度且k=7;所述J为连续两个Viterbi译码器单次译码处理数据的交错长度,且J>14bit;m为并行的Viterbi译码器的个数;
(4)读取分配FIFO中的数据,送给第i个Viterbi译码器的输入存储寄存器,当读取了n-J个字节之后,进入步骤(5);其中,i为自然数且i∈[1,m];
(5)将分配FIFO中的第n-J+1个字节同时写入第i个Viterbi译码器的输入存储寄存器和第i+1个Viterbi译码器的输入存储寄存器中;
(6)判断是否将分配FIFO中的从第n-J+1个字节到第n个字节共J个字节的数据同时写入第i个Viterbi译码器的输入存储寄存器和第i+1个Viterbi译码器的输入存储寄存器中,若已经写入,则进入步骤(7);若写入的数据不足J个,则继续写入直到写完J个字节的数据;
(7)将分配FIFO中的从第n+1个字节到第2n-2j个字节共n-2J个字节的数据写入第i+1个Viterbi译码器的输入存储寄存器中,之后进入步骤(8);
(8)判断i是否等于m,若不等于,则将i+1赋值给i,之后返回步骤(4);若等于,则将分配FIFO中的从第2n-2j+1个字节到第2n-j个字节共J个字节的数据同时写入第m个Viterbi译码器的输入存储寄存器和第1个Viterbi译码器的输入存储寄存器中,之后令i=1,返回步骤(4),同时进入步骤(9);
(9)将m个Viterbi译码器的输入存储寄存器中的数据开始进行译码并将译码结果存入对应的各Viterbi译码器的输出存储寄存器中,之后进入步骤(10);
(10)从步骤(9)中所述各Viterbi译码器的输出存储寄存器中读取数据,针对第1个Viterbi译码器的输出存储寄存器判断是否是第一次从其中读取数据,若是第一次,则读取从所述第1个Viterbi译码器的输出存储寄存中的第一个字节到第n个字节共n个字节的数据;若不是第一次,则进入步骤(11);
(11)针对第i个Viterbi译码器的输出存储寄存器中的数据,从第J+1个字节开始读取,共读取n-J个字节的数据,之后进入步骤(12);
(12)判断i是否等于m,若不等于,则将i+1赋值给i,之后返回步骤(11);若等于,令i=1,之后返回步骤(11)。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110214224 CN102361460B (zh) | 2011-07-28 | 2011-07-28 | 一种通用高速并行循环交错维特比译码方法 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN 201110214224 CN102361460B (zh) | 2011-07-28 | 2011-07-28 | 一种通用高速并行循环交错维特比译码方法 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN102361460A CN102361460A (zh) | 2012-02-22 |
CN102361460B true CN102361460B (zh) | 2013-10-16 |
Family
ID=45586718
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN 201110214224 Active CN102361460B (zh) | 2011-07-28 | 2011-07-28 | 一种通用高速并行循环交错维特比译码方法 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN102361460B (zh) |
Families Citing this family (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN105610448A (zh) * | 2015-12-29 | 2016-05-25 | 北京中科晶上科技有限公司 | 基于多核DSP零尾卷积Viterbi译码的方法及系统 |
Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101969311A (zh) * | 2010-09-29 | 2011-02-09 | 航天恒星科技有限公司 | 一种高速并行分段交错维特比译码方法 |
CN101969358A (zh) * | 2010-09-29 | 2011-02-09 | 航天恒星科技有限公司 | 一种用于空间通信的高速并行rs译码方法 |
CN102064839A (zh) * | 2009-11-11 | 2011-05-18 | 中国科学院微电子研究所 | 一种高速低功耗多码率的Viterbi译码器 |
CN102118173A (zh) * | 2011-01-27 | 2011-07-06 | 牛毅 | 一种ldpc及其缩短码的高速译码方法 |
-
2011
- 2011-07-28 CN CN 201110214224 patent/CN102361460B/zh active Active
Patent Citations (4)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN102064839A (zh) * | 2009-11-11 | 2011-05-18 | 中国科学院微电子研究所 | 一种高速低功耗多码率的Viterbi译码器 |
CN101969311A (zh) * | 2010-09-29 | 2011-02-09 | 航天恒星科技有限公司 | 一种高速并行分段交错维特比译码方法 |
CN101969358A (zh) * | 2010-09-29 | 2011-02-09 | 航天恒星科技有限公司 | 一种用于空间通信的高速并行rs译码方法 |
CN102118173A (zh) * | 2011-01-27 | 2011-07-06 | 牛毅 | 一种ldpc及其缩短码的高速译码方法 |
Also Published As
Publication number | Publication date |
---|---|
CN102361460A (zh) | 2012-02-22 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
CN101969311B (zh) | 一种高速并行分段交错维特比译码方法 | |
CN102164026B (zh) | 基于深空通信环境下的喷泉码编译方法 | |
CN102075198B (zh) | 准循环低密度奇偶校验卷积码编译码系统及其编译码方法 | |
CN101777924B (zh) | 一种Turbo码译码方法和装置 | |
CN101635611B (zh) | 一种信道译码方法和装置 | |
CN107911195B (zh) | 一种基于cva的咬尾卷积码信道译码方法 | |
CN102142928B (zh) | 交织、解交织外码编码输出码字的方法和交织、解交织器 | |
CN101517949A (zh) | 可编程网格解码器及相关方法 | |
CN100546207C (zh) | 一种基于DVB-RCS标准的双二元Turbo码译码方法 | |
CN110138390A (zh) | 一种基于深度学习的极化码sscl算法译码器 | |
CN104168032A (zh) | 兼容LTE和WiMAX的4并行度、基-16高性能Turbo译码器 | |
CN110022188A (zh) | 基于冻结比特对的极化码编码方法及极化码串行抵消译码方法和电路 | |
CN104486033B (zh) | 一种基于c‑ran平台的下行多模信道编码系统及方法 | |
CN102891690B (zh) | 一种咬尾卷积码译码方法 | |
CN101931453A (zh) | 一种基于随机序列的用于交织多址系统的方法 | |
CN106027200A (zh) | 一种基于gpu的卷积码高速并行译码方法及译码器 | |
CN102361460B (zh) | 一种通用高速并行循环交错维特比译码方法 | |
CN108462561A (zh) | 超高速通信系统中串并结合的信道编译码方法及装置 | |
CN103220007B (zh) | 一种自适应调整子码不可靠位数的tpc迭代译码算法 | |
CN102832954B (zh) | 一种基于软信息平均最小值的Turbo码译码迭代停止方法 | |
CN105610550B (zh) | 一种用于电力线载波通信的Viterbi译码方法 | |
CN105515588B (zh) | 一种ldpc‑cc高速译码器 | |
CN103560797A (zh) | 超强前向纠错五次迭代译码的方法及装置 | |
CN102223204A (zh) | 基于全响应CPM和Turbo乘积码的编码调制方法 | |
CN103986477A (zh) | 矢量viterbi译码指令及viterbi译码装置 |
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 |