Python深度学习:【调制识别系列】RML2018画图

news/2024/7/25 3:01:11/文章来源:https://blog.csdn.net/PoGeN1/article/details/139238459

文章目录

    • 代码
    • 代码解释

代码

import scipy.io as io
import numpy as np
import matplotlib.pyplot as plt
import osclass PlotFig():def __init__(self):self.mods=['OOK', '4ASK', '8ASK', 'BPSK', 'QPSK', '8PSK', '16PSK', '32PSK','16APSK', '32APSK','64APSK', '128APSK', '16QAM', '32QAM', '64QAM', '128QAM', '256QAM', 'AM-SSB-WC', 'AM-SSB-SC', 'AM-DSB-WC', 'AM-DSB-SC','FM', 'GMSK', 'OQPSK']self.snrs = list(range(-20, 31, 2)) # 26种信噪比# 画出26种信噪比下24种调制方式的第0个样本的星座图def plot_xingzuo(self):# 保存图形到文件,指定文件路径和名称save_fig_path='figure/xingzuotu'if not os.path.exists(save_fig_path):os.makedirs(save_fig_path)# 选择要绘制的信号,这里我们选择第一个信号(即第一个1024点集)signal_index = 0mods = self.modsfor db in self.snrs:for mod in mods:data=io.loadmat(f'data/split/{mod}_SNR={db}dB.mat')['IQ_data']# print(data) # print(data.shape) # (4096, 1024, 2)real_part = data[signal_index, :, 0]  # 实部imaginary_part = data[signal_index, :, 1]  # 虚部# 绘制星座图plt.figure(figsize=(10, 8))plt.scatter(real_part, imaginary_part, color='blue', s=2)  plt.title('xingzuo')plt.xlabel('Real')plt.ylabel('Imag')plt.grid(True)# plt.show()file_path = save_fig_path + f'/{mod}_SNR={db}dB.png'# 调用 savefig,传入文件路径和所需的附加参数#设置图像分辨率为300 DPIplt.savefig(file_path, format='png', dpi=300) plt.close()# 同一种调制方式的不同信噪比画到一张图上def plot_all_snr(self):# 保存图形到文件,指定文件路径和名称save_fig_path='figure/SNR'if not os.path.exists(save_fig_path):os.makedirs(save_fig_path)for mod in self.mods:plt.figure(figsize=(10, 8))signal_index = 0fig_i=0for snr in self.snrs:data=io.loadmat(f'data/split/{mod}_SNR={snr}dB.mat')['IQ_data']# print(data) # print(data.shape) # (4096, 1024, 2)# 选择要绘制的信号,这里我们选择第一个信号(即第一个1024点集)real_part = data[signal_index, :, 0]  # 实部imaginary_part = data[signal_index, :, 1]  # 虚部# 绘制星座图fig_i=fig_i+1plt.subplot(4,7,fig_i)plt.scatter(real_part, imaginary_part, color='blue', s=0.5)plt.title('{}dB'.format(snr))file_path = save_fig_path+f'/{mod}_SNR_all.png'# 调用 savefig,传入文件路径和所需的附加参数plt.tight_layout()plt.savefig(file_path, format='png', dpi=300)  plt.close()# 同一种信噪比下的不同调制方式画到一张图上面def plot_all_mod(self):# 保存图形到文件,指定文件路径和名称save_fig_path='figure/MOD'if not os.path.exists(save_fig_path):os.makedirs(save_fig_path)for snr in self.snrs:plt.figure(figsize=(10, 8))signal_index = 0fig_i=0for mod in self.mods:data=io.loadmat(f'data/split/{mod}_SNR={snr}dB.mat')['IQ_data']# print(data) # print(data.shape) # (4096, 1024, 2)# 选择要绘制的信号,这里我们选择第一个信号(即第一个1024点集)real_part = data[signal_index, :, 0]  # 实部imaginary_part = data[signal_index, :, 1]  # 虚部# 绘制星座图fig_i=fig_i+1plt.subplot(4,7,fig_i)plt.scatter(real_part, imaginary_part, color='blue', s=0.5)plt.title('{}'.format(mod))file_path = save_fig_path+f'/{snr}_MOD_all.png'# 调用 savefig,传入文件路径和所需的附加参数plt.tight_layout()plt.savefig(file_path, format='png', dpi=300)  plt.close()            if __name__ == "__main__":# 画出每种信噪比下24种调制方式的第0个样本的星座图plot_fig=PlotFig()# plot_fig.plot_xingzuo()# 不同信噪比,画到一张图上面plot_fig.plot_all_snr()# 不同调制方式,画到一张图上面plot_fig.plot_all_mod()

