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

时域图

python 复制代码
# 导入相关的库
import pickle
import matplotlib.pyplot as plt
import numpy as np
from pathlib import Path
import os

with 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值可以对应一个固定的点,将坐标图画出来就叫做星座图。

python 复制代码
# 导入相关的库
import pickle
import matplotlib.pyplot as plt
import numpy as np
from pathlib import Path
import os

with 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()

功率谱

python 复制代码
# 导入相关的库
import pickle
import matplotlib.pyplot as plt
import numpy as np
from pathlib import Path
import os

with 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 为 1
        idx = 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

相关推荐
墨&白.1 分钟前
如何卸载/更新Mac上的R版本
开发语言·macos·r语言
山土成旧客5 分钟前
【Python学习打卡-Day24】从不可变元组到漫游文件系统:掌握数据结构与OS模块
数据结构·python·学习
技术小甜甜9 分钟前
[Python] 使用 Tesseract 实现 OCR 文字识别全流程指南
开发语言·python·ocr·实用工具
leo__52015 分钟前
MATLAB 实现 基分类器为决策树的 AdaBoost
开发语言·决策树·matlab
idkmn_16 分钟前
Daily AI 20251219 (PyTorch基础回顾3)
人工智能·pytorch·python·深度学习·神经网络
老朱佩琪!19 分钟前
Unity原型模式
开发语言·经验分享·unity·设计模式·原型模式
毕设源码-郭学长20 分钟前
【开题答辩全过程】以 基于JAVA的车辆违章信息管理系统设计及实现为例,包含答辩的问题和答案
java·开发语言
while(1){yan}21 分钟前
UDP和TCP的核心
java·开发语言·网络·网络协议·tcp/ip·udp
Iridescent112123 分钟前
Iridescent:Day28
python
m0_7263658324 分钟前
大力学习台灯T6/T6Pro 救砖实战:macOS/Windows 用 mtkclient 从 Fastboot 无限重启完整恢复(含固件下载地址)
python·github·智能硬件