其他分享
首页 > 其他分享> > 卷积码的编译码原理与MATLAB实现

卷积码的编译码原理与MATLAB实现

作者:互联网

卷积码的编译码原理

\qquad 卷积码又称为连环码,它和分组码有明显的区别。(n,k)线性分组码中,本组r = n-k个监督元仅与本组k个信息元有关,与其他各组无关,即分组码编码器本身是无记忆性的。卷积码则不同,每一个(n,k)码段(也称为子码,通常较短)内的n个码元不仅与该段内信息元有关,而且与前面的m段信息元也相关。通常称m为编码存储。卷积码常用符号(n,k,m)表示。
\qquad 卷积码的编码器由移位寄存器、模二加法器以及开关电路组成。(2,1,2)卷积码的编码器如下图所示:
(2,1,2)卷积码的编码器
\qquad 起始状态,各级移位寄存器清零,即 S 1 S 2 S 3 S_1S_2S_3 S1​S2​S3​为000。 S 1 S_1 S1​等于当前输入数据,而移位寄存器状态 S 2 S 3 S_2S_3 S2​S3​存储以前的数据,输出码字C由下式决定,即:
{ C 1 = S 1 ⨁ S 2 ⨁ S 3 C 2 = S 1 ⨁ S 3 \left\{\begin{aligned}C_1&=S_1\bigoplus S_2\bigoplus S_3\\C_2&=S_1\bigoplus S_3\end{aligned}\right. ⎩⎨⎧​C1​C2​​=S1​⨁S2​⨁S3​=S1​⨁S3​​
\qquad 由于 C 1 C_1 C1​对应的加法输入信号及寄存器 m 1 , m 2 m_1,m_2 m1​,m2​相连,因此,对应的二进制序列是111,对应的八进制序列是7, C 2 C_2 C2​对应的加法器与输入信号及寄存器 m 2 m_2 m2​相连,因此,对应的二进制序列为101,对应的八进制序列为5,因此,这个卷积编码器生成的多项式是[7 5]。
\qquad 当输入数据D=[1 1 0 1 0]时,输出码字可以计算出来,具体计算过程参见下表,另外为了保证全部的数据通过寄存器,还必须在数据位后加3个0。

S 1 S_1 S1​11010000
S 2 S 3 S_2S_3 S2​S3​0001111001100000
C 1 C 2 C_1C_2 C1​C2​1101010010110000
状态ABDCBCAA

\qquad 从上述的计算可知,每1位数据,影响m+1个输出子码。称m+1为编码约束度。每一个子码有n个码元,在卷积码中有约束关系的最大码长度则为(m+1)n,称为编码约束长度。(2,1,2)卷积码的编码约束度为3,约束长度为6。

卷积码的编译码案例:
仿真BPSK调制在AWGN信道下分别使用卷积码和未使用卷积码的性能对比,其中,卷积码的约束长度为7,生成多项式为[171,133],码率为1/2,译码分别采用硬判决译码和软判决译码。
代码如下:

clear all 
EbNo = 1:10;             %信噪比范围
N = 100000;              %信息比特个数
M = 2;                   %BPSK调制
L = 7;                   %约束长度
trel = poly2trellis(L,[171,133]);         %卷积码生成多项式
tblen = 6*L;                              %Viterbi译码器回溯深度
msg = randi([0,1],1,N);                   %信息比特序列
msg1 = convenc(msg,trel);                 %卷积编码
x1 = pskmod(msg1,M);                      %BPSK调制
for i = 1:length(EbNo)
    %加入高斯白噪声,因为码率为1/2,所以每一个符号的能量要比比特能量少3dB
    y = awgn(x1,EbNo(i)-3);
    y1 = pskdemod(y,M);                                   %硬判决
    y2 = vitdec(y1,trel,tblen,'cont','hard');             %Viterbi译码
    [err ber1(i)] = biterr(y2(tblen+1:end),msg(1:end-tblen)); %计算误比特率
    
    y3 = vitdec(real(y),trel,tblen,'cont','unquant');     %软判决
    [err ber2(i)] = biterr(y3(tblen+1:end),msg(1:end-tblen)); %计算误比特率
end
ber = berawgn(EbNo,'psk',2,'nodiff');                  %BPSK调制理论误比特率
figure();
semilogy(EbNo,ber,'-kd',EbNo,ber1,'-ko',EbNo,ber2,'-k*');
legend("BPSK理论误比特率",'硬判决的误比特率','软判决的误比特率');
xlabel('EbNo');
ylabel("误比特率");

标签:end,qquad,比特率,EbNo,编译,MATLAB,卷积码,tblen
来源: https://blog.csdn.net/qq_43520653/article/details/111461387