主要内容

comm.ViterbiDecoder

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

描述

comm.ViterbiDecoder系统对象™通过使用维特比算法解码卷积编码的输入符号以产生二进制输出符号。

使用Viterbi算法解码卷积编码的数据:

  1. 创建comm.ViterbiDecoder对象并设置其属性。

  2. 使用参数调用对象,就像调用函数一样。

有关系统对象如何工作的详细信息,请参见什么是系统对象?

创建

描述

例子

viterbidecoder= comm.ViterbiDecoder创建一个维特比解码器系统对象。该对象使用Viterbi算法解码卷积编码的输入数据。

viterbidecoder= comm.ViterbiDecoder(格子)设置TrellisStructure属性设置为格子

例子

viterbidecoder= comm.ViterbiDecoder (___的名字价值属性使用一个或多个名称-值,使用一个或多个名称-值参数,以及以前语法中的任何参数组合。例如,“TerminationMethod”、“连续”将终止方法指定为连续,以保存每一帧结束时的内部状态度量,以便与下一帧一起使用。

属性

全部展开

除非另有说明,属性为nontunable,这意味着在调用对象后不能更改它们的值。对象在调用时锁定,而释放功能解锁它们。

如果属性为可调,您可以随时更改其值。

有关更改属性值的详细信息,请参见使用系统对象的MATLAB系统设计

卷积码的网格描述,指定为包含速率的网格描述的结构KN代码。K输入比特流的个数,和N输出比特流的数量。

你可以使用poly2trellis函数来创建网格结构或手动创建它。有关此结构的更多信息,请参见卷积码的网格描述istrellis函数。

网格结构包含这些字段。

输入到编码器的符号数,指定为等于2的整数K,在那里K输入比特流的个数。

数据类型:

编码器输出的符号数,指定为等于2的整数N,在那里N输出比特流的数量。

数据类型:

编码器中的状态数,指定为2的幂。

数据类型:

当前状态和当前输入的所有组合的Next状态,指定为整数矩阵。矩阵大小必须为numStates2K

数据类型:

当前状态和当前输入的所有组合的输出,指定为八进制矩阵。矩阵大小必须为numStates2K

数据类型:

数据类型:结构体

输入格式到解码器,指定为“Unquantized”“硬”,或“软”

  • “Unquantized”—输入数据必须是未量化的双精度或单精度软值的实值向量。对象将正的值映射到逻辑1S和负值到逻辑上0年代

  • “硬”-输入必须是硬决策值的向量,即0年代或1s.输入的数据类型必须为双精度、单精度、逻辑或数字。

  • “软”-输入需要一个量化软值向量,表示为0到之间的整数2SoftInputWordLength- 1.输入的数据类型必须为双精度、单精度、逻辑或数字。或者,可以使用(fi(定点设计师)的单词长度等于指定的单词长度SoftInputWordLength财产。0被认为是最自信的0而且2SoftInputWordLength- 1作为最自信的人1

数据类型:字符|字符串

软输入字长,表示每个量化软输入值的位数,指定为整数。

依赖关系

属性可启用此属性InputFormat财产“软”

数据类型:

选项,用于对无效量化输入(即当输入值超出范围时)采取操作,指定为“忽略”“错误”.将此属性设置为“错误”因此,当量化的输入值超出范围时,对象会产生一个错误。

依赖关系

属性可启用此属性InputFormat财产“软”“硬”

数据类型:字符|字符串

回溯深度,指定为整数。回溯深度影响译码精度和时延。在输出中第一个解码符号之前的零符号数表示解码延迟。有关更多信息,请参见回溯和解码延迟而且回溯深度估计

当你设置TerminationMethod财产“连续”时,解码延迟为TracebackDepth×K0位表示速率K/N卷积码。K输入符号的数量,和N是输出符号的数量。

当你设置TerminationMethod财产“截断”“终止”,则不存在输出延迟。

数据类型:

编码帧的终止方法,指定为这些值之一。

  • “连续”- System对象在每一帧结束时保存内部状态度量,以便下一帧使用。对象独立地处理每个回溯路径。

  • “截断”- System对象独立地处理每一帧。回溯路径从具有最佳度量的状态开始,结束于全零状态。

  • “终止”- System对象独立地处理每一帧。回溯路径总是以全0状态开始和结束。

数据类型:字符|字符串

选项,以启用解码器重置输入,指定为逻辑1真正的)或0).将此属性设置为1真正的)。当这个额外的重置输入是非零值时,解码器的内部状态重置为初始条件。

