当前位置: 首页 > news >正文

基于MATLAB的误码率与信噪比(附完整代码与分析)

目录

一. 写在前面

二. 如何计算误码率

三. 带噪声的误码率分析

3.1 代码思路

3.2 MATLAB源代码及分析

四. 总结

4.1 输入参数

4.2 规定比特长度

4.3 特殊形式比较


一. 写在前面

(1)本文章主要讨论如何仿真误码率随着信噪比变化的图像

(2)本文章的源代码参考自MATLAB官方文件;

(3)每行代码我都尝试写清楚含义,非常适合初学者

二. 如何计算误码率

MATLAB代码及分析:

%清除所有无关变量
clear;clc;close all;x=[1 0;0 0;0 0;0 0];
%4行2列的矩阵,一共8个元素y=[0 0;0 0;0 0;1 1];
%4行2列的矩阵numerrs1=biterr(x,y)
%计算有多少个位置比特不一致
%很明显结果为3
%biterr函数在无线通信中经常会用到numerrs2=biterr(x,y,[],'column-wise')
%每个矩阵都有两列,比对每列有多少个元素不一样numerrs3=biterr(x,y,[],'row-wise')
%%每个矩阵都有四行,比对每行有多少个元素不一样numerrs4=biterr(x,y,[],'overall')
%计算两个矩阵整个有多少个元素不一样
%跟最原始的numerrs1=biterr(x,y)命令是一样的

输出结果:
numerrs1 =3

解释:很明显x和y一共有3个位置比特不一样


numerrs2 =2     1

解释:第一列x和y有两个2位置不一样,第二列有一个位置不一样


numerrs3 =

     1
     0
     0
     2

解释:第一行有1个比特不一样,第二行完全一样,第三行完全一样,第四行有2个比特不一样


numerrs4 =3

解释:很明显x和y一共有3个位置比特不一样

三. 带噪声的误码率分析

本代码是基于QAM调制的,有关QAM调制相关的分析可看此篇文章:

基于MATLAB的QAM调制与星座图(附完整代码与分析)-CSDN博客

3.1 代码思路

第一步:随机产生二进制数据,每k个为一组作为一个symbol(k的选择取决于QAM调制数)

第二步:对数据符号进行QAM调制

第三步:将调制后的信号输入到加性高斯白噪声(AWGN)信道中

第四步:对接收到的信号进行解调

第五步:将解调后的信号转为二进制数据

第六步:计算出现误差的比特数

3.2 MATLAB源代码及分析

%清除所有无关变量
clear;clc;close all;M=64;
%QAM调制阶数为64
%星座图中一共有64个点k=log2(M);
%每个symbol包含的比特数EbNoVec=(5:15);
%比特信噪比向量从5~15内取所有整数
%Eb代表每笔特信号的能量,Energy bit
%No代表噪声的功率谱密度
%Eb/No为比特信噪比,单位也是dBnumSymPerFrame=100;
%一共产生100个QAM symbolssnrdB=convertSNR(EbNoVec,"ebno","snr",BitsPerSymbol=k);
%ebno代表energy per bit to noise power spectral density ratio (Eb/N0)
%snr代表信噪比
%对输入数据EbNoVec,利用convertSNR函数将比特信噪比转为信噪比
%BitsPerSymbol=k,需要解释每个symbol包含的比特数berEst=zeros(size(EbNoVec));
%初始化误码率为0,注意误码率为向量for n=1:length(snrdB) 
%对每处信噪比的误码率均进行计算
%length代表snrdB的向量长度numErrs=0; 
%初始化误差比特数为0numBits=0;
%初始化总传输比特数为0while numErrs<200 && numBits<1e7
%要么出现错误比特数超过200个,要么传输总的比特数超过10^7,程序就会停止dataIn=randi([0 1],numSymPerFrame*k,1);
%从0或1内随机选择比特数,一共numSymPerFram*k行1列dataSym=bit2int(dataIn,k);
%以k比特为一组,将其转为10进制的数txSig=qammod(dataSym,M);
%对信号dataSym进行QAM调制,调制阶数为M
%默认编码方式为格雷码,发射信号rxSig=awgn(txSig,snrdB(n),'measured');
%对调制后的信号txSig,输入到AWGN信道中(加性高斯白噪声)
%snrdB(n)代表信噪比向量的第n个数
%measured凸显根据信号与信噪比可计算对应的噪声水平rxSym=qamdemod(rxSig,M);
%对接收到的信号rxSig进行解调,解调阶数为MdataOut=int2bit(rxSym,k);
%将信号从十进制转为二进制,以k比特为一组nErrors=biterr(dataIn,dataOut);
%计算调制前与调制后的错误比特数numErrs=numErrs+nErrors;
%总的误差比特数numBits=numBits+numSymPerFrame*k;
%每循环一轮都会增加numSymPerFrame*k比特数end
%while语句的结束berEst(n)=numErrs/numBits;
%计算误码率end
%for语句的结束berTheory=berawgn(EbNoVec,'qam',M);
%不同的比特信噪比EbNoVec
%M-QAM调制,计算理论上的误码率semilogy(EbNoVec,berEst,'*')
%画半对数图,横轴为EbNoVec,纵轴为经过对数计算的berEst,用*点表示
%一共11个点hold on
%画在同一个图上semilogy(EbNoVec,berTheory)
%半对数图grid
%出现格子legend('计算出的BER','理论上的BER')
%图像说明xlabel('Eb/No(dB)')
%x轴说明ylabel('Bit Error Rate(BER)')
%纵轴说明

