线性分组码的定义

分组码是对信息序列分段编码。若对包含 k 个信息元的信息组 M
按照一定的编码规则产生包括 n 个码元的码组 C
编码规则定义为:
如果 fi(·),i = 0,1,…,n-1 均为线性函数,则称 C 为线性分组码。线性分组码一般用 (n,k,d)码表示,其中 n 为码长,k 为信息组长度,d 为码的最小距离。
实际上,(n,k,d)线性分组码是 q 元有限域 GF(q)n 维线性空间 Vn 中的一个 k 维子空间 Vn,k,如下图所示:
如果信息组 M 和码组 C 的所有元素均取自二元有限域 GF(2)(即{0,1}),则称为二元线性分组码。
二元线性分组码的编码过程实际上就是从包含 2k 个信息的 Vk 空间包含到 2n 个码字的 C 空间(Vn,k)的映射过程。也即 GF(2) 上信息组 M 到码字 C 的映射。如果编码函数都是线性的,则为线性分组码。
对于二元线性分组码,有如下结论:
①(n,k,d)线性分组码的最小距离 d 等于其非零码字的最小重量,即:②GF(2) 上(n,k,d)线性分组码中任何两个码字 C1 和 C2 之间满足关系:
③GF(2) 上线性分组码的任意三个码字之间的汉明距离满足如下三角不等式:
④任何(n,k,d)线性分组码的码字重量或者全部为偶数,或者重量为奇数的码字个数与重量为偶数的码字个数相等。
⑤任何(n,k,d)线性分组码的最大最小距离等于 n-k+1,即 d ≤ n-k+1。

例:(7,4,3)线性分组码。
下表给出了(7,4,3)线性分组码的信息组和码字的对应关系。

信息组 码字 信息组 码字
0000 00000000 1000 1101000
0001 1010001 1001 0111001
0010 1110010 1010 0011010
0011 0100011 1011 1001011
0100 0110100 1100 1011100
0101 1100101 1101 0001101
0110 1000110 1110 0101110
0111 0010111 1111 1111111

通过计算,可以验证上述 5 点结论的正确性。

线性分组码的生成矩阵

由于(n,k,d)二元线性分组码是 GF(2) 上 n 维线性空间的一个 k 维子空间,因此在码集合中一定可以找到一组码字 gk-1,gk-2,…,g0,使得所有码字都可以由这组码字的线性组合表示,即:也即码空间(k 维子空间 Vn,k)完全可以由这个 k 个独立码字 gi i = k-1,k-2,…,0 所组成的基底张成。gi i = k-1,k-2,…,0 是 k 维线性空间的一组基底(互不相关的行向量),若记 gi = (gi,0,gi,1,…,gi,n-1),则将这组码字写成矩阵形式,即为(n,k,d)线性分组码的生成矩阵 G。
(n,k,d)线性分组码的生成矩阵 G是一个 k*n 的二元矩阵。
例:(7,4,3)线性分组码中找到 4 个线性无关的行向量来构成生成矩阵 G。如下所示:

线性分组码的检验矩阵

根据线性代数知识,生成矩阵 G 是由一个 k 个线性无关的行向量构成的,因此一定存在一个由 n-k 个线性无关的行向量组成的矩阵 H 与之正交,即:
矩阵 H 是一个 (n-k)*n 的二元矩阵,即线性分组码的校验矩阵。一般情况下,线性分组码的校验矩阵 H 可以表示为:

例:前述(7,4,3)线性分组码的校验矩阵为:

实际上,(n,k,d)线性分组码编码的目的就是如何在 n 维线性空间 Vn 中找到编码要求的、由 2k 个向量组成的 k 维子空间 Vn,k。这相当于建立一组线性方程,已知系数和未知系数的个数分别为 k 个和 n-k 个,且使得码字恰好最小距离为 d。
建立的线性方程组为 :
写成矩阵和行向量的乘积形式,有
根据生成矩阵 G 的定义,对于系统吗,矩阵 G 的 k 列可以组成一个 k 维的单位矩阵 Ik,如果这个单位矩阵出现在矩阵 G 的最左边 k 列(也可以是最右边的 k 列),则码字 C 的前 k 位就是信息元。

线性分组码的纠错能力

对于(n,k,d)线性分组码,其检纠错能力与码字的最小距离直接相关。一般情况下,有如下结论:
①检测 e 个随机错误,则要求码的最小距离 d ≥ e+1。
②纠正 t 个随机错误,则要求码的最小距离 d ≥ 2t+1。
③纠正 t 个同时检测 e 个随机错误(e ≥ t),则要求码的最小距离 d ≥ t+e+1。

线性分组码编码

根据生成矩阵 G 进行线性分组码的编码过程非常简单,信息组 M 、码组 C 与生成矩阵 G 之间的关系为: 例:假设 M = (1 1 1 1),前述(7,4,3)线性分组码的编码过程为:

线性分组码译码

