纠错编码基本实验matlab实现包含源代码

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

实验四 纠错编码基本实验

一、实验目的

1、通过实验理解线性分组码的基本原理;

2、练习根据理论分析自行设计实验方法的能力。

二、实验内容

1、已知一(10,4)线性分组码的生成矩阵为

1001110111111000111001101101011101111001G ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦

试用Matlab 求出该码的全部码字和最小汉明距离。

2、用Matlab 求x 15+1的所有因子,构造(15,4)循环码的所有可能的生成多项式;选择

其中一个作为(15,4)循环码的生成多项式,求出所有的许用码字,并计算最小汉明距离。

三、实验原理

1、线性生成码的原理

线性分组码的构成方式是把信息序列分成每k 个码元一段,并由这k 个码元按一定规则产生r 个校验位,组成长度为n = k + r 的码字,用(n, k) 表示信息码元与校验位之间为线性关系。

一个[n ,k ]线性分组码,是把从信源输出的以k 个码元为一组的信息组m ,通过信道编码器后,变成长度为n ≥k 的码组(码字)c 作为[n ,k ]线性分组码的一个码字。 设GF(q )是一个含有q 个元素的有限数域,若每位码元的取值有q 种(取自GF(q )),则信息组m 共有k q 种不同的状态,因此,需要k q 个码字c 。而长为n 的数组共有n

q 个,二进制时(q =2)共有n 2个。显然,n q 个n 维向量组成有限域GF(q )上的一个n 维线性空间V ,编码就是要在这个n 维线性空间中选出k q 个向量作为合法码字,其余的n q -k q 个向量为禁用码字。

如果选出的k q 个作为合法码字的向量的集合构成了V 的一个k 维线性子空间,则称它是一个q 进制[n ,k ]线性分组码。

如果值取自GF(q )上的[n ,k ]分组码的k q 个码字的集合C ,便构成了有限域GF(q )上的n 维线性空间V 的一个k 维线性子空间,则称C 是一个q 进制[n ,k ]线性分组码。

2、循环码的编码原理

在编码时,首先需要根据给定循环码的参数确定生成多项式g (x ),也就是从

的因子中选一个 (n-k )次多项式作为g (x );然后,利用循环码的编码特点,即所有循环码多项式A (x )都可以被g (x )整除, 来定义生成多项式g (x )。

根据上述原理可以得到一个较简单的系统循环码编码方法:设要产生(n,k )循环码,m (x )表示信息多 项式,则其次数必小于k ,而·m (x )的次数必小于n ,用·m (x )除以g (x ),可得余数r (x ),r (x )的次 数必小于(n-k ),将r (x )加到信息位后作监督位,就得到了系统循环码。

下面就将以上各步处理加以解释:

(1)用乘m (x )。这一运算实际上是把信息码后附加上(n-k )个“0”。例

如,信息码为110,它相当于m(x)=+x。当n-k=7-3=4时,·m(x)=+,

它相当于1100000。而希望的到得系统循环码多项式应当是A(x) = ·m(x) + r(x)。

(2)求r(x)。由于循环码多项式A(x)都可以被g(x)整除,也就是:

因此,用·m(x)除以g(x),就得到商Q(x)和余式r(x),即

这样就得到了r(x)。

(3)编码输出系统循环码多项式A(x)为:

例如,对于(7,3)循环码,若选用,信息码110时,则

这时的编码输出为:1100101。

四、具体实验方法

1、对于问题一,已知线性分组码的生成矩阵G,因为要产生系统码,而给定的生成矩

阵不是典型生成矩阵,因此首先要将G通过一系列初等行变换,变为典型生成矩阵。

然后利用码组矩阵A等于信息矩阵C与典型生成矩阵G的乘积,将所得的矩阵A

按照异或运算的规则进行相应的处理,即可求得所有的生成码字矩阵A(A中每一

行为一个生成码字),将生成码字矩阵A的每一行与其他行进行比较,如果对应值

相同则为0,不同则为1,将比较所得的结果保留在一个与A矩阵列数相同的矩阵

M中,再对M中的所有行求和,则得到任意两个码字的汉明距离S,对所得结果S

求最小值,即得到最小汉明距离。

2、对于问题二,首先利用函数cyclpoly函数来产生(15,4)循环码的所有可能的生成

多项式,然后在所有可能的生成多项式中任选一个作为(15,4)循环码的生成多项式

g,任选一个信息码元m1求其对应的循环码字,具体过程如下:

1)将信息码元m1*x^11,即将信息码元左移11位,并将其由多项式形式转化为矩阵形式m2

2)用g 除m2得到余数R,由于在求解余数时是按照一般的算术运算计算的,而实际要求的为模2运算,所以要经过适当的转化,转化为模2运算,得到符合要求的R

3)将m2与R 相加,即得到对应于信息码为m1的码字T

4)将得到的码字T 进行循环移位运算,即得到所有码字

5)利用与问题一同样的方法即可得到最小汉明距离

五、实验源代码、仿真结果及分析

1、已知一(10,4)线性分组码的生成矩阵为

1001110111111000111001101101011101111001G ⎡⎤⎢⎥⎢⎥=⎢⎥⎢⎥⎣⎦

试用Matlab 求出该码的全部码字和最小汉明距离。

(1)源代码

G=[1 0 0 1 1 1 0 1 1 1;1 1 1 0 0 0 1 1 1 0;0 1 1 0 1 1 0 1 0 1;1 1 0 1 1 1 1 0 0 1]

%生成矩阵

%将生成矩阵标准化,化为典型生成矩阵

B1=G(2,:),G(2,:)=G(3,:),G(3,:)=B1; %交换第2、3行的位置

G(3,:)=(~G(3,:) & G(2,:))|(G(3,:) & (~G(2,:))); %将第2行的数据与第3行的数据进行异

或运算作新的第3行的值

G(4,:)=(~G(4,:) & G(2,:))|(G(4,:) & (~G(2,:))); %将第2行的数据与第4行的数据进行异

或运算作为新的第4行的值

G(1,:)=(~G(1,:) & G(3,:))|(G(1,:) & (~G(3,:))); %将第3行的数据与第1行的数据进行

异或运算作为新的第1行的值

G(4,:)=(~G(4,:) & G(3,:))|(G(4,:) & (~G(3,:))); %将第3行的数据与第4行的数据进行

异或运算作为新的第4行的值

B2=G(1,:),G(1,:)=G(3,:),G(3,:)=B2; %交换第1、3行的位置

G(2,:)=(~G(2,:) & G(4,:))|(G(2,:) & (~G(4,:))); %将第4行的数据与第2行的数据进行异

或运算作为新的第2行的值

G(2,:)=(~G(2,:) & G(3,:))|(G(2,:) & (~G(3,:))); %将第3行的数据与第2行的数据进行异

或运算作为新的第2行的值

G(4,:)=(~G(4,:) & G(3,:))|(G(4,:) & (~G(3,:))); %将第3行的数据与第4行的数据进行异

或运算作为新的第4行的值

B3=G(3,:),G(3,:)=G(4,:),G(4,:)=B3; %交换第3、4行的位置

%信息位码元矩阵为C

C=[0 0 0 0;0 0 0 1;0 0 1 0;0 0 1 1;0 1 0 0;0 1 0 1;0 1 1 0;0 1 1 1;1 0 0 0;1 0 0 1;1 0 1 0;1 0 1 1;1 1 0 0;1 1 0 1;1 1 1 0;1 1 1 1]

%生成的含有全部码字的矩阵A

A=C*G

for i=1:16

for j=1:10

if (A(i,j)==2) |(A(i,j)==4)

相关文档
最新文档