信息论实验三----线性分组码hqu

% disp('输入3行4列矩阵')
% A=input('A=');%这个是汉明码的固定的矩阵
A=[1 1 1 0; 0 1 1 1; 1 1 0 1]; 
H=[A eye(3)];%校验矩阵,eye()是单位矩阵
G=[eye(4) A'];% 生成矩阵
M=[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];%信息位矩阵,也可以自己换成其他的来输入
C=mod(M*G,2);%输出码字,mod函数是模2和的函数

disp('输入接收序列')
R=input('R=');%输入书上P88页的1010011
S=mod(H*R',2);%生成伴随矩阵S
disp('伴随式S')
S=mod(H*R',2)
disp('一致校验矩阵H')
H=[A eye(3)]
if S'==[0 0 0]
    disp('传输无错,译码结果为:')
    disp(R(1:4))%译码输出
else
    disp('传输有错')
end
for i=1:7
    if S==H(:,i)%将产生的伴随矩阵和H的每一列进行比较
        if R(1,i)==0
           R(1,i)=1;
         else R(1,i)=0;
        end
        disp('错误位为')
        i
        disp('改正结果如下')
        R
    end
end
disp('最小码距为');
d=min(sum((C(2:16,:))'))
disp('输出码字为');
C=mod(M*G,2)

第一部分和第二部分代码如上:

%AWGN信道下的BER曲线
% 输入信息位
H = [1 0 0 1 0 1 1;0 1 0 1 1 1 0;0 0 1 0 1 1 1];
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];
lengh = 10000;
m = round(rand(1,lengh));
% 进行编码
for i = 1:2500
    for k = 1:4
        C(7*(i-1)+1:7*i) = mod(m(4*(i-1)+1:4*i) * G,2);
    end
end
% 进行传输
for cnt = 100:1500
    anr = cnt/100;
    anr_array(cnt-99) = anr;
    % 增加白噪声信号
    out = awgn(C,anr);
    % 进行判决
    I = size(out,2);
    % 接收编码
    for i = 1:I 
        if out(i) >= 0.5
            R(i) = 1;
        else
            R(i) = 0;
        end
    end
    plot(R);
    % 解码
    for i = 1:2500
        S = mod(H * (R(7*(i-1)+1:7*i))',2);
        for j = 1:7
            if S == H(:,j)
                R(7*(i-1)+1:7*i) = ~R(7*(i-1)+1:7*i);
            end
        end
    end
    for i = 1:2500
        dm(4*(i-1)+1:4*i) = R(7*i-3:7*i);
    end
    ber = 0;
    % 求BER
    for i = 1:10000
        if m(i) ~= dm(i)
            ber = ber + 1;
        end
    end
    ber = ber / 10000;
    ber_array(cnt-99) = ber;
end
plot(anr_array,ber_array);
title('AWGN信道下的BER曲线');
xlabel('信噪比/dB');
ylabel('比特出错概率');

第三部分实验代码如上:

实验总结:编码部分:公式 c=m*G;译码部分:s=R*(H的转置);阅读信息论书本P79-92

参考文档​​​​​​<信息论>[Matlab]-[实验三]线性分组码的编译码_matlab线性分组码-CSDN博客线性分组码编码与译码(MATLAB实现)_循环码快速阵列译码和标准阵列译码对比-CSDN博客

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

|灯|

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值