【信号处理】绘制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.rhkb.cn/news/468076.html

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

相关文章

【计网】实现reactor反应堆模型 --- 处理数据发回问题 ,异常处理问题

没有一颗星, 会因为追求梦想而受伤, 当你真心渴望某样东西时, 整个宇宙都会来帮忙。 --- 保罗・戈埃罗 《牧羊少年奇幻之旅》--- 实现Reactor反应堆模型 1 数据处理2 数据发回问题3 异常处理问题4 运行效果 1 数据处理 在上一篇文章中我…

Science Robotics 综述揭示演化研究新范式,从机器人复活远古生物!

在地球46亿年的漫长历史长河中,生命的演化过程充满着未解之谜。如何从零散的化石证据中还原古生物的真实面貌?如何理解关键演化节点的具体过程?10月23日,Science Robotics发表重磅综述,首次系统性提出"古生物启发…

string接口的深度理解(内附思维导图)

1. 为什么学习string类? C语言中的字符串 C语言中,字符串是以\0结尾的一些字符的集合,为了操作方便,C标准库中提供了一些str系列 的库函数,但是这些库函数与字符串是分离开的,不太符合OOP的思想&#xff0…

python可视化将多张图整合到一起(画布)

这周有点事忙着,没时间重温刚结束的Mathurcup数学建模,这两天也是再看了下,论文还是赶紧挺烂的,但比国赛又有进步(说起国赛又不得不抱怨了,基本其余省份都发了,但江西......哎)。哎&…

jsp+sevlet+mysql实现用户登陆和增删改查功能

jspsevletmysql实现用户登陆和增删改查功能 一、系统介绍二、功能展示1.用户登陆2.用户列表3.查询用户信息4.添加用户信息5.修改用户信息6.删除用户信息 四、其它1.其他系统实现 一、系统介绍 系统主要功能: 用户登陆、添加用户、查询用户、修改用户、删除用户 二…

Python小白学习教程从入门到入坑------第二十九课 访问模式文件定位操作(语法进阶)

一、访问模式 模式可做操作若文件不存在是否覆盖r只能读报错-r可读可写报错是w只能写创建是w可读可写创建是a只能写创建否,追加写a可读可写创建否,追加写 1.1 r r:只读模式(默认模式),文件必须存在,不存在就会报错…

TIOBE 编程指数 11 月排行榜公布 VB.Net第九

IT之家 11 月 9 日消息,TIOBE 编程社区指数是一个衡量编程语言受欢迎程度的指标,评判的依据来自世界范围内的工程师、课程、供应商及搜索引擎,今天 TIOBE 官网公布了 2024 年 11 月的编程语言排行榜,IT之家整理如下: P…

聚合联盟的优势

聚合广告联盟对比其他平台优势: 数据透明,自己去平台查看不存在扣量问题。对OVHM做策略优化,帮助开发者做多重点击和下载,使开发者利益最大化。为开发者提供app各大市场上架,隐私协议等指导。 最大的优势就是数据公开…

FakeLocation 版本问题

前言:最新版的FakeLocation 1.3.5 BETA版本在appconfigs.xml文件种添加了绝大多数的应用,导致会返回真实的物理位置,在1.3.2.2都没有这个问题,但是旧版是会被强制更新,不然无法使用. 版本问题/注入/代理 方法 需要使用FakeLocation有二种办法…

算法(第一周)

一周周五,总结一下本周的算法学习,从本周开始重新学习许久未见的算法,当然不同于大一时使用的 C 语言以及做过的简单题,现在是每天一题 C 和 JavaScript(还在学,目前只写了一题) 题单是代码随想…

大语言模型LLMs在医学领域的最新进展总结

我是娜姐 迪娜学姐 ,一个SCI医学期刊编辑,探索用AI工具提效论文写作和发表。 相比其他学科,医学AI,是发表学术成果最多的领域。 医学数据的多样性和复杂性(包括文本、图像、基因组数据等),使得…

服务器被病毒入侵如何彻底清除?

当服务器遭遇病毒入侵时,彻底清除病毒是确保系统安全和数据完整性的关键步骤。这一过程不仅需要技术上的精准操作,还需要严密的计划、合理的资源调配以及后续的防范措施。以下是一篇关于如何在服务器被病毒入侵时彻底清除病毒的详细指南。 一、初步响应与…

Javascript中如何实现函数缓存?函数缓存有哪些应用场景?

#一、是什么 函数缓存,就是将函数运算过的结果进行缓存 本质上就是用空间(缓存存储)换时间(计算过程) 常用于缓存数据计算结果和缓存对象 解释 const add (a,b) > ab; const calc memoize(add); // 函数缓存…

基于LLaMA-Factory微调Llama3

本文简要介绍下基于LLaMA-Factory的llama3 8B模型的微调过程 环境配置 # 1. 安装py3.10虚拟环境 conda create -n py3.10-torch2.2 python3.10 source activate conda activate py3.10-torch2.2# 2. 安装cuda12.2 gpu版torch2.2 conda install pytorch2.2.2 torchvision0.17.…

学习记录:js算法(九十):N皇后

文章目录 N 皇后思路一 N 皇后 按照国际象棋的规则,皇后可以攻击与之处在同一行或同一列或同一斜线上的棋子。 n 皇后问题 研究的是如何将 n 个皇后放置在 nn 的棋盘上,并且使皇后彼此之间不能相互攻击。 给你一个整数 n ,返回所有不同的 n 皇…

RTC精度及校准

RTC精度偏差: RTC的基准时间和精度与石英晶体的频率相关,晶体的谐振频率取决于温度,因此RTC性能与温度相关,晶体的频率偏差是晶体正常频率的温度反转函数。 一、硬件方面: 1.使用高精度振荡器的RTC模块; …

Axure PR 9 多级下拉选择器 设计交互

​ 大家好,我是大明同学。 Axure选择器是一种在交互设计中常用的组件,这期内容,我们来探讨Axure中多级下拉选择器设计与交互技巧。 下拉列表选择输入框元件 创建选择输入框所需的元件 1.在元件库中拖出一个矩形元件。 2.选中矩形元件&…

【设计模式系列】享元模式(十五)

目录 一、什么是享元模式 二、享元模式的角色 三、享元模式的典型应用场景 四、享元模式在ThreadPoolExecutor中的应用 1. 享元对象(Flyweight)- 工作线程(Worker) 2. 享元工厂(Flyweight Factory)- …

LeetCode热题100之贪心算法

1.买卖股票的最佳时机 思路分析:即需要找出某一天的最低价格和它后面几天的最高价格差。 维护一个变量min_price,表示到目前为止遇到的最低股票价格;遍历prices数组,在每一天的价格上: 更新min_price为当前的价格和mi…

git 对已提交的说明进行编辑

如果提交代码的时候,对上次提交代码的说明不准确的话,例如 1、可以使用 git log 查看代码提交的记录; 2、使用 git commit --amend 命令对上次提交的说明进行编辑: 当显示上次提交的内容的时候,按下键盘 i 键即可编辑…