Matlab 第四章
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
线性分组码
结构为(N,K)
其中K为信息位的长度 N-K为监督位的长度 信息位和监督位有一些线性方程联系着,并且各个 码之间是相互独立的
4.2 差错控制编/译码函数
encode 功能:差错控制编码
语法:
fmt:binary、decimal
生成矩阵
生成多项式
code = encode(msg,n,k,'linear/fmt',genmat) code = encode(msg,n,k,'cyclic/fmt',genpoly) code = encode(msg,n,k) =encode(msg,n,k,'hamming/binary'). code = encode(msg,n,k,'hamming/fmt',prim_poly)
4.3.1 线性分组码解码原理
gen2par 功能:生成矩阵和校验阵的转换函数。 语法:h=gen2par(g); g=gen2par(h); 说明:h=gen2par(g)可以由一个生成矩阵 g得到 校验阵h,反之亦可。
g=[1 1 0 1 0 0 0;0 1 1 0 1 0 0;1 1 1 0 0 1 0;1 0 1 0 0 0 1]; h=gen2par(g)
4.4.1 线性分组码原理
反映线性分组码纠错能力的重要参数是最小(汉明) 码距,即任何两个不同码字间的最小汉明距离。在 线性码中,最小距离等于该码的最小码重。
4.3.1 线性分组码解码原理
从长为N的码字中恢复出长为K的信元需要经过一 个矩阵运算--伴随式计算。 假定接收到的信号是码字v和信道中产生的错误序 列e的叠加,即r=v+e,则译码过程包括下面四个 步骤:
举例
r=[1 1 1 0 ]'; code=encode(r,7,4,'hamming') code1=decode(code,7,4)
0 1 0 1 1 1 0
4.2.2 通信工具箱差错控制函数举例
对二进制信息流进行 hamming编码,信元长度为 4,码 字长度为7: N=7; K=4; row_num=100; msg=randint(K*row_num,1,2); code=encode(msg,N,K,’hamming'); nois=randerr(row_num,N,1); code=rem(code(:)+nois(:),2); rcv=decode(code,N,K,' hamming'); err=biterr(rcv,msg);
,校正子与真值表的关系
校正子S s2 s1 s0
错误码位
真值表E e6 e5 e2 e3 e2 e1 e0
0 1 2 3 4 5 6 7
无 b4 b5 b2 b6 b0 b3 b1
0000000 0010000 0100000 0000100 1000000 0000001 0001000 0000010
1 1]]
4.3.3 线性分组码的MATLAB仿真作业
1 0 G 1 1 1 1 1 0 0 1 1 1 1 0 0 0 0 1 0 0 0 0 1 0 0 0 0 1
作业:假设生成矩阵为
(7 , 4) 线 性 分 组 码 。 用 MATLAB 函 数 encode 和 decode实现编/译码过程,要求:信息码用随机数;
4.1.1 差错控制编码过程
通信系统接收端
1.从信道接受信号并进行解调,恢复序列 2.按某种方式计算信息序列有无差错 3.检错/纠错
4.1.2 差错控制编码分类
分组码 线性编码 卷积码 非线性编码
汉明码 循环码
各码元仅与本组的信息元有关
各码元不仅与本组的信息元有关,还 与前面的若干组信息元有关
rem函数
求余函数
rem(x,y) has the same sign as x while mod(x,y) has the same sign as y.
rem(x,y) and mod(x,y) are equal if x and y have the same sign, but differ by y if x and y have different signs.
out = randerr(8,7,[0 2]) out = 0 0 0 0 1 0 1 1 0 0 0 0 0 1 0 0 0 0 0 0 1 0 0 1 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 0 1 1 0 0 0 0 0 0 0 0 0
out2 = randerr(8,7,[0 2; .25 .75]) out2 = 0 1 1 0 0 0 0 1 0 0 0 0 1 0 1 0 0 0 0 0 0 1 0 1 0 0 0 0 0 0 0 0 0 0 1 0 1 0 0 0 0 1 0 0 0 1 1 0 0 0 0 0 0 0 0 0
of which has exactly one nonzero entry in a random position. Each allowable configuration has an equal probability. out = randerr(m,n) generates an m-by-n binary matrix, each row of which has exactly one nonzero entry in a random position. Each allowable configuration has an equal probability. out = randerr(m,n,errors) generates an m-by-n binary matrix, where errors determines how many nonzero entries are in each row: If errors is a scalar, it is the number of nonzero entries in each row. If errors is a row vector, it lists the possible number of nonzero entries in each row. If errors is a matrix having two rows, the first row lists the possible number of nonzero entries in each row and the second row lists the probabilities that correspond to the possible error counts.
4.3.2 线性分组码的MATLAB仿真举例
例1 (7,4)线性分组码生成矩阵如下(通信原理 书中):
G=[1 0 0 0 1 1 1;0 1 0 0 1 1 0;0 0 1 0 1 0 1;0 0 0 1 0 1 1];
求线性分组码编码后的码组
4.3.2线性分组码的MATLAB仿真举例
程序: g=[1 0 0 0 1 1 1;0 1 0 0 1 1 0;0 0 1 0 1 0 1;0 0 0 1 0 1 1]; r=[0 0 1 0]'; code=encode(r,7,4,'linear',g) code = 0 0 1 0 g=[eye(4),[1 1 1;1 1 0;1 0 1;0 1 0 1
加入一定的噪声后进行解码 ;并且计算错误比特 数
4.3.3 线性分组码的仿真模块
线性分组码编码参数
线性分组码解码参数
序号
错误码位
真值表E e6 e5 e2 e3 e2 e1 e0
校正子S s2 s1 s0
0 1 2 3 4 5 6 7
无 b4 b5 b2 b6 b0 b3 b1
0000000 0010000 0100000 0000100 1000000 0000001 0001000 0000010
本原多项式
4.2.1 函数介绍
decode 功能:差错控制译码。 语法: msg = decode(code,n,k,'hamming/fmt',prim_poly) msg = decode(code,n,k,'linear/fmt',genmat,trt) msg = decode(code,n,k,'cyclic/fmt',genpoly,trt) msg = decode(code,n,k) [msg,err] = decode(...) syndtable [msg,err,ccode] = decode(...)
randerr
Generate bit error patterns Syntax out = randerr(m) out = randerr(m,n) out = randerr(m,n,errors) out = randerr(m,n,prob,state)
out = randerr(m) generates an m-by-m binary matrix, each row
第四章 差错控制编/译码
4.1 差错控制编码概述
在通信系统中,发送端发出的信号受到噪声的影响,
信号的传输波形若受到破坏,则会使得接收端可能 发生错误判决。
信道编码是现代通信系统广泛采用的一种差错控制 措施。
4.1.1 差错控制编码过程
通信系统发送端
1.按某种方式对信息计算,得到检错/纠错 码 2.把此检错/纠错编码附加到信息序列中 3.把上一步得到的信息序列经过载波调制之 后发送到信道中
计算r的伴随式的值;s=rHT
利用伴随式的值确定错误的位置; 将接收到的矢量还原为码字矢量
v=r-e; 从处理过的码字中恢复出原始的信息码元 。
4.4.2 线性分组码解码原理
当生成矩阵
序号
G
1 1 0 1 0 0 0 0 1 1 0 1 0 0 1 1 1 0 0 1 0 1 0 1 0 0 0 1
h= 1 0 0
0 1 0
0 0 1
1 1 0
0 1 1
1 1 1
1 0 1
Hamming码
[h,g,n,k] = hammgen(3) h=1001011 0101110 0010111 g=1101000 0110100 1110010 1010001 n=7 k=4
4.3 线性分组码
4.4.1 线性分组码原理
线性分组编/译码是一种常用的编/译码方法。其它一些编/ 译码方法,例如汉明码或 BCH 码,都是线性分组码的特 例。在线性分组码中,码字矢量是消息矢量的映射。 码字v和信元u有如下关系: v=uG G是生成矩阵(K行N列)
4.3 线性分组码
rem与mod函数比较
rem(3,-2)
ans =1
rem(-3,2)
ans =-1
ans =-1 ans =1
与X符号同
mod(3,Hale Waihona Puke Baidu2) mod(-3,2)
与Y符号同
4.2.2 通信工具箱差错控制函数举例
对二进制信息流进行hamming编码,信元长度 为4,码字长度为7: N=7; K=4; row_num=100; msg=randint(K*row_num,1,2); code=encode(msg,N,K,’hamming'); nois=randerr(row_num,N,1); code=rem(code(:)+nois(:),2); rcv=decode(code,N,K,' hamming'); err=biterr(rcv,msg);
000 001 010 011 100 101 110 111
4.3.1 线性分组码解码原理
通信工具箱为对称线性分组码提供了一个函数gen2par, 该函数可以由生成矩阵G计算出校验矩阵H的值。利用 伴随式的值,通过一个逻辑电路真值表就可以确定错误 的位置。
在通信工具箱中,单独的错误可以通过指令htruthtb的 运算发现(相当于求出校正子与真直表的对应关系)。 一旦求出e,v就可以通过有限域GF(2)上的简单加法运 算得到。