代码解释

这段代码定义了一个PlotFig类,用于绘制和保存不同调制方式和不同信噪比(SNR)下的信号星座图。我会为你详细解释这个类的功能和每部分代码的作用。

  1. 初始化方法 (__init__):

    • 定义了一个mods列表,其中包含了24种不同的调制方式。
    • 定义了一个snrs列表,表示从-20dB到30dB(步长为2dB)的信噪比范围,总共有26种信噪比。
  2. plot_xingzuo 方法:

    • 这个方法用于为每种调制方式和每种信噪比绘制一个单独的星座图。
    • 首先,它检查保存图形的文件夹是否存在,如果不存在则创建。
    • 对于每一种信噪比和每一种调制方式:
      • .mat文件中加载数据,该文件包含特定信噪比和调制方式下的IQ数据。
      • 选择第一个信号(即signal_index = 0)的实部和虚部。
      • 使用matplotlib绘制星座图,并将其保存为PNG格式的图片,分辨率为300 DPI。
      • 关闭图形以释放资源。
  3. plot_all_snr 方法:

    • 这个方法用于将同一种调制方式在不同信噪比下的星座图绘制在同一张图上。
    • plot_xingzuo方法类似,它首先检查保存图形的文件夹是否存在,并为其创建文件夹(如果不存在)。
    • 对于每一种调制方式:
      • 创建一个新的图形。
      • 对于每一种信噪比,从相应的.mat文件中加载数据,并选择第一个信号的实部和虚部。
      • 使用plt.subplot在一个图形中创建多个子图,每个子图代表一个特定的信噪比下的星座图。
      • 最后,将整个图形保存为PNG格式的图片,分辨率为300 DPI,并关闭图形。

plot_all_mod 方法

这个方法旨在将同一种信噪比(SNR)下的不同调制方式的星座图画到同一张图上。

  1. 设置保存路径:

    • 定义一个保存图形的文件夹路径save_fig_path
    • 检查该文件夹是否存在,如果不存在则创建它。
  2. 遍历信噪比:

    • 对于self.snrs列表中的每一个信噪比,执行以下操作。
  3. 初始化图形和变量:

    • 使用plt.figure创建一个新的图形,并设置其大小。
    • 初始化signal_index为0,表示选择第一个信号进行绘制。
    • 初始化fig_i为0,用于追踪当前子图的编号。
  4. 遍历调制方式:

    • 对于self.mods列表中的每一种调制方式,执行以下操作:
      • 从相应的.mat文件中加载数据,该文件包含特定信噪比和调制方式下的IQ数据。
      • 提取第一个信号的实部和虚部。
      • 使用plt.subplot在图形中创建一个子图,用于绘制当前调制方式的星座图。
      • 使用plt.scatter绘制星座图,并设置标题为当前调制方式的名称。
      • 更新fig_i以准备下一个子图的绘制。
  5. 保存和关闭图形:

    • 使用plt.tight_layout调整子图布局,以避免重叠。
    • 将整个图形保存为PNG格式的图片,分辨率为300 DPI。
    • 使用plt.close关闭图形,以释放资源。

主执行部分 (if __name__ == "__main__":)

  1. 创建PlotFig实例:

    • 实例化PlotFig类,创建一个对象plot_fig
  2. 绘制并保存图形:

    • 调用plot_fig.plot_all_snr()方法,该方法将同一种调制方式的不同信噪比画到一张图上。
    • 调用plot_fig.plot_all_mod()方法,该方法将同一种信噪比下的不同调制方式画到一张图上。

