matlab通信工具包包含了一个fec差错控制编码的工具包,其中有fec.ldpcenc,fec.ldpcdec是涉及有关ldpc编码的。使用过程如下:
首先要产生一个稀疏校验矩阵H,n列,(n-k)行。且最后(n-k)列为一个可逆阵。
编码:
直接使用fec.ldpcenc时,matlab默认使用一个32400*64800的ldpc校验矩阵。其第一行个数为1,2到32400行为6,第1到12960列1个数为8,12961到32400列1个数为3,剩下32401到64800的为一个下三角阵,其元素和次1对角元素为1,其余为0。此ldpc编码阵由DVB-S.2而来,可达到10的-7次方误包率。
格式如下:l=fec.ldpcenc(H);
产生的l为一结构体,包含如下参数:l.ParityCheckMatri:校验矩阵;
l.BlockLength:码元长度;n
l.NumInfoBits:信息位长度;k
l.NumParityBits:校验位长度;n-k
l.EncodingAlgorithm:编码算法 “ForwardSubstitution”“Backward Substitution”“MatrixInverse”
然后使用encode函数进行编码:codeword=encode(l,msg);其中msg为待编的消息序列,其大小须为1*k
解码:
l=fec.ldpcdec(H),若省略H,则使用上述默认的校验矩阵。
l同样为结构体,由如下元素:
l.ParityCheckMatrix:校验矩阵
l.BlockLength: 码长
l.NumInfoBits: 信息位长
l.NumParityBits: 校验位长
l.DecisionType: 判决方式'Hard decision','Soft decision'
l.OutputFormat: 'Information part' 'Whole codeword'
l.DoParityChecks: 是否做奇偶校验,默认为'No',当为'Yes'时,每次迭代后均进行校验,当为全零时结束迭代。
l.NumIterations: 迭代次数
l.ActualNumIterations: Actual number of iterations executed for the last codeword. Initial value is [].
l.FinalParityChecks:(n-k)-by-1 vector. 1s indicate the parity checks that are not satisfied when the decoder stops. Initial value is [].
然后采用decode函数解码:
decoded=decode(l,llr);l为ldpc的译码结构体变量,llr为对数似然比,大小为1*BlockLength
译码结果与l.DecisionType有关,输出与l.OutputFormat有关。这里的迭代译码算法为消息传递算法。
网友评论