线性分组码的编码译码 您所在的位置:网站首页 编码t338165 线性分组码的编码译码

线性分组码的编码译码

2023-08-13 14:11| 来源: 网络整理| 查看: 265

线性分组码是通信原理中已经学到的一个概念,为了更好的编写代码,我又重新回顾了一次线性分组码的概念,网上的概念大多很乱,下面我进行一个梳理。 以(7,4)汉明码为例: (7,4)汉明码的来历:在信息位后面增加监督码元,可以指示错误码元的位置。(7,4)汉明码信息位为4位,监督位为3位,监督位有2^3=8种组合。如果只错一位,则可用其中一种表示无错,其余7种表示错码可能的7个位置,见下表。在这里插入图片描述 根据码元错误与校正子的关系可以列出监督方程,例如S1与a6 a5 a3 a2有关。在这里插入图片描述 将监督方程变形,将校正位左移,可以得出生成矩阵。 在这里插入图片描述 在这里插入图片描述 错误图样是接收端为了指示错码的位置,它可与校正子对应S=EH^T。发送码为A,接收码为B,错误图样E=B-A。

根据以上,对编码解码的重要概念已经有了基本的了解,下面是MATLAB代码及其解析。

clc;clear %编码过程 G=[1 0 1 1 1;0 1 1 0 1]%input('请输入生成矩阵G=') [k,n]=size(G);%生成矩阵的行数是信息位数 列数是编码位数 r=n-k; %判断传送信息的有效性 m=[0 0 0 1 1 0 1 1]%input('请输入需传送的信息m='); l=length(m); if(mod(l,k)) disp('输入的信息有误')%一组信息长度为k 总信息位l 必须为k的整数倍 else num=l/k;%num表示总共传递的信息组数 end %将输入信号的行向量转化为矩阵,矩阵每一行为一组信息 m_col=[]; for i=1:num m_col(i,:)=m(k*(i-1)+1:i*k); end m=m_col; %求监督矩阵H A=mod(m*G,2);%出现2要取余变0 编码矩阵A=m*G Q=G(:,k+1:n);%生成矩阵G=[Ik|Q] H=[Q',eye(r)];%H=[P|Tr]其中P=Q' disp('编码矩阵');A disp('监督矩阵');H %译码过程 B=[1 0 0 0 0 0 1 1 0 1 1 0 1 1 1 1 0 0 1 0];%input('请输入接收序列B=') %将接收信号的行向量转化为矩阵,矩阵每一行为一组信息 B_col=[]; for i=1:num B_col(i,:)=B(n*(i-1)+1:i*n); end B=B_col; %得出错误图样 S=mod(B*H',2);%S为校正子 E=S*pinv(H');%S=EH' E为错误图样 %以0.5为界,绝对值小于视为未出错 大于视为出错 for i=1:num for j=1:n if(E(i,j)>0.5-eps) E(i,j)=1; else E(i,j)=0; end end end resall=mod(B+E,2);%recall 为纠正后的结果 只有 0 1 错一位是 0变1 1变0 resnew=resall(:,1:2);%renew取前两列为译码的最终结果 disp('校正子');S disp('差错图样');E disp('译码结果');resnew

以下是运行结果: 在这里插入图片描述 在这里插入图片描述 通过结果可以看出监督矩阵,生成矩阵,校正子,错误图样的特点和它们之间的关系;可以检验译码的正确性;可以通过控制错码位数来观察线性分组码编码译码的性能,当发生一位错码时,可以通过错误图样进行纠正。



【本文地址】

公司简介

联系我们

今日新闻

    推荐新闻

    专题文章
      CopyRight 2018-2019 实验室设备网 版权所有