UWB物理层实现-特殊汉明码纠错

news/2024/12/14 16:03:29/文章来源:https://www.cnblogs.com/fgw980/p/18604377

根据802.15.4协议,chapter15.2.7,PHR部分的编码,除了一些控制参数外,在后面添加了6位单错纠正双错检测码(SECDED),用于纠错能力的提升,这6位汉明码为PHR部分提供了至少1bit的纠错能力,以及至少2bit的检错能力。此码块由汉明码构成,与一般汉明码不同的是,改码并没有穿插在信息位中间,而是放在了信息位后方,形成系统码的样式。

  • 检错
    那么在接收端接收到一串PHR,如何检验它正确与否还是很简单的,只需要将收到的PHR,做与发送端同样的操作,生成SECDED,再与接收到的SECDED进行比较即可,但这种方法没有利用SECDED的性质。
    另一种的方法是,将接收到的SECDED码的每一位校验位,与生成它的信息位,进行异或,比如上图中的b18,要与b1,b0,b8,b6,b4,b3,b10,b11同时进行异或,若结果为0,则证明这8位信息位,以及一位校验位没有出错(当然还是存在出错概率的,只不过很低)。在对每一位校验位进行完异或操作后,若结果均为0,则证明PHR传输无误,若有一位不为0,则证明传输有误,需要进行纠错。
  • 纠错
    在上一步,我们已经求得了校验位与信息位的异或结果。因为在传输过程中,有偶数位同时出错的可能性,若出现偶数位错误,则无法发现出错,我们姑且认为,结果为0,代表不出错,是正确的校验集合;结果为1,代表出错,是存在错误的校验集合。

故我们只需要将出错的校验集合求交集,并且去除该交集在正确的校验集合中的元素,即可得到出错的bit位。

下面简单给出示例代码:
``function [errorBit,RQ] = HammingDecode(PHR)
%检测两个错误,纠正一个错误
%errorBit为错误比特的位数,-2代表错误在校验位,-1代表无需纠错或无法纠错
%RQ为重传参数,可以断定PHR传输错误,需要重新传输
errorBit = -1;
RQ = 0;
HammingMatrix = [2,1,9,7,5,4,11,12;
1,7,6,4,3,10,11,13;
2,9,8,4,3,10,11,-1;
9,8,7,6,5,10,11,-1;
13,12,-1,-1,-1,-1,-1,-1];
B = [];
B(1) = mod(PHR(19)+PHR(1)+PHR(2)+PHR(9)+PHR(7)+PHR(5)+PHR(4)+PHR(11)+PHR(12), 2);
B(2) = mod(PHR(18)+PHR(1)+PHR(7)+PHR(6)+PHR(4)+PHR(3)+PHR(10)+PHR(11)+PHR(13), 2);
B(3) = mod(PHR(17)+PHR(2)+PHR(9)+PHR(8)+PHR(4)+PHR(3)+PHR(10)+PHR(11), 2);
B(4) = mod(PHR(16)+PHR(9)+PHR(8)+PHR(7)+PHR(6)+PHR(5)+PHR(10)+PHR(11), 2);
B(5) = mod(PHR(15)+PHR(13)+PHR(12), 2);
B(6) = mod(PHR(14)+PHR(1)+PHR(2)+PHR(3)+PHR(4)+PHR(5)+PHR(6)+PHR(7)+PHR(8)+PHR(9)+PHR(10)+PHR(11)+PHR(12)+PHR(13)+PHR(15)+PHR(16)+PHR(17)+PHR(18)+PHR(19), 2);
flag = B(6);
errorCount = [];
if flag == 0 %要么错误个数为0,无需纠正,要么错误个数为大于等于2的偶数,无法纠正
for i = 1 : 5
if B(i) == 1
errorCount = [errorCount,i];
end
end
if isempty(errorCount)%说明传输无误
return
else %错误个数为大于等于2的偶数,无法纠正
RQ = 1;
return
end

