根据程序,我将双二进制turbo码的MAX-LOG-MAP译码器的工作流程总结如下:
函数名void maxlogmap(int g[][K], double *rec_s, double *rec_p, double *L_a, double *L_u, double *Alpha0, double *BetaN)
1、将传递进来的上一次迭代产生的*Alpha0和*BetaN作为本次译码的状态度量alpha和beta的初值。
2、根据传递进来的先验信息*L_a分别生成u={00,01,10,11}的四种先验信息,每种先验信息的长度与信息序列的长度相同,即为比特对的个数N,对于DVB-RCS标准来说,N=2k, k为比特个数。
3、生成译码网格图,即nextstate, nextoutput, prestate, preoutput,这个其他程序中也会出现,不再多作讨论。
4、递推计算alpha,对于每个时刻(共有N个时刻)中的每个状态(以8状态为例),都有四条路径进入该状态,分别对应着输入信息u={00,01,10,11}这四种不同的情况。将接收到的信道信息与每条路径上相应的输入或输出相乘再求和,算出分支度量gamma。求得gamma值后,分别与前一状态的alpha值相加,求最大值,得到新的alpha值。
5、递归计算beta,与前一步类似。
6、计算信息似然比
7、将网格末尾的alpha状态值和网格起始的beta状态值传递到函数外。