BBYR Achieve
返回信息流
这是一条镜像帖。来源:北邮人论坛 / communications / #7551同步于 2008/10/23
该镜像源已超过 30 天没有更新,可能在源站已被删除。
Communications机器人发帖

小郁闷

Roul
2008/10/23镜像同步16 回复
单个卷积码BCJR的BER都能跟书上结果一样。 但做Turbo译码,总是有些问题,外信息计算,就是按照王新梅那本书上计算的啊。 咋回事呢,一周了,都还没找到问题到底出在哪里…… 太郁闷了
订阅后,新回复会通过你的通知中心匿名送达。
9 条回复
dcc1031机器人#1 · 2008/10/23
【 在 Roul 的大作中提到: 】 : 单个卷积码BCJR的BER都能跟书上结果一样。 : 但做Turbo译码,总是有些问题,外信息计算,就是按照王新梅那本书上计算的啊。 : 咋回事呢,一周了,都还没找到问题到底出在哪里…… : ................... 单个分量码的生成多项式和反馈多项式取对了没,这个很重要。。 还有交织器用的啥,一般来说用随机交织。 外信息计算不是很简单吗, log-MAP中做个减法而已。。 最后推荐篇论文 Turbo decoding and detection for wireless communications, proceedings of IEEE, VOL 95. NO.6 2007 June PS:要养成看英文文献的好习惯,国内的文章容易出错,他要是理解的稍有偏差,那就歇菜了。。
dcc1031机器人#2 · 2008/10/23
【 在 Roul 的大作中提到: 】 : 单个卷积码BCJR的BER都能跟书上结果一样。 : 但做Turbo译码,总是有些问题,外信息计算,就是按照王新梅那本书上计算的啊。 : 咋回事呢,一周了,都还没找到问题到底出在哪里…… : ................... 附件(670.4KB) 5-Turbo_Decoding_and_Detection_for_Wireless_Applications.pdf
dcc1031机器人#3 · 2008/10/23
算了, 我还是把文章直接传上来吧。。
Roul机器人#4 · 2008/10/24
真是太感谢您了。 单个分量码生成多项式用的是(23,35),测试了下单个卷积码的性能,是OK的。 交织器用的随机交织器。 单个卷积码的时候, 如果用L(uk)=log(a*gama*b/a*gama*b) 这样的方式,L(uk)判决计算BER的时候,就对的 如果用L(uk)=log(a*gamaE*b/a*gamaE*b)+Lc*ys的方式,L(uk)经判决计算BER就有问题了 Turbo码的时候 译码信息L(uk)=log(a*gamaE*b/a*gamaE*b)+Lc*ys+app_LLR //app_LLR为本次译码用到的先验信息,即上个译码器得出的外信息 而且,外信息我就用的是L_e(uk)=log(a*gamaE*b/a*gamaE*b)这样计算的。 我是用C语言写的,所有的信息都是用指针存储的, 因为单个卷积码的时候结果对的,指针的使用,该没啥问题。 所以就一直找不出到底是哪里出了问题, 本来一个挺简单的东西,搞了一周了,还是没查出来到底哪里出错了…… 谢谢dcc1031同志耐心的指导,真是感谢。 【 在 dcc1031 (太子换狸猫@一夜情寝室) 的大作中提到: 】 : 单个分量码的生成多项式和反馈多项式取对了没,这个很重要。。 : 还有交织器用的啥,一般来说用随机交织。 : 外信息计算不是很简单吗, log-MAP中做个减法而已。。 : 最后推荐篇论文 Turbo decoding and detection for wireless communications, proceedings of IEEE, VOL 95. NO.6 2007 June : PS:要养成看英文文献的好习惯,国内的文章容易出错,他要是理解的稍有偏差,那就歇菜了。。
dcc1031机器人#5 · 2008/10/24
【 在 Roul 的大作中提到: 】 : 真是太感谢您了。 : 单个分量码生成多项式用的是(23,35),测试了下单个卷积码的性能,是OK的。 : 交织器用的随机交织器。 : ................... 我觉的你对Turbo码外信息传递的理解还是有问题的 -----------------------------------------分割线------------------------------------ 如果用L(uk)=log(a*gamaE*b/a*gamaE*b)+Lc*ys的方式,L(uk)经判决计算BER就有问题了 Turbo码的时候 译码信息L(uk)=log(a*gamaE*b/a*gamaE*b)+Lc*ys+app_LLR //app_LLR为本次译码用到的先验信息,即上个译码器得出的外信息 --------------------------------------------------------------------------------------------------------------- L(uk)=log(a*gama*b/a*gama*b)这才是得到的对数似然比,这个似然比中包括了信道信息Lc和每比特的先验信息app_LLR,那外信息的计算就应该是 L_ex=L(uk)-Lc-app_LLR 经过交织之后,L_ex变成了下一次的先验信息app_LLR 这个先验信息 app_LLR是要体现在gama的计算中的,也就是说每比特计算gama值的时候就要考虑app_LLR也就是先验信息带来的影响。 所以我觉的你的理解还是有问题。。
Roul机器人#6 · 2008/10/24
很多材料,比如王新梅那本书里,在推导MAP算法的时候,都定义了一个gamaE, gamaE=exp(0.5*Lc*y_p*x_k), y_p是对应校验位经过信道传输后的值,x_k是对应校验位。 然后L_ex(uk)=log(a*gamaE*b/a*gamaE*b),我就把这个部分计算出来,直接当成了外信息 如果这样,按照书里面的推导,最后输入给判决器的译码信息 L(uk)=log(a*gamaE*b/a*gamaE*b)+Lc*ys+app_LLR 我试了一下,如果没有app_LLR,或者app_LLR=0时候,单个卷积码 译码方式一:L(uk)=log(a*gama*b/a*gama*b) 译码方式二:L(uk)=log(a*gamaE*b/a*gamaE*b)+Lc*ys 就单个卷积码来说,二者是有差别的, EbN0=3dB时,方式一 BER=1.525781e-003 方式二 BER=2.820547e-002 EbN0=6dB时,方式一 BER=1.320718e-006 方式二 BER=4.824219e-004 呵呵,我再试试你说的方法。 谢谢您哈:) 【 在 dcc1031 (太子换狸猫@一夜情寝室) 的大作中提到: 】 : 我觉的你对Turbo码外信息传递的理解还是有问题的 : -----------------------------------------分割线------------------------------------ : 如果用L(uk)=log(a*gamaE*b/a*gamaE*b)+Lc*ys的方式,L(uk)经判决计算BER就有问题了 : Turbo码的时候 : 译码信息L(uk)=log(a*gamaE*b/a*gamaE*b)+Lc*ys+app_LLR : //app_LLR为本次译码用到的先验信息,即上个译码器得出的外信息 : --------------------------------------------------------------------------------------------------------------- : L(uk)=log(a*gama*b/a*gama*b)这才是得到的对数似然比,这个似然比中包括了信道信息Lc和每比特的先验信息app_LLR,那外信息的计算就应该是 : L_ex=L(uk)-Lc-app_LLR : 经过交织之后,L_ex变成了下一次的先验信息app_LLR : 这个先验信息 app_LLR是要体现在gama的计算中的,也就是说每比特计算gama值的时候就要考虑app_LLR也就是先验信息带来的影响。 : 所以我觉的你的理解还是有问题。。
dcc1031机器人#7 · 2008/10/24
【 在 Roul 的大作中提到: 】 : 很多材料,比如王新梅那本书里,在推导MAP算法的时候,都定义了一个gamaE, : gamaE=exp(0.5*Lc*y_p*x_k), y_p是对应校验位经过信道传输后的值,x_k是对应校验位。 : 然后L_ex(uk)=log(a*gamaE*b/a*gamaE*b),我就把这个部分计算出来,直接当成了外信息 : ................... 我明白了,你理解的的确还有问题,当然也有很大可能你看的那书本来就有问题。 ----------------------------------------------------------------------------------------------------------------- gamaE=exp(0.5*Lc*y_p*x_k), y_p是对应校验位经过信道传输后的值,x_k是对应校验位 ------------------------------------------------------------------------------------------------------------------ 这公式本身就不对,这根本就不是gama值,也许所谓gamaE的意思是校验比特的对应信息。但需要特别注意,计算a (前向分支度量)和 b(后向分支度量)的时候,用到的是gama, 而不是gamaE. 计算gama的时候不能只考虑较验位,原来的信息比特也要包含进去。 注意红色的部分,我觉的这是你可能出错误的关键。 公式应该是gama=0.5*exp(y_p*x_k+y*x) , y就是信息比特经过信道接收的的值,x就是对应的信息比特 实际的0.5就是个常数可以不要 如果有先验信息则还要考虑先验信息的影响。 如果先验信息有 当前比特为1的概率为P1, 为0的概率为P0,则在计算gama的时候就需要把P1或P0乘进去。 ---------------------------------------------------------------------------------------------------------- 然后L_ex(uk)=log(a*gamaE*b/a*gamaE*b),我就把这个部分计算出来,直接当成了外信息 ----------------------------------------------------------------------------------------------------------- 实际的外信息应该写成这种形式 L_ex=log(a*gama*b/a*gama*b)-y-app_LLR 这里的y代表对应信息位经过传输得到的值 至于最终的译码 直接把log(a*gama*b/a*gama*b)的结果送去做判决就可以了,因为计算的本身就是似然比。 总结一下: 特别注意一下gama,明确求a(前向分支度量)和 b(后向分支度量)的时候用的是gama而不是gamaE. 其次就是计算gama的过程中注意先验信息的影响。 还有,你用的这个方法是MAP算法,计算复杂度高,而且用大量的exp运算,在AWGN信道下问题还不大,但在有些情况下,实际的计算中很容易产生计算结果溢出,也就是指数运算的结果太大或太小,超过了浮点数的表示范围了。 应该使用Log-MAP算法,将计算移到对数域进行,计算复杂度减小而且并不影响 性能。 PS:再多罗嗦两句,在我给出的这个方法中,译码器是不需要知道信噪比的,这一点从我给出的gama计算公式以及外信息L_ex中可以看出来。 你可以试验一下考虑或者不考虑Lc这个常系数,对性能有什么影响。 我给出的那篇IEEE文章中,其作者考虑了Lc,即译码器知道Lc的值。
dcc1031机器人#8 · 2008/10/24
国产书最大的坏处就是二手的东西,大家写着写着就不知道在写啥了。。 强烈支持原版论文。。。
Roul机器人#9 · 2008/10/24
恩,我计算a和b的时候,对a和b更新的时候,使用gama计算的, gamaE=exp(0.5*Lc*y_kp*x_k); gama =exp(0.5*uk*(Lc*y_ks+app_LLR))*gamaE; 就是在计算译码信息L(uk)和外信息L_ex(uk)的时候有不同的两种方式: L(uk) =log(a*gama*b/a*gama*b); L_ex(uk)=L(uk)-Lc*y_k-app_LLR; 或者 L(uk) =Lc*y_k+app_LLR+log(a*gamaE*b/a*gamaE*b); L_ex(uk)=log(a*gamaE*b/a*gamaE*b); 就这些计算不同。呵呵 【 在 dcc1031 (太子换狸猫@一夜情寝室) 的大作中提到: 】 : 我明白了,你理解的的确还有问题,当然也有很大可能你看的那书本来就有问题。 : ----------------------------------------------------------------------------------------------------------------- : gamaE=exp(0.5*Lc*y_p*x_k), y_p是对应校验位经过信道传输后的值,x_k是对应校验位 : ------------------------------------------------------------------------------------------------------------------ : 这公式本身就不对,这根本就不是gama值,也许所谓gamaE的意思是校验比特的对应信息。但需要特别注意,计算a (前向分支度量)和 b(后向分支度量)的时候,用到的是gama, 而不是gamaE. 计算gama的时候不能只考虑较验位,原来的信息比特也要包含进� : 注意红色的部分,我觉的这是你可能出错误的关键。 : 公式应该是gama=0.5*exp(y_p*x_k+y*x) , y就是信息比特经过信道接收的的值,x就是对应的信息比特 实际的0.5就是个常数可以不要 : 如果有先验信息则还要考虑先验信息的影响。 : 如果先验信息有 当前比特为1的概率为P1, 为0的概率为P0,则在计算gama的时候就需要把P1或P0乘进去。 : ---------------------------------------------------------------------------------------------------------- : 然后L_ex(uk)=log(a*gamaE*b/a*gamaE*b),我就把这个部分计算出来,直接当成了外信息 : ----------------------------------------------------------------------------------------------------------- : 实际的外信息应该写成这种形式 : L_ex=log(a*gama*b/a*gama*b)-y-app_LLR : 这里的y代表对应信息位经过传输得到的值 : 至于最终的译码 : 直接把log(a*gama*b/a*gama*b)的结果送去做判决就可以了,因为计算的本身就是似然比。 : 总结一下: : 特别注意一下gama,明确求a(前向分支度量)和 b(后向分支度量)的时候用的是gama而不是gamaE. : 其次就是计算gama的过程中注意先验信息的影响。 : 还有,你用的这个方法是MAP算法,计算复杂度高,而且用大量的exp运算,在AWGN信道下问题还不大,但在有些情况下,实际的计算中很容易产生计算结果溢出,也就是指数运算的结果太大或太小,超过了浮点数的表示范围了。 : 应该使用Log-MAP算法,将计算移到对数域进行,计算复杂度减小而且并不影响 : 性能。 : ※ 修改:·dcc1031 于 Oct 24 13:39:47 修改本文·[FROM: 59.64.139.*] : ※ 来源:·北邮人论坛 http://forum.byr.edu.cn·[FROM: 59.64.139.*]