官方淘宝店 易迪拓培训 旧站入口
首页 > 无线通信 > 通信技术学习讨论 > 郁闷,哪位看过Matlab的Viterbi解码的代码

郁闷,哪位看过Matlab的Viterbi解码的代码

12-11
Matlab 7.0
toolbox/comm/comm/vitdec.m ,vit.c
我自己作了一个matlab的Viterbi软解码模型,其功能对应于
matlab的vitdec()函数的TERM模式,dectype = soft,以及 nsdec位量化
但是现在在AWGN,BPSK下面仿真出来比Matlab差零点几个dB,
我查看Matlab的Vit.c的代码,其中的策略是每输入一个codeblock(对应于
卷积编码器输出的n个比特的码字以及编码器输入的k个比特的信息位)就作一次
traceback,设traceback的长度是tblen,设编码器一次输入1比特的信息(k=1)
则第N次 traceback 会输出tblen比特信息位,并且改写第N-1次traceback输出的
tblen比特信息位中的后tblen-1个信息位,也就是说每次traceback最终只有1bit的
信息位作为译码结果输出。
但是这种策略会有一个问题产生,请看附件的图片(注:图中的例子仅有4个
状态,其仅用于示意说明,不是我要实现的实际情况)
图中,红色的表示正确的回溯路径,蓝色表示错误的回溯路径,
假设第N-1次的回溯路径是蓝色的,由于噪声的缘故,蓝色的回溯起点选择错误,
那么于是它回溯时的最后一个状态是错的(最左边的蓝色圆圈),在第N次回溯时,
译码器选择了正确的回溯起点状态(最左边的红圈),于是有红色的回溯路径中修正
了上次错误路径中的三个错误的状态,但是由于tblen的限制上次回溯时的最后一个
错误状态没有被修正,于是这可能导致出错,(因为状态跳转只会输出1或0所以
说可能),我分析现在的仿真中出错的情况就是如此,请看我的数据
DAB中的(4,1,7)卷积码,其移位寄存器长度是六个
以下的状态迁移的方向是正向的,即是和回溯方向相反的方向
无噪声时的状态迁移      ...,31 15 39 51 25 12 38,...
因噪声出错时的状态迁移  ...,31 28 46 55 59 12 38,...
请看,有噪时,状态31后面的状态是28,因为28!=int(31/2)同时
28!=int(31/2+2^(6-1))(因为是6个寄存器),所以说状态28和
状态31不是一个蝶形图里的,我认为这是因为上文中提到的回溯长度约束
所导致的原因。
我阅读了matlab的vit.c,试图找到Matlab不出错的原因,但是我没有成功
虽然我认为已经理解了其中代码的译码原理,但是还是找不到为何Matlab不出
错的原因。
哪位高人指点一下,在下不胜感激。

高人,你快出现吧,我苦啊

Top