卷积编码设计与仿真实验报告

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

卷积编码设计与仿真实验报告

一、实验目的

了解卷积码对信号的纠错性能,掌握维特比译码算法,分析卷积码不同码

率下纠错能力的强弱,深刻理解CCSDS标准、信道编译码等相关概念和算法。

二、实验内容

1、自己编码实现(2,1,3)卷积码的编译码,对比不同信噪比条件下,是否采用编码对于误码率性能的影响;

2、基于MATLAB自带的vitdec函数实现对(2,1,7)卷积码以及2/

3、3/4码率删除码的编译码,并对于不同码率抗噪声能力的强弱;

3、构造BPSK调制、加性高斯白噪声的传输环境。

三、实验原理

卷积码一般表示为(n,k,N)的形式,即将k个信息比特编码为n个比特的码组,N为编码约束长度,说明编码过程中相互约束的码段个数。卷积码编码后的n个码元不仅与当前组的k个信息比特有关,还与前N-1个输入组的信息比特有关。编码过程中相互关联的码元有N*n个。R=k/n是编码效率。编码效率和约束长度是衡量卷积码的两个重要参数。典型的卷积码一般选n,k较小,但

N值可取较大(>10),以获得简单而高性能的卷积码。

1、卷积码的编码原理

卷积码的编码器一般比较简单,为一个具有k个输入端,n个输出端,m 级移位寄存器的有限状态有记忆系统。下图所示为(2,1,7)卷积码的编码器。

图1 (2,1,7)卷积码编码器

若输入序列为u=(u0u1u2u3……),则对应两个码字序列 C1=(ca0ca1ca2ca3……)和C2=(cb0cb1cb2cb3……),相应的编码方程可写为 P1=u*C1,P2=u*C2,P=(P1,P2)。“*”符号表示卷积运算,P1,P2表示编码器的两个冲激响应,即编码器的输出可以由输入序列和编码器的两个冲击响应卷积而得到,故称为卷积码。这里的冲激响应指:当输入为[1 0 0 0 0 … … ]序列时,所观察到的两个输出序列值。由于上图N 值为7,故冲激响应至多可持续到第7位,可写为P1=[1 1 1 1 0 0 1],P2=[1 0 1 1 0 1 1]然后将两个输出端的码字序列合并为一个码字序列为C=(ca0cb0ca1cb1ca2cb2……)。若输入信息序列为[1 1 0 1];则P1=[1 0 0 1 0 1 0 1 0 1],P2=[1 1 1 1 1 0 1 1 1 1],C=[1 1 0 1 0 1 1 1 0 1 1 0 0 1 1 1 0 1 1 1]。

2、卷积码维特比译码

网格图可以描述卷积码的状态随时间推移而转移的情况。该图纵坐标表示所有状态,横坐标表示时间。网格图在卷积码的概率译码,特别是Viterbi 译码中非常重要,它综合了状态图法直观简单和树图法时序关系清晰的特点。

图2 译码器网格图

图中实线表示输入0时所走分支,虚线表示输入1时所走分支,编码时只需从起始状态开始依次选择路线并读出输出即可。假设从a 状态开始,输入为[1 0 1 1],则可由图中读出输出为[11 10 10 01]。

维特比译码是根据接收序列在码的格图上找出一条与接收序列距离(或其他量度)为最小的一种算法。它和运筹学中求最短路径的算法相类似。译码器从某个状态,例如从状态ɑ出发,每次向右延伸一个分支(对于l <L,从每个节点出发都有2种可能的延伸,其中L 是信息序列段数,对l≥L ,只有一种可能),并与接收数字相应分支进行比较,计算它们之间的距离,然后将计算所得距离加到被延伸路径的累积距离值中。对到达每个状态的各条路径的距离累积值进行比较,保留距离值最小的一条路径,称为幸存路径(当有两条以上取最小值时,可任

状态 t 1 t 2 t 3 t 4 t 5 t 6

10

00

01 11

取其中之一)。这种算法所保留的路径与接收序列之间的似然概率为最大,所以又称为最大似然译码。

四、实验过程

1、(2,1,3)卷积码的编译码实现

对于(n,k,N)卷积码,采用维特比译码需要构造2^N个状态转移矩阵,所

以我们采用编码器结构简单的(2,1,3)卷积码来实现维特比译码。对于(2,1,7)型卷积码,我们采用MATLAB自带的vitdec函数来实现维特比译码。编码主要

程序如下:

for ii=1:length(data)

inter_var=[data(ii) an]; %寄存器初始状态置0

first_out(ii)=mod(sum(cn_1.*inter_var),2);

second_out(ii)=mod(sum(cn_2.*inter_var),2);

an=inter_var(1:end-1);

output(ii*2-1:ii*2)=[first_out(ii) second_out(ii)];

end

data:输入码字,output:编码器输出码字

维特比译码程序主要分为俩部分,第一部分是筛选出最优幸存路径,第二

根据幸存路径进行回溯译码,主要程序如下:

function dec_out=func_conv_dec_213_hard(enc_out)

%寻找幸存路径

data_in=enc_out;

n=2;

k=1;

K=3;

m=K-1;

num_state=2^(k*m);

a=zeros(num_state,4);

a(1,:)=[0 0 1 1];

a(2,:)=[0 1 1 0];

a(3,:)=[1 1 0 0];

a(4,:)=[1 0 0 1];

t=length(data_in)/n;

path_metric=zeros(1,4);

path=zeros(num_state,t);

select=zeros(1,num_state);

for ii=1:t

for jj=1:2

temp=zeros(1,2);

temp(1)=path_metric(2*jj-1)+sum(xor(data_in(2*ii-

1:2*ii),a(jj,1:2)));

相关文档
最新文档