依赖关系

属性可启用此属性TerminationMethod财产“连续”

数据类型:逻辑

选项,用于延迟输出重置,指定为这些逻辑值之一。

  • 1真正的解码器内部状态的重置发生在对象计算解码数据之后。

  • 0解码器内部状态的重置发生在对象计算解码数据之前。

依赖关系

属性可启用此属性ResetInputPort财产真正的

数据类型:逻辑

穿刺模式的来源,指定为这些值之一。

  • “没有”—该物体不适用刺穿。

  • “属性”对象根据指定的穿刺模式向量对穿刺码字进行解码PuncturePattern财产。

数据类型:字符|字符串

穿刺模式向量用于穿刺已解码的数据,指定为列向量。向量必须包含1年代和0年代,0表示穿孔位的位置。该穿刺模式必须与卷积编码器使用的穿刺模式匹配。

依赖关系

属性可启用此属性PuncturePatternSource财产“属性”

数据类型:

选项,以启用输入符号中的擦除规范,该输入符号指定为这些数值或逻辑值之一。

  • 1真正的-当你调用System对象时,它指定了一个擦除向量。这个向量表示要删除输入码字中的哪些符号。的值1表示已擦除的位。解码器不更新传入数据流中擦除的分支度量。擦除输入必须是双精度或逻辑列向量。擦除向量的长度必须等于输入数据的长度。

  • 0- System对象假设没有擦除。

数据类型:逻辑

输出的数据类型,指定为完整精度、整数、二进制值或最小的无符号整数。

当输入信号为整数数据类型时,必须具有定点设计器™用户许可才能在中使用此属性最小无符号整数完整的精度模式。

数据类型:字符

状态度量的数据类型,指定为“充分精确”“自定义”

当您将此属性设置为“充分精确”,对象将状态度量定点类型设置为numerictype ([], 16)

  • 当你设置InputFormat财产“硬”,则输入数据必须为列向量。该向量由无符号的定点数(fi对象)的字长1来实现定点维特比解码。基于此输入(要么a01),对象使用字长无符号整数计算内部分支度量l.在这种情况下,l由网格结构指定的输出比特数。

  • 当你设置InputFormat财产“软”,则输入数据必须为列向量。该向量包含无符号的定点数(fi对象)的字长N.在这种情况下,N软决策位的数目是否由SoftInputWordLength财产。

当调用System对象时,数据输入必须是0到2之间的整数N1。对象使用单词长度的无符号整数计算内部分支度量l= (N+Nout- 1 .在这种情况下,Nout由网格结构指定的输出比特数。

依赖关系

属性可启用此属性InputFormat财产“硬”“软”

数据类型:字符

状态度量的定点数据类型,指定为未缩放的numerictype(定点设计师)(定点设计器)对象,其签名为Auto。

依赖关系

属性可启用此属性StateMetricDataType财产“自定义”

数据类型:数字

使用

描述

例子

decmsg= viterbidecoder (码字解码卷积编码的输入数据,码字,通过使用维特比算法。decmsg是解码后的数据。

decmsg= viterbidecoder (码字“抹除”指定要擦除的对象的输入码字的符号。要启用此语法,请设置ErasuresInputPort财产1真正的).

decmsg= viterbidecoder (码字resetstate指定重置解码器内部状态的输入。要启用此语法,请设置TerminationMethod财产“连续”ResetInputPort财产1真正的).

输入参数

全部展开

卷积编码的消息,指定为数值列向量。中的数据类型和元素值码字取决于你如何设置InputFormat财产。

如果卷积码使用的字母是2N可能的输出符号,这个输入向量的长度必须为l×N对于某个正整数l

数据类型:

码字中的擦除符号,指定为二进制值向量。元素“抹除”必须为数据类型逻辑.的值1“抹除”向量对应擦除的符号,值0对应于非擦除符号。的长度码字必须等于的长度“抹除”

依赖关系

要启用此参数,请设置ErasuresInputPort财产1真正的).

解码器的内部状态重置,指定为数字或逻辑1真正的)或0).

依赖关系

要启用此参数,请设置TerminationMethod财产“连续”ResetInputPort财产真正的

数据类型:|逻辑