注意:在主执行部分,plot_fig.plot_xingzuo()方法被注释掉了。如果你也想执行这个方法,只需取消注释即可。这个方法会为每种调制方式和每种信噪比单独绘制星座图。

这段代码提供了三种不同的方式来可视化和比较不同调制方式和信噪比下的信号星座图。这对于信号处理和通信系统的性能分析非常有用。

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

如若内容造成侵权/违法违规/事实不符,请联系dt猫网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

CIM模型

CIM 是 Esri 制图信息模型。 它是一个地图内容规范,用于记录在保存、读取、引用或打开时如何永久保留描述不同项目组件的信息。 该规范以 JSON 表示,适用于 ArcGIS 应用程序和 API 中的地图、场景、布局、图层、符号和样式。 CIM 不仅限于制图设置。 要了解属性的组织方式以及…

如何停止 iPad 和 iPhone 之间共享短信,独立接收和发送消息

概括 在当今高度互联的数字世界中,Apple 设备之间的无缝连接性提供了极大的便利,尤其是在消息同步方面。iPhone 和 iPad 用户通常可以享受到设备间短信的自动同步功能,这意味着无论是在哪个设备上,用户都可以接收和回复消息。然而…

六.逼格拉满-Prometheus+Grafana微服务监控告警

前言 微服务架构是一个分布式系统,由多个独立的服务组成,每个服务可能运行在不同的容器、虚拟机或物理机上,那么在生产环境中我们需要随时监控服务的状态,以应对各种突发情况,比如:内存爆满,CP…

【Oracle篇】rman工具实用指南:常用命令详解与实践(第二篇,总共八篇)

💫《博主介绍》:✨又是一天没白过,我是奈斯,DBA一名✨ 💫《擅长领域》:✌️擅长Oracle、MySQL、SQLserver、阿里云AnalyticDB for MySQL(分布式数据仓库)、Linux,也在扩展大数据方向的知识面✌️…

[NISACTF 2022]easyssrf、[NISACTF 2022]level-up

[NISACTF 2022]easyssrf 使用dirsearch扫描后没发现什么路径 尝试访问127.0.0.1,成功了 访问127.0.0.1/flag.php提示有文件/fl4g 使用file://协议读取文件/fl4g,提示除此页面外还有一个ha1x1ux1u.php页面。 file:///fl4g 直接访问,发现GET…

google浏览器下载和相应驱动下载

1、chromedriver 115及115之后版本下载地址: https://googlechromelabs.github.io/chrome-for-testing/ 2、chromedriver 115之前版本下载地址(已停止更新115及之后版本): http://chromedriver.storage.googleapis.com/index.html…

PVE 虚拟机环境下删除 local-lvm分区

1、删除逻辑卷 lvremote pve/data 2、扩展逻辑卷 lvextend -l 100%FREE -r pve/root 3、 修改存储目录内容 点击 Datacenter - Storage (1)删除local-lvm分区 (2)编辑local分区,在内容一项中勾选所有可选项。

python数据处理与分析入门-Pandas数据可视化例子

