基于matlab的多路信道编码——汉明码

我们分两个方面分析,一是信道编码原理,二是matlab仿真。

一、信源产生了什么?

        信源的作用:将信息转换成电信号,数学上信源的输出是一个随时间变换的随机函数。

        也就是说信源序列是一组随机序列数,可以用特定函数产生信源序列:

        1、randi([a,b],m,n):产生一个m x n的均匀分布随机矩阵,元素的值属于[a,b]且取整数。

        2、randn(m,n) > 0.5  函数产生m x n的正态分布的随机矩阵,元素值在[0,1]。通过判断,可以得到0/1的随机数

        3、randsrc可以指定每一个符号的出现概率

(具体可见前文:matlab通信系统建模1.信源函数_marujie123的博客-CSDN博客)

        eg.产生四路信源序列:

%% 四路信源产生序列
I = 4 %信源数量
m=zeros(4,100);%m是一个4行100列的矩阵
for i = 1:I
    m(i,:)=randi([0,1],1,100);%m的每一行都是一组长度为100的随机序列
end
%产生的信源序列长度为100

二、为什么要信源编码?

        简而言之,就是信源产生的这些信源序列在传输时可能会出错,我们为了让它少出错并且出错了我们可以找到错误位置,我们就要信源编码,目的就是通过加冗杂来提高可靠性。

三、信源编码之——汉明码:

        信道编码的方式我选择的是汉明码编码,选择构造一个(7,4)汉明码,即码长为7,信息位为4。

       1、关于线性分组码:

       汉明码是线性分组码的一种。利用了奇偶校验位的概念,通过在数据位后面增加一些比特,可以验证数据的有效性。

         2、本次实验汉明码编码信息

        校验位与信息位的关系:

        code(5)=code(1)^code(2)^code(3)

        code(6)=code(1)^code(2)^code(4)

        code(7)=code(1)^code(3)^code(4)

        code(1,2,3,4)是信息位,code(5,6,7)是校验位。

        由此可以得到监督关系:[1 1 1; 1 1 0;1 0 1;0 1 1]

        并得到生成矩阵G,如下所示:

%% 四路信源产生序列
I = 4 %信源数量
m=zeros(4,100);%m是一个4行100列的矩阵
for i = 1:I
    m(i,:)=randi([0,1],1,100);%m的每一行都是一组长度为100的随机序列
end
%产生的信源序列长度为100


%% 信道编码
%使用MATLAB实现(7,4)汉明码编码
n=7;%码长
k=4;%信息位长
A=[1 1 1; 1 1 0;1 0 1;0 1 1];
%A代表了监督关系,监督关系是
%code(5)=code(1)^code(2)^code(3)
%code(6)=code(1)^code(2)^code(4)
%code(7)=code(1)^code(3)^code(4)
G=[eye(k) A];%生成矩阵
H=[A'  eye(n-k) ];%校验矩阵
%编码
code = zeros(4,175); %对于编码后序列进行定义
A=[0 0 0 0];
for i = 1:4
    for j = 1:4:100
        A=[m(i,j),m(i,j+1),m(i,j+2),m(i,j+3)];%将每路信源序列分成四个一组,作为信息位。
        A=mod(A*G , 2); %进行编码,四位的信息位变成七位的汉明码序列。
        for z = 1:7:175
            code(i,z)   = A(1);%对编码后的汉明码序列赋值给code
            code(i,z+1) = A(2);
            code(i,z+2) = A(3);
            code(i,z+3) = A(4);
            code(i,z+4) = A(5);
            code(i,z+5) = A(6);
            code(i,z+6) = A(7);
        end
    end
end

这里写的四路信源序列编码,是大作业的其中一部分,不能通过改变I来对其他通路数的信源序列编码,具体比如6路通路,可以根据代码具体修改。

下面:是正常的一个信源序列的信道编码:

信源序列长100,经过(7,4)汉明编码后,长175.

clc;
clear;
%% 信源产生序列
m=randi([0,1],1,100);%m的每一行都是一组长度为100的随机序列
%% 信道编码
%使用MATLAB实现(7,4)汉明码编码
n=7;%码长
k=4;%信息位长
A=[1 1 1; 1 1 0;1 0 1;0 1 1];
%A代表了监督关系,监督关系是
%code(5)=code(1)^code(2)^code(3)
%code(6)=code(1)^code(2)^code(4)
%code(7)=code(1)^code(3)^code(4)
G=[eye(k) A];%生成矩阵
H=[A'  eye(n-k) ];%校验矩阵
%编码
A=[0 0 0 0];

for i = 1:4:100
    A=[m(1,i),m(1,i+1),m(1,i+2),m(1,i+3)];%将每路信源序列分成四个一组,作为信息位。
    A=mod(A*G , 2); %进行编码,四位的信息位变成七位的汉明码序列。
        for j = 1:7:175
            for k = 1:7
                code(1,j+k-1) = A(k);%对编码后的汉明码序列赋值给code
            end
        end

end

  • 6
    点赞
  • 56
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值