编码输出码字在信道上传输时可能产生一定的码元错误,这些码元错误称为错误图样。假设发送码字为 C,信道产生的错误图样为 E,则接收码字为 R = C+E。在前向纠错方式中,译码器的作用就是如何根据接收码字 R 来估计错误图样 E,进而得到对发送码字 C 的估计。
线性分组码的译码主要有伴随式译码和标准阵列译码两种方法。

伴随式译码

伴随式 S 定义为:
式中,S 是 n-k 维列向量。根据发送码字 C 与校验矩阵 H 之间的关系以及发送码字 C 与接收码字 R 之间的关系,有:
由此可以看出,伴随式的值仅与信道错误图样有关,与发送码字无关。如果在信道传输过程中无错误发生,即 E = 0,则 S = 0;否则 S ≠ 0。
伴随式译码算法的基本思想就是根据伴随式 S 的值来估计错误图样 E。如果将校验矩阵 H 写成列向量的形式:
则有
即伴随式 S 是校验矩阵 H 中列向量的线性组合。对于错误图样 E,码元中第 j 位发生错误时其值 ej = 1,否则 ej = 0。因此伴随式 S 的值实际上是出错码元对应的校验矩阵 H 的列向量的模 2 和的结果。
在线性分组码的纠错能力范围内,如果能够确定伴随式 S 的值是校验矩阵 H 的那个列向量或哪几个列向量的模 2 和,则可以确定错误图样 E,进而实现译码。因此,如果要使一个(n,k,d)线性分组码能够纠正小于等于 t 个错误,则要求小于等于 t 个错误的所有可能组合的错误图样对应的伴随式 S 均不相同,这等价于:
如果
则要求
即如果包含小于等于 t 个错误的错误图样 Ei ≠ Ej,则相应的伴随式必须满足 S(Ei) ≠ S(Ej)。
综上所述,伴随式译码的主要步骤如下:
①根据接收码字 R,利用公式 S = RHT 计算伴随式 S。
②根据伴随式 S,在码字纠错能力范围内得到错误图样 E 的估计 E^。
③估计发送码字 C^ = R+E^。
需要说明的式,对于二元码,上述所有运算都是在 GF(2) 中进行的。另外,如果在接受码字 R 中出现的错误数大于线性分组码的纠错能力 t,则可能产生不正确的译码结果。
例:对于前述(7,4,3)线性分组码,假设发送码字为全 0 码字 C,接收码字为 R = (0010000),则计算得到的伴随式为:
伴随式 S 与校验矩阵 H 的第 4 列完全相同,因此估计的错误图样为 R = (0001000),译码输出 C = R+E = (0001000),译码错误。这是因为该线性分组码的最小距离为 3,纠错能力为 1。接收码字中出现了多余 1 个错误,超出了其纠错能力,因此无法实现正确译码。

标准阵列译码

(n,k,d)线性分组码的 2k 个码字构成了 n 维线性空间的一个 k 维子空间,即一个子群。以子群为基础可以将整个 n 维线性空间的所有 2n 个元素划分成 2k 个陪集,如下标准阵列译码表所示:
在标准阵列译码表中,2k 个码字放在第一行,该子群的恒等元素 C1 (全0码字)放在最左边,然后在禁用码字集合中选择一个 E2 放置在下面一行,并计算预期所有码字的模 2 和,放在第 2 行,构成码空间的一个陪集。类似的选择 E3、 E4、…、 E2^(n-k) 并构成 2n-k 个陪集。其中第 1 列的向量称为陪集首。
标准阵列译码的关键问题式如何确定陪集首。一般原则是保证译码器能够纠正出现可能性最大的错误图样,即重量最小的错误图样,所以选择重量最小的 n 重向量作为陪集首,这样可以保证安排的译码表使得 Ci+Ej 与 Ci 的汉明距离最小,实现最小距离译码。在二元对称信道条件下等效于最大似然译码。译码时,如果接收码字 R 落到标准阵列译码表中的第 i 列,则译码输出就为相应的 Ci。如果发送码组为 Ci,则译码正确,否则译码错误。

MATLAB仿真实现

1、线性分组码的编码

code = rem(msg*G,2)

其中,G 为线性分组码的生成矩阵,msg 为传入的信息数据,2 表示二元域即 GF(2)。
2、线性分组码的译码

function decoded = decoder(n,k,rec,H,d)
% n:输入1:码字长度
% k:输入2:信息组长度
% rec:输入3:译码器接收的硬判决码字
% H:输入4:分组码的校验矩阵
% d:输入5:分组码的最小距离% decoded:输出1:译码输出码字[M,N] = size(H);
t = fix((d-1)/2);
% 初始化并计算不同个数H矩阵列向量的所有组合的个数
num = zeros(1,t);
for idx = 1:tnum(idx) = factorial(n)/factorial(n-idx)/factorial(idx);endmaxnum = max(num);out = zeros(t,maxnum,t);out(1,1:num(1),1) = 1:n;out = compound(out,n,num,t,1); % 计算伴随式组合函数Hcom = zeros(1,n-k);E = zeros(1,N);S = rem(rec*H',2);if find(S)for err = 1:tfor idx = 1:num(err)Hcom = zeros(1,n-k);for j = 1:errHcom = rem(Hcom + H(:,out(err,idx,j))',2);endif(sum(rem(S+Hcom,2)) == 0)E(out(err,idx,1:err)) = 1;decoded = rem(rec+E,2);endendendelsedecoded = rec;end
end

