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

news2024/10/23 4:55:37

目录

一. 写在前面

二. 如何计算误码率

三. 带噪声的误码率分析

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为比特信噪比,单位也是dB

numSymPerFrame=100;
%一共产生100个QAM symbols

snrdB=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; 
%初始化误差比特数为0

numBits=0;
%初始化总传输比特数为0

while 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进行解调,解调阶数为M

dataOut=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”。具体看上面的代码比较好理解,这里就不重复了。

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

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

相关文章

原子性(juc编程)

原子性 概述&#xff1a;所谓的原子性是指在一次操作或者多次操作中&#xff0c;要么所有的操作全部都得到了执行并且不会受到任何因素的干扰而中断&#xff0c;要么所有的操作都不执行&#xff0c;多个操作是一个不可以分割的整体。 //比如说&#xff1a;你喂你女朋友吃冰淇…

户外LED显示屏的发展历程

户外LED显示屏自其问世以来&#xff0c;经历了显著的发展与变革。其技术不断进步&#xff0c;应用场景逐步扩大&#xff0c;并在广告、信息传播等领域发挥了重要作用。本文将梳理户外LED显示屏的发展历程&#xff0c;重点介绍其技术演进和应用拓展。 早期发展&#xff1a;直插式…

一文带你理清同源和跨域

1、概述 前后端数据交互经常会碰到请求跨域&#xff0c;什么是跨域&#xff0c;为什么需要跨域&#xff0c;以及常用有哪几种跨域方式&#xff0c;这是本文要探讨的内容。 同源策略(英文全称 Same origin policy)是浏览器提供的一个安全功能。同源策略限制了从同一个源加载的…

海外盲盒小程序搭建过程的最大挑战:文化差异与本地化

一、引言 随着全球化的深入发展&#xff0c;跨境电商和海外市场的拓展成为许多企业的重要战略方向。盲盒小程序作为一种新兴的消费模式&#xff0c;也在海外市场展现出巨大的潜力。然而&#xff0c;在海外搭建盲盒小程序并非易事&#xff0c;文化差异与本地化问题是其搭建过程…

计算最大数位-第13届蓝桥杯省赛Python真题精选

[导读]&#xff1a;超平老师的Scratch蓝桥杯真题解读系列在推出之后&#xff0c;受到了广大老师和家长的好评&#xff0c;非常感谢各位的认可和厚爱。作为回馈&#xff0c;超平老师计划推出《Python蓝桥杯真题解析100讲》&#xff0c;这是解读系列的第87讲。 计算最大数位&…

Qwen2大模型微调入门实战-命名实体识别(NER)任务(完整代码)

Qwen2是通义千问团队最近开源的大语言模型&#xff0c;由阿里云通义实验室研发。 以Qwen2作为基座大模型&#xff0c;通过指令微调的方式做高精度的命名实体识别&#xff08;NER&#xff09;&#xff0c;是学习入门LLM微调、建立大模型认知的非常好的任务。 使用LoRA方法训练&…

MySQL快速安装(mysql8.0.30区别之前yum安装)

目录 一.初始化环境并解压 二.创建程序用户管理 三.修改mysql目录和配置文件的权限 四.修改配置文件 五.设置环境变量&#xff0c;申明/宣告mysql命令便于系统识别 六.初始化数据库 七.设置系统识别&#xff0c;进行操作 八.初始化数据库密码 九.用户并设置密码 十.赋…

机器学习模型评估之校准曲线

模型校准曲线&#xff08;Calibration Curve&#xff09;&#xff0c;也称为可靠性曲线&#xff08;Reliability Curve&#xff09;或概率校准曲线&#xff08;Probability Calibration Curve&#xff09;&#xff0c;是一种评估分类模型输出概率准确性的图形工具。它可以帮助我…

STM32 串口通讯

使用STM32的串口通讯&#xff0c;接收串口助手的数据&#xff0c;并且将接收到的数据返回串口&#xff0c;重定义printf功能。 配置引脚信息 由于每次新建工程都需要配置信息&#xff0c;比较麻烦&#xff0c;好在STM32CubeIDE提供了导入.ioc文件的功能&#xff0c;可以帮我们…

达梦8 兼容MySQL语法支持非分组项作为查询列

