先介绍下频谱感知任务:感知某一频段是否存在用户
看了很多使用IQ信号(RML2016/2018数据集)进行频谱感知的工作,却一直没找到具体生成纯噪声方法,只好自己粗略实现了一下,难点在于判断所需的纯噪声功率/方差 的范围是多少!
先列出类似使用IQ信号频谱感知的论文:
Spectrum sensing in cognitive radio: A deep learning based model
Deep Learning for Spectrum Sensing in Cognitive Radio
Deep Learning for Spectrum Sensing
基于LSTM和CNN的频谱感知方法研究
Novel deep learning framework for wideband spectrum characterization at sub-Nyquist rate
个人仅检索到这些,肯定不止于此,重点推荐一下最后一个,和压缩感知有些关系,最近也在看压缩感知
开始数据集分析,本次借助deepsig2018a数据集(RML2018a)0-30 db信噪比范围(全部数据集是-20-30db,个人仅使用了部分),过程代码已去
通过对星座图的观察,FM调制方式更容易判断出噪声的范围
30db几乎没噪声,0-0.05(猜测0.05…)
20db几乎没噪声,0-0.1
10db,可以看到噪声,0-0.2
2db,噪声十分明显,0-0.6
0db,噪声十分明显,0-1
开始纯噪声分析:noise = (np.random.randn(N) + 1j*np.random.randn(N))/mul
调节mul数值,改变噪声功率
mul=3,基本在0-1(符合0db情况,后面不在赘述)
mul=8,基本在0-0.3
mul=20,基本在0-0.1
mul=20,基本在0-0.05
个人没具体对应分析,也没有统计分析,只是给出粗略实现方式,生成噪声代码如下,最后的数据和deepsig2018数据格式类似,X=[4096,1024,2] Y[4096,1] (和deepsig2018不一样【4096,24】,理论应该整合起来,全部修改为【4096,2】,当然我认为可以同时实现调制识别和频谱感知,那么应该修改为【4096,25】),Z【4096,1】,重说一遍,各噪声功率的比值没进行统计分析,仅主观设置,本文仅提供思路,
import numpy as np
import matplotlib.pyplot as plt
import h5py
out = h5py.File('temp.hdf5', 'w')
out_X = []
out_Y = []
out_Z = []
N=1024
muls=[50,40,30,20,10,8,3]
counts=[200,300,500,1000,1500,500,96]
for i in range(len(muls)):
# for i in range(2):
index=0
while(index<counts[i]):
noise = (np.random.randn(N) + 1j*np.random.randn(N))/muls[i]# AWGN with unity power
I,Q=np.real(noise).astype('float32'),np.imag(noise).astype('float32')
temp = np.array([I, Q]).T
out_X.append(temp)
out_Y.append(muls[i])
out_Z.append([-1])
index+=1
# plt.scatter(np.real(noise),np.imag(noise))
# plt.title('星座图', fontdict={'weight': 'normal', 'size': 10, 'color': 'blue'})
# plt.show()
out['X'] = out_X
out['Y'] = out_Y
out['Z'] = out_Z
print(out['X'].shape,out['Y'].shape,out['Z'].shape)