【信号处理】绘制IQ信号时域图、星座图、功率谱

时域图

# 导入相关的库
import pickle
import matplotlib.pyplot as plt
import numpy as np
from pathlib import Path
import oswith open(r"C:\0-数据集\公开\RML2016\RML2016.10a_dict.pkl", 'rb') as file:Xd = pickle.load(file, encoding='bytes')
snrs, mods = map(lambda j: sorted(list(set(map(lambda x: x[j], Xd.keys())))), [1, 0])
print(snrs)
print(mods)def time_domain_rml2016(select_mod=b'PAM4',select_snr=16, select_num=10):print(select_mod, select_snr)path = Path("./time/" + str(select_mod) + '_' + str(select_snr))# print(path)if not path.exists():os.makedirs(path)for i in range(select_num):fig = plt.figure()plt.plot(Xd[select_mod, select_snr][i, 0])plt.plot(Xd[select_mod, select_snr][i, 1])name = str(select_mod) + '_' + str(select_snr) + '_' + str(i) + '.png'print(name)plt.axis('off')  # 关闭坐标轴plt.gca().set_frame_on(False)  # 关闭图形边框# 只保存散点图plt.savefig(path/name)# plt.show()time_domain_rml2016()

星座图

把输入的IQ信号定义为信号的实部和虚部(但实际上IQ两路信号都是实信号)将I和Q分别作为横轴和纵轴,那么在复平面上每两个IQ值可以对应一个固定的点,将坐标图画出来就叫做星座图。

# 导入相关的库
import pickle
import matplotlib.pyplot as plt
import numpy as np
from pathlib import Path
import oswith open(r"C:\0-数据集\公开\RML2016\RML2016.10a_dict.pkl", 'rb') as file:Xd = pickle.load(file, encoding='bytes')
snrs, mods = map(lambda j: sorted(list(set(map(lambda x: x[j], Xd.keys())))), [1, 0])
print(snrs)
print(mods)def constellation_rml2016(select_mod=b'QPSK',select_snr=16, select_num=10):data = []# 遍历调制方式和信噪比,提取数据for mod in mods:for snr in snrs:if mod == select_mod and snr == select_snr:data.append(Xd[(mod,snr)])data = np.vstack(data)print(len(data))print(select_mod, select_snr)path = Path("./" + str(select_mod) + '_' + str(select_snr))# print(path)if not path.exists():os.makedirs(path)for i in range(select_num):x, y = data[i]fig = plt.figure()plt.scatter(x, y, c='blue')# plt.xlabel("I")# plt.ylabel("Q")name = str(select_mod) + '_' + str(select_snr) + '_' + str(i) + '.png'print(name)# 不显示坐标轴、标题等信息plt.axis('off')  # 关闭坐标轴plt.gca().set_frame_on(False)  # 关闭图形边框# 只保存散点图plt.savefig(path/name)# plt.show()constellation_rml2016()

功率谱

# 导入相关的库
import pickle
import matplotlib.pyplot as plt
import numpy as np
from pathlib import Path
import oswith open(r"C:\0-数据集\公开\RML2016\RML2016.10a_dict.pkl", 'rb') as file:Xd = pickle.load(file, encoding='bytes')
snrs, mods = map(lambda j: sorted(list(set(map(lambda x: x[j], Xd.keys())))), [1, 0])
print(snrs)
print(mods)def spectrum_power_rml2016(select_mod=b'AM-DSB',select_snr=0, select_num=10):print(select_mod, select_snr)path = Path("./spectrum/" + str(select_mod) + '_' + str(select_snr))# print(path)if not path.exists():os.makedirs(path)for i in range(select_num):fig = plt.figure()data_I = Xd[select_mod, select_snr][i, 0]data_Q = Xd[select_mod, select_snr][i, 1]# 合成IQ信号data_IQ = data_I + 1j*data_Q# 功率谱分析:对IQ信号进行FFT,计算功率谱power_spectrum = np.abs(np.fft.fft(data_IQ)) ** 2# 计算频率轴frequencies = np.fft.fftfreq(len(power_spectrum), 1)  # 假设 time_step 为 1idx = np.argsort(frequencies)plt.plot(frequencies[idx], power_spectrum[idx])name = str(select_mod) + '_' + str(select_snr) + '_' + str(i) + '.png'print(name)plt.axis('off')  # 关闭坐标轴plt.gca().set_frame_on(False)  # 关闭图形边框# 只保存散点图plt.savefig(path/name)# plt.show()spectrum_power_rml2016()

参考链接

RML2016.10a数据集画星座图、频域图、时域图
JoshiShamika/Deep-learning-for-Modulation-Recognition-on-RML2016.10a_dict-dataset

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

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

相关文章

第 1 章 - Go语言简介

第 1 章 - Go语言简介 1.1 什么是Go语言 Go语言,又称 Golang,是一种静态类型的编译型语言,由 Google 公司的 Robert Griesemer、Rob Pike 和 Ken Thompson 于 2007 年开始设计,并在 2009 年正式对外发布。Go 语言的设计目标是提…

C++优选算法十二 栈

在C中,stack 是一种标准模板库(STL)容器适配器,它提供了后进先出(LIFO, Last In First Out)的数据结构。stack 适配器基于其他底层容器(如 deque 或 vector)来实现,但只提…

找工作就上万码优才,海量技术岗位等你来

已至岁末,不论你将实习,或正在求职,求职平台千千万万,但简历如落叶般无人问津。 是否因未找到理想职位而心生焦虑?别急,万码优才在这里,为你点亮职业之路的明灯! 今天给大家推荐一…

⭐SmartControl: Enhancing ControlNet for Handling Rough Visual Conditions

