matlab代码--汉明码通过不同信道的误码率分析

news2025/3/10 5:44:18

1 前言

汉明码是在原数据中的一些固定位置,插入一个0(或1),以进行奇(或偶)校验位,虽然使原数据变长,但可使其拥有纠错能力。能侦测并更正一个比特的错误;若有两个比特出错,则只能侦测,不能更正;若有三个或更多的比特出错,则不能侦测,更不能更正。

2 过程

本文的主要工作是将发送的数据经过汉明编码后,通过高斯/BSC信道,然后经过译码后,计算误码率,适合刚刚接触matlab仿真的阅读者。

汉明编译码过程

function BER = hamming_code(data_length,p)
Hamming_count = data_length*15/11;
transmmited_date = randi([0 1], data_length, 1);      % 发送的数据
temp_1 = zeros(Hamming_count, 1);        % 临时存储变量
temp_2 = zeros(Hamming_count, 1);       % 临时存储变量
count = 0;
% (15 11 4) 汉明码 
% 汉明编码
Window_length = data_length/11;               
Eleven_shape = reshape(transmmited_date, 11, Window_length)';
P= [   1 1 0 0;
       0 1 1 0;
       0 0 1 1;
       1 0 1 0;
       1 0 0 1;
       0 1 0 1;
       1 1 1 0;
       0 1 1 1;
       1 0 1 1;
       1 1 0 1;
       1 1 1 1; ];                       % 系数矩阵
