当前位置: 首页 > 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”。具体看上面的代码比较好理解,这里就不重复了。

http://www.lryc.cn/news/377801.html

相关文章:

  • 【2024最新华为OD-C/D卷试题汇总】[支持在线评测] 字符串筛选排序(100分) - 三语言AC题解(Python/Java/Cpp)
  • # 开发安全
  • Qt MaintenanceTool.exe使用镜像源更新Qt
  • Java 8 Stream API介绍
  • 【前端技巧】css篇
  • 2024年6月20日 (周四) 叶子游戏新闻
  • Zookeeper 一、Zookeeper简介
  • 普通一本能找到嵌入式linux工作吗?
  • Effective C++ 改善程序与设计的55个具体做法笔记与心得 3
  • 苹果的后来者居上策略:靠隐私保护打脸微软
  • java经典面试题--进程和线程的关系/区别
  • Solr 日志系统7.4.0部署和迁移到本地,Core Admin 添加新的core报错
  • 前缀和+双指针,CF 131F - Present to Mom
  • HCIA-速查-ENSP模拟器2步清空配置
  • 优选算法刷题笔记 2024.6.10-24.6.20
  • 无需科学上网:轻松实现国内使用Coze.com平台自己创建的Bot(如何实现国内免费使用GPT-4o/Gemini等最新大模型)
  • 【车载开发系列】CAN通信总线再理解(中篇)
  • 系统编程:互斥锁,条件变量
  • 蓝鹏测控公司全长直线度算法项目多部门现场组织验收
  • 使用Python进行音频处理
  • 家有老人小孩,室内灰尘危害大!资深家政教你选对除尘空气净化器
  • AI在创造与毁灭之间摇摆:音乐产业的机遇与挑战并存
  • Spring Boot集成 Spring Retry 实现容错重试机制并附源码
  • MDK-ARM 编译后 MAP 文件分析
  • antv g6实现系统拓扑图
  • 因路径规划异常导致导航停止 Failed to pass global plan to the controller
  • AOSP开发环境搭建
  • React native新架构组成
  • Spring Security+Spring Boot实现登录认证以及权限认证
  • 5款堪称变态的AI神器,焊死在电脑上永不删除!