运行结果:

解释:

随着比特信噪比从5dB增大到15dB,误码率从10^{-1}降低到10^{-3}.理论曲线与实际计算的点是相符合的。

四. 总结

4.1 输入参数

计算误码率的标准MATLAB语法为:

[number,ratio]=biterr(x,y)

输入的x和y可以是向量,也可以是矩阵。要求取值均非负。biterr函数会自动把x和y转为二进制的比特串来进行对比。

在输出的结果中number代表不一样的比特数量。

ratio代表误码率。

4.2 规定比特长度

如果使用的语句为:

biterr(x,y,k)

其中k代表比较的比特长度。

当然,通常我们是不会写的,就默认k为最大的数所对应的比特长度。

4.3 特殊形式比较

还可以在语句的最后面添加“overall”或者“row-wise”或者“column wise”。具体看上面的代码比较好理解,这里就不重复了。

相关文章:

基于MATLAB的误码率与信噪比(附完整代码与分析)

目录 一. 写在前面 二. 如何计算误码率 三. 带噪声的误码率分析 3.1 代码思路 3.2 MATLAB源代码及分析 四. 总结 4.1 输入参数 4.2 规定比特长度 4.3 特殊形式比较 一. 写在前面 &#xff08;1&#xff09;本文章主要讨论如何仿真误码率随着信噪比变化的图像 &#…...

【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 字符串筛选排序(100分) - 三语言AC题解(Python/Java/Cpp)

🍭 大家好这里是清隆学长 ,一枚热爱算法的程序员 ✨ 本系列打算持续跟新华为OD-C/D卷的三语言AC题解 💻 ACM银牌🥈| 多次AK大厂笔试 | 编程一对一辅导 👏 感谢大家的订阅➕ 和 喜欢💗 📎在线评测链接 字符串筛选排序(100分) 🌍 评测功能需要 订阅专栏 后私信…...

# 开发安全

开发安全 文章目录 开发安全安全开发生命周期安全开发目标安全开发基本准则注入类攻击手段Sql注入命令执行命令执行防御文件遍历防御 植入类安全漏洞防御XSS&#xff08;前端漏洞&#xff09;防御 储存型XSS文件上传防御 CSRF防御 会话固定防御 其它类型安全漏洞越权访问防御 口…...

Qt MaintenanceTool.exe使用镜像源更新Qt

环境&#xff1a;Windows11&#xff0c;Qt6.5&#xff0c;新版的MaintenanceTool.exe linux环境类似&#xff0c;mac环境可以看官方文档。 cmd命令窗口&#xff1a;切换到MaintenanceTool.exe所在目录&#xff0c;可以用“D:”切换到D盘&#xff0c;“cd xxxx”切换到xxxx目录…...

Java 8 Stream API介绍

