想给CWRU滚动轴承数据集加噪声 来代表在强噪声工况下的故障诊断,我是选择直接给loadmat后的原始数据集加噪声,但不管snr选择多大,最后的结果依旧没有改变,每次val acc也都达到了1,是不是因为要给测试集加噪声而不给训练集加噪声?但我看一些论文里也是直接给原始信号加的噪声,然后再划分的训练集和测试集。
使用的高斯噪声信噪比的函数为
def wgn(x, snr):#加噪声
## x: input vibration signal shape (a,b); a:samples number; b samples length
## snr: noise intensity,like -8,4,2,0,2,4,8
### snr=0 means noise equal to vibration signal
### snr>0 means vibration signal stronger than noise, →∞ means no noise
### snr<0 means noise stronger than vibration signal →-∞ means no signal
# print(x.shape)
Ps = np.sum(abs(x)**2,axis=1)/len(x)
Pn = Ps/(10**((snr/10)))
row,columns=x.shape
Pn = np.repeat(Pn.reshape(-1,1),columns, axis=1)
noise = np.random.randn(row,columns) * np.sqrt(Pn)
signal_add_noise = x + noise
return signal_add_noise
然后在读取mat数据集loadmat函数的下一句来调用加高斯噪声的函数
def data_load(filename, axisname, label):#数据获取
'''
This function is mainly used to generate test data and training data.产生训练集和测试集
filename:Data location文件名是数据路径
axisname:Select which channel's data,---->"_DE_time","_FE_time","_BA_time"选择一个通道的数据 有驱动端 风扇端和基座端
'''
datanumber = axisname.split(".")#以点号为分隔符把文件名分开
if eval(datanumber[0]) < 100:#eval是Python的一个内置函数,这个函数的作用是,返回传入字符串的表达式的结果。 eval( '3 * x' )=21
realaxis = "X0" + datanumber[0] + axis[0]
else:
realaxis = "X" + datanumber[0] + axis[0]
fl = loadmat(filename)[realaxis]#liadmat是scipy的方法 是读取mat文件专用的matlab
fl=wgn(fl,12)#调用给原始振动信号加入高斯噪声的函数
# print(fl.shape)
fl = fl.reshape(-1,)
# print(fl.shape)
data = []
lab = []
start, end = 0, signal_size
while end <= fl.shape[0]:
x = fl[start:end]
x = np.fft.fft(x)
x = np.abs(x) / len(x)
x = x[range(int(x.shape[0] / 2))]
x = x.reshape(-1,1)#reshape(-1,1)是将一维数据在行上变化,而reshape(1,-1)是将一维数据在列上变化
data.append(x)
lab.append(label)
start += signal_size
end += signal_size
return data, lab#返回数据与标签
def data_transforms(dataset_type="train", normlize_type="-1-1"):#数据转换成训练集测试集 定义了一个数据集转换的方法
transforms = {
'train': Compose([
Reshape(),
Normalize(normlize_type),
RandomAddGaussian(),
RandomScale(),
RandomStretch(),
RandomCrop(),
Retype()
]),
'val': Compose([
Reshape(),
Normalize(normlize_type),
Retype()
])
}
return transforms[dataset_type]
你只给了其中几段的程序,没有给完整程序,也没有给运行结果,只是自己描述了 val acc =1,这怎么分析呢?
(1)需要提供完整的程序,(2)需要提供加噪声之前的运行结果,及加噪声之后的运行结果,你自己也可以据此分析。
(3)建议分析一下加入噪音以后的数据,特别是确认一下加入噪声的强度,包括信噪比。