一种通用型 LDPC 译码器 【技术领域】
本发明涉及一种 LDPC 码译码器, 特别涉及具有通用性的 LDPC 译码器, 属于译码技术领域。 背景技术 随着深空通信、 移动卫星通信等技术的不断发展, 低信噪比通信成为通信技术发 展的一个重要方向。为了能够可靠的进行通信, 高增益的信道编码成为低信噪比通信系统 不可或缺的一部分, 在迄今为止所发明和应用的纠错编码技术中, 只有 Turbo 码和 LDPC 码 具有接近香农极限的性能。与 Turbo 码相比, LDPC 码在运算速度、 译码门限和错误平层方 面都具有明显的优势, 成为当前信道编码领域的研究热点。欧洲数字电视广播组织 (DVB) 已经宣布在其下一代卫星数字电视标准 (DVB-S2) 中放弃 Turbo 码而采用 LDPC 码作为前向 纠错的编码方案。而下一代蜂窝移动通信, 宽带卫星通信, 无线个人区域网 (802.15), 无线 移动宽带接入网 (802.20) 以及其它诸如数据存储介质设备访问和有线调制解调器 (Cable
Modem)、 数字用户线 (DSL) 等通信系统也正在考虑将其作为信道编码规范。
LDPC(Low-Density Parity Check Code) 码是一种线性分组码, 它的校验矩阵是 一个非常稀疏的矩阵, 矩阵中的非零元素的数量相对于行列长度来说很少。如果校验矩阵 的每一列 ( 或行 ) 都有相同的重量称这种 LDPC 码是规则的, 否则称为不规则 LDPC 码。由 于非规则 LDPC 码的校验矩阵中元素 1 的位置基本没有规律可循, 导致编码复杂度高, 实现 难度比较大。而规则 LDPC 码, 特别是准循环规则 LDPC 码可以采用简单的移位寄存器完成 编码, 硬件复杂度大大降低。
现有的 LDPC 码译码器基本上都不具备通用性, 一种码长对应一种译码器, 变化码 长后需要重新设计译码器, 大大增加了研发时间和研发成本。对于星上使用的 LDPC 译码 器, 由于工作环境特殊, 必须要有一种通用型的 LDPC 译码器来兼容不同的通信系统协议, 因此 LDPC 码译码器的通用性在星上环境尤为关键。 发明内容
本发明的技术解决问题是 : 克服现有技术的不足, 提供了一种通用型 LDPC 译码 器。采用本发明解决了对不同码长 LDPC 码译码器不兼容的问题, 以通用型译码结构实现了 对不同长度 LDPC 码的译码。
本发明的技术解决方案是 :
一种通用型 LDPC 译码器, 包括调度模块、 接收模块、 译码模块和发送模块, 接收模 块接收 LDPC 编码数据并将编码数据逐段输出到译码模块 ; 译码模块对接收模块输入的编 码数据进行译码, 并将译码数据输出给发送模块 ; 发送模块将译码模块分段输出的译码数 据排序后组成信息数据输出, 其特征在于 : 所述的调度模块与以握手命令的方式采用状态 机实现对接收模块、 译码模块和发送模块的交互控制 ;
所述的译码模块可对通用长度的 LDPC 编码数据进行译码, 译码模块包括 : 校验节点处理模块 CNPMi, i = 0......n-1, n 为校验矩阵原模图的行数、 变量节点处理模块 VNPMj, j = 0......m-1, m 为校验矩阵原模图的列数、 输入数据存储器 Yj、 输出数据存储器 Dj、 迭代 计算存储器 Rij 和 Qij ;
VNPMj 具有 i+1 个从 0 到 i 编号的输入端和 i 个从 0 到 i-1 编号的输出端, VNPMj 的编号为 i 的输入端与 Yj 的输出端相连, VNPMj 的编号从 0 到 i-1 的输入端按编号与 Rij 的 输出端对应相连, VNPMj 的编号从 0 到 i-1 的输出端按编号与 Qij 的输入端对应相连 ;
接收到数据接收指令后, VNPMj 将 Yj 缓存输入的编码数据段复制 i 次, 并保存编码 数据段后, 再从 i 个输出端同时输出到相连的 Qij 中 ;
接收到开始译码指令后, 译码模块进入迭代译码过程, VNPMj 将每次从 i-1 个输入 端输入的数据与修正因子相乘, 再与保存的编码数据段相加后保存所得结果 ; 再将结果从 i 个输出端同时输出, 并写入到对应的 Qij ; 其中作为加数的 i-1 个输入端不包括与 VNPMj 编 号 j 相同的输入端所输入的数据 ;
CNPMi 具有 j 个从 0 到 j-1 编号的输入端与 j 个 0 到 j-1 编号的输出端 ; CNPMi 的 j 个输入端按编号与 Qij 的输出端对应相连, CNPMi 的 j 个输出端按编号与 Rij 的输入端对应 相连 ;
CNPMi 将每次从 j 个输入端输入的数据中绝对值最小与次小的数据选出 ; 从与输 入最小绝对值数据的输入端编号相同的输出端输出绝对值次小的数据, 从其它 j-1 个输出 端输出绝对值最小的数据 ; CNPMi 将 j 个输出端口输出的数据写入到对应的 Rqj ;
在迭代译码过程中, CNPMi 和 VNPMj 依次迭代进行工作, 并分别接收从 Qij 和 Rij 输 出的数据, Qij 和 Rij 在输出数据时, 按照预先规定的读取地址循环读取上次迭代时分别由 VNPMj 和 CNPMi 写入的数据 ; 下标相同的 Qij 和 Rij 为一组对应于校验矩阵原模图每行中的每 个元素节点, 一组 Qjq 和 Rjq 具有相同的读取地址和末尾地址, 所述的读取地址等于与 Qjq 和 Rjq 对应的元素节点扩展后子矩阵的偏移量 ; 所述的末尾地址等于与 Qjq 和 Rjq 对应的元素节 点扩展后子矩阵的秩 ; 所述读取地址和末尾地址需要再译码前根据码长进行配置 ;
接收到结束译码指令后, VNPMj 将编号从 0 到 i-1 的输入端输入的数据与保存的编 码数据段求和后进行硬判决后从 1 个输出端输出到 Dj, 并由 Dj 按编号顺序将译码数据输出。
所述的译码模块还可设计为包括 : 校验节点处理模块 CNPMi, i = 0......n-1, n为 校验矩阵原模图的行数、 变量节点处理模块 VNPMj, j = 0......m-1, m 为校验矩阵原模图的 列数、 输入数据存储器 Yj、 输出数据存储器 Dj、 迭代计算存储器 Rqj 和 Qqj, q = 0......k-1, k 为校验矩阵原模图每列中校验节点的个数 ;
VNPMj 具有 k+1 个从 0 到 k 编号的输入端和 k 个从 0 到 k-1 编号的输出端, VNPMj 的编号为 k 的输入端与 Yj 的输出端相连, VNPMj 的编号从 0 到 k-1 的输入端按编号与 Rqj 的 输出端对应相连, VNPMj 的编号从 0 到 k-1 的输出端按编号与 Qqj 的输入端对应相连 ;
接收到数据接收指令后, VNPMj 将 Yj 缓存输入的编码数据段复制 k 次, 并保存编码 数据段后, 再从 k 个输出端同时输出 ;
接收到开始译码指令后, 译码模块进入迭代译码过程, VNPMj 将每次从 k-1 个输入 端输入的数据与修正因子相乘, 再与保存的编码数据段相加后保存 ; 将结果从 k 个输出端 同时输出, 并写入到对应的 Qqj ; 其中作为加数的 k-1 个输入端不包括与 VNPMj 编号 j 相同的 输入端所输入的数据 ;CNPMi 具有 I 个从 0 到 I-1 编号的输入端与 I 个 0 到 I-1 编号的输出端, 所述的 I 为校验矩阵原模图每行中变量节点的个数 ; CNPMi 的 I 个输入端与 Qqj 的输出端, 按校验矩阵 原模图第 i 行中变量节点的位置对应相连, CNPMi 的 I 个输出端与 Rqj 的输入端, 按校验矩阵 原模图 i 行中变量节点的位置对应相连 ;
CNPMi 将每次从 I 个输入端输入的数据中绝对值最小与次小的数据选出 ; 从输入 最小绝对值数据的输入端编号相同的输出端输出绝对值次小的数据, 从其它 I-1 个输出端 输出绝对值最小的数据 ; CNPMi 将 I 个输出端口输出的数据写入到对应的 Rqj ;
在迭代译码过程中, CNPMi 和 VNPMj 依次迭代进行工作, 并分别接收从 Qjq 和 Rjq 输 出的数据, Qjq 和 Rjq 在输出数据时, 按照预先规定的读取地址循环读取上次迭代写入的数 据; 下标相同 Qjq 和 Rjq 为一组并按列对应于校验矩阵原模图每行中的校验节点, 一组 Qjq 和 Rjq 具有相同的读取地址, 所述的读取地址等于与 Qjq 和 Rjq 对应的校验节点扩展后子矩阵的 偏移量 ;
接收到结束译码指令后, VNPMj 将编号从 0 到 k-1 的输入端输入的数据与保存的编 码数据段求和后进行硬判决后从 1 个输出端输出到 Dj, 并由 Dj 按编号顺序将译码数据输出。
所述的通用长度为校验矩阵原模图每行变量节点个数的整数倍。 所述的修正因子取值在 0 ~ 1 间。
本发明与现有技术相比具有如下优点 :
(1)、 本发明的译码模块采用的设计结构, 可实现对不同码长 LDPC 的译码, 只需要 重新配置译码模块中的读取地址便可适应不同的码长的 LDPC 码, 具有良好的灵活性与极 强的兼容性。
(2)、 本发明各个模块间采用状态机进行实现, 各个工作模块在调度模块的握手式 控制下独立工作, 提高了译码器的可靠性。
(2)、 由于本发明具有通用型译码结构, 因此可采用固定的 FPGA 资源并配合外置 RAM 进行实现, 并且 FPGA 资源占用少, 逻辑资源不随码长的增加而增多, 节省了设计与实现 阶段的软硬件资源, 尤其适应于资源有限的航天器工作环境。
附图说明
图 1 为本发明系统框图 ;
图 2 为本发明状态机图 ;
图 3 为译码模块结构设计图 ;
图 4 为实施例校验矩阵原模图 ;
图 5 为译码性能曲线图。 具体实施方式
一、 发明原理
准循环 LDPC 码的校验矩阵 Hqc 如式 (1) 所示, 各子矩阵 Ai, j 是 b×b 的循环右移置 换矩阵或者是 b×b 的 0 矩阵。
由于循环置换矩阵 Ai, 因此, 总可以用母矩阵 Hb j 的形式完全决定于矩阵的偏移量, = [p(i, j)]m×n 来表征校验矩阵 Hqc, 其中, p(i, j) 为 Ai, j 的偏移量。
若 p(i, j) > 0, 则表示 Hqc 矩阵中对应的 Ai, j) 的置换矩阵, j 是向右偏移量为 p(i, 即通过将单位矩阵循环右移 p(i, j) 位, 可得到 Ai, j ;
若 p(i, j) = 0, 则表示 Ai, 即不对单位阵进行循环移位 ; j 为单位阵,
若 p(i, j) < 0, 则表示 Ai, j 为全 0 矩阵。
这样在设计中只要存储母矩阵就可以表示校验矩阵 Hqc, 借此原理使得对 LDPC 码 的通用译码方法具备了可实现性。在本发明所述的技术方案就是基于准循环 LDPC 码的译 码器。
原模图 (J Thorpe, 《Low-Density Parity-Check(LDPC)Codes Constructed from Protographs》 , 与 D.Divsalar, 《Construction of ProtographLDPC Codes with Linear Minimum Distance)》 ) 可以认为是节点数量较少的 LDPC 码的校验矩阵, 对应式 (1) 中的子 矩阵 Ai, 若在原模图中令 b 为 1, 则 Ai, 因此, 原模图 j(b×b 的矩阵 ), j 仅代表 0 和 1 两种值, 具有 LDPC 码校验矩阵的所有属性。基于原模图的 LDPC 码构造是在原模图基础上扩展 Ai, j, 通过改变 b 的值, 使译码器通用于各种码长的 LDPC 码。
原模图经扩展后得到 LDPC 码的校验矩阵后, 由于 Ai,j 的 b 大于 1, 所以, 扩展倍数 不同, 相同位置的 Ai,j 可能会对应多种不同的偏移量, 不同的偏移量对应到新的 LDPC 码所 体现的也就性能不同, 因此, 在选择原模图校验矩阵时, 需要通过计算机仿真搜索, 选出一 个性能优异的原模图矩阵。
二、 设计方案
本发明的通用型 LDPC 译码器包括 : 调度模块、 接收模块、 译码模块和发送模块。 如 图 1 所示, 为译码器各模块间连接示意图。
1、 状态机设计
调度模块是译码器中的全局控制模块, 调度模块对其他模块进行握手方式交互控 制, 即调度模块向各个模块发出控制命令, 在等待模块工作完成并回复命令后, 再发出下一 条命令。整个译码器是以命令驱动的状态机方式进行工作。
如图 2 所示, 为译码器状态机的状态转换图。采用状态机的触发工作模式消除了 因码长变化对各模块处理时间的影响, 同时确保了处理模块间互不影响的并行工作, 也提 高了译码器工作的可靠性。
整个状态机包括 5 个工作状态分别为 : 等待状态 Idle( 空闲 )、 接收状态 S1、 变量 节点更新状态 S2、 校验节点更新状态 S3 和输出状态 S4。
Idle 状态 : 为译码器的起始工作状态。此时各个模块之间无数据传输, 处于等待 调度模块调度命令的状态。
S1 状态 : 为译码器的接收模块的工作状态。当有译码数据到来时, 调度模块向接 收模块发送接收命令, 启动接收模块接收译码数据, 接收模块对输入的译码数据进行缓冲, 然后按照译码数据的输入顺序进行分段存储, 然后向调度模块回复并等待调度模块的发送 命令, 收到发送命令后接收模块将分段后的译码数据分别并同时输出给译码模块。
S2、 S3 状态 : 为译码器的译码模块迭代译码工作的状态。在译码过程中, S2 状态 和 S3 状态循环迭代进行, 其中, S2 状态为 VNPM 的工作状态, 对应于变量节点更新操作 ; S3 状态为 CNPM 的工作状态, 对应于校验节点更新操作。
译码模块工作时, 不考虑输入的译码数据的码字长度, 只是根据调度模块的开始 译码命令与停止译码命令进行工作。当译码模块接收到调度模块的开始译码命令后, 开始 进行译码。此时译码器处于 S2 状态, 然后, 按照变量节点信息更新 (S2 状态 )、 校验节点信 息更新 (S3 状态 ) 的转换顺序循环进行迭代译码计算。每完成一次变量节点更新操作与校 验节点更新操作相当于完成一次迭代, 译码过程中, 调度模块对迭代次数进行累加计数。 当 达到预定的迭代次数时, 调度模块向译码模块发送停止命令, 译码模块接收到停止命令后, 停止译码, 输出译码数据。
S4 状态 : 为译码器的输出模块工作的状态。当有译码数据输出时, 调度模块向输 出模块发送输出命令, 启动输出模块接收译码模块的输出数据并进行缓冲, 由于译码器接 收模块接收的输入数据是分段存储的, 因此输出缓存 D 中的数据也要依次输出, 即 D0 的数 据全部输出完毕后, 再输出 D1 中的数据, 依次类推。
2、 模块设计
译码模块
译码器的核心是译码矩阵模块, 本发明译码模块结合原模图结构产生了具备通用 性的 LDPC 译码结构。
原模图本质上是一个较小规模的准循环 LDPC 码的校验矩阵, 它规定了每一行和 每一列的子矩阵 Ai,j 个数, 以及全 0 矩阵和非 0 矩阵的位置。在设计译码器时, 原模图的 结构决定了 LDPC 码的译码结构, 因此, 只要不改变原模图的结构 ( 即非 0 矩阵的个数和位 置 ), 即使 LDPC 编码的码长改变, 那么译码模块的译码结构就不会改变, 从而使译码器具备 了通用性。
在设计译码模块前, 先优选一个性能优异的原模图, 以该原模图为蓝本建立译码 结构, 所谓性能优异的原模图是指在相同的误码率条件下, 若信噪比越低, 则原模图的性能 越好。在码长变化时, 不改变原模图的结构, 只是调整子矩阵 Ai, j 的大小和偏移量使其满足 码长要求, 子矩阵的大小根据码长值可以直接算出, 偏移量需要通过 LDPC 译码仿真模型进 行筛选。
本发明的译码模块为达到通用性的目的, 须要对子矩阵 Ai,j 大小和偏移量的改变 能够自适应。在具体设计时, 采用了两种设计结构。
结构一
对于一个大小为 n×m 的校验矩阵原模图, 需要 n 个校验节点处理模块 CNPMi, 并按 照从 0 到 n-1 进行编号 ; m 个变量节点处理模块 VNPMj, 并按照从 0 到 m-1 进行编号。同时, 为存储接收模块分段输入的编码数据段和分段输出译码数据段, 还需要与于 VNPMj 对应的 j 个输入数据存储器 Yj 和 j 个输出数据存储器 Dj, Yj 和 Dj 同样按照 0 到 m-1 进行编号, 并按编号与对应的 VNPMj 相联接。对应于原模图校验矩阵中的每个元素经扩展后获得的子矩 阵, 同时设置迭代计算存储器 Rij 和 Qij, 一个 Rqj 和一个 Qqj 定为一组。
对于变量节点处理模块 VNPMj, 具有 i+1 个从 0 到 i 编号的输入端和 i 个从 0 到 i-1 编号的输出端, VNPMj 的第 i 个输入端与 Yj 的输出端相连, VNPMj 的编号从 0 到 i-1 的 输入端按编号与 Rij 的输出端对应相连, VNPMj 的编号从 0 到 i-1 的输出端按编号与 Qij 的 输入端对应相连。
对于校验节点处理模块 CNPMi, 具有就个从 0 到 j-1 编号的输入端与 j 个 0 到 j-1 编号的输出端。 CNPMi 的 j 个从 0 到 j-1 编号的输入端与 Qij 的输出端按编号对应相连, CNPMi 的就个从 0 到 j-1 编号的输出端与 Qij 的输入端按编号对应相连。
如图 3 所示, 为校验矩阵原模图 H = [Aij]2×4 时, 采用结构一实现的译码模块。图 3 中, 对应于校验矩阵原模图的行数设置有 2 个 CNPM, 列数设置有 4 个 VNMP, 并设置有 2X4 组 R 和 Q, 分别按照行列进行编号。并按照上述连接方式进行了连接。
结构二
同样对一个大小为 n×m 的校验矩阵原模图, 结构二与结构一相比, 其主要区别在 于使用的 R 与 Q 的数量变为 Rqj 和 Qqj, 其中, 若按列优先进行排列, 则 q 对应于校验矩阵原模 图每列中校验节点的个数 k, 按照从 0 到 k-1 进行编号。则结合校验矩阵原模图进行分析, 结构二相对于结构一省略了对应于校验矩阵原模图中对应于 0 元素位置的 R 与 Q。
为适应 R 与 Q 数量的改变, VNPM 和 CNPM 的输入与输出端进行了相应的变化。对于 变量节点处理模块 VNPMj, 具有 k+1 个从 0 到 k 编号的输入端和 k 个从 0 到 k-1 编号的输出 端, VNPMj 的第 k 个输入端与 Yj 的输出端相连, VNPMj 的编号从 0 到 k-1 的输入端按编号与 Rqj 的输出端对应相连, VNPMj 的编号从 0 到 k-1 的输出端按编号与 Qqj 的输入端对应相连。
对于校验节点处理模块 CNPMi, 具有 I 个从 0 到 I-1 编号的输入端与 I 个 0 到 I-1 编号的输出端, 所述的 I 为校验矩阵原模图每行中变量节点的个数。在校验矩阵原模图中, 一行中具有多个不同的变量节点 ( 变量节点的个数可以为 0), 所以, 对于不同的 CNPMi 与 VNPMj 具有不同的对应连接关系。由于, 原模图在进行扩展式, 0 元素扩展后为全 0 的子矩 阵, 因此, 在按此原理设计译码模块的结构时, 可进一步总结为, 按行编号的 CNPMi 与校验矩 阵原模图中第 i 行存在校验节点的 VNPMj 具有连接, 而 CNPMi 和 VNPMj 的连接点便为 Rqj 和 Qqj。
在 CNPMi 和 Rqj 和 Qqj 的连接时, CNPMi 的 I 个从 0 到 I-1 编号的输入端与 Qqj 的输 出端, 按校验矩阵原模图第 i 行中变量节点的位置对应相连, CNPMi 的 I 个从 0 到 I-1 编号 的输出端与 Rqj 的输入端, 按校验矩阵原模图 i 行中变量节点的位置对应相连。
此种设计, 使得在进行迭代的过程中, CNPMi 和 VNPMj 分别按照校验节点和变量节 点的对应位置进行工作, 从而会出现暂时空闲的 CNPMi 和 VNPMj。但由于采用了与校验矩阵 原模图中校验节点 ( 变量节点 ) 总数的 Rqj 和 Qqj, 因此, Rqj 和 Qqj 在每次迭代过程中均会被 使用, 始终处于工作中。相对于结构一进一步节省了硬件资源。
译码算法
本发明采用了乘性修正最小和 (MSMA) 译码算法进行译码。
接收到开始译码指令后, 译码模块进入迭代译码过程, VNPMj 将每次从 k-1 或 i-1 个输入端输入的数据与修正因子相乘, 再与保存的编码数据段相加后保存 ; 将结果从 k 或 i个输出端同时输出, 并写入到对应的 Q 中 ; 其中作为加数的输入端不包括与 VNPMj 编号 j 相 同的输入端所输入的数据 ;
CNPMi 将每次从 I 或 j 个输入端输入的数据中绝对值最小与次小的数据选出 ; 从输 入最小绝对值数据的输入端编号相同的输出端输出绝对值次小的数据, 从其它 I-1 或 j-1 个输出端输出绝对值最小的数据 ; CNPMi 将 I 或 j 个输出端口输出的数据写入到对应的 R 中。
在迭代译码过程中, CNPMi 和 VNPMj 分别接收从与其相连的 Q 和 R 输出的数据。Q 和 R 在输出数据时, 按照预先规定的读取地址循环读取上次迭代写入的数据一组 Q 和 R 具 有相同的读取地址, 读取地址等于与 Q 和 R 对应的校验节点扩展后所得子矩阵的偏移量。
在每组 Q 和 R 中, 写入数据的首地址为 0, 末尾地址为 b-1, b 为每组 Q 和 R 所对应 校验矩阵原模图子矩阵的秩。循环读取的规则为, Q 和 R 以预先规定的读取地址 ADDx 为首 地址读取暂存于其中的数据, 当读取到数据末地址 b-1 时, 在从 0 开始读取直到 ADDx-1, 通 过此循环读取, 实现对其中暂存数据的循环移位输出。
按照这个设计方案, 只需要在 Q 和 R 中预先按照对应的子矩阵的偏移量设置好每 次读取数据的起始地址 ( 读取地址 ), CNPMi 和 VNPMj 分别独立进行进行, 调度模块累加统 计迭代次数, 从而可以在编码长度改变时, 只需要通过程序改变每个 Q 和 R 中的读取地址与 b, 便可在不影响译码结构的情况下, 对不同编码长度的 LDPC 码进行译码, 实现了译码器的 通用性设计。 对于结构二的设计, 由于省略了校验矩阵原模图中与 0 元素相对应的 Q 和 R, 但是, 结构二中的 Q 和 R 仍与校验矩阵原模图中的非零元素存在对应关系, 因此可以按照同样的 方式设置读取地址。
接收模块
用于接收输入译码器的编码数据, 并对编码数据进行分段, 接受模块对编码数据 的分段原则是根据译码模块中 Yj 的个数对输入的编码数据按照先后顺序进行的。 分段完成 后的编码数据段在调度模块的控制下, 逐段依次序输入到译码模块的 Yj 中, 即按照从 Y0 到 Ym 的顺序进行接收。
输出模块
输出模块在调度模块的控制下接收译码模块输出的译码数据段, 并将分段输出的 译码数据重新组合后输出。按照译码模块接收编码数据段的先后顺序, 将译码数据段编排 后输出, 即按照从 D0 到 Dm 的顺序进行输出。
调度模块
调度模块对接收模块、 译码模块与输出模块进行握手控制, 以状态转换的方式控 制各个模块独立工作。
三、 实施例
以下以 1/2 码率为例, 对可配置码长的通用 LDPC 译码器的设计过程进行说明。
本方案通过仿真模型选择的原模图矩阵如图 4, 按照原模图设计的译码结构中 QC-LDPC 码的母矩阵 Hb = [aij]8×16, 译码结构包括 8 个校验节点处理模块 CNPM, 16 个变量 节点处理模块 VNPM ; 16 个输入数据存储器 Y ; 16 个输出数据存储器 D ; 48 个交互信息存储 器R; 48 个交互信息存储器 Q。
48 组 R 和 Q 分为 16 列, 每一列上的 3 组 R 和 Q 均对应一个 VNPM, 根据图 4 中, 校 验矩阵原模图每列中校验节点的个数, 每个 VNPM 具有 4 个输入端与 3 个输出端, 其中每个 VNPM 的第 4 个输入端与 Y 相连。其余 3 个输入端分别连接本列中的 3 个 R 的输出端, 而3 个输出端分别连接本列中的 3 个 Q 的输入端, 同时复用 1 个输出端用于在译码结束时向 D 输出译码数据。
CNPM 同样具有 6 个输入端与 6 个输出端。48 组 R 和 Q 分为 16 列后, 将共有 3 行。 8 个校验节点处理模块 CNPM 分别对应于 8 行, 并根据图 4 矩阵中每行变量节点的位置对应 连接 R 和 Q。
本方案中原模图的子矩阵是 b×b 的循环右移置换矩阵, 根据图 4 可知, 利用此校 验矩阵原模图可对码长 L = 16 * b 的 LDPC 码进行译码 ( 这里的码长需为 16 的整数倍 )。 使用前, 通过原模图到 LDPC 码校验矩阵的仿真模型, 可得到对应码长校验矩阵的偏移量, 进而可以设置每个 R 和 Q 的读取地址。
本实施例中使用 xilinx 公司的 Virtex4SX55 的 FPGA 芯片, 占用的逻辑资源为 25%, 相当于 150 万门的逻辑。存储器 Q 和 R 的容量分别为 (8 * 4kbits), 这样在配置码 长时, 只要子矩阵的大小不超过存储器 Q( 和 R) 的容量上限即可。按照码长公式 L = 16 * b, 当 b = 4k 时, 码长最长为 64k, 这个范围内的码长足以满足现有的 LDPC 码的使用要求。 此外, 采用本发明设计的译码器也具有较好的译码性能, 如图 5 所示, 可配置码长 的 LDPC 译码器分别生成的码长为 6912(“□” 线 ) 和 2048(“○” 线 ) 的码性能曲线, 图中 X 轴为信噪比 (eb/n0), Y 轴为误码率。资料显示, CCSDS 标准中码率为 1/2, 码长为 8192 的 LDPC 码在 10-8 误码率条件下 eb/n0 为 1.5dB ; 码长 2048 的 LDPC 码在 10-6 误码率条件下 eb/n0 为 2dB。比较可知, 本方法中的可配置码长的 LDPC 码在性能上与 CCSDS 标准的差距 不到 0.3dB。
本发明未详细说明部分属本领域技术人员公知常识。