Java 8引入了Stream API&#xff0c;这是对集合框架的一种增强&#xff0c;它允许你以一种声明式的方式处理数据集合。Stream API的核心在于将数据的操作分为两个主要阶段&#xff1a;中间操作和终端操作。中间操作返回的是一个新的Stream&#xff0c;可以链式调用多个中间操作…...

【前端技巧】css篇

利用counter实现计数器 counter-reset&#xff1a;为计数器设置名称&#xff0c;语法如下&#xff1a; counter-rese: <idntifier><integer>第一个参数为变量名称&#xff0c;第二个参数为初始值&#xff0c;默认为0 counter-increment&#xff1a;设置计数器增…...

2024年6月20日 (周四) 叶子游戏新闻

超市播音系统: 定时播放不同音乐 强制卸载软件: 一款强制卸载软件 免费多人沙盒游戏《宝藏世界》推出更新“潮起潮落”&#xff0c;带来全新克苏鲁风冒险准备好迎接一场超凡的冒险吧&#xff0c;MMORPG发行商gamigo宣布《宝藏世界》的最新更新&#xff1a;“潮起潮落”。这次更…...

Zookeeper 一、Zookeeper简介

1.分布式系统定义及面临的问题 分布式系统是同时跨越多给物理主机&#xff0c;独立运行的多个软件所组成的系统。类比一下&#xff0c;分布式系统就是一群人一起干活。人多力量大&#xff0c;每个服务器的算力是有限的&#xff0c;但是通过分布式系统&#xff0c;由n个服务器组…...

普通一本能找到嵌入式linux工作吗?

在开始前刚好我有一些资料&#xff0c;是我根据网友给的问题精心整理了一份「嵌入式linux的资料从专业入门到高级教程」&#xff0c; 点个关注在评论区回复“888”之后私信回复“888”&#xff0c;全部无偿共享给大家&#xff01;&#xff01;&#xff01;首先&#xff0c;普通…...

Effective C++ 改善程序与设计的55个具体做法笔记与心得 3

三. 资源管理 13. 以对象管理资源 请记住&#xff1a; 为防止资源泄露&#xff0c;使用智能指针 14. 在资源管理类中小心copying行为 请记住&#xff1a; 复制RAII对象必须一并复制他所管理的资源&#xff0c;所以资源的copying行为决定RAII对象的copying行为普遍而常见的…...

苹果的后来者居上策略:靠隐私保护打脸微软

01.苹果与微软相比更注重用户隐私 我一直是Windows的忠实用户&#xff0c;但微软疯狂地将人工智能融入一切&#xff0c;让我开始觉得应该咬咬牙换成Mac。 自小我几乎只用Windows电脑&#xff0c;所以我对MacOS一直不太适应。虽然Windows 11有其缺点&#xff0c;但总的来说&am…...

java经典面试题--进程和线程的关系/区别

进程和线程的定义以及作用 进程:进程是操作系统分配资源的基本单位,是程序的一次执行过程,它包括了程序执行的上下文环境,包括程序代码、数据、系统资源&#xff08;内存、文件、设备等&#xff09;以及执行状态等信息&#xff0c;其作用是提供一个独立的执行环境&#xff0c;…...

Solr 日志系统7.4.0部署和迁移到本地,Core Admin 添加新的core报错

文章目录 Solr部署Docker部署二进制部署 Tips:Solr设置账号密码方法1&#xff1a;(不使用)方法2&#xff1a; Core Admin 添加新的core报错Solr数据迁移 Solr部署 Docker部署 docker run -d -p 8983:8983 --name solr solr:latest docker run -d -p 8983:8983 -v /opt/solr:/…...

前缀和+双指针,CF 131F - Present to Mom

一、题目 1、题目描述 2、输入输出 2.1输入 2.2输出 3、原题链接 131F - Present to Mom 二、解题报告 1、思路分析 很经典的一种把列看作cell 来进行双指针/递推的题型 我们考虑&#xff0c;可以预处理出原矩阵中的所有star 然后我们去枚举矩形的上下边界&#xff0c;把…...

HCIA-速查-ENSP模拟器2步清空配置

需求&#xff1a;清空模拟器配置 清空当前图中配置 步骤1&#xff1a;reset saved-configuration 后输入y确认 步骤2&#xff1a;reboot后输入n否认再输入y确认 验证已经清空配置...

优选算法刷题笔记 2024.6.10-24.6.20

