主要内容

维特比译码器

使用维特比算法解码卷积编码数据

  • 库:
  • 无线HDL工具箱/错误检测和纠正

  • 维特比解码器块

描述

维特比译码器block使用基于ram的回溯实现解码卷积编码的数据。维特比译码广泛应用于LTE标准TS 36.212中[1]以及其他前向纠错(FEC)应用,如无线网络(802.11a/b/g/n/ac)、数字卫星通信、数字视频广播(DVB)、IEEE 802.16和HiperLAN。为了支万博1manbetx持这些标准中的任何一种,该块接受约束长度为3到9的卷积码,码率为1/2到1/7,并提供连续、终止和截断模式。该模块提供了适合于HDL代码生成的体系结构和接口。

该块通过提供可选的万博1manbetx擦除输入端口。您可以使用Depuncturer块来在穿孔的样本流中插入中性值,并生成擦除信号。

维特比译码器块接受输入样本作为硬决策二进制值或软决策对数似然比(LLR)。每个样本都是一个列向量,其长度取决于编码方案。第一个波形显示连续操作模式,输入样本的签名4位数据,使用默认块参数。的回溯深度32.该块在148个时钟周期后返回第一个解码输出数据样本。解码延迟为4倍回溯深度+约束长度+ 13个有效输入周期。

第二个波形显示在终止操作模式下的三帧。输入是无符号的4位样本,块使用网格(7,[171 133 112])。的回溯深度32.输入和输出ctrl总线扩展到显示它们的三个控制信号。每个输入的延迟ctrl开始输出ctrl开始也是148个时钟周期。

总线上的控制信号指示每个样本的有效性和帧的边界。若要将矩阵转换为样本流和相应的控制信号,请使用帧到样本块或whdlFramesToSamples函数。有关流示例接口的完整描述,请参见流式采样接口

港口

输入

全部展开

输入样本,指定为n-by-1列向量,其中n是生成器多项式的长度。当输入数据类型为定点或整数时进行软决策解码,当输入数据类型为时进行硬决策解码布尔fixdt (0,1,0).块执行非量化软决策解码而且数据类型,但这些数据类型不支持HDL代码生成。万博1manbetx

对于软决策输入样本,块支持最多16位的字长。万博1manbetx对于HDL代码生成,由于硬件资源的使用,不建议字长超过8位。输入数据的分数长度必须为0。

数据类型:int8|int16|uint8|uint16|布尔|fixdt (0,1,0)|fixdt(年代,西城,0)||

控制信号,表明当样品从数据输入端口有效。当有效的输入端口为1真正的的值,该块捕获数据输入端口。当有效的输入端口为0),块忽略输入的样本。

依赖关系

若要启用此端口,请设置操作模式连续

数据类型:布尔

中性符号位置,指定为与输入相同大小的二进制值的列向量数据向量。当一个擦除元素是1真正的),即相应的输入数据元素是一个去刺的中立值,解码器不更新分支度量。当一个擦除元素是0),该块使用相应的输入数据元素来更新分支度量。您可以使用Depuncturer块来驱动此端口。

依赖关系

若要启用此端口,请选择启用擦除输入端口

数据类型:布尔

清除内部状态,指定为布尔标量。当重置1真正的),一个周期后,块停止当前计算并清除内部分支和状态度量。

依赖关系

若要启用此端口,请设置操作模式连续并选择开启复位输入端口

数据类型:布尔

与采样流伴随的控制信号,指定为samplecontrol公共汽车。总线包括开始结束,有效的控制信号,表示帧的边界和输入样本的有效性。

依赖关系

若要启用此端口,请设置操作模式终止截断

数据类型:公共汽车

输出

全部展开

输出样本,作为与输入样本具有相同数据类型的标量返回。

数据类型:int8|int16|uint8|uint16|布尔|fixdt (0,1,0)|fixdt(年代,西城,0)||

控制信号,表明当样品从数据输出端口有效。该块设置有效的港口1真正的),当输出中有有效样本时数据端口。