相关内容 Matplotlib可视化练习 Pandas 数据可视化总结 柱状图 reviews[points].value_counts().sort_index().plot.bar()散点图 reviews[reviews[price] < 100].sample(100).plot.scatter(xprice, ypoints)蜂窝图 reviews[reviews[price] < 100].plot.hexbin(xprice…

C++:vector基础讲解

hello&#xff0c;各位小伙伴&#xff0c;本篇文章跟大家一起学习《C&#xff1a;vector基础讲解》&#xff0c;感谢大家对我上一篇的支持&#xff0c;如有什么问题&#xff0c;还请多多指教 &#xff01; 如果本篇文章对你有帮助&#xff0c;还请各位点点赞&#xff01;&#…

分类和品牌关联

文章目录 1.数据库表设计1.多表关联设计2.创建表 2.使用renren-generator生成CRUD1.基本配置检查1.generator.properties2.application.yml 2.生成代码1.进入localhost:81生成代码2.将main目录覆盖sunliving-commodity模块的main目录 3.代码检查1.注释掉CategoryBrandRelationC…

沃飞携AE200真机亮相澳门,全方位赋能城市低空出行

5月22日-25日&#xff0c;第四届BEYOND国际科技创新博览会&#xff08;BEYOND Expo 2024&#xff09;在澳门盛大举行。吉利沃飞长空携旗下全自研产品AE200真机亮相&#xff0c;吸引了现场众多领导嘉宾以及媒体、观众的关注。 作为亚洲顶尖的年度科技盛会&#xff0c;本届BEYOND…

面试-软件工程与设计模式相关,Spring简介

面试-软件工程与设计模式相关&#xff0c;Spring简介 1.编程思想1.1 面向过程编程1.2 面向对象编程1.2.1 面向对象编程三大特征 1.3 面向切面编程1.3.1 原理1.3.2 大白话&#xff1f;1.3.3 名词解释1.3.4 实现 2. 耦合与内聚2.1 耦合性2.2 内聚性 3. 设计模式3.1 设计模型七大原…

nodejs安装配置

nodejs安装 打开nodejs官网(https://nodejs.org/en/download/package-manager)&#xff0c;参考安装步骤操作。 更新镜像源 输入以下命令&#xff0c;将npm的镜像源设置为淘宝镜像。网上资料中&#xff0c;淘宝镜像地址多为https://registry.npm.taobao.org&#xff0c;这个…

js之图片上传

话不多说&#xff0c;直接上干货&#xff0c;注释在代码里面 下面是效果图和代码 <!DOCTYPE html> <html lang"zh"><head><meta charset"UTF-8"><meta name"viewport" content"widthdevice-width, initial-sca…

景源畅信:新手做抖音运营难不难?

在这个信息爆炸的时代&#xff0c;社交媒体平台如抖音已经成为了人们日常生活中不可或缺的一部分。随着抖音的兴起&#xff0c;越来越多的人开始尝试进入这个领域&#xff0c;希望通过抖音运营实现自己的价值。然而&#xff0c;对于新手来说&#xff0c;抖音运营是否真的容易呢…

现代前端工程化实践:Git、Husky、Commitlint与PNPM的协同作战

引言 Git Husky 与 Commitlint 是两个在 Git 工作流程中非常实用的工具&#xff0c;它们可以帮助团队维护代码质量和提交规范。Husky 是一个 Git 钩子管理器&#xff0c;允许你在仓库级别方便地配置钩子脚本&#xff1b;而 Commitlint 则是用来规范 Git 提交信息的工具&#x…

Bootstrap5

Bootstrap5-容器 容器是Bootstrap—个基本的构建块&#xff0c;它包含、填充和对齐给定设备或视口中的內容。 Bootstrap 需要一个容器元素来包裏网站的内容 我们可以使用以下两个容器类&#xff1a; .container 类用于固定宽度并支持响应式布局的容器。.container-fluid 类用…

左外连接和右外连接的区别?举例说明——以力扣sql 1378. 使用唯一标识码替换员工ID为例

左外连接&#xff08;LEFT JOIN&#xff09;和右外连接&#xff08;RIGHT JOIN&#xff09;的主要区别在于哪个表的所有行会保留在结果集中 1. 左外连接 (LEFT JOIN) 左外连接会返回左表中的所有行以及右表中符合连接条件的行。如果右表中没有匹配的行&#xff0c;结果集中右…

剖析【C++】——类与对象(上)超详解——小白篇

目录 1.面向过程和面向对象的初步认识 1.面向过程&#xff08;Procedural Programming&#xff09; 2.面向对象&#xff08;Object-Oriented Programming&#xff09; 概念&#xff1a; 特点&#xff1a; 总结 2.C 类的引入 1.从 C 语言的结构体到 C 的类 2.C 中的结构…

我的世界开服保姆级教程

前言 Minecraft开服教程 如果你要和朋友联机时&#xff0c;可以选择的方法有这样几种&#xff1a; 局域网联机&#xff1a;优点&#xff1a;简单方便&#xff0c;在MC客户端里自带。缺点&#xff1a;必须在同一局域网内。 有些工具会带有联机功能&#xff1a;优点&#xff1a;一…