G = [P eye(11)];                   % 生成矩阵
transmmited_hamming = mod(Eleven_shape * G, 2);
transmmited_hamming = reshape(transmmited_hamming', 1, numel(transmmited_hamming))';
Reveice_hamming =BSC(p,transmmited_hamming,Hamming_count);

temp_2 = Reveice_hamming;

%汉明译码
Window_length = numel(temp_2)/15; 
Fifteen_shape = reshape(temp_2, 15, Window_length)';
H = [eye(4) P'];                  % 校验矩阵
S = syndtable(H);                  % 伴随式
Syndrome = mod(Fifteen_shape*H',2);
S_index = Syndrome*[8; 4; 2; 1];

E = zeros(Window_length, 15);              % 错误图像
for q = 1:Window_length
    E(q,:) = S(S_index(q)+1,:);
end

temp_2 = mod(Fifteen_shape + E, 2); % 误差校正
temp_2(:,1:4) = [];                              % 除去校验bit

Receive_data = reshape(temp_2', data_length, 1);

% 计算误码率
for q = 1:data_length
    if Receive_data(q)~=transmmited_date(q)
        count = count+1;        
    end
end
BER = count/data_length;
end

2. 1经过BSC信道的代码流程如下:

发送数据 -> 15 11 4汉明编码 -> BSC信道 ->汉明译码 -> 接收数据 -> 计算BER

bsc信道

function Rx_Symbol_array = BSC(p,Tx_Symbol_array,H_Bit_count);
%通过BSC信道
for i = 1:H_Bit_count
    if(rand(1)<p)
        Rx_Symbol_array(i) = ~Tx_Symbol_array(i);
    else
        Rx_Symbol_array(i) = Tx_Symbol_array(i);
    end
end
end

2.2经过AWGN信道的代码流程如下

发送数据 -> 15 11 4汉明编码 -> BSSK调制-> AWGN信道 -> BPSK解调 ->汉明译码 -> 接收数据 -> 计算BER

3 仿真结果

在这里插入图片描述
1‘从图中可以看出,理论误码率曲线和经过通信系统后的实际误码率曲线很接近,这说明了仿真的有效性。
2.还可以看出,误码率随着错误转移概率的增加而增加,这是因为,当错误概率越大的时候,传输过程中通信系统发生错误的可能性越大,发送的0变为1,发送的1变为0,从而导致整个系统的误码率变大
在这里插入图片描述
1 可以看出 在信噪比低的时候,未经编码的系统信噪比 反而优于 经过汉明编码的系统。这是因为,汉明编码包括信息位和校验位,经过编码后,实际发送的数据长度相比初始数据变长了。当snr很低时,通信系统的性能本来就不好,这时经过编码后 传输错误的bit数反而会多余 不经过编码的,使得系统的误码率变大。
2 当snr变大后,可以看出,经过汉明码的系统的误码率性能明显优于未经过编码的系统,这说明了汉明编码的性能

完整代码获取链接:完整代码
如有定做具体方向的需求,本专栏头像有联系方式,欢迎私聊。也十分欢迎热爱相关技术的朋友们私下交流

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/1454154.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

京东平台的行业数据(数据分析报告)在哪里看?如何获取?

京东行业分析数据获取可通过以下途径&#xff1a; 京东官方不定期会发布行业白皮书或市场研究报告&#xff0c;商家可以关注京东官网、官方公众号、官方论坛等渠道获取最新发布的研究报告。 对于有技术开发能力的企业&#xff0c;可以通过申请接入京东开放平台API&#xff…

电脑竖屏显示了怎么回复原状

电脑屏幕变成这样 怎么恢复原状&#xff1f; 1、登录系统 2、在桌面上空白点击鼠标右键 3、在右键菜单中选择“屏幕分辨率”&#xff0c;左键点击打开 4、在窗口中“方向”位置选择“横向” 5、保存设置win7桌面即可恢复到正常状态

Arduino的PWM功能应用:会呼吸的灯

目录 概述 1 认识PWM 1.1 PWM原理 1.2 PWM的应用 1.3 在Arduino中使用PWM 2.硬件 2.1 硬件结构 2.2 线路连接 3 软件 3.1 编译和下载代码 3.2 详细代码 4 测试 4.1 灯的变化测试 4.2 使用逻辑分析仪看波形 概述 本文通过一个简单的案例&#xff0c;介绍Arduino中P…

Nginx 正向代理、反向代理

文章目录 前言1. 正向代理1.1 概念1.2 逻辑图1.3 使用场景 2. 反向代理2.1 概念2.2 逻辑图2.3 使用场景 前言 正向代理主要是用来解决访问限制问题&#xff1b;反向代理则是提供负载均衡、安全防护等作用 1. 正向代理 1.1 概念 正向代理是一个位于客户端和目标服务器之间的代理…

echarts图表中的基本设置参数

取消显示坐标值 axisLabel: { show: false} 取消坐标轴刻度线 axisTick: { show: false} 取消网格线 splitLine: { show: false } 去除y轴的线 //写在yAxis里面 axisLine:{show:false},axisTick:{show:false},去除y轴轴线&#xff08;背景线&#xff09; splitLine…

【PyQt】在PyQt5的界面上集成matplotlib绘制的图像

文章目录 0 前期教程1 概述2 matplotlib2.1 库导入2.2 图片的各个部分解释2.3 代码风格2.4 后端 3 集成matplotlib图像到pyqt界面中3.1 使用到的模块3.2 理解Qt Designer中的“控件提升”3.3 界面与逻辑分离的思路3.4 扩展 0 前期教程 【PyQt】PyQt5进阶——串口上位机及实时数…

[HTML]Web前端开发技术26(HTML5、CSS3、JavaScript )JavaScript基础——喵喵画网页

希望你开心&#xff0c;希望你健康&#xff0c;希望你幸福&#xff0c;希望你点赞&#xff01; 最后的最后&#xff0c;关注喵&#xff0c;关注喵&#xff0c;关注喵&#xff0c;佬佬会看到更多有趣的博客哦&#xff01;&#xff01;&#xff01; 喵喵喵&#xff0c;你对我真的…

Java并发基础:ConcurrentSkipListSet全面解析!

内容概要 ConcurrentSkipListSet类在多线程环境下&#xff0c;它能够轻松应对大量的插入、删除和查找操作&#xff0c;同时保持数据的完整性和一致性&#xff0c;其内部基于跳表数据结构的实现&#xff0c;确保了即使在处理大规模数据时&#xff0c;也能具有出色的性能表现。 …

什么是抖音小店?什么是直播带货?一篇详解!

大家好&#xff0c;我是电商糖果 随着抖音卖货的火爆&#xff0c;不少朋友都有抖音卖货的想法。 但是会有很多人搞不清什么是抖音小店&#xff1f;什么是直播带货&#xff1f; 糖果这里就给大家详细讲解一下&#xff0c;看看普通人最适合做哪个。 什么是抖音小店&#xff1f…

linux系统Grafana关联zabbix显示

Grafana关联zabbix 服务器下载浏览器配置开启zabbix插件配置zabbix数据源可视化Zabbix数据 服务器下载 grafana-cli plugins list-remote grafana-cli plugins list-remote|grep -i zabbix grafana-cli plugins install alexanderzobnin-zabbix-appsystemctl restart grafana-…

Open CASCADE学习|曲线的切线

今天要实现的功能是在曲线的终点处沿切线方向延长该曲线。为了解决这个问题&#xff0c;需要求解该曲线在终点处的坐标值以及切矢量。问题转化为&#xff1a;已知曲线TopoDS_Edge aE&#xff0c;求其在终点处的坐标值及切线方向向量。 首先&#xff0c;将TopoDS_Edge对象转化为…

不同品牌和种类的电容与电感实测对比(D值、Q值、ESR、X)

最近买了个LCR电桥&#xff0c;就想测一下手头上的各种电容电感的参数&#xff0c;对比一下。 测试设备是中创ET4410&#xff0c;测量的参数有&#xff1a;电容值、电感值、D(损耗角正切值)、Q(品质因数)、ESR(等效串联电阻)、X(电抗&#xff0c;通常表示为感抗XL或容抗XC)。 …

20. Qt 表格控件tableWidget的使用(1)

目录 前言&#xff1a; 内容&#xff1a; 1. 界面 2. 代码 参考&#xff1a; 前言&#xff1a; 学习表格控件tableWidget的学习记录1&#xff0c;主要是用代码实现表格本身的设计&#xff08;上篇&#xff09; 内容&#xff1a; 1. 界面 ui文件添加tableWidget控件&a…

C语言学习day16:二维数组

二维数组格式&#xff1a; 数据类型 数组名[行][列] { {值1&#xff0c;值2}, {值3&#xff0c;值4} } 代码&#xff1a; int arr[2][3] { {1,2,3},{4,5,6} }; 那么我们怎么找它的下标呢&#xff0c;我先上一副图&#xff1a; 假如我现在要找1&#xff0c;那么它…

惠普打印机驱动安装

一、下载驱动 支持 --> 软件与驱动程序 https://www.hp.com/cn-zh/home.html 选择打印机 输入打印机型号&#xff0c;下拉框选择自己的打印机型号 打印机型号正常在打印机的正面会有 往下滑选择安装软件和全功能/基本功能驱动程序-仅支持打印和扫描功能 (1) 点击下载…

idea将springboot打包成jar包

打开idea->view->Tool Windows->Terminal 在控制台输入&#xff1a; mvn clean package

Matlab论文插图绘制模板第136期—极坐标气泡图

在之前的文章中&#xff0c;分享了Matlab笛卡尔坐标系的气泡图的绘制模板&#xff1a; 进一步&#xff0c;再来分享一下极坐标气泡图。 先来看一下成品效果&#xff1a; 特别提示&#xff1a;本期内容『数据代码』已上传资源群中&#xff0c;加群的朋友请自行下载。有需要的朋…

【全网首篇】Copyparty 路径遍历漏洞 CVE-2023-37474 漏洞分析

Copyparty是一个便携式文件服务器 Copyparty 路径遍历漏洞 CVE-2023-37474 漏洞分析&#xff0c;这个漏洞研究了一些时间&#xff0c;不过这个不难 漏洞复现分析环境 Copyparty测试版本&#xff1a;1.8.0和1.8.2 系统&#xff1a;Windows10 和 Linux 运行环境&#xff1a;…

helm部署gitlab-runner问题解决

关于.gitlab-ci.yml中build镜像时&#xff0c;docker守护进程未启动错误 问题截图 解决方法 conf.toml添加 [[runners.kubernetes.volumes.host_path]]name "docker"mount_path "/var/run/docker.sock"read_only falsehost_path "/var/run/dock…

PyCharm - Run Debug 程序安全执行步骤

PyCharm - Run & Debug 程序安全执行步骤 1. Run2. DebugReferences 1. Run right click -> Run ‘simulation_data_gene…’ or Ctrl Shift F10 2. Debug right click -> Debug ‘simulation_data_gene…’ 在一个 PyCharm 工程下&#xff0c;存在多个 Pytho…