时域图
# 导入相关的库
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