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

相关推荐
初晴~3 分钟前
【spring】参数校验Validation
java·c++·spring boot·后端·python·spring·validation
Du_XiaoNan15 分钟前
Flowable第三篇、Flowable之任务分配(任务分配、流程变量、候选人和候选人组)
java·开发语言
Clang's Blog17 分钟前
23种设计模式详解(以Java为例)
java·开发语言·设计模式
安静读书21 分钟前
Java解析视频FPS(帧率)、分辨率信息
java·python·音视频
main_Java23 分钟前
Android解压zip文件到指定目录
android·java·开发语言
GISer_Jing34 分钟前
Tomcat和Nginx原理说明
服务器·开发语言·javascript
z54183843 分钟前
装饰器---python
开发语言·python
时光の尘1 小时前
C语言菜鸟入门·关键字·void的用法
c语言·开发语言·c++·算法·c#·c·关键字
Eric.Lee20211 小时前
图像上显示中文文本 - python 实现
开发语言·python
小林熬夜学编程1 小时前
【Linux系统编程】第四十九弹---日志系统构建指南:从基础结构到时间处理与Log类实现
linux·运维·服务器·c语言·开发语言·c++