【信号处理】绘制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

相关推荐
意.远23 分钟前
PyTorch实现二维卷积与边缘检测:从原理到实战
人工智能·pytorch·python·深度学习·神经网络·计算机视觉
明飞198725 分钟前
C_内存 内存地址概念
c语言·开发语言
勤劳的进取家28 分钟前
贪心算法之最小生成树问题
数据结构·python·算法·贪心算法·排序算法·动态规划
代码不停30 分钟前
Java中的异常
java·开发语言
兮兮能吃能睡37 分钟前
Python中的eval()函数详解
开发语言·python
三道杠卷胡1 小时前
【AI News | 20250411】每日AI进展
人工智能·python·计算机视觉·语言模型·aigc
前端开发张小七1 小时前
16.Python递归详解:从原理到实战的完整指南
前端·python
christine-rr1 小时前
【25软考网工笔记】第二章 数据通信基础(1)信道特性 奈奎斯特 香农定理
网络·信息与通信·信号处理·软考
狄加山6751 小时前
Qt模型-视图架构
开发语言·qt
Aphelios3801 小时前
TaskFlow开发日记 #1 - 原生JS实现智能Todo组件
java·开发语言·前端·javascript·ecmascript·todo