输出参数

全部展开

解码后的消息,作为二进制值列向量返回。的数据类型相同OutputDataType财产。

如果解码后的数据使用字母2K可能的输出符号,这个输出向量的长度是l×K

对象的功能

要使用对象函数,请将System对象指定为第一个输入参数。例如,释放system对象的系统资源obj,使用这种语法:

发行版(obj)

全部展开

一步 运行系统对象算法
释放 释放资源并允许更改系统对象属性值和输入特征
重置 重置的内部状态系统对象

例子

全部折叠

通过加性高斯白噪声(AWGN)信道传输卷积编码的8差分相移键控(DPSK)调制比特流。然后,使用维特比解码器对调制后的比特流进行解调和解码。

创建必要的System对象。

conEnc = com . convolutionalencoder;modDPSK = com . dpskmodulator (“BitInput”,真正的);chan = com . awgnchannel (“NoiseMethod”信噪比(SNR)“信噪比”10);demodDPSK = com . dpsk解调器(“BitOutput”,真正的);vDec = com . viterbidecoder (“InputFormat”“硬”);error = com . errorrate (“ComputationDelay”3,“ReceiveDelay”34);

按照以下步骤处理数据。

  1. 生成随机比特。

  2. 卷积编码数据。

  3. 应用DPSK调制。

  4. 将调制信号通过AWGN信道传递。

  5. 解调噪声信号。

  6. 使用维特比算法解码数据。

  7. 收集错误统计信息。

Counter = 1:20 data = randi([0 1],30,1);encodedData = conEnc(数据);modSignal = modDPSK(encodedData);receivedSignal = chan(modSignal);demodSignal = demodDPSK(receivedSignal);receivedBits = vDec(demodSignal);errors =错误(数据,receivedBits);结束

显示错误数。

错误(2)
Ans = 3

使用卷积编码器和带有定义的穿刺模式的维特比解码器对比特序列进行编码和解码。验证输入和输出位是否相同。

定义穿刺模式矩阵,然后将其重塑为矢量形式,以便与编码器和解码器系统对象一起使用。

pPatternMat = [1 0 1;1 10 0];pPatternVec =重塑(pPatternMat,6,1);

创建一个卷积编码器和维特比解码器,其中穿刺模式由定义pPatternVec

conEnc = com . convolutionalencoder (“PuncturePatternSource”“属性”“PuncturePattern”, pPatternVec);viDec = com . viterbidecoder (“InputFormat”“硬”“PuncturePatternSource”“属性”...“PuncturePattern”, pPatternVec);

创建带有适当接收延迟的错误率计数器。

error = com . errorrate (“ReceiveDelay”, viDec.TracebackDepth);

编码一个随机比特序列,然后解码编码后的消息。

dataIn = randi([0 1],600,1);dataEncoded = conEnc(dataIn);dataOut = viDec(dataEncoded);

验证输出数据中不存在错误。

errStats =错误(dataIn,dataOut);errStats (2)
Ans = 0

更多关于

全部展开

参考文献

[1]克拉克,乔治·C和j·比布·凯恩。数字通信纠错编码.通讯理论应用“,”纽约:全会出版社,1981年。

[2]吉特林、理查德·D、耶利米·f·海耶斯和斯蒂芬·b·韦恩斯坦。数据通信原则。传播学理论应用.纽约:全会出版社,1992年。

[3]安田,Y., K. Kashiki和Y. Hirata。“用于软决策维特比解码的高速率穿孔卷积码。”IEEE通讯汇刊32岁的没有。3(1984年3月):315-19。https://doi.org/10.1109/TCOM.1984.1096047。

[4]哈昆,D.和G.贝京。用于维特比和顺序解码的高速率刺穿卷积码IEEE通讯汇刊37岁的没有。11(1989年11月):1113-25。https://doi.org/10.1109/26.46505。

[5]贝京,G.哈昆,C.帕奎因。用于Viterbi和顺序解码的高速率刺穿卷积码的进一步结果IEEE通讯汇刊38岁的没有。11(1990年11月):1922-28。https://doi.org/10.1109/26.61470。

[6]Moision B。卷积码的截断深度经验法则信息理论与应用研讨会(2008年1月27日- 2008年2月1日,加州圣地亚哥),555-557。纽约:IEEE, 2008。

扩展功能

版本历史

在R2012a中引入