matlab仿真 信道编码和交织(上)
(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真 刘学勇编著第八章内容,有兴趣的读者请阅读原书)
clear all
N=10;%信息比特的行数
n=7;%hamming码组长度n=2^m-1
m=3;%监督位长度
[H,G]=hammgen(m);%产生(n,n-m)hamming码的效验矩阵和生成矩阵
x=randi([0 1],N,n-m);%产生比特数据
y=mod(x*G,2);%hamming编码
y1=mod(y+randerr(N,n),2);%在每个编码码组中引入一个随机比特错误
mat1=eye(n);%生成n*n的单位矩阵,其中每一行的1代表错误比特位置
errvec=mat1*H.';%校验结果对应的所有错误矢量
y2=mod(y1*H.',2);%译码
%根据译码结果对应的错误矢量找出错误比特的位置,并纠错
for indx=1:Nfor indx1=1:nif(y2(indx,:)==errvec(indx1,:))y1(indx,:)=mod(y1(indx,:)+mat1(indx1,:),2);endend
end
x_dec=y1(:,m+1:end);%恢复原始信息比特
s=find(x~=x_dec)%纠错后的信息比特与原始信息比特对比
首先,(7,4)汉明码是指7个码元中携带了4个有效信息,还有三个是冗余位,是用奇偶校验留下来的检错信息。
先从最简单的情况开始,假设我们需要传递的信息为[0 1 0 1],
以偶校验的1,3,4位为例,这三位的数据分别为0 0 1,为了确保加上校验位后有偶数个1,所以校验位为1,后面的1 2 3位,2 3 4位同理。
有了这三个校验位,当四个信息位出现错误的时候,我们可以根据校验位判断错误在什么地方。
可以看到,1,3,4位和1,2,3位中的交集有错,而2,3,4位没错,所以错误只可能出现在1号位
这里我们利用三个校验位的情况,成功的锁定了错误码元的所在位置。
(这里没有讨论出现偶数个码元错误的情况,和校验位错误的情况)
现在回到代码
x是我们产生的数据,其中的每一行可以称其为一组,一组有4个信息码元。
y是编码后的结果,我们一行一行看,绿色区域是每一组的校验位,红色区域是每一组的信息位(红色就是x)
y=mod(x*G,2);
这里的代码意思是x*G得到的矩阵每个元素对2取余,其实就是异或,也就是我们之前在进行校验位的计算时使用的方式
G就是生成矩阵,把之前的我们从4个信息位编码成7个码元的过程用矩阵乘法进行表示
红色部分就是单位矩阵,用来将信息部分原封不动的传进
黄色部分就是产生校验位的部分,信息码元与它进行矩阵乘法再异或后就能得到上述的校验位。

这样就解释了为什么x*G再取异或后就能实现编码过程。
接下来来看解码过程,解码需要用到校验矩阵H
y2=mod(y1*H.',2);%译码

可以发现,由于在编码过程中的设计,在乘上H’之后,如果没有错误的情况下,得到的矩阵中元素全都为0

现在我们假设信息码元中出现了一位错误。在解码之后得到的矩阵元素不全为0,证明有错误,我们需要用我们得到的 [0 ,1,1]找到错误出现的位置

总结:译码的结果并不是原始数据,而是表示错误情况的向量(矩阵)(y2),如果矩阵(y2)全为0 ,证明没有错误,如果不全为0,证明有错误,我们通过逐行比较译码结果(y2)和所有的错误情况(errvec),观察每一行的译码结果与哪一行的errvec相同,得到的errvec的行数,就是y1中出现错误的位数
现在也可以解释为什么说errvec是校验结果对应的所有错误矢量,因为errvec包含了所有含有非0元素(错误的)情况,比对就能得到错误位数
如果译码得到的是0 0 0,自然在errvec中没有对应的情况,也表示y1这一行没有错误,不需要修改。

clear all
N=1000000; %信息比特长度
M=4;%QPSK调制
n=7;%汉明码编码码组长度
m=3;%汉明吗监督位长度
graycode=[0 1 3 2];msg=randi([0 1],N,n-m);%信息比特
msg1=reshape(msg.',log2(M),N*(n-m)/log2(M)).';
msg1_de=bi2de(msg1,'left-msb');%信息比特转化为10进制(1)
msg1=graycode(msg1_de+1);%格雷编码
msg1=pskmod(msg1,M);%qpsk调制
Eb1=norm(msg1).^2/(N*(n-m));%计算比特能量
msg2=encode(msg,n,n-m);%汉明编码(2)
msg2=reshape(msg2.',log2(M),N*n/log2(M)).';
msg2=bi2de(msg2,'left-msb');
msg2=graycode(msg2+1);%汉明编码后的比特序列转化为十进制形式
msg2=pskmod(msg2,M);%汉明码数据进行qpsk调制
Eb2=norm(msg2).^2/(N*(n-m));%计算比特能量
EbNo=0:10;%信噪比
EbNo_lin=10.^(EbNo/10);%信噪比的线性值
for indx=1:length(EbNo_lin)sigma1=sqrt(Eb1/(2*EbNo_lin(indx)));%未编码的噪声标准差rx1=msg1+sigma1*(randn(1,length(msg1))+j*randn(1,length(msg1)));%加入高斯白噪声y1=pskdemod(rx1,M);%未编码QPSK解调y1_de=graycode(y1+1);%未编码的格雷逆映射[err ber1(indx)]=biterr(msg1_de.',y1_de,log2(M));%未编码的误比特率sigma2=sqrt(Eb2/(2*EbNo_lin(indx)));%编码的噪声标准差rx2=msg2+sigma2*(randn(1,length(msg2))+j*randn(1,length(msg2)));%加入高斯白噪声y2=pskdemod(rx2,M);%编码qpsk解调y2=graycode(y2+1);%编码格雷逆映射y2=de2bi(y2,'left-msb');%转换为二进制形式y2=reshape(y2.',n,N).';y2=decode(y2,n,n-m);%译码[err ber2(indx)]=biterr(msg,y2);%编码的误比特率endsemilogy(EbNo,ber1,'-ko',EbNo,ber2,'-k*');legend('未编码','Hamming(7,4)编码')title('未编码和hamming(7,4)编码的QPSK在AWGN下的性能')xlabel('Eb/N0');ylabel('误比特率')
(1):这里的转化为10进制是为了将二进制的信号转化为0-3的4进制情况,这样就可以进行格雷编码,进而qpsk调制

(2) encode和decode编译码本质上就是例8.1中的过程,这里使用现成的函数可以直接实现编译码


相关文章:
matlab仿真 信道编码和交织(上)
(内容源自详解MATLAB/SIMULINK 通信系统建模与仿真 刘学勇编著第八章内容,有兴趣的读者请阅读原书) clear all N10;%信息比特的行数 n7;%hamming码组长度n2^m-1 m3;%监督位长度 [H,G]hammgen(m);%产生(n,n-…...
基于YOLOv8的高压输电线路异物检测系统
基于YOLOv8的高压输电线路异物检测系统 (价格88) 包含 【“鸟窝”,“风筝”,“气球”,“垃圾”】 4个类 通过PYQT构建UI界面,包含图片检测,视频检测,摄像头实时检测。 (该系统可以根据数…...
23款奔驰GLS450加装原厂电吸门配置,提升车辆舒适性和便利性
今天是一台22款奔驰GLS450,车主是佛山的 以前被不良商家坑了 装了副厂的电吸门 刚开始就很正常 用了半年之后 就开始开不了门,被锁在里面,刚开始车主以为是零件坏了 后来越来越频繁,本来是为了家里老人小孩关门方便而升级的&#…...
git操作流程笔记
1、在本地项目文件夹右击鼠标点击Git Bash Here 2、输入git init,这个目录变成git可以管理的仓库,会出现一个.git文件夹,如果没出现的话需要选择“显示隐藏文件”(不会的同学自行百度一下) 3、绑定本地仓库与远程仓库…...
【QT】常用控件-上
欢迎来到Cefler的博客😁 🕌博客主页:折纸花满衣 目录 👉🏻QWidgetenabledgeometryrect制作上下左右按钮 window frame 的影响window titlewindowIcon代码示例: 通过 qrc 管理图片作为图标 windowOpacitycursor使用qrc自…...
帮助网站提升用户参与度的5个WordPress插件
仅靠编写精彩的内容、设计精美的图像和创建简化的客户旅程不足以提高网站参与度。您需要让用户在首次访问后继续与您的网站互动并成为回访者,才能真正吸引您所追求的兴趣。 幸运的是,对于 WordPress 用户来说,有数百种工具可用于提高用户参与…...
理解 Python 中的 @wraps:保留函数元数据
一.介绍 在本文中,我们将了解 wraps。在 Python 中使用装饰器时,您可能会遇到原始函数的元数据丢失的情况。这时,functools 模块中的 wraps 装饰器就可以派上用场了。让我们深入了解 wraps 的作用及其重要性。 二.简单装饰器的问题 首先&a…...
cjson
文章目录 概述编译cjson_test 小结 概述 在网络传输中,网络数据序列化,常用的有那么几种,json,protobuf都是很常用的,这一篇来写下json。 Json常用的有几个,rapidjson,jsoncpp,还有…...
Docker data root 目录更改
有时候受限于系统根目录空间的限制,需要将 docker data root 目录更改为其它目录,如单独挂载一个磁盘或存储。本篇文章介绍如何操作。 修改docker 工作目录 修改配置文件/etc/docker/daemon.json(在19.x 版本之前使用grapth) {&q…...
[CR]厚云填补_SEGDNet
Structure-transferring edge-enhanced grid dehazing network Abstract 在过去的二十年里,图像去雾问题在计算机视觉界受到了极大的关注。在雾霾条件下,由于空气中水汽和粉尘颗粒的散射,图像的清晰度严重降低,使得许多计算机视觉…...
图-基础概念
是什么 图是一种抽象的数据类型,在图中的数据元素通常称作节点,V是所以定点的集合,E是所有边的集合 图的分类 有向图 如果两个订单v,w,只能由v向w,而不能w向v,那么我们就把何种情况叫做一个从…...
Javascript前端基础面试(十)
MVVM Vue MVVM这一篇就够啦!_vue r mvvm-CSDN博客 点容器内的图标,图标边框变成border 1px solid red,点空白处重置 <div id"container"> <img src"icon.png" alt"Icon" class"icon"> <!…...
书生大模型实战营闯关记录----第五关:LlamaIndex+Internlm2 RAG实践Demo:效果对比,文档加载,向量库构建,检索器,模型推理
文章目录 1. 前置知识RAG背景RAG 效果比对 2. 环境、模型准备2.1 配置基础环境2.2 安装 Python环境和依赖包2.3 下载 Sentence Transformer 模型2.4 下载 NLTK 相关资源 3. LlamaIndex HuggingFaceLLM4. LlamaIndex RAG加载文档构建向量存储索引库检索器RAG代码 5. LlamaIndex …...
如何使用极狐GitLab CI/CD Component Catalog?【上】
极狐GitLab 是 GitLab 在中国的发行版,专门面向中国程序员和企业提供企业级一体化 DevOps 平台,用来帮助用户实现需求管理、源代码托管、CI/CD、安全合规,而且所有的操作都是在一个平台上进行,省事省心省钱。可以一键安装极狐GitL…...
详解Xilinx FPGA高速串行收发器GTX/GTP(3)--GTX的时钟架构
目录 1、参考时钟 2、时钟方案 2.1、单个外部参考时钟驱动单个QUAD中的多个transceiver 2.2、单个外部参考时钟驱动多个QUAD中的多个transceiver 2.3、同一个Quad中,多个GTX Transceiver使用多个参考时钟 2.4、不同Quad中,多个GTX Transceiver 使用多个参考时钟 3、QP…...
简单搭建dns服务器
目录 一.安装服务 二.编写子配置文件 三.编写主配置文件 四.编写文件 五.重启服务测试 配置端:IP地址为172.25.254.100、主机名为node1.rhel9.org 测试端:IP地址为172.25.254.101、主机名为node2.rhel9.org 一.安装服务 [rootnode1 ~]# dnf inst…...
大数据进阶(Advanced Big Data)
大数据进阶(Advanced Big Data) 目录 引言大数据架构 Lambda架构Kappa架构 大数据技术栈 数据采集与预处理数据存储与管理数据处理与分析数据可视化与展示 大数据分析方法 机器学习深度学习自然语言处理图数据分析 大数据在工业中的应用 制造业能源管理…...
微信小程序开发优惠券制作源码
微信小程序开发优惠券制作源码。制作一个自带流量的小程序商城,功能强大玩法新,轻松实现引流,推广,卖货,分销,会员管理,直播等多种功能需求需要哪些编辑代码源码呢?http://m.bokequ.com/list/124-2.html 代码分享 <!DOCTYPE HTML> <html xmlns"http://www.w3.o…...
mongodb的安装操作记录
mongodb的安装操作记录 1 上传软件包,并解压 [rootmonitor local]# tar -xvf mongodb-linux-x86_64-rhel70-7.0.12.tgz mongodb-linux-x86_64-rhel70-7.0.12/LICENSE-Community.txt mongodb-linux-x86_64-rhel70-7.0.12/MPL-2 mongodb-linux-x86_64-rhel70-7.0.1…...
C++客户端Qt开发——多线程编程(二)
多线程编程(二) ③线程池 Qt中线程池的使用 | 爱编程的大丙 1>线程池 我们使用线程的时候就去创建一个线程,这样实现起来非常简便,但是就会有一个问题:如果并发的线程数量很多,并且每个线程都是执行…...
逻辑回归:给不确定性划界的分类大师
想象你是一名医生。面对患者的检查报告(肿瘤大小、血液指标),你需要做出一个**决定性判断**:恶性还是良性?这种“非黑即白”的抉择,正是**逻辑回归(Logistic Regression)** 的战场&a…...
Qt Http Server模块功能及架构
Qt Http Server 是 Qt 6.0 中引入的一个新模块,它提供了一个轻量级的 HTTP 服务器实现,主要用于构建基于 HTTP 的应用程序和服务。 功能介绍: 主要功能 HTTP服务器功能: 支持 HTTP/1.1 协议 简单的请求/响应处理模型 支持 GET…...
Android Bitmap治理全解析:从加载优化到泄漏防控的全生命周期管理
引言 Bitmap(位图)是Android应用内存占用的“头号杀手”。一张1080P(1920x1080)的图片以ARGB_8888格式加载时,内存占用高达8MB(192010804字节)。据统计,超过60%的应用OOM崩溃与Bitm…...
Spring数据访问模块设计
前面我们已经完成了IoC和web模块的设计,聪明的码友立马就知道了,该到数据访问模块了,要不就这俩玩个6啊,查库势在必行,至此,它来了。 一、核心设计理念 1、痛点在哪 应用离不开数据(数据库、No…...
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南
精益数据分析(97/126):邮件营销与用户参与度的关键指标优化指南 在数字化营销时代,邮件列表效度、用户参与度和网站性能等指标往往决定着创业公司的增长成败。今天,我们将深入解析邮件打开率、网站可用性、页面参与时…...
学校时钟系统,标准考场时钟系统,AI亮相2025高考,赛思时钟系统为教育公平筑起“精准防线”
2025年#高考 将在近日拉开帷幕,#AI 监考一度冲上热搜。当AI深度融入高考,#时间同步 不再是辅助功能,而是决定AI监考系统成败的“生命线”。 AI亮相2025高考,40种异常行为0.5秒精准识别 2025年高考即将拉开帷幕,江西、…...
Mysql中select查询语句的执行过程
目录 1、介绍 1.1、组件介绍 1.2、Sql执行顺序 2、执行流程 2.1. 连接与认证 2.2. 查询缓存 2.3. 语法解析(Parser) 2.4、执行sql 1. 预处理(Preprocessor) 2. 查询优化器(Optimizer) 3. 执行器…...
代码随想录刷题day30
1、零钱兑换II 给你一个整数数组 coins 表示不同面额的硬币,另给一个整数 amount 表示总金额。 请你计算并返回可以凑成总金额的硬币组合数。如果任何硬币组合都无法凑出总金额,返回 0 。 假设每一种面额的硬币有无限个。 题目数据保证结果符合 32 位带…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
免费PDF转图片工具
免费PDF转图片工具 一款简单易用的PDF转图片工具,可以将PDF文件快速转换为高质量PNG图片。无需安装复杂的软件,也不需要在线上传文件,保护您的隐私。 工具截图 主要特点 🚀 快速转换:本地转换,无需等待上…...