目录 0 Abstract 1 Motivation 2 Related Work 2.1 Text-to-Image Diffusion Model 2.2 Controllable Text-to-Image Generation 2.3 ControlNet 2.4 Control Scale Exploration 3 Method 3.1 Framework 3.2 Control Scale Predictor 3.3 Unaligned Data Constructi…

Vue数据响应式原理

前言 Vue是一个结构的框架,也就是 数据层、视图层、数据-视图层;响应式的原理就是实现当数据更新时,视图层也要相应的更新 响应式实现 基于发布订阅模式和数据劫持实现 1.发布订阅模式:vue使用发布订阅模式来实现数据变动的通知和更新 2…

python函数小练习(三)

main.py import testwhile True:test.kdc_menu()ch int(input("请选择>>"))match ch:case 1:test.show_menu()case 2:test.sale_menu()case 3:test.money_menu()case 4:test.mess_menu()case -1:breakcase _:print("请重新输入")test.py menu {…

vue3 + element-plus 的 upload + axios + django 文件上传并保存

之前在网上搜了好多教程,一直没有找到合适自己的,要么只有前端部分没有后端,要么就是写的不是很明白。所以还得靠自己摸索出来后,来此记录一下整个过程。 其实就是不要用默认的 action,要手动实现上传方式 http-reque…

更改Ubuntu22.04锁屏壁纸

更改Ubuntu22.04锁屏壁纸 sudo apt install gnome-shell-extensions gnome-shell-extension-manager安装Gnome Shell 扩展管理器后,打开“扩展管理器”并使用搜索栏找到“锁屏背景”扩展

SDL打开YUV视频

文章目录 问题1:如何控制帧率?问题2:如何触发退出事件?问题3:如何实时调整视频窗口的大小问题4:YUV如何一次读取一帧的数据? 问题1:如何控制帧率? 单独用一个子线程给主线…

SQL server 中 CROSS APPLY的使用

CROSS APPLY 是 SQL Server 中的一个操作符,用于将一个表表达式(如子查询、函数等)与外部表进行连接。CROSS APPLY 类似于 INNER JOIN,但它允许你在一个查询中多次引用外部表的行,并且可以动态地生成结果集。 基本语法…

【算法】Floyd多源最短路径算法

目录 一、概念 二、思路 三、代码 一、概念 在前面的学习中,我们已经接触了Dijkstra、Bellman-Ford等单源最短路径算法。但首先我们要知道何为单源最短路径,何为多源最短路径 单源最短路径:从图中选取一点,求这个点到图中其他…

纯C++信号槽使用Demo (sigslot 库使用)

sigslot 库与QT的信号槽一样,通过发送信号,触发槽函数,信号槽不是QT的专利,早在2002年国外的一小哥用C写了sigslot 库,简单易用; 该库的官网(喜欢阅读的小伙伴可以仔细研究)&#xf…

【路径规划】PID搜索算法PSA求解UAV路径规划

摘要 本文研究了基于PID搜索算法(PID Search Algorithm, PSA)求解无人机(UAV)路径规划问题。通过引入PID控制思想来控制路径生成过程,使得无人机可以避开障碍物并在复杂地形中寻找最优路径。实验结果表明,…

【大数据学习 | kafka高级部分】kafka的数据同步和数据均衡

1. 数据同步 通过上图我们发现每个分区的数据都不一样,但是三个分区对外的数据却是一致的 这个时候如果第二个副本宕机了 但是如果是leader副本宕机了会发生什么呢? 2. 数据均衡 在线上程序运行的时候,有的时候因为上面副本的损坏&#xff…

java:使用Multi-Release Jar改造Java 1.7项目增加module-info.class以全面合规Java 9模块化规范

common-java是一个我维护了好多年的一个基础项目,编译目标为Java 1.7 现在整个团队的项目要做Java 9以上的技术迁移准备,就需要对这个在内部各项目中被广泛引用的基础项目进行改造,以适合Java 9的模块化规范。 Automatic-Module-Name Java 9的模块化规范(即Java Platform Mod…

二叉树的前中后序遍历

前序遍历:中左右 中序遍历:左中右 后序遍历:左右中 递归法:三种遍历方式代码结构相似,需要搞清楚三个内容:递归函数的返回值,递归函数传递的参数以及递归函数结束的条件 代码随想录 迭代法:需要用栈实现,前序和后序类似,中序…

如何一步步实现api接入JD平台通过url获取item get商品详情字段信息

以下是一步步实现通过 API 接入京东(JD)平台并使用 URL 获取商品详情(Item Get)字段信息的大致步骤: 一、注册成为京东开发者并获取 API 权限 注册开发者账号 访问京东api文档,点击注册按钮,按照…

Ubuntu笔记-auto remove

apt autoremove确实是一个非常有用的命令,它用于自动删除系统中不再需要的依赖包。这些依赖包通常是在安装某些软件时自动安装的附加包,而当这些软件被卸载后,这些依赖包也就失去了作用。 然而,许多博客和用户提醒说 apt autorem…

机器视觉基础—双目相机

机器视觉基础—双目相机与立体视觉 双目相机概念与测量原理 我们多视几何的基础就在于是需要不同的相机拍摄的同一个物体的视场是由重合的区域的。通过下面的这种几何模型的目的是要得到估计物体的长度,或者说是离这个相机的距离。(深度信息&#xff09…

C++继承(图文非常详细)

继承的概念 1.什么是继承 1.简单定义 我们来看一下下面这串代码注意其中的两个类father 和 son using namespace std; #include<iostream> class father { public:void definity(){cout << "father" << endl;} protected:int tall 180;int age …