(7)MATLAB:QPSK理论误符号率和理论误比特率

ops/2024/10/9 13:19:26/

文章目录

  • 前言
  • 一、QPSK系统的平均误码率
  • 二、QPSK系统的平均误比特率
    • 1.根据误码率计算从QPSK符号(四进制)译为比特串的比特错误率。
    • 2.使用最佳接收的误比特率计算公式。
  • 三、MATLAB代码实现与结果
    • 1.代码实现
    • 2.性能曲线画图
  • 总结
  • 参考资料


前言

本文给出QPSK的理论误符号率与理论误比特率公式,并给出MATLAB代码实现,画出性能曲线。


一、QPSK系统的平均误码率

QPSK最佳接收的平均误符号率(用Ps表示)由下式给出:

在这里插入图片描述

其中,Q(x)为Q函数。
注意:公式中的Eb/N0取线性值。下文代码中需要将分贝值转换为线性值,用于画出性能曲线。

二、QPSK系统的平均误比特率

计算QPSK最佳接收的平均误比特率(用Pb表示)一般有两种方法:

1.根据误码率计算从QPSK符号(四进制)译为比特串的比特错误率。

对于多进制调制而言,若比特到符号的映射采用格雷编码,且假设符号错误只发生在相邻符号之间,这意味着一个错误符号中只包含一个比特错误。由于一个QPSK调制符号包含两个传输比特,所以对于采用格雷编码的QPSK最佳接收,有

在这里插入图片描述

2.使用最佳接收的误比特率计算公式。

对于QPSK最佳接收,其平均误比特率也可由下式给出:

在这里插入图片描述

其中,erfc(x)为互补误差函数。Q函数与互补误差函数的关系如下:
在这里插入图片描述

在这里插入图片描述

三、MATLAB代码实现与结果

1.代码实现

QPSK系统的理论误符号率和理论误比特率的MATLAB代码实现如下:

clc
close all
clear all%% QPSK理论误符号率
EbNodBVec = 0:2:12;                           % Eb/No values to simulate in dBEbNoLin = 10.^(EbNodBVec/10);                 % converting EbNo from dB to linear scale
q = qfunc(sqrt(2*EbNoLin));% 误符号率
theorSER = 2 * q .* (1-q/2);                  % Digital Communication%% QPSK理论误比特率
% 误比特率(由误符号率导出)
theorBER = theorSER./2;                       % Digital Communication% 误比特率(由理论公式得出)
% theorBER = q;                               % 使用Q函数
% theorBER = 0.5 .* erfc(sqrt(EbNoLin));      % 使用互补误差函数%% 使用库函数berawgn得到QPSK的误比特率(BER)和误符号率(SER)
M = 4;                                        % 调制阶数Modulation order
[berQPSK, serQPSK] = berawgn(EbNodBVec,'psk',M,'nondiff');%% 画图对比
figure();
semilogy(EbNodBVec,serQPSK,'o',    EbNodBVec,berQPSK,'*', ...EbNodBVec,theorSER,'b-',  EbNodBVec,theorBER,'r-');
legend('Theoretical Symbol error rate',                   'Theoretical Bit error rate', ...'Theoretical Symbol error rate(use berawgn)',      'Theoretical Bit error rate(use berawgn)', ...'Location','SouthWest');
xlabel('Eb/No (dB)');
ylabel('Error Probability');
title('Symbol and Bit Error Probability - QPSK');
grid on;

2.性能曲线画图

代码运行结果画图如下:

在这里插入图片描述


总结

MATLAB中可以使用berawgn函数得到AWGN信道的误比特率(BER)和误符号率(SER)。为了理解BER和SER的理论计算过程,本文给出了MATLAB代码实现,并通过和berawgn结果对比验证了一致性。

参考资料

1.北邮《通信原理》,周炯磐、庞沁华、续大我、吴伟陵、杨鸿文等
2.Digital Communication,Mehmet Şafak


http://www.ppmy.cn/ops/120924.html

相关文章

【Java】—— 集合框架:Collection子接口:Set不同实现类的对比及使用(HashSet、LinkedHashSet、TreeSet)

目录 5. Collection子接口2:Set 5.1 Set接口概述 5.2 Set主要实现类:HashSet 5.2.1 HashSet概述 5.2.2 HashSet中添加元素的过程: 5.2.3 重写 hashCode() 方法的基本原则 5.2.4 重写equals()方法的基本原则 5.2.5 练习 5.3 Set实现类…

鸿蒙NEXT开发-组件事件监听和状态管理(基于最新api12稳定版)

注意:博主有个鸿蒙专栏,里面从上到下有关于鸿蒙next的教学文档,大家感兴趣可以学习下 如果大家觉得博主文章写的好的话,可以点下关注,博主会一直更新鸿蒙next相关知识 专栏地址: https://blog.csdn.net/qq_56760790/…

免杀对抗—GOC#反VT沙盒资源分离混淆加密

前言 今天的主要内容是反VT沙盒,我们都知道生成的后门会被杀软上穿到沙盒中去运行,去逆向。如此一来我们的后门就很容易被查杀掉,但如果我们对后门进行一些操作,让它在被逆向的时候,反编译出一堆乱码,或者…

【MySQL】服务器管理与配置

MySQL服务器 服务器默认配置 查看服务器默认选项和系统变量 mysqld --verbose --help 查看运行时的系统变量,可以通过like去指定自己要查询的内容 状态变量的查看 系统变量和状态变量的作用域 全局作用域: 对于每个会话都会生效当前会话:只…

【Python】解密用户代理:使用 Python User Agents 库探索浏览器和设备信息

Python User Agents 是一个专为解析 User Agent 字符串而设计的 Python 库。它能够轻松识别访问设备的类型(如移动设备、桌面设备或平板),并获取设备、浏览器、操作系统等详细信息。借助它,开发者可以更好地了解访问用户的设备属性…

BUCK拓扑详解(每个器件的详细作用)

第一步:如何实现降压? 如果有人问你,如何用最简单的方式将一个高电压转换为一个低电压,比如说将12V降为5V;你脑子里最先想到的方法是什么? 我最先想到的方法就是分压,将12V电压通过两个电阻进行…

测试-----BUG篇

提示:文章写完后,目录可以自动生成,如何生成可参考右边的帮助文档 文章目录 软件测试的生命周期bug的概念描述bugbug的级别bug的生命周期 软件测试的生命周期 软件测试贯穿与软件的整个生命周期,它的具体流程是: 1.需求分析 2.测…

K8S配置管理中心Configmap实现微服务配置

文章目录 一、什么是Configmap?二、Configmap能解决哪些问题?三、Configmap应用场景四、Configmap局限性五、Configmap创建方法(1) 使用kubectl create configmap命令创建(2) 基于文件创建(3) 基于环境变量文件创建(4) 使用YAML文件定义并创建 六、Confi…