一、双指针算法(快慢指针,对撞指针) 艹&#xff0c;CSDN吞了我是十三题笔记&#xff01;&#xff01;&#xff01; 二、滑动窗口(滑动窗口) 1、找到字符串中所有字母异位词 class Solution {public List<Integer> findAnagrams(String s, String p) {int[] hash1 new in…...

无需科学上网:轻松实现国内使用Coze.com平台自己创建的Bot(如何实现国内免费使用GPT-4o/Gemini等最新大模型)

文章目录 📖 介绍 📖🏡 演示环境 🏡📒 如何在国内使用 Coze.com 创建的 Bot 📒📝 创建Bot📝 实现国内使用📝 测试⚓️ 相关链接 ⚓️📖 介绍 📖 Coze.com 是一个强大的平台,允许用户创建各种类型的 Bot。然而,许多国内用户可能会遇到访问问题,导致无法…...

【车载开发系列】CAN通信总线再理解(中篇)

【车载开发系列】CAN通信总线再理解&#xff08;中篇&#xff09; 九. CAN总线标准十. CAN物理层十一. CAN数据链路层1&#xff09;CAN的通信帧类型2&#xff09;CAN的标准帧格式1. CAN ID2. 数据场 3&#xff09;CAN总线仲裁 十二. CAN应用层1&#xff09;CANopen2&#xff09…...

系统编程:互斥锁,条件变量

互斥锁 使用过程: 1,声明锁: pthread_mutex_t lock; 2,初始化锁:pthread_mutex_init(&lock,NULL); 3,在线程的方法函数中上锁和解锁:(成对出现) pthread_mutex_lock(&lock); pthread_mutex_unlock(&lock); 4,销毁锁:pthread_mutex_destroy(&lock); 代码示例:…...

蓝鹏测控公司全长直线度算法项目多部门现场组织验收

关键字:全场直线度算法,直线度测量仪,直线度检测,直线度测量设备, 6月18日上午&#xff0c;蓝鹏测控公司全长直线度算法项目顺利通过多部门现场验收。该项目由公司技术部、开发部、生产部等多个部门共同参与&#xff0c;旨在提高直线度测量精度&#xff0c;满足高精度制造领域需…...

使用Python进行音频处理

通常会使用wave模块。但是&#xff0c;如果您想要处理其他类型的音频文件&#xff0c;或者需要更高级的音频处理功能&#xff0c;您可能需要安装第三方库&#xff0c;如pydub、soundfile、numpy等。 import wave # 读取WAV文件 with wave.open(input.wav, rb) as wav_file: …...

家有老人小孩,室内灰尘危害大!资深家政教你选对除尘空气净化器

哈喽&#xff0c;各位亲爱的朋友们&#xff01;今天我们来聊聊每次大扫除时最让人头疼的问题——灰尘。你有没有发现&#xff0c;两天不打扫&#xff0c;桌子上就能积上一层灰&#xff1b;阳光一照&#xff0c;地板上的灰尘都在跳舞&#xff1b;整理被子的时候&#xff0c;空气…...

AI在创造与毁灭之间摇摆:音乐产业的机遇与挑战并存

AI到底在创造还是毁掉音乐&#xff1f; 最近一个月&#xff0c;轮番上线的音乐大模型&#xff0c;一举将素人生产音乐的门槛降到了最低&#xff0c;并掀起了音乐圈会不会被AI彻底颠覆的讨论。短暂的兴奋后&#xff0c;AI产品的版权归属于谁&#xff0c;创意产业要如何在AI的阴…...

Spring Boot集成 Spring Retry 实现容错重试机制并附源码

&#x1f604; 19年之后由于某些原因断更了三年&#xff0c;23年重新扬帆起航&#xff0c;推出更多优质博文&#xff0c;希望大家多多支持&#xff5e; &#x1f337; 古之立大事者&#xff0c;不惟有超世之才&#xff0c;亦必有坚忍不拔之志 &#x1f390; 个人CSND主页——Mi…...

MDK-ARM 编译后 MAP 文件分析

本文配合 STM32 堆栈空间分布 食用更佳&#xff01; 一图胜千言。。。...

antv g6实现系统拓扑图

