信息伦实验MATLAB实现汉明码编译码及误码率分析

信息论与编码基础课程
实验报告
实验名称:
Hamming码编译码实验
电力安全性评价
学员姓名:
学号:
组别:
专业:
指导教师:
班级
完成时间:
2020年3月17
成绩:
Hamming码编译码实验
一.实验目的和要求
熟悉Hamming的设计原理,编程实现(15,11)Hamming的编码和译码算法,验证Hamming码的检错能力和纠错能力。
原子吸收法
二.实验内容和原理
内容:产生二进制(15,11)Hamming码的生成矩阵,利用生成矩阵完成编码,利用BSC模拟信道传输,产生二进制(15,11)Hamming码的校验矩阵,利用校验矩阵完成译码
要求改变信道转移概率,绘制误码率和BSC信道转移概率的关系图禁用encode和decode等MATLAB内置函数,可参考bsc函数。
原理:Hamming码是一种奇偶校验系统,它将信息用逻辑形式编码,只要增加少数几个校验位,就能检测出一位出错并自动改正,即实现自动纠错。它的实现原理,是在k个数据位之外加上r个校验位,从而形成一个k+r位的新码字,使新码字的码距比较均匀地拉大。把数据的每一个二进制位分配在几个不同的奇偶校验位的组合中,当某一位出错后,就会引起相关的几个校验位的值发生变化,这不但可以发现出错,还能指出是哪一位出错,为进一步自动纠错提供了依据。可采用线性分组码的通用编码方法实现Hamming码的编码步骤,再采用伴随式译码表方法完成Hamming码的译码过程。
三.操作方法和实验步骤
完成(15,11)Hamming码编译码的Monte Carlo仿真,绘制误码率和BSC信道转移概率的关系图,分析其与理论纠错能力之间的关系。
(一)汉明码编码
汉明码生成矩阵和一致校验矩阵直接使用内置函数hammgen()获得,生成信息元矩阵M,传输元矩阵C=M*G。
(二)模拟BSC信道
模拟BSC信道传输,遍历传输码字矩阵C,使用rand生成均匀分布的随机数,若该数大于p则传输误码。由于二元信源特性,使用模2加1即可实现0/1的互换。经过BSC后可得到接收码字集合R,顺便计算如果只传输信息元的误码率。
(三)汉明码译码
伴随式译码,首先计算伴随式,汉明码的特性规律,陪集首与伴随式译码表有关系,根据对应关系得到错误图样E,由进行译码。同时可计算汉明码误码率。
(四)输出关系图
输出信道转移概率和误码率的关系图。
四.经纬度地图实验数据记录和处理
clear all;clc;
r=4;                                %r=4,理论上对r取不同值可完成不同汉明码实验         
[H,G,n,k]=hammgen(r);              %使用内置函数hammgen()生成汉明矩阵
a=2^k;                              %为方便调用置a
%%%%%%%%%%%%%%%汉明码编码部分%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%汉明码编码部分%%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%汉明码编码部分%%%%%%%%%%%%%%%
M=zeros(a,k);                      %信息组矩阵M,为a行 k列
for i=0:(a-1)
    m=dec2bin(i,k);                %十进制转2进制
    for j=1:k                      %将转换成的二进制数依次给矩阵
        if m(j)=='0'
            M(i+1,j)=0;
        else
            M(i+1,j)=1;           
        end
    end
end
C=mod(M*G,2);                      %生成传输矩阵C=M*G
%%%%%%%%%%%%%%%信道传输部分%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%信道传输部分%%%%%%%%%%%%%%
%%%%%%%%%%%%%%%信道传输部分%%%%%%%%%%%%%%
T=0;                        于莎燕%T用来计数,提供游标,最终记录的是转移概率p的次数
for p=0.001:0.001:0.3
    T=T+1; 
    R{T}=C;              %R为传输矩阵a*n,由于p取值不同故放在不同单元中
    for i=1:a                      %遍历每一行每一列的元素
        for j=1:n
            ra=rand(1);            %随机生成一个0-1的数,此处是模拟BSC信道
            if ra<=p %如果随机生成的ra<=p,对该元素模2加1就实现了0/1互换
                R{T}(i,j)=mod(R{T}(i,j)+1,2);
            口疮灵end
        end
    end
    err{T}=mod(R{T}+C,2);          %err为等维度的矩阵,记录错误信息码所在位置为1
    ce=0;                          %ce为直接通过bsc的错误码元数,每次置零
    for i=1:a
        if sum(err{T}(i,(n-k+1):n))>0
            ce=ce+1;                %如果每行中出现1,则出现传输错误
        end
    end
    Pce(T) =ce/a;                    %Pce记录不同转移概率情况下误码率
    ErrL(T)=1-(1-p)^n-n*p*(1-p)^(n-1);%ErrL记录汉明码理论误码率
    PceL(T)=1-(1-p)^k;                %PceL记录理论误码率
end
%%%%%%%%%%%%%%%%%%%接收译码部分%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%接收译码部分%%%%%%%%%%%%%
%%%%%%%%%%%%%%%%%%%接收译码部分%%%%%%%%%%%%%
for z=1:T
    A{z}=zeros(a,n);                        %置A为译码输出矩阵,a行,n列
    S=mod(R{z}*H',2);                      %计算R的伴随式矩阵
    for i=1:a                              %遍历S的每一行
        if S(i,:)==zeros(1,n-k) %如果S=0,则传输无错,直接把R给A(按行)
            A{z}(i,:)=R{z}(i,:);
        else
            for j=1:n        %出错则遍历,寻伴随式对应错误图样
                if S(i,:)==H(:,j)'
                    E=dec2bin(2^(n-j),n); %计算R的错误图样(来自网络经验)
                    A{z}(i,:)=mod(R{z}(i,:)-E,2);      %C=R-E
                    break;                              %如果到直接跳出陈运泰
                end
            end
        end
    end
    Error{z}=mod(C+A{z},2);  %Erroz记录错误位置,用C模二加A即可
    ae=0;                                  %同信道部分,记录错误码元个数
    for i=1:a
        if sum(Error{z}(i,(n-k+1):n))>0    %如果出现一个以上1,则译码错误

本文发布于:2024-09-22 06:50:30,感谢您对本站的认可!

本文链接:https://www.17tex.com/xueshu/294556.html

版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。

标签:矩阵   译码   信道   记录   编码   实验   传输   误码率
留言与评论(共有 0 条评论)
   
验证码:
Copyright ©2019-2024 Comsenz Inc.Powered by © 易纺专利技术学习网 豫ICP备2022007602号 豫公网安备41160202000603 站长QQ:729038198 关于我们 投诉建议