卷积码的编译码原理与MATLAB实现
作者:互联网
卷积码的编译码原理
\qquad
卷积码又称为连环码,它和分组码有明显的区别。(n,k)线性分组码中,本组r = n-k个监督元仅与本组k个信息元有关,与其他各组无关,即分组码编码器本身是无记忆性的。卷积码则不同,每一个(n,k)码段(也称为子码,通常较短)内的n个码元不仅与该段内信息元有关,而且与前面的m段信息元也相关。通常称m为编码存储。卷积码常用符号(n,k,m)表示。
\qquad
卷积码的编码器由移位寄存器、模二加法器以及开关电路组成。(2,1,2)卷积码的编码器如下图所示:
\qquad
起始状态,各级移位寄存器清零,即
S
1
S
2
S
3
S_1S_2S_3
S1S2S3为000。
S
1
S_1
S1等于当前输入数据,而移位寄存器状态
S
2
S
3
S_2S_3
S2S3存储以前的数据,输出码字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.
⎩⎨⎧C1C2=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 | 1 | 1 | 0 | 1 | 0 | 0 | 0 | 0 |
---|---|---|---|---|---|---|---|---|
S 2 S 3 S_2S_3 S2S3 | 00 | 01 | 11 | 10 | 01 | 10 | 00 | 00 |
C 1 C 2 C_1C_2 C1C2 | 11 | 01 | 01 | 00 | 10 | 11 | 00 | 00 |
状态 | A | B | D | C | B | C | A | A |
\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