1、序列依次移入一个两级移位寄存器,编码器每输入一位信息bi,输出端的开关就在c1和c2之间来回切换一次,输出为c1,i和c2,i ,其中c1,i=bi+bi-1+bi-2c2,i=bi+bi-2图11 (2,1,2)卷积码编码器设寄存器m1、m2的起始状态为全零,则编码器的输入输出时序关系可用图12表示。图12 (2,1,2)卷积码编码器的输入输出时序要使最后1 位输入同样影响3对输出,并且使编码器回到全零状态,还需使编码器多输出2对信息,为了做到这一点,需要增加2个时钟循环,并且在此期间保持输入为0,这一过程叫做“点亮”编码器。如果不执行“点亮”操作,最后2位输入信息的纠错能力就会下降。2、V
2、iterbi译码原理(软判决)维特比译码是基于最大似然准则的概率译码,它的基本思想是比较接收序列与所有可能的发送序列,从中选择与接收序列汉明距离最小的发送序列作为译码输出。可能的发送序列与接收序列的汉明距离称为量度。维特比译码使用网格图描述卷积码,每个可能的发送序列都与网格图中的一条路径相对应,如果在某个节点上发现某条路径已不可能与接收序列具有最小距离,那么就放弃这条路径,这样一直进行到倒数第二级。由于这种方法较早地丢弃了那些不可能的路径,因而减轻了译码的工作量。Viterbi译码分硬判决和软判决两种,在结构和译码过程上没有区别,区别在于分支度量的计算方法。硬判决是指解调器根据其判决门限对接收
3、到的信号波形直接进行判决后输出0或1,换句话说,就是解调器供给译码器作为译码用的每个码元只取0或1两个值,以序列之间的汉明距离作为度量进行译码,适用于二进制对称信道(BSC)。而软判决的解调器不进行判决,直接输出模拟量,或是将解调器输出波形进行多电平量化(不是简单的0、1两电平量化),然后送往译码器,即编码信道的输出是没有经过判决的“软信息”。软判决译码器以欧几里德距离作为度量进行译码,软判决译码算法的路径度量采用“软距离”而不是汉明距离,最常采用的是欧几里德距离,也就是接收波形与可能的发送波形之间的几何距离,是一种适合于离散无记忆信道(DMC)的译码方法。下面利用图解的方法来说明维特比解码的
4、方法和运作过程。设输入编码器的信息序列为(1 1 0 1 1 0 0 0 ),则由编码器输出的序列 Y=(1 1 0 1 0 1 0 0 0 1 0 1 1 1 0 0 ),编码器的状态转移路线为 abcdbdca。若收到的序列R=(0 1 0 1 0 1 1 0 0 1 0 1 1 1 0 0 ),对照网格图来说明维特比译码的方法。 由于该卷积码的约束长度为 3位,因此先选择接收序列的前 6 位序列R1 =(0 1 0 1 0 1),同到达第 3时刻可能的 8 个码序列(即 8 条路径)进行比较,并计算出码距。该例中到达第3 时刻a点的路径序列是(0 0 0 0 0 0)和(1 1 1 0
5、1 1 ) ,它们与R1的距离分别是 3 和4;到达第 3 时刻b点的路径序列是(0 0 0 0 1 1)和(1 1 1 0 0 0) ,它们与R1的距离分别是 3 和4,到达第 3 时刻c点的路径序列是(0 0 1 1 1 0)和(1 1 0 1 1 0) ,与 R1 的距离分别是 4 和1;到达第 3 时刻d 点的路径序列是(0 0 1 1 0 1)和(1 1 0 1 1 0) ,与 R1 的距离分别是 2 和3。上述每个节点都保留码距较小的路径为幸存路径,所以幸存路径码序列是(0 0 0 0 0 0) 、 (0 0 0 0 1 1) 、 (1 1 0 1 0 1)和(0 0 1 1 0
6、1) ,如图2-3(a)所示。用与上面类同的方法可以得到第 4、5、6、7 时刻的幸存路径。需指出对于某一个节点而言比较两条路径与接收序列的累计码距时,若发生两个码距值相等,则可以任选一路径作为幸存路径,此时不会影响最终的译码结果。图 2-3(b)给出了第 5 时刻的幸存路径,在码的终了时刻a状态,得到一根幸存路径,如图 2-3(c)所示。由此看到译码器输出是R =(1 1 0 1 0 1 0 0 0 1 0 1 1 1 0 0) ,即可变换成序列(1 1 0 1 1 0 0 0) ,恢复了发端原始信息。比较 R和R序列,可以看到在译码过程中己纠正了在码序列第 1 和第7位上的差错。当然,差错
7、出现太频繁,以至超出卷积码的纠错能力,则会发生误纠,这是不希望的。图2-3(a)图2-3(b)图2-3(c)Viterbi译码的缺点是随着约束长度的增加算法的复杂度增加很快。约束长度N为7时要比较的路径就有64条,为8时路径变为128条。 (2(N-1)。所以Viterbi译码一般应用在约束长度小于10的场合中。3、实验过程1.产生数据int* gen_data(long data_len)/使用指针函数返回生成的输入数组srand(unsigned)time(NULL); /头文件是#include array = (int *)malloc(data_len * sizeof(int);/
8、开辟动态数组,为了防止栈溢出for (t = 0; t 0.5);2.卷积码编码原理根据生成子元g2K = 1, 1, 1, 0, 1 , /* 35 */ 1, 0, 0, 1, 1 ; /* 23 */然后编码 input_len + m; t+) shift_regsr_head = *(unencoded_data + t);/移位寄存器首指针指向unencoded_data p = 0; q = 0; for (j = 0; j = 1); /第三步:若s大于1,则返回第一步 if /否则,计算x1 (!s) x1 = 0; else x1 = v1*sqrt(-2.0*log(s)
9、 / s); /log(s)默认对数的底为e return (mean + sigma*x1);4.软判决译码主要是填充网格,然后选择最优路径:for (j = 0; number_of_states; j += step)/重复每个可能的卷积编码器的输出组for (l = 0; l 1;binary_output1 = outputjl & 0x00000001;branch_metric = branch_metric +abs(*(channel_output_matrix + (0 * channel_length + t) - 7 * binary_output0)+ abs(*(c
10、hannel_output_matrix + (1 * channel_length + t) - 7 * binary_output1); /选择累加误差最小的if (accum_err_metricnextstatejl1 accum_err_metricj0 + branch_metric)accum_err_metricnextstatejl1 = accum_err_metricj0 + branch_metric;state_historynextstatejlsh_ptr = j; /循环l结束 /j结束,更新网格四、实验结果可以观察到,输出译码结果与发送结果完全一致。五、实验分析软判决译码具有良好的译码效果,可以获得比硬判决多23dB的增益。并且在信噪比增大情况下,其误码率也在下降。
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1