CN111404557B - 一种快速译码方法、设备及存储设备 - Google Patents
一种快速译码方法、设备及存储设备 Download PDFInfo
- Publication number
- CN111404557B CN111404557B CN202010178982.9A CN202010178982A CN111404557B CN 111404557 B CN111404557 B CN 111404557B CN 202010178982 A CN202010178982 A CN 202010178982A CN 111404557 B CN111404557 B CN 111404557B
- Authority
- CN
- China
- Prior art keywords
- decoding
- function
- array
- value
- decoded
- 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.)
- Expired - Fee Related
Links
Images
Classifications
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1105—Decoding
-
- H—ELECTRICITY
- H03—ELECTRONIC CIRCUITRY
- H03M—CODING; DECODING; CODE CONVERSION IN GENERAL
- H03M13/00—Coding, decoding or code conversion, for error detection or error correction; Coding theory basic assumptions; Coding bounds; Error probability evaluation methods; Channel models; Simulation or testing of codes
- H03M13/03—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words
- H03M13/05—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits
- H03M13/11—Error detection or forward error correction by redundancy in data representation, i.e. code words containing more digits than the source words using block codes, i.e. a predetermined number of check bits joined to a predetermined number of information bits using multiple parity bits
- H03M13/1102—Codes on graphs and decoding on graphs, e.g. low-density parity check [LDPC] codes
- H03M13/1148—Structural properties of the code parity-check or generator matrix
Landscapes
- Physics & Mathematics (AREA)
- Probability & Statistics with Applications (AREA)
- Engineering & Computer Science (AREA)
- Theoretical Computer Science (AREA)
- Mathematical Physics (AREA)
- Compression, Expansion, Code Conversion, And Decoders (AREA)
Abstract
本发明提供了一种快速译码方法、设备及存储设备,其方法包括:对1024个比特数据进行译码处理,每次执行单元函数译码4个,接着将数组password的元素值传入switch语句,password的每一个元素都代表一种控制函数的选项,并将当前单元函数的最低行值传入function_back函数的形参j,执行function_back函数,执行结束后单元译码函数行数增加4,password数组读取至下一个元素;循环执行,直到所有数据译码完成;最终得到译码后的数据。一种快速译码设备及存储设备,用于实现一种快速译码方法。本发明的有益效果是:本发明提出中快速译码方法,以4个比特数据为一个单元,对码长为1024的数据进行快速译码,误码率低,运行速度快;使用bool数据替代整形数据,提高了存储空间的利用率。
Description
技术领域
本发明涉及通信领域,尤其涉及一种快速译码方法、设备及存储设备。
背景技术
信道编码一直是通信领域的基础和核心问题,其每一次重大突破,都会引起通信系统的新一轮演进或变革。在过去的二三十年里,无线通信技术发展十分迅速,人们对于无线通信,移动通信的业务需求也急剧增加。随着无线通信的发展,数据传输越来越快,这对于传输信号的处理要求越来越高,要保证信息在随机信道上高效和可靠传输,随之而来更多更新的编译码算法不断被提出,Polar码便是其中之一,并且有极高的研究价值。比如在无人机的图像传输应用上,由于信号的限制无人机只能在距离基站三公里的范围内活动,并且传输的图像质量不够清晰,远远无法满足我们的需要。这就需要优化编译码算法,让图像信息传输更加有效。
发明内容
为了解决上述问题,本发明提供了一种快速译码方法、设备及存储设备,一种快速译码方法,主要包括以下步骤:
S101:获取码长为1024的待译码比特数据;并定义数组a和数组b;其中,数组a为一个1024行11列的浮点型二维数组,数组b为一个1024行11列的bool型二维数组;
S102:将所述的码长为1024的待译码比特数据从第一位开始依次读入数组a的第10列中;然后从数组a的第10列开始,根据译码原理,依次对数组a的各列进行f运算,并将运算结果存入数组a的对应的元素中;
S103:定义数组password,并将数组password初始化为预设值;所述数组password为大小为255的一维数组;
S104:定义单元译码函数:所述单元译码函数根据译码原理,以4个比特数据为一个译码单元进行译码;
S105:定义反推函数function_back:所述反推函数function_back的形参为j和v;所述反推函数function_back用于根据译码原理及j、v的值,对数组a和数组b中的对应元素进行异或运算、f运算和g运算;其中,形参j的实参为行值clue_k;其中,k∈[0,7]中的整数;且k=v-2,代表需要对数组b中的元素进行异或运算的次数;
S106:使用switch语句执行所述数组password中的对应元素对所述单元译码函数和所述反推函数function_back的调用操作;具体如下:
1)case 0:调用单元译码函数1次,单元译码函数的行值clue自增4;调用反推函数function_back 1次,形参v为2;调用完后,clue_0自增8;然后继续调用单元译码函数1次,单元译码函数译码的4个比特数据的第一个比特数据在数组a中所对应的行值clue自增4;其中,clue的初始值为0,所述反推函数function_back的形参j对应行值clue_0,且clue_0的初始值为0;
2)case k:调用反推函数function_back 1次,每次调用反推函数function_back后clue_k自增2^(v+1);其中,k=1,2,…,7;反推函数function_back的形参v=k+2,形参j=clue_k,clue_k在首次被调用的值为0;clue_k为定义的中间变量;
S107:对数组a中第10列的1024个待译码比特数据进行译码处理,具体为:从数组a的第1行开始,每4行为一组待译码比特数据,使用所述单元译码函数进行译码,每次对一组待译码比特数据进行译码;
每次使用所述单元译码函数对一组待译码比特数据译码完成后,将数组password的对应元素的值传给控制单元译码函数和function_back函数的switch语句,按照S106所述的规则调用单元译码函数与反推函数function_back,每次执行结束后,password数组读取至下一个元素,然后进入下一个译码循环;
循环有序的调用单元译码函数与反推函数function_back,直到所有待译码比特数据译码完成;最终得到译码后的数据,即b[0][0]~b[1023][0]。
进一步地,步骤S102中,对数组a的各列进行f运算,并将运算结果存入数组a的对应的元素中;具体如下:
首先,根据译码原理对数组a的第10列元素a[i][10]进行f运算,得到a[0][9]~a[511][9]的对数似然比LLR值;然后根据译码原理对数组a的第9列元素进行f运算,得到a[0][8]~a[255][8]的对数似然比LLR值;再根据译码原理对数组a的第8列元素进行f运算,得到a[0][7]~a[127][7]的对数似然比LLR值;依次类推,直至a[0][0];其中,i=1,2,…,1023。
进一步地,a[0][0]是固定比特,它的译码值为0,以false的形式存入bool型数组b[0][0]中。
进一步地,数组password初始化为:
password[255]={0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,
0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,
0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,
0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,
0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,
0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,
0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,
0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0}。
进一步地,步骤S104中,对于数组a的第i~i+3行对应的四个待译码比特数据x1、x2、x3和x4,使用所述单元译码函数进行译码的具体方法,i=clue;包括:
S201:将a[i+0][0]、a[i+0][1]和a[i+1][1]进行g运算,并对g运算的结果进行译码,译码结果作为x2的译码值,并将译码值以布尔数据的形式存入b[i+1][0];且后续的b数组存储均遵循此数据形式;
S202:将b[i+0][0]和b[i+1][0]进行异或运算,结果存入b[i+0][1],将b[i+1][0]的值直接存入b[i+1][1];
S203:将b[i+0][1]、a[i+0][2]、a[i+2][2]进行g运算,结果存入a[i+2][1];将b[i+1][1]、a[i+1][2]、a[i+3][2]进行g运算,结果存入a[i+3][1];
S204:将a[i+2][1]和a[i+3][1]进行f运算,并对结果进行译码,译码结果存入b[i+2][0];
S205:对b[i+2][0]、a[i+2][1]和a[i+3][1]进行g运算,并对结果进行译码,译码结果存入b[i+3][0];
S206:得到x1、x2、x3和x4的译码结果,分别为b[i+0][0]、b[i+1][0]、b[i+2][0]和b[i+3][0];
S207:将b[i+2][0]和b[i+3][0]进行异或运算,结果存入b[i+2][1],将b[i+3][0]的值直接存入b[i+3][1];
S208:将b[i+0][1]和b[i+2][1]进行异或运算,结果存入b[i+0][2],将b[i+2][1]的值直接存入b[i+2][2];将b[i+1][1]和b[i+3][1]进行异或运算,结果存入b[i+1][2],将b[i+3][1]的值直接存入b[i+3][2]。
进一步地,步骤S201中,将译码值以布尔数据的形式存入b[i+1][0]:译码值若为1,则b[i+1][0]=true,若译码值为0,则b[i+1][0]=false。
进一步地,步骤S105中,所述反推函数function_back的原理如下:
1)当v=2时,v-2=0,则只需要数组b的列与列之间进行0次异或运算,即不必执行异或运算,具体为:
直接将b[j+x][2]与a[j+x][3]、a[j+x+4][3]进行g运算,得到a[j+x+4][2]的值;并对a[j+y+4][2]与a[j+y+6][2]进行f运算,得到a[j+4][1]、a[j+5][1]的值并对这两个值进行f运算,得到a[j+4][0];其中,x=0,1,2,3;y=0,1;
2)当v=3时,v-2=1,则数组b的列与列之间会进行1次异或运算,即要对b[j+x][2]与b[j+x+4][2]进行1次异或运算,并将结果分别存入b[j+x][3],x=0,1,2,3;将b[j+x+4][2]的数值直接存入b[j+x+4][3];数组b的列与列之间的异或运算结束;然后将b[j+y][3]与a[j+y][4]、a[j+y+8][4]进行g运算,y=0,1,2,3,4,5,6,7;得到a[j+x+8][2]的值并对a[j+x+8][2]与a[j+x+8+4][2]进行的f运算,x=0,1,2,3;同理,使用f运算,直至运算到a[j+8][0];
3)当v>3时,与1)和2)同理,定义辅助变量n和u,且初始化n=2,u=4;对数组b进行v-2次异或运算:对数组b[j+x][n]与b[j+x+u][n]执行异或运算,x为整数,且0≤x<u,将运算结果存入b[j+x][n+1],将b[j+x+u][n]的值直接存入b[j+x+u][n+1],执行完该次异或运算后,n自增1,u自乘2;
按此规则对数组b反复执行异或运算v-2次;最终,u=2^v,n=v+1;然后将b[j+y][n]与a[j+y][n+1]、a[j+y+u][n+1]进行g运算,将运算结果分别存入a[j+y+u][n]中,y为整数,且0≤y<u;对a[j+w+u][n]与a[j+w+u+u/2][n]进行f运算,并将运算结果分别存入a[j+w+u][n-1],w为整数,且0≤w<u/2;然后u自除2,n自减1;按此规则对数组b反复执行v次f运算,最终得到到a[j+2^v][0]。
进一步地,步骤S107具体包括:
初始化clue=0,clue_k=0,反推函数function_back的形参j=clue_k;
第一次循环,通过数组password的第0个元素password[0],调用switch语句中的“case password[0]”操作,即“case 0”操作,按照“执行单元译码函数,单元译码函数的行值clue自增4;接着,执行反推函数function_back,形参v为2,且在v=2时,形参j接收的行值为clue_k,且k=0;clue_0自增8;然后,再次执行单元译码函数,clue自增4”的顺序进行依次调用;
第二次循环时,执行“case password[1]”操作,password[1]=1,即“case 1”操作,该操作即为:调用function_back函数,形参v为3,且在v=3时,形参j接收的行值为clue_k,且k=1;clue_1自增16;
第三次循环时,执行“case password[2]”操作,password[2]=0,即“case 0”操作,按照“执行单元译码函数,单元译码函数的行数clue自增4;接着,执行function_back函数形参v为2,且在v=2时,形参j接收的行值为clue_k(k=0);clue_0自增8;然后,再次执行单元译码函数,clue自增4”的顺序进行依次调用;
以此类推,直到译码完成。
一种存储设备,所述存储设备存储指令及数据用于实现一种快速译码方法方法。
一种快速译码设备,包括:处理器及所述存储设备;所述处理器加载并执行所述存储设备中的指令及数据用于实现一种快速译码方法。
本发明提供的技术方案带来的有益效果是:本发明提出中快速译码方法,以4个比特数据为一个单元,对码长为1024的数据进行快速译码,误码率低,运行速度快;使用bool数据替代整形数据,提高了存储空间的利用率。
附图说明
下面将结合附图及实施例对本发明作进一步说明,附图中:
图1是本发明实施例中一种快速译码方法的流程图;
图2是本发明实施例中验证流程示意图;
图3是本发明实施例中译码原理示意图;
图4是本发明实施例中单元函数中f运算和g运算的原理示意图;
图5是本发明实施例中f运算和g运算的原理示意图;
图6是本发明实施例中硬件设备工作的示意图。
具体实施方式
为了对本发明的技术特征、目的和效果有更加清楚的理解,现对照附图详细说明本发明的具体实施方式。
本发明的实施例提供了一种快速译码方法;
请参考图1,图1是本发明实施例中一种快速译码方法的流程图,具体包括如下步骤:
S101:获取码长为1024的待译码比特数据;并定义数组a和数组b;其中,数组a为一个1024行11列的浮点型二维数组,数组b为一个1024行11列的bool型二维数组;
S102:将所述的码长为1024的待译码比特数据从第一位开始依次读入数组a的第10列中;然后从数组a的第10列(数组的行、列均从0数起,共1024行、11列,最大分别为第1023行、第11列)开始,根据译码原理,依次对数组a的各列进行f运算,并将运算结果存入数组a的对应的元素中;
S103:定义数组password,并将数组password初始化为预设值;所述数组password为大小为255的一维数组;
S104:定义单元译码函数:所述单元译码函数根据译码原理,以4个比特数据为一个译码单元进行译码;
S105:定义反推函数function_back:所述反推函数function_back的形参为j和v;所述反推函数function_back用于根据译码原理及j、v的值,对数组a和数组b中的对应元素进行异或运算、f运算和g运算;其中,形参j的实参为行值clue_k(k=0,1,2,3,4,5,6,7;且k=v-2),“v-2”为需要对数组b中的元素进行异或运算的次数;
S106:使用switch语句执行所述数组password中的对应元素对所述单元译码函数和所述反推函数function_back的调用操作;具体如下:
1)case 0:调用单元译码函数1次,单元译码函数的行值clue自增4(将clue更新为clue+4);调用反推函数function_back 1次,形参v为2;调用完后,clue_0自增8(将clue_0更新为clue_0+8);然后继续调用单元译码函数1次,单元译码函数译码的4个比特数据的第一个比特数据在数组a中所对应的行值clue自增4(将clue更新为clue+4);其中,clue的初始值为0,所述反推函数function_back的形参j对应行值clue_0,且clue_0的初始值为0;
2)case k:调用反推函数function_back 1次,每次调用反推函数function_back后clue_k自增2^(v+1)(clue_k更新为clue_k+2^(v+1));其中,k=1,2,…,7;反推函数function_back的形参v=k+2,形参j=clue_k,clue_k在首次被调用的值为0;clue_k为定义的中间变量;
S107:对数组a中第10列的1024个待译码比特数据进行译码处理,具体为:从数组a的第1行开始,每4行为一组待译码比特数据,使用所述单元译码函数进行译码,每次对一组待译码比特数据进行译码;
每次使用所述单元译码函数对一组待译码比特数据译码完成后,将数组password的对应元素的值传给控制单元译码函数和function_back函数的switch语句,按照S106所述的规则调用单元译码函数与反推函数function_back,每次执行结束后,password数组读取至下一个元素,然后进入下一个译码循环;
循环有序的调用单元译码函数与反推函数function_back,直到所有待译码比特数据译码完成;最终得到译码后的数据,即b[0][0]~b[1023][0]。
步骤S102中,对数组a的各列进行f运算,并将运算结果存入数组a的对应的元素中;具体如下:
首先,根据译码原理对数组a的第10列元素a[i][10]进行f运算,得到a[0][9]~a[511][9]的对数似然比LLR值;然后根据译码原理对数组a的第9列元素进行f运算,得到a[0][8]~a[255][8]的对数似然比LLR值;再根据译码原理对数组a的第8列元素进行f运算,得到a[0][7]~a[127][7]的对数似然比LLR值;依次类推,直至a[0][0];其中,i=1,2,…,1023。
a[0][0]是固定比特,它的译码值为0,以false的形式存入bool型数组b[0][0]中。
数组password初始化为:
password[255]={0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,
0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,
0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,
0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,
0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,
0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0}。
步骤S104中,对于数组a的第i~i+3(i=clue)行对应的四个待译码比特数据x1、x2、x3和x4,使用所述单元译码函数进行译码的具体方法,包括:
S201:将a[i+0][0]、a[i+0][1]和a[i+1][1]进行g运算,并对g运算的结果进行译码,译码结果作为x2的译码值,并将译码值以布尔数据的形式存入b[i+1][0];且后续的b数组存储均遵循此数据形式;
S202:将b[i+0][0]和b[i+1][0]进行异或运算,结果存入b[i+0][1],将b[i+1][0]的值直接存入b[i+1][1];
S203:将b[i+0][1]、a[i+0][2]、a[i+2][2]进行g运算,结果存入a[i+2][1];将b[i+1][1]、a[i+1][2]、a[i+3][2]进行g运算,结果存入a[i+3][1];
S204:将a[i+2][1]和a[i+3][1]进行f运算,并对结果进行译码,译码结果存入b[i+2][0];
S205:对b[i+2][0]、a[i+2][1]和a[i+3][1]进行g运算,并对结果进行译码,译码结果存入b[i+3][0];
S206:得到x1、x2、x3和x4的译码结果,分别为b[i+0][0]、b[i+1][0]、b[i+2][0]和b[i+3][0];
S207:将b[i+2][0]和b[i+3][0]进行异或运算,结果存入b[i+2][1],将b[i+3][0]的值直接存入b[i+3][1];
S208:将b[i+0][1]和b[i+2][1]进行异或运算,结果存入b[i+0][2],将b[i+2][1]的值直接存入b[i+2][2];将b[i+1][1]和b[i+3][1]进行异或运算,结果存入b[i+1][2],将b[i+3][1]的值直接存入b[i+3][2]。
步骤S201中,将译码值以布尔数据的形式存入b[i+1][0],即译码值若为1,则b[i+1][0]=true,若译码值为0,则b[i+1][0]=false。
步骤S105中,所述反推函数function_back的具体运行方式如下:
直接将b[j+x][2]与a[j+x][3]、a[j+x+4][3]进行g运算,得到a[j+x+4][2]的值;并对a[j+y+4][2]与a[j+y+6][2]进行f运算,得到a[j+4][1]、a[j+5][1]的值并对这两个值进行f运算,得到a[j+4][0];其中,x=0,1,2,3;y=0,1;
2)当v=3时,v-2=1,则数组b的列与列之间会进行1次异或运算,即要对b[j+x][2]与b[j+x+4][2]进行1次异或运算,并将结果分别存入b[j+x][3],x=0,1,2,3;将b[j+x+4][2]的数值直接存入b[j+x+4][3];数组b的列与列之间的异或运算结束;然后将b[j+y][3]与a[j+y][4]、a[j+y+8][4]进行g运算,y=0,1,2,3,4,5,6,7;得到a[j+x+8][2]的值并对a[j+x+8][2]与a[j+x+8+4][2]进行的f运算,x=0,1,2,3;同理,使用f运算,直至运算到a[j+8][0];
3)当v>3时,与1)和2)同理,定义辅助变量n和u,且初始化n=2,u=4;对数组b进行v-2次异或运算:对数组b[j+x][n]与b[j+x+u][n]执行异或运算,x为整数,且0≤x<u,将运算结果存入b[j+x][n+1],将b[j+x+u][n]的值直接存入b[j+x+u][n+1],执行完该次异或运算后,n自增1(将n更新为n+1),u自乘2(将u更新为u×2);
按此规则对数组b反复执行异或运算v-2次;最终,u=2^v,n=v+1;然后将b[j+y][n]与a[j+y][n+1]、a[j+y+u][n+1]进行g运算,将运算结果分别存入a[j+y+u][n]中,y为整数,且0≤y<u;对a[j+w+u][n]与a[j+w+u+u/2][n]进行f运算,并将运算结果分别存入a[j+w+u][n-1],w为整数,且0≤w<u/2;然后u自除2,n自减1(将u更新为n更新为n-1);按此规则对数组b反复执行v次f运算,最终得到a[j+2^v][0]。
步骤S107中,基于switch结构和循环语句:
初始化clue=0,clue_k=0(k=0,1,2,3,4,5,6,7),反推函数function_back的形参j=clue_k,k与形参v的关系是:k=v-2;
第一次循环,通过数组password的第0个元素password[0],调用switch语句中的“case password[0]”操作,即“case 0”操作,按照“执行单元译码函数,单元译码函数的行值clue自增4(将clue更新为clue+4);接着,执行反推函数function_back,形参v为2,且在v=2时,形参j接收的行值为clue_k(k=0);clue_0自增8(将clue_0更新为clue_0+8);然后,再次执行单元译码函数,clue自增4(将clue更新为clue+4)”的顺序进行依次调用;
第二次循环时,执行“case password[1]”操作,password[1]=1,即“case 1”操作,该操作即为:调用function_back函数,形参v为3,且在v=3时,形参j接收的行值为clue_k(k=1);clue_1自增16(将clue_1更新为clue_1+16);
第三次循环时,执行“case password[2]”操作,password[2]=0,即“case 0”操作,按照“执行单元译码函数,单元译码函数的行数clue自增4(将clue更新为clue+4);接着,执行function_back函数形参v为2,且在v=2时,形参j接收的行值为clue_k(k=0);clue_0自增8(将clue_0更新为clue_0+8);然后,再次执行单元译码函数,clue自增4(将clue更新为clue+4)”的顺序进行依次调用;
以此类推,直到译码完成。
在本发明实施例中,采用如图2所示的流程对本发明所提出的技术方案效果进行检验:
每一次执行会随机产生512位信息比特,与512位固定比特按1024位克罗内克积的排列顺序进行混合,进行编码,编码后,通用高斯白噪声模拟外界环境的噪声干扰,最后进行译码纠错处理。
如果该次程序执行译码得出的512位信息比特(每次模拟共1024位比特,信息比特与固定比特各占512位)排列顺序最初生成的信息比特序列完全相同,即为正确,否则该次模拟错误。软件执行可以执行用户所需要的任意模拟次数,最后显示误码次数与误码率,以实现对SC极化码纠错性能的模拟检验。
图3是本发明实施例中译码原理示意图;图3以码长为16的编译原理图为例,图中最左侧一列的矩形框代表数组a中第4列的待译码比特数据,一个矩形框代表一个待译码比特数据;且数组a中从第4列到第0列的译码原理和从第0列到第4列的编码原理均适用于图3;代表异或运算,箭头代表数据流向,且在运算中穿插着f运算和g运算,由于这属于公知常识,且图3中不便表达f运算和g运算,所以图3中并未显示译码过程中的f运算和g运算。
图5为f运算和g运算的原理示意图。
请参见图6,图6是本发明实施例的硬件设备工作示意图,所述硬件设备具体包括:一种快速译码设备601、处理器602及存储设备603。
一种快速译码设备601:所述一种快速译码设备601实现所述一种快速译码方法。
处理器602:所述处理器602加载并执行所述存储设备603中的指令及数据用于实现所述一种快速译码方法。
存储设备603:所述存储设备603存储指令及数据;所述存储设备603用于实现所述一种快速译码方法。
本发明的有益效果是:本发明提出中快速译码方法,以4个比特数据为一个单元,对码长为1024的数据进行快速译码,误码率低,运行速度快;使用bool数据替代整形数据,提高了存储空间的利用率。
以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
Claims (8)
1.一种快速译码方法,其特征在于:包括以下步骤:
S101:获取码长为1024的待译码比特数据;并定义数组a和数组b;其中,数组a为一个1024行11列的浮点型二维数组,数组b为一个1024行11列的bool型二维数组;
S102:将所述的码长为1024的待译码比特数据从第一位开始依次读入数组a的第10列中;然后从数组a的第10列开始,根据译码原理,依次对数组a的各列进行f运算,并将运算结果存入数组a的对应的元素中;
S103:定义数组password,并将数组password初始化为预设值;所述数组password为大小为255的一维数组;
S104:定义单元译码函数:所述单元译码函数根据译码原理,以4个比特数据为一个译码单元进行译码;
S105:定义反推函数function_back:所述反推函数function_back的形参为j和v;所述反推函数function_back用于根据译码原理及j、v的值,对数组a和数组b中的对应元素进行异或运算、f运算和g运算;其中,形参j的实参为行值clue_k;其中,k∈[0,7]中的整数;且k=v-2,代表需要对数组b中的元素进行异或运算的次数;
S106:使用switch语句执行所述数组password中的对应元素对所述单元译码函数和所述反推函数function_back的调用操作;具体如下:
1)case 0:调用单元译码函数1次,单元译码函数的行值clue自增4;调用反推函数function_back 1次,形参v为2;调用完后,clue_0自增8;然后继续调用单元译码函数1次,单元译码函数译码的4个比特数据的第一个比特数据在数组a中所对应的行值clue自增4;其中,clue的初始值为0,所述反推函数function_back的形参j对应行值clue_0,且clue_0的初始值为0;
2)case k:调用反推函数function_back 1次,每次调用反推函数function_back后clue_k自增2^(v+1);其中,k=1,2,…,7;反推函数function_back的形参v=k+2,形参j=clue_k,clue_k在首次被调用的值为0;clue_k为定义的中间变量;
S107:对数组a中第10列的1024个待译码比特数据进行译码处理,具体为:从数组a的第1行开始,每4行为一组待译码比特数据,使用所述单元译码函数进行译码,每次对一组待译码比特数据进行译码;
每次使用所述单元译码函数对一组待译码比特数据译码完成后,将数组password的对应元素的值传给控制单元译码函数和function_back函数的switch语句,按照步骤S106所述的规则调用单元译码函数与反推函数function_back,每次执行结束后,password数组读取至下一个元素,然后进入下一个译码循环;
循环有序的调用单元译码函数与反推函数function_back,直到所有待译码比特数据译码完成;最终得到译码后的数据,即b[0][0]~b[1023][0];
其中,在步骤S102中,对数组a的各列进行f运算,并将运算结果存入数组a的对应的元素中;具体如下:
首先,根据译码原理对数组a的第10列元素a[i][10]进行f运算,得到a[0][9]~a[511][9]的对数似然比LLR值;然后根据译码原理对数组a的第9列元素进行f运算,得到a[0][8]~a[255][8]的对数似然比LLR值;再根据译码原理对数组a的第8列元素进行f运算,得到a[0][7]~a[127][7]的对数似然比LLR值;依次类推,直至a[0][0];其中,i=1,2,…,1023;数组从第0行、第0列数起;
在对数组a进行译码时,a[0][0]是固定比特,它的译码值为0,以false的形式存入bool型数组b[0][0]中。
2.如权利要求1所述的一种快速译码方法,其特征在于:数组password初始化为:
password[255]={0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,
0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,
0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,
0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,7,
0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,
0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,6,
0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,5,
0,1,0,2,0,1,0,3,0,1,0,2,0,1,0,4,0,1,0,2,0,1,0,3,0,1,0,2,0,1,0}。
3.如权利要求1所述的一种快速译码方法,其特征在于:步骤S104中,对于数组a的第i~i+3行对应的四个待译码比特数据x1、x2、x3和x4,使用所述单元译码函数进行译码的具体方法,i=clue;包括:
S201:将a[i+0][0]、a[i+0][1]和a[i+1][1]进行g运算,并对g运算的结果进行译码,译码结果作为x2的译码值,并将译码值以布尔数据的形式存入b[i+1][0];且后续的b数组存储均遵循此数据形式;
S202:将b[i+0][0]和b[i+1][0]进行异或运算,结果存入b[i+0][1],将b[i+1][0]的值直接存入b[i+1][1];
S203:将b[i+0][1]、a[i+0][2]、a[i+2][2]进行g运算,结果存入a[i+2][1];将b[i+1][1]、a[i+1][2]、a[i+3][2]进行g运算,结果存入a[i+3][1];
S204:将a[i+2][1]和a[i+3][1]进行f运算,并对结果进行译码,译码结果存入b[i+2][0];
S205:对b[i+2][0]、a[i+2][1]和a[i+3][1]进行g运算,并对结果进行译码,译码结果存入b[i+3][0];
S206:得到x1、x2、x3和x4的译码结果,分别为b[i+0][0]、b[i+1][0]、b[i+2][0]和b[i+3][0];
S207:将b[i+2][0]和b[i+3][0]进行异或运算,结果存入b[i+2][1],将b[i+3][0]的值直接存入b[i+3][1];
S208:将b[i+0][1]和b[i+2][1]进行异或运算,结果存入b[i+0][2],将b[i+2][1]的值直接存入b[i+2][2];将b[i+1][1]和b[i+3][1]进行异或运算,结果存入b[i+1][2],将b[i+3][1]的值直接存入b[i+3][2]。
4.如权利要求3所述的一种快速译码方法,其特征在于:步骤S201中,将译码值以布尔数据的形式存入b[i+1][0]:译码值若为1,则b[i+1][0]=true,若译码值为0,则b[i+1][0]=false。
5.如权利要求1所述的一种快速译码方法,其特征在于:步骤S105中,所述反推函数function_back的原理如下:
1)当v=2时,v-2=0,则只需要数组b的列与列之间进行0次异或运算,即不必执行异或运算,具体为:
直接将b[j+x][2]与a[j+x][3]、a[j+x+4][3]进行g运算,得到a[j+x+4][2]的值;并对a[j+y+4][2]与a[j+y+6][2]进行f运算,得到a[j+4][1]、a[j+5][1]的值并对这两个值进行f运算,得到a[j+4][0];其中,x=0,1,2,3;y=0,1;
2)当v=3时,v-2=1,则数组b的列与列之间会进行1次异或运算,即要对b[j+x][2]与b[j+x+4][2]进行1次异或运算,并将结果分别存入b[j+x][3],x=0,1,2,3;将b[j+x+4][2]的数值直接存入b[j+x+4][3];数组b的列与列之间的异或运算结束;然后将b[j+y][3]与a[j+y][4]、a[j+y+8][4]进行g运算,y=0,1,2,3,4,5,6,7;得到a[j+x+8][2]的值并对a[j+x+8][2]与a[j+x+8+4][2]进行的f运算,x=0,1,2,3;同理,使用f运算,直至运算到a[j+8][0];
3)当v>3时,与1)和2)同理,定义辅助变量n和u,且初始化n=2,u=4;对数组b进行v-2次异或运算:对数组b[j+x][n]与b[j+x+u][n]执行异或运算,x为整数,且0≤x<u,将运算结果存入b[j+x][n+1],将b[j+x+u][n]的值直接存入b[j+x+u][n+1],执行完该次异或运算后,n自增1,u自乘2;
按此规则对数组b反复执行异或运算v-2次;最终,u=2^v,n=v+1;然后将b[j+y][n]与a[j+y][n+1]、a[j+y+u][n+1]进行g运算,将运算结果分别存入a[j+y+u][n]中,y为整数,且0≤y<u;对a[j+w+u][n]与a[j+w+u+u/2][n]进行f运算,并将运算结果分别存入a[j+w+u][n-1],w为整数,且0≤w<u/2;然后u自除2,n自减1;按此规则对数组b反复执行v次f运算,最终得到a[j+2^v][0]。
6.如权利要求1所述的一种快速译码方法,其特征在于:步骤S107具体包括:
初始化clue=0,clue_k=0,反推函数function_back的形参j=clue_k;
第一次循环,通过数组password的第0个元素password[0],调用switch语句中的“casepassword[0]”操作,即“case 0”操作,按照“执行单元译码函数,单元译码函数的行值clue自增4;接着,执行反推函数function_back,形参v为2,且在v=2时,形参j接收的行值为clue_k,且k=0;clue_0自增8;然后,再次执行单元译码函数,clue自增4”的顺序进行依次调用;
第二次循环时,执行“case password[1]”操作,password[1]=1,即“case 1”操作,该操作即为:调用function_back函数,形参v为3,且在v=3时,形参j接收的行值为clue_k,且k=1;clue_1自增16;
第三次循环时,执行“case password[2]”操作,password[2]=0,即“case 0”操作,按照“执行单元译码函数,单元译码函数的行数clue自增4;接着,执行function_back函数形参v为2,且在v=2时,形参j接收的行值为clue_k,k=0;clue_0自增8;然后,再次执行单元译码函数,clue自增4”的顺序进行依次调用;
以此类推,直到译码完成。
7.一种存储设备,其特征在于:所述存储设备存储指令及数据用于实现权利要求1~6所述的任意一种快速译码方法。
8.一种快速译码设备,其特征在于:包括:处理器及存储设备;所述处理器加载并执行存储设备中的指令及数据用于实现权利要求1~6所述的任意一种快速译码方法。
Priority Applications (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010178982.9A CN111404557B (zh) | 2020-03-15 | 2020-03-15 | 一种快速译码方法、设备及存储设备 |
Applications Claiming Priority (1)
Application Number | Priority Date | Filing Date | Title |
---|---|---|---|
CN202010178982.9A CN111404557B (zh) | 2020-03-15 | 2020-03-15 | 一种快速译码方法、设备及存储设备 |
Publications (2)
Publication Number | Publication Date |
---|---|
CN111404557A CN111404557A (zh) | 2020-07-10 |
CN111404557B true CN111404557B (zh) | 2021-09-24 |
Family
ID=71430779
Family Applications (1)
Application Number | Title | Priority Date | Filing Date |
---|---|---|---|
CN202010178982.9A Expired - Fee Related CN111404557B (zh) | 2020-03-15 | 2020-03-15 | 一种快速译码方法、设备及存储设备 |
Country Status (1)
Country | Link |
---|---|
CN (1) | CN111404557B (zh) |
Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101321058A (zh) * | 2007-06-07 | 2008-12-10 | 管海明 | 一种用于编码和译码数字消息的方法和系统 |
CN105356891A (zh) * | 2015-11-26 | 2016-02-24 | 中国地质大学(武汉) | 一种高资源利用率的极性译码批处理方法 |
EP2991231A1 (en) * | 2014-09-01 | 2016-03-02 | Alcatel-Lucent Deutschland AG | Multilevel encoding and multistage decoding |
CN105656491A (zh) * | 2015-12-29 | 2016-06-08 | 东南大学—无锡集成电路技术研究所 | 一种多码率二元qc-ldpc码译码器及译码方法 |
CN108462495A (zh) * | 2018-04-03 | 2018-08-28 | 北京航空航天大学 | 一种基于gpu的多元ldpc码高速并行译码器及其译码方法 |
CN110391868A (zh) * | 2018-04-18 | 2019-10-29 | 华为技术有限公司 | 一种极化Polar码的译码方法及通信设备 |
Family Cites Families (1)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN109302189B (zh) * | 2018-07-31 | 2021-05-18 | 中国地质大学(武汉) | 一种基于阶梯剪枝的极化码译码算法 |
-
2020
- 2020-03-15 CN CN202010178982.9A patent/CN111404557B/zh not_active Expired - Fee Related
Patent Citations (6)
Publication number | Priority date | Publication date | Assignee | Title |
---|---|---|---|---|
CN101321058A (zh) * | 2007-06-07 | 2008-12-10 | 管海明 | 一种用于编码和译码数字消息的方法和系统 |
EP2991231A1 (en) * | 2014-09-01 | 2016-03-02 | Alcatel-Lucent Deutschland AG | Multilevel encoding and multistage decoding |
CN105356891A (zh) * | 2015-11-26 | 2016-02-24 | 中国地质大学(武汉) | 一种高资源利用率的极性译码批处理方法 |
CN105656491A (zh) * | 2015-12-29 | 2016-06-08 | 东南大学—无锡集成电路技术研究所 | 一种多码率二元qc-ldpc码译码器及译码方法 |
CN108462495A (zh) * | 2018-04-03 | 2018-08-28 | 北京航空航天大学 | 一种基于gpu的多元ldpc码高速并行译码器及其译码方法 |
CN110391868A (zh) * | 2018-04-18 | 2019-10-29 | 华为技术有限公司 | 一种极化Polar码的译码方法及通信设备 |
Non-Patent Citations (1)
Title |
---|
极化码编码与译码算法研究;王继伟;《中国优秀硕士学位论文全文数据库 信息科技辑》;20140315;第I136-85页 * |
Also Published As
Publication number | Publication date |
---|---|
CN111404557A (zh) | 2020-07-10 |
Similar Documents
Publication | Publication Date | Title |
---|---|---|
US10892850B2 (en) | Method and apparatus for carrying identification information | |
CN107124251B (zh) | 一种基于任意内核的极化码编码方法 | |
CN108574494B (zh) | 编译码方法及装置 | |
US11362760B2 (en) | Polar code rate matching method and apparatus | |
US8843810B2 (en) | Method and apparatus for performing a CRC check | |
US11245423B2 (en) | Interleaving method and apparatus | |
CN107943756B (zh) | 一种计算方法及相关产品 | |
CN107733554B (zh) | 极化码的速率匹配方法和装置 | |
CN111404557B (zh) | 一种快速译码方法、设备及存储设备 | |
CN110098891B (zh) | 交织方法和交织装置 | |
US11171673B2 (en) | Decoding method and apparatus | |
CN108108189B (zh) | 一种计算方法及相关产品 | |
CN114079530A (zh) | 编码方法及装置 | |
JP2022543905A (ja) | レギュラqc-ldpcコードの構成方法および電子機器 | |
US20230058149A1 (en) | Encoding method and apparatus, decoding method and apparatus, and device | |
CN109150200B (zh) | 一种信道交织的方法和装置 | |
CN113327217B (zh) | 一种卷积处理方法、装置、计算机设备及存储介质 | |
US11362677B2 (en) | Channel encoding method and encoding apparatus | |
CN114204943A (zh) | 编码方法和装置 | |
CN111130565B (zh) | 一种基于神经网络的译码方法及装置 | |
CN111224674B (zh) | 多进制ldpc码的解码方法、装置及解码器 | |
CN110780849A (zh) | 矩阵处理方法、装置、设备及计算机可读存储介质 | |
CN111786680B (zh) | 一种生成矩阵的确定方法及装置 | |
CN111384976A (zh) | 稀疏校验矩阵的存储方法和读取方法 | |
CN115833847B (zh) | Polar码译码方法、装置、通信设备和存储介质 |
Legal Events
Date | Code | Title | Description |
---|---|---|---|
PB01 | Publication | ||
PB01 | Publication | ||
SE01 | Entry into force of request for substantive examination | ||
SE01 | Entry into force of request for substantive examination | ||
GR01 | Patent grant | ||
GR01 | Patent grant | ||
CF01 | Termination of patent right due to non-payment of annual fee | ||
CF01 | Termination of patent right due to non-payment of annual fee |
Granted publication date: 20210924 |