1 背景 为例描述各个服务、redis、mysql等之间的联系及其健康状态&#xff0c;构建系统拓扑图&#xff0c;考虑 g6 更适合处理大量数据之间的关系&#xff0c;所以我们采用g6来绘制前端的图形。 g6提供的支持&#xff1a; 节点/边类型多样&#xff0c;同样支持自定义对于节点…...

因路径规划异常导致导航停止 Failed to pass global plan to the controller

因路径规划异常导致导航停止 Failed to pass global plan to the controller 控制台错误信息: [ WARN] [1718875656.343893537, 93.698000000]: Transformed plan is empty. Aborting local planner! [ERROR] [1718875656.343922719, 93.698000000]: move_base.cpp:854 Faile…...

AOSP开发环境搭建

目录 一、安装虚拟机 二、安装Ubuntu 三、安装VMware tools 3.1、通用安装 3.2、Ubuntu22.04 中Drag and drop is not supported问题 四、安装依赖环境 4.1、安装git 4.2、下载Python3 4.3、解压Python3 4.4、编译与安装Python3 3.sudo make install 4.5、安装Pyth…...

React native新架构组成

React Native 的新架构&#xff08;New Architecture&#xff09;引入了一些新的组件和概念&#xff0c;旨在提高性能、增强灵活性和简化跨平台开发。主要组成部分包括&#xff1a; Fabric: Fabric Renderer: Fabric 是新的渲染引擎&#xff0c;它旨在取代现有的渲染引擎。与…...

Spring Security+Spring Boot实现登录认证以及权限认证

基本概念 “Authentication(认证)”是spring security框架中最重要的功能之一&#xff0c;所谓认证&#xff0c;就是对当前访问系统的用户给予一个合法的身份标识&#xff0c;用户只有通过认证才可以进入系统&#xff0c;在物理世界里&#xff0c;有点类似于“拿工卡刷门禁”的…...

天津网站制作机玩法部/抖音代运营收费详细价格

ViewChild 获取 DOM 节点 模板中给 DOM 节点起个名字 <div #domName>我是一个 DOM 节点</div>业务逻辑组件内引入 ViewChild import { ViewChild } from angular/core在类里面获取 DOM 节点 ViewChild(domName) myDom: anyngAfterViewInit 生命周期函数内获取 DO…...

安徽网站定制/营销推广外包

分享第一份Java基础-中级-高级面试集合 Java基础&#xff08;对象线程字符接口变量异常方法&#xff09; Java中级开发&#xff08;底层Spring相关Redis分布式设计模式MySQL高并发锁线程&#xff09; Java高级“程序猿”&#xff08;高并发Redis缓存分布式消息队列高可用微服务…...

深圳做英文网站的公司/企业网站的推广阶段

简介&#xff1a; 浮动时间app&#xff0c;为解决抢购问题而打造的秒杀抢购神器&#xff0c;汇聚多个网购平台服务器时间于一身&#xff0c;帮助用户轻松抢到心仪商品&#xff0c;快捷又方便&#xff0c;让抢购快人一步。更精准的时间计算&#xff0c;更精美的的UI设计&#x…...

做外贸在哪个网站注册/seo全网优化推广

项目管理迁移到gradle已经用了大半年了&#xff0c;对so文件的添加了解的还不清楚&#xff0c;直到今天经过各种试验&#xff0c;总算是得出一些心得。因为项目需要集成喜马拉雅的SDK&#xff0c;他们提供了播放器的so库&#xff0c;按照他们的官方文档一步一步去集成&#xff…...

长沙公司网站的建设/北京网络seo

您的“关注”和“点赞”&#xff0c;是信任&#xff0c;是认可&#xff0c;是支持&#xff0c;是动力...... 如意见相佐&#xff0c;可留言。 本人必将竭尽全力试图做到准确和全面&#xff0c;终其一生进行修改补充更新。1 元组概述 元组是由一系列按特定顺序排序的元素组成的序…...

电商网站建设课设/谷歌浏览器下载安装2022

Edittext中inputType&#xff1a; //文本类型&#xff0c;多为大写、小写和数字符号。 android:inputType”none” android:inputType”text” android:inputType”textCapCharacters” 字母大写 android:inputType”textCapWords” 首字母大写 android:inputType”text…...