MySQL 数据库迁移到达梦后&#xff0c;部分GROUP BY语句执行失败&#xff0c;报错如下&#xff1a; 问题原因&#xff1a; 对于Oracle数据库&#xff0c;使用GROUP BY时&#xff0c;SELECT中的非聚合列必须出现在GROUP BY后面&#xff0c;否则就会报上面的错误&#xff0c;达梦…

基于python+tkinter(Gui)的学生信息管理系统

博主介绍&#xff1a; 大家好&#xff0c;本人精通Java、Python、C#、C、C编程语言&#xff0c;同时也熟练掌握微信小程序、Php和Android等技术&#xff0c;能够为大家提供全方位的技术支持和交流。 我有丰富的成品Java、Python、C#毕设项目经验&#xff0c;能够为学生提供各类…

[创业之路-119] :制造业企业的必备管理神器-ERP-主要功能模块说明与系统架构

目录 一、ERP功能的标准化 二、常见的ERP标准化功能 2.1 基础档案 2.2 供应链 2.3 人力资源管理 2.4 资产管理 2.5 生产制造 2.6 财务会计 2.7 管理会计 2.8 CRM客户管理管理 2.9 商业智能分析 三、常见的ERP软件供应商 国内ERP软件供应商 国外ERP软件供应商 四…

2024考古之还在用原始JDBC开发 手搓 案例 实现一个模块的增删改

JDBC案例 将来如果完成的话 就代表对JDBC里面的知识点全部融会贯通了 其实就是对数据的增删改查 我们入门做不出来前端的内容 很正常 准备环境 建表 use mybatis;create table tbl_brand (id int primary key auto_increment,brand_name varchar(20),company_name varcha…

在hue中使用ooize调度ssh任务无法执行成功,无法查看错误

ssh执行失败&#xff0c;但是hue没有给出明确的错误原因&#xff1a; 经过经验分析&#xff0c;原来是服务器上的sh文件用的是doc/window格式&#xff0c;需要使用notepad将格式改为unix之后就可以正常执行。 特此记录&#xff0c;避免遗忘知识点

图标设计新手手册:应用图标尺寸比例全解析

通常我们在App Store中寻找新的应用程序时&#xff0c;首先会快速扫描搜索栏中的一些关键词&#xff0c;然后选择感兴趣的应用程序&#xff0c;在选定的应用页面中查看具体信息&#xff0c;最后决定是否下载。在这一系列操作中&#xff0c;APP图标的大小比例是影响用户体验的关…

大腾智能,基于云原生的国产工业协同平台

大腾智能是一家基于云原生的国产工业软件与数字化协同平台&#xff0c;专注于推动企业数字化转型与升级&#xff0c;为企业提供一系列专业、高效的云原生数字化软件及方案&#xff0c;推动产品设计、生产及营销展示的革新&#xff0c;实现可持续发展。 大腾智能旗下产品 3D模型…

前端构建工具用得好,构建速度提升 10 倍

今天来盘点一下前端构建工具。 Turbopack Turbopack&#xff0c;由Vercel开源&#xff0c;是下一代高性能的JavaScript应用构建工具&#xff0c;目前用于 Next.js 中。Turbopack旨在通过革新JavaScript应用的打包流程来显著提升应用性能&#xff0c;它专注于缩短加载时间&…

小阿轩yx-Tomcat 部署及优化

小阿轩yx-Tomcat 部署及优化 Tomcat 概述 免费的、开放源代码的Web应用服务器Apache软件基金会(Apache Software Foundation)Jakarta项目中的一个核心项目由Apache、Sun和一些公司及个人共同开发而成深受Java爱好者的喜爱,并得到部分软件开发商的认可目前比较流行的Web应用服…

强化学习——基本概念

何为强化学习 机器学习的一大分支 强化学习&#xff08;Reinforcement Learning&#xff09;是机器学习的一种&#xff0c;它通过与环境不断地交互&#xff0c;借助环境的反馈来调整自己的行为&#xff0c;使得累计回报最大。强化学习要解决的是决策问题——求取当前状态下最…

sql资料库

1、distinct(关键词distinct用于返回唯一不同的值)&#xff1a;查询结果中去除重复行的关键字 select distinct(university) from user_profile select distinct university from user_profile distinct是紧跟在select后面的&#xff0c;不能在其他位置&#xff0c;不然就…