依赖关系

如果要启用此端口,请设置操作模式连续

数据类型:布尔

与样本流一起返回的控制信号samplecontrol公共汽车。总线包括开始结束,有效的控制信号,它表示框架的边界和样本的有效性。

依赖关系

若要启用此端口,请设置操作模式终止截断

数据类型:公共汽车

参数

全部展开

网格约束长度,指定为范围[3,9]中的整数。

代码生成多项式,指定为1 × -n八进制值的向量,其中n是多项式的长度。该块接受2到7个元素长度的多项式。

选择此参数可启用擦除端口。

用于构造每个回溯路径的网格分支数,指定为整数。该块支持范围为[3,万博1manbetx128]的回溯深度。对于未穿孔的样品,推荐深度为5×constraintLength.对于穿孔样品,建议深度为10×constraintLength.这些值平衡解码精度和所使用的内存量。

帧行为的结束,指定为以下模式之一:

  • 连续—该块不清除内部状态度量。输入有效的信号限定输入样本。

  • 截断—块在每帧之后重置状态度量,回溯路径从具有最佳度量的状态开始,以全零状态结束。输入ctrl总线限定输入样本并标记帧边界。

    请注意

    该模式需要最小的空间约束长度-1在帧之间循环。

  • 终止—块在每帧之后重置状态度量,回溯路径总是以全零状态开始和结束。输入ctrl总线限定输入样本并标记帧边界。

选择此参数可启用重置端口。当重置1真正的),一个周期后,块停止当前计算并清除内部分支和状态度量。

依赖关系

若要启用该参数,请设置操作模式连续

算法

全部展开

维特比译码器block实现了一个基于ram的回溯K-指针奇数算法[2].的参数K算法中所需的读指针数。这个实现有一个K值2,使用两个读指针和一个写指针访问三个内存。这三种操作类型是:

  • Write (Wr):将幸存者路径信息保存到内存中。

  • Traceback (TB):从内存中读取幸存者路径信息,并根据当前状态和幸存者分支计算之前的状态。然后,该进程跟踪的最早的状态被用作初始状态,以解码数据的前一个内存块。

  • 解码(Dec):从内存中读取幸存者路径信息并解码输入。

这三种记忆都是回溯深度tbd)的大小。的K-指针算法取4×回溯深度循环来解码数据。

该图显示了三个操作如何使用三个内存库。的两个倍数回溯深度,将幸存者指标正向写入mem# 1和mem# 2。然后,在继续写入mem# 3的同时,从mem# 2回溯以找到最小索引。将该索引用作指向mem# 1的traceback指针,并获得解码后的值。读取解码后的值后,块将新的输入存活路径写到相同的位置。写入开始下一个解码周期。

在Viterbi算法中,添加-比较逻辑可能导致状态度量溢出。这些溢出会降低解码器的性能。模归一化用于减轻溢出的影响[3].如图所示,该模块使用两个补加器和减法实现了模块化算法。减法被用来代替比较器。的最有效位(MSB)检测溢出(m1-m2),在那里m1平方米是归一化度量。当检测到溢出时,m1而且平方米提供一个包装值。

参考文献

[1] 3gpp ts 36.212。“多路复用和信道编码。”第三代伙伴计划;技术规范集团无线接入网;改进通用地面无线电接达(E-UTRA).URL:https://www.3gpp.org

[2]霍维茨,M.和R.布劳恩。维特比解码器中回溯幸存者内存管理的通用设计技术1997年南非通信和信号处理专题讨论会论文集: 63 - 68。皮斯卡塔韦,新泽西州:IEEE, 1997。

[3]熊志明、西格尔、昂格伯克、塔帕尔。Viterbi算法中度量归一化的VLSI架构IEEE国际通信会议,包括超级通信技术会议:卷4。1726 - 728。纽约:IEEE, 1990。

扩展功能

版本历史

在R2018b中引入

另请参阅