end
if flag == 1
for i = 1 : 5
if B(i) == 1
errorCount = [errorCount,i];
end
end
if isempty(errorCount)%说明传输错误的比特在校验位上,无需纠正
errorBit = -2;
return
end
end
C = 1:19;%求错误bit所在的集合
for i = 1 : length(errorCount)
C = intersect(C,HammingMatrix(errorCount(i)😅);
end
D = 1:5;%将集合中正确的bit去除
rightCount = setdiff(D,errorCount);
for i = 1 : length(rightCount)
C = setdiff(C,HammingMatrix(rightCount(i)😅);
end
if ~isempty(C)
errorBit = C;
end
end``

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

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

NestJS导出API文档

在NestJS中,你可以使用@nestjs/swagger包来定义你的API文档,并且可以很容易地将这些文档转换为API调用。以下是一个简单的例子,展示如何使用NestJS和Swagger来创建一个API文档,并且如何生成API调用。 首先,安装@nestjs/swagger和swagger-ui-express:npm install @nestjs/…

python版本切换

1、搜索框输入:环境变量2、在下面的系统变量:选择path -> 点击:编辑3、将需要的python版本上移到上面,调整好后,一路点击确定关闭几个打开的窗口,保存环境变量配置。3、打开cmd,输入:python --version 确认版本是否切换成功

机器学习期末复习笔记

机器学习期末复习机器学习期末复习笔记 简介 主要注重决策树的计算,朴素贝叶斯,PCA降维的计算 笔记

07相关软件的安装以及HTML介绍

一、内容回顾这个软件从1.0就开始收费了,这里使用这个版本这里将侧边栏打开 这个typora软件支持Markdown的格式,markdown格式是我们经常会使用到的笔记格式的形式,后缀名是md 这种语法在整理笔记是比较方便的 1、标题 加上#号表示是标题,这个和H1,H2...标签类似 加上不同的…

Threejs教程,2024全新系统threejs入门教程

Threejs教程,2024全新系统threejs入门教程 https://www.bilibili.com/video/BV1Zm421g7oi/?spm_id_from=333.999.0.0 2 4 01-theejs三要素 WebGL 顶点数据 顶点索引 矩阵 三要素 场景 Scene 容器 相机 Camera 观察 渲染器Renderer 组合 透视相机(PerspectiveCamera) htt…

命令行下php加载模块

命令行下php加载模块 在命令行下使用 PHP 加载模块,你可以使用 -d 选项来设置 php.ini 中的设置,或者使用 dl() 函数来动态加载 PHP 扩展模块。 例如,如果你想要加载一个名为 my_module.so 的模块,你可以这样做: php -d "extension=my_module.so" script.php &l…

虚拟机配置rsync同步

虚拟机配置rsync同步安装 apt install rsync修改配置文件 vim /etc/rsyncd.confuid = nobody gid = nogroup use chroot = no max connections = 4 pid file = /var/run/rsyncd.pid lock file = /var/run/rsync.lock log file = /var/log/rsyncd.log[html]path = /home/xuxb/ht…

PHP实现开源Consul服务发现与治理

PHP实现开源Consul服务发现与治理 在分布式系统中,服务发现和治理是必不可少的组成部分。其中,consul作为一款服务发现和治理工具,被广泛应用于微服务架构中。本文将介绍如何使用php实现开源consul服务发现与治理。 一、什么是Consul? Consul是一款由HashiCorp公司开发的服…

mysql-搭建主从复制

mysql-搭建主从复制 Master(主):docker run -p 3339:3306 --name master -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 Slave(从):docker run -p 3340:3306 --name slave -e MYSQL_ROOT_PASSWORD=123456 -d mysql:5.7 Master对外映射的端口是3339,Slave对外映射的端口是334…

haproxy配置负载均衡

####安装#####sudo apt updatesudo apt install haproxysudo haproxy -vsudo systemctl status haproxysudo cp /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg-org ####配置站点#####vim /etc/haproxy/haproxy.cfg==========================================frontend w…

MUR3060PT-ASEMI快恢复二极管MUR3060PT

MUR3060PT-ASEMI快恢复二极管MUR3060PT编辑:ll MUR3060PT-ASEMI快恢复二极管MUR3060PT 型号:MUR3060PT 品牌:ASEMI 封装:TO-247 特性:快恢复二极管 正向电流:30A 反向耐压:600V 恢复时间:35ns 引脚数量:3 芯片个数:2 芯片尺寸:MIL 浪涌电流:300A 漏电流:10ua 工作…

Jenkins安装ubuntu

ubuntu安装Jenkins apt install fontconfig openjdk-17-jre sudo wget -O /usr/share/keyrings/jenkins-keyring.asc https://pkg.jenkins.io/debian-stable/jenkins.io-2023.keyecho "deb [signed-by=/usr/share/keyrings/jenkins-keyring.asc]" https://pkg.jenkin…