线性分组码编码与译码(MATLAB实现)相关推荐

  1. 了解线性分组码的编码原理并编程实现C语言,线性分组码的编译码(DOC).doc

    ****************** 实践教学 ****************** 兰州理工大学 计算机与通信学院 2013年秋季学期 计算机通信 课程设计 题 目: 线性分组码(7,3)码的编译码 ...

  2. 天津理工大学 信息论与编码实验4 离散信道编码-线性分组码

    一.实验目的 信道编码也叫差错控制编码,指在将要传输的信息序列中人为的添加一些保护成分(监督码元),从而在接收端译码时可以进行自动纠错,从而增强了信号的抗干扰能力. 掌握线性分组码编码原理: 二.实验 ...

  3. 循环码编码与译码(MATLAB实现)

    循环码的定义 循环码是一类满足循环特性的线性分组码,线性分组码对码的选取做了线性约束,而循环码是在线性约束的基础上增加了满足循环性的约束条件,是线性分组码的子类.下面以二元循环码进行说明. 由于 (n ...

  4. 算术编码、译码以及matlab实现

    算术编码是一种采用的编码,我们用matlab语言来实现算术码的编码.译码过程. 首先,我们给定研究范围为 2元信号.用{0,1}符号来表示,然后我们假设发送方和接收方都知道符号0出现的概率p(0)和符 ...

  5. 【编码译码】基于matlab QC-LDPC码编码和译码【含Matlab译码 2194期】

    ⛄一.获取代码方式 获取代码方式1: 完整代码已上传我的资源:[编码译码]基于matlab QC-LDPC码编码和译码[含Matlab译码 2194期] 点击上面蓝色字体,直接付费下载,即可. 获取代 ...

  6. matlab完成信源编码译码,Huffman编码和译码的MATLAB实现.doc

    Huffman编码和译码的MATLAB实现.doc Huffman编码及译码的MATLAB实现 沈逸峰 (上海师范大学 信息与机电工程学院,上海 200333) 摘要:本论文首先介绍了Huffman编 ...

  7. 信道编解码(2)LDPC编码_译码

    LDPC编码_译码 1 LDPC码简介 2 LDPC编译码实例 3 仿真程序 1 LDPC码简介 LDPC码即低密度奇偶校验码(Low Density Parity Check Code,LDPC), ...

  8. 通信算法之二十三:5G NR的LDPC编码与译码

    [转载] LDPC码即低密度奇偶校验码(Low Density Parity Check Code,LDPC) LDPC码最早在20世纪60年代由Gallager在他的博士论文中提出,但限于当时的技术 ...

  9. matlab完成信源编码译码,matlab哈夫曼译码

    Huffman 编码的 matlab 实现 一.信源编码介绍 为了...经典的方法还是仙农编码 法.费诺编码法和霍夫曼...信源编码和译码,而是事先规定一个 译码差错率的...... 2013 Vol ...

最新文章

  1. oracle触发器高级教程
  2. java基础1之java语言基础1
  3. OkHttp透明压缩,收获性能10倍,外加故障一枚
  4. 怎么调整矩形边框宽度_Illustrator实例教程:利用自定义画笔绘制中国风传统边框...
  5. windows2003在打‘SP2’补丁时提示“拒绝访问”
  6. atheros无线网卡驱动_5.8G无线网桥CPE,安防监控拍档高清无干扰
  7. 不借助第三方jar包实现文件上传
  8. SPSS反向题处理(图文+数据集)【SPSS 011期】
  9. 校园卡系统mysql与java结合_基于Java+JSP+Mysq+Servletl的校园卡一卡通管理系统
  10. threejs 三面体_three.js几何体对象_三维建模_郭隆邦技术博客
  11. VS2019配置WTL10.0
  12. win2008系统 安装hplaserj1010打印机驱动程序
  13. java 中Protect 关键字
  14. collectingAndThen​
  15. 怎么实现从抖音内跳转到微信关注页面?
  16. leetcode 56. 合并区间
  17. 单片机小白之旅—51仿真器
  18. 悬剑武器库团队内部日刊
  19. C++下使用glog教程
  20. java开源博客系统solo_Solo Java 开源博客

热门文章

  1. 互联网经济的发展基石
  2. 项目实施过程中的优化建议
  3. 12v电流表的正确接法_电流表的正确用法图解
  4. 深户优点VS 深户缺点
  5. html 播放f4v,配置 nginx 支持 f4v视频格式播放
  6. Intel校招面试面经
  7. HBASE原理及使用
  8. POJ_1200 Crazy Search ( Hash映射 )
  9. 机器学习中的数学(一):向量、求和符号、累乘符号
  10. 华为eNSP实验:NAT地址转换加端口地址映射