目前程序存在一些错误导致无法运行,还请大佬能帮忙实现这个程序的功能,原始数据28672行,测试集1666行,原始数据5列,测试数据4列,n代表正常,f代表故障,7个特征值公式程序已有,目标是在1s间隔内提取4*7个样本点,提取1*n组,得到类似图片所示得测试集数据~
import numpy as np import random import math from scipy.fftpack import fft, ifft import matplotlib.pyplot as plt from matplotlib.pylab import mpl import re mpl.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文 mpl.rcParams['axes.unicode_minus'] = False # 显示负号 ##傅里叶变换 with open("pm13.txt", 'r') as f: _str = f.read() _str = re.sub('\t', r',', _str) _str = re.sub(' ', r'', _str) _str = re.sub(',\n', r'\n', _str) with open("pm13_data.txt", 'w') as f: f.write(_str) data = np.loadtxt('pm13_data.txt', delimiter=',', skiprows=0) # delimiter表示分隔列,skiprows作用跳过头行 s1x = [y[0] for y in data] # 第一列元素 s1y = [y[1] for y in data] # 第二列元素 s2x = [y[2] for y in data] # 第三列元素 s2y = [y[3] for y in data] # 第四列元素 fs = 1280 # fs表示采样频率 N = 833 # N为采样点数 fStart = fs*10.5 fEnd = fStart+N # n为正常,f为故障,取1.5~2.5s的正常数据,与10.5~结束的故障数据 # 原始数据的第一列和第二列进行傅里叶变换 sx_n = s1x[int(1.5*N): int(2.5*N)]-np.mean(s1x[int(1.5*N): int(2.5*N)]) sy_n = s1y[int(1.5*N): int(2.5*N)]-np.mean(s1y[int(1.5*N): int(2.5*N)]) sx_f = s1x[int(fStart): int(fEnd)]-np.mean(s1x[int(fStart): int(fEnd)]) sy_f = s1y[int(fStart): int(fEnd)]-np.mean(s1y[int(fStart): int(fEnd)]) Sx_n = 2*abs(fft(sx_n))/N Sy_n = 2*abs(fft(sy_n))/N Sx_f = 2*abs(fft(sx_f))/N Sy_f = 2*abs(fft(sy_f))/N data1 = [np.hstack((sx_n, sx_f)), np.hstack((sy_n, sy_f))]# 按水平方向(列顺序)堆叠数组构成一个新的数组 fft_data1 = [np.hstack((Sx_n, Sx_f)), np.hstack((Sy_n, Sy_f))] n = np.linspace(0, N, N) t = n/fs f = fs/N*n nSamp = len(s1x) T = np.linspace(0, nSamp, nSamp)/fs # 绘制完整时域信号 plt.figure(1) plt.subplots_adjust(hspace=0.5) plt.subplot(211) plt.plot(T, s2x) plt.axis([0, 32, -8500, -4800]) plt.xlabel('时间 / s') plt.ylabel('电压 / mV') plt.title('时域信号-X向') plt.subplot(212) plt.plot(T, s2y) plt.axis([0, 32, -8500, -4500]) plt.xlabel('时间 / s') plt.ylabel('电压 / mV') plt.title('时域信号-Y向') # 绘制时域图 plt.figure(2) plt.subplots_adjust(hspace=0.5) plt.subplot(221) plt.plot(t[1:N], sx_n[1:N]) plt.axis([0, 1.5, -700, 700]) plt.xlabel('时间 / s') plt.ylabel('电压 / mV') plt.title('时域信号-X向正常') plt.subplot(222) plt.plot(t[1:N], sy_n[1:N]) plt.axis([0, 1.5, -700, 700]) plt.xlabel('时间 / s') plt.ylabel('电压 / mV') plt.title('时域信号-Y向正常') plt.subplot(223) plt.plot(t[1:N], sx_f[1:N]) plt.axis([0, 1.5, -2000, 2000]) plt.xlabel('时间 / s') plt.ylabel('电压 / mV') plt.title('时域信号-X向碰摩') plt.subplot(224) plt.plot(t[1:N], sy_f[1:N]) plt.axis([0, 1.5, -2000, 2000]) plt.xlabel('时间 / s') plt.ylabel('电压 / mV') plt.title('时域信号-Y向碰摩') # 绘制幅频图 plt.figure(3) plt.subplots_adjust(hspace=0.5) plt.subplot(221) plt.plot(f[1:int(N/2)], Sx_n[1:int(N/2)]) plt.xlabel('频率 / Hz') plt.ylabel('幅值 / mV') plt.title('频谱-X向正常') plt.subplot(222) plt.plot(f[1:int(N/2)], Sy_n[1:int(N/2)]) plt.xlabel('频率 / Hz') plt.ylabel('幅值 / mV') plt.title('频谱-Y向正常') plt.subplot(223) plt.plot(f[1:int(N/2)], Sx_f[1:int(N/2)]) plt.xlabel('频率 / Hz') plt.ylabel('幅值 / mV') plt.title('频谱-X向碰摩') plt.subplot(224) plt.plot(f[1:int(N/2)], Sy_f[1:int(N/2)]) plt.xlabel('频率 / Hz') plt.ylabel('幅值 / mV') plt.title('频谱-Y向碰摩') # 绘制轴心轨迹图 plt.figure(4) plt.subplots_adjust(hspace=0.5) plt.subplot(211) plt.plot(sx_n, sy_n, 'b-') plt.xlabel('X向电压 / mV') plt.ylabel('Y向电压 / mV') plt.title('轴心轨迹-正常') plt.subplot(212) plt.plot(sx_f, sy_f, 'b-') plt.xlabel('X向电压 / mV') plt.ylabel('Y向电压 / mV') plt.title('轴心轨迹-碰摩') #n为正常,f为故障,原始数据的第三列和第四列进行傅里叶变换 sx_n = s2x[int(1.5*N): int(2.5*N)]-np.mean(s2x[int(1.5*N): int(2.5*N)]) sy_n = s2y[int(1.5*N): int(2.5*N)]-np.mean(s2y[int(1.5*N): int(2.5*N)]) sx_f = s2x[int(fStart): int(fEnd)]-np.mean(s2x[int(fStart): int(fEnd)]) sy_f = s2y[int(fStart): int(fEnd)]-np.mean(s2y[int(fStart): int(fEnd)]) Sx_n = 2*abs(fft(sx_n))/N Sx_f = 2*abs(fft(sx_f))/N Sy_n = 2*abs(fft(sy_n))/N Sy_f = 2*abs(fft(sy_f))/N data2 = [np.hstack((sx_n, sx_f)), np.hstack((sy_n, sy_f))] fft_data2 = [np.hstack((Sx_n, Sx_f)), np.hstack((Sy_n, Sy_f))] # 绘制完整时域信号 plt.figure(5) plt.subplots_adjust(hspace=0.5) plt.subplot(211) plt.plot(T, s1x) plt.axis([0, 32, -8500, -4800]) plt.xlabel('时间 / s') plt.ylabel('电压 / mV') plt.title('时域信号-X向') plt.subplot(212) plt.plot(T, s1y) plt.axis([0, 32, -8500, -4500]) plt.xlabel('时间 / s') plt.ylabel('电压 / mV') plt.title('时域信号-Y向') # 绘制时域图 plt.figure(6) plt.subplots_adjust(hspace=0.5) plt.subplot(221) plt.plot(t[1:N], sx_n[1:N]) plt.axis([0, 1.5, -700, 700]) plt.xlabel('时间 / s') plt.ylabel('电压 / mV') plt.title('时域信号-X向正常') plt.subplot(222) plt.plot(t[1:N], sy_n[1:N]) plt.axis([0, 1.5, -700, 700]) plt.xlabel('时间 / s') plt.ylabel('电压 / mV') plt.title('时域信号-Y向正常') plt.subplot(223) plt.plot(t[1:N], sx_f[1:N]) plt.axis([0, 1.5, -2000, 2000]) plt.xlabel('时间 / s') plt.ylabel('电压 / mV') plt.title('时域信号-X向碰摩') plt.subplot(224) plt.plot(t[1:N], sy_f[1:N]) plt.axis([0, 1.5, -2000, 2000]) plt.xlabel('时间 / s') plt.ylabel('电压 / mV') plt.title('时域信号-Y向碰摩') # 绘制幅频图 plt.figure(7) plt.subplots_adjust(hspace=0.5) plt.subplot(221) plt.plot(f[1:int(N/2)], Sx_n[1:int(N/2)]) plt.xlabel('频率 / Hz') plt.ylabel('幅值 / mV') plt.title('频谱-X向正常') plt.subplot(222) plt.plot(f[1:int(N/2)], Sy_n[1:int(N/2)]) plt.xlabel('频率 / Hz') plt.ylabel('幅值 / mV') plt.title('频谱-Y向正常') plt.subplot(223) plt.plot(f[1:int(N/2)], Sx_f[1:int(N/2)]) plt.xlabel('频率 / Hz') plt.ylabel('幅值 / mV') plt.title('频谱-X向碰摩') plt.subplot(224) plt.plot(f[1:int(N/2)], Sy_f[1:int(N/2)]) plt.xlabel('频率 / Hz') plt.ylabel('幅值 / mV') plt.title('频谱-Y向碰摩') # 绘制轴心轨迹图 plt.figure(8) plt.subplots_adjust(hspace=0.5) plt.subplot(211) plt.plot(sx_n, sy_n, 'b-') plt.xlabel('X向电压 / mV') plt.ylabel('Y向电压 / mV') plt.title('轴心轨迹-正常') plt.subplot(212) plt.plot(sx_f, sy_f, 'b-') plt.xlabel('X向电压 / mV') plt.ylabel('Y向电压 / mV') plt.title('轴心轨迹-碰摩') data = [[data1[0], data1[1], data2[0], data2[1]]] fft_data = [fft_data1[0], fft_data1[1], fft_data2[0], fft_data2[1]] #生成原始测试数据集 with open("data_test.txt", 'w') as f: for i in range(0, 2*N): for j in range(0, 4): f.write(str(data[j][i])) f.write(',') f.write('\n') #生成fft数据集 with open("fft_data_test.txt", 'w') as f: for i in range(0, 2*N): for j in range(0, 4): f.write(str(fft_data[j][i])) f.write(',') f.write('\n') plt.show() ##数据处理优化 def handleText(): faultText1=open('pm13.txt') faultTextSet1 = [] for line in faultText1.readlines(): currLine = line.strip().split('\t') lineArr = [] for i in range(len(currLine)): lineArr.append(float(currLine[i])) faultTextSet1.append(lineArr) faultTextSet1=np.array(faultTextSet1) return faultTextSet1 def handleTrain(): faultTrain1=open('data_test.txt') faultTrainSet1 = [] for line in faultTrain1.readlines(): currLine = line.strip().split(',') lineArr = [] for i in range(len(currLine)): lineArr.append(float(currLine[i])) faultTrainSet1.append(lineArr) faultTrainSet1=np.array(faultTrainSet1) return faultTrainSet1 def FFTTrain(): fftTrain1=open('fft_data_test.txt') fftTrainSet1 = [] for line in fftTrain1.readlines(): currLine = line.strip().split(',') lineArr = [] for i in range(len(currLine)): lineArr.append(float(currLine[i])) fftTrainSet1.append(lineArr) fftTrainSet1=np.array(fftTrainSet1) return fftTrainSet1 def FFTText(): fftText1=open('fft_data.txt') fftTextSet1 = [] for line in fftText1.readlines(): currLine = line.strip().split(',') lineArr = [] for i in range(len(currLine)): lineArr.append(float(currLine[i])) fftTextSet1.append(lineArr) fftTextSet1=np.array(fftTextSet1) return fftTextSet1 def mathTrain(): filename = '测试数据特征.txt' faultTrainSet=handleTrain() fftTrainSet=FFTTrain() for i in range(4): faultTrainmath = faultTrainSet[:, i] fftTrainSetmath = fftTrainSet[:, i] Sum = 0 Sum2 = 0 Sum4 = 0 Sum_2 = 0 Sum_1 = 0 sump = 0 sump2 = 0 sump3 = 0 fk2 = 0 fk4 = 0 fk = 0 sums = 0 sum1 = 0 sum2 = 0 sum3 = 0 sum4 = 0 for j in range(1666): Sum = Sum + float(faultTrainmath[[j]]) X_Average = Sum / 1666 with open(filename, 'a') as f: f.write(str(X_Average)) f.write('\n') for j in range(1666): Sum2 = Sum2 + float(faultTrainmath[[j]]) ** 2 X_rms = math.sqrt(Sum2 / 1666) #平方根函数 with open(filename, 'a') as f: f.write(str(X_rms)) f.write('\n') for j in range(1666): Sum4 = Sum4 + float(faultTrainmath[[j]]) ** 4 β = Sum4 / 1666 with open(filename, 'a') as f: f.write(str(β)) f.write('\n') for j in range(1666): Sum_2 = Sum_2 + math.sqrt(math.sqrt(faultTrainmath[[j]] ** 2)) X_r = (Sum_2 / 1666) ** 2 with open(filename, 'a') as f: f.write(str(X_r)) f.write('\n') for j in range(1666): Sum_1 = Sum_1 + (float(faultTrainmath[[j]]) - X_Average) ** 2 σ2 = Sum_1 / 1665 with open(filename, 'a') as f: f.write(str(σ2)) f.write('\n') for j in range(833): sump = sump + float(fftTrainSetmath[[j]]) p1 = sump / 833 #点数K=N/2 with open(filename, 'a') as f: f.write(str(p1)) f.write('\n') for j in range(833): sump2 = sump2 + (float(fftTrainSetmath[[j]]) - p1) ** 2 p2 = sump2 / 832 with open(filename, 'a') as f: f.write(str(p2)) f.write('\n') for j in range(833): sump3 = sump3 + (float(fftTrainSetmath[[j]]) - p1) ** 3 p3 = sump3 / (833 * (math.sqrt(p2)) ** 3) with open(filename, 'a') as f: f.write(str(p3)) f.write('\n') for j in range(833): fk4 = fk4 + float(fftTrainSetmath[[j]]) * (j+1) ** 4 fk2 = fk2 + float(fftTrainSetmath[[j]]) * (j+1) ** 2 p4 = math.sqrt(fk4 / (fk2 )) with open(filename, 'a') as f: f.write(str(p4)) f.write('\n') for j in range(833): fk = fk + (j+1) * float(fftTrainSetmath[[j]]) sums = sums + float(fftTrainSetmath[[j]]) p5 = fk / sums with open(filename, 'a') as f: f.write(str(p5)) f.write('\n') for j in range(833): sum1 = sum1 + float(fftTrainSetmath[[j]]) * (j+1 - p5) ** 2 p6 = math.sqrt(sum1 / 833) with open(filename, 'a') as f: f.write(str(p6)) f.write('\n') for j in range(833): sum2 = sum2 + (j+1) * (j+1) * float(fftTrainSetmath[[j]]) sum3 = sum3 + float(fftTrainSetmath[[j]]) sum4 = sum4 + float(fftTrainSetmath[[j]]) * (j+1) ** 4 p7 = sum2 / math.sqrt(sum3 * sum4 ) with open(filename, 'a') as f: f.write(str(p7)) f.write('\n') if i < 2: with open(filename, 'a') as f: f.write('1\n') else: with open(filename, 'a') as f: f.write('0\n') def TrainwriteNp(): b = np.loadtxt('测试数据特征.txt') b=np.array(b).reshape(int(len(b)/13), 13) np.savetxt("b.txt", b, fmt='%f', delimiter=',') def mathText(): faultTextSet=handleText() fftTextSet=FFTText() filename='数据特征.txt' for i in range(4): faultTextmath=faultTextSet[:,i] fftTextSetmath=fftTextSet[:,i] Sum = 0 Sum2 = 0 Sum4 = 0 Sum_2=0 Sum_1=0 sump=0 sump2=0 sump3=0 fk2=0 fk4=0 fk=0 sums=0 sum1=0 sum2=0 sum3=0 sum4=0 for j in range(28672): Sum=Sum+float(faultTextmath[[j]]) X_Average=Sum/28672 with open(filename,'a') as f: f.write(str(X_Average)) f.write('\n') for j in range(28672): Sum2=Sum2+float(faultTextmath[[j]])**2 X_rms=math.sqrt(Sum2/28672) with open(filename, 'a') as f: f.write(str(X_rms)) f.write('\n') for j in range(28672): Sum4=Sum4+float(faultTextmath[[j]])**4 β=Sum4/28672 with open(filename, 'a') as f: f.write(str(β)) f.write('\n') for j in range(28672): Sum_2=Sum_2+math.sqrt(math.sqrt(faultTextmath[[j]]**2)) X_r=(Sum_2/28672)**2 with open(filename, 'a') as f: f.write(str(X_r)) f.write('\n') for j in range(28672): Sum_1=Sum_1+(float(faultTextmath[[j]])-X_Average)**2 σ2=Sum_1/28671 with open(filename, 'a') as f: f.write(str(σ2)) f.write('\n') for j in range(14336): sump =sump + float(fftTextSetmath[[j]]) p1 = sump / 14336 with open(filename, 'a') as f: f.write(str(p1)) f.write('\n') for j in range(28672): sump2 = sump2+(float(fftTextSetmath[[j]])-p1)**2 p2=sump2/14335 with open(filename, 'a') as f: f.write(str(p2)) f.write('\n') for j in range(14336): sump3=sump3+(float(fftTextSetmath[[j]])-p1)**3 p3=sump3/(14336*(math.sqrt(p2))**3) with open(filename, 'a') as f: f.write(str(p3)) f.write('\n') for j in range(14336): fk4=fk4+float(fftTextSetmath[[j]])*((j+1)**4) fk2=fk2+float(fftTextSetmath[[j]])*((j+1)**2) p4=math.sqrt(fk4/(fk2)) with open(filename, 'a') as f: f.write(str(p4)) f.write('\n') for j in range(14336): fk=fk+(j+1)*float(fftTextSetmath[[j]]) sums=sums+float(fftTextSetmath[[j]]) p5=fk/sums with open(filename, 'a') as f: f.write(str(p5)) f.write('\n') for j in range(14336): sum1=sum1+float(fftTextSetmath[[j]])*((j-p5)**2) p6=math.sqrt(sum1/14336) with open(filename, 'a') as f: f.write(str(p6)) f.write('\n') for j in range(14336): sum2=sum2+(j+1)*(j+1)*float(fftTextSetmath[[j]]) sum3=sum3+float(fftTextSetmath[[j]]) sum4=sum4+float(fftTextSetmath[[j]])*((j+1)**4) p7=sum2/math.sqrt(sum3*sum4) with open(filename, 'a') as f: f.write(str(p7)) f.write('\n') if i<2: with open(filename, 'a') as f: f.write('1\n') else: with open(filename, 'a') as f: f.write('0\n') def writeNp(): a = np.loadtxt('数据特征.txt') a = np.array(a).reshape(int(len(a)/13), 13) np.savetxt("a.txt", a, fmt='%f', delimiter=',') if __name__ == '__main__': handleText() mathText() writeNp() handleTrain() mathTrain() TrainwriteNp()
有些啥错误? 你分解下你的问题,一步一步来,先解决错误,再来说实现功能
ValueError: Wrong number of columns at line 28672
Traceback (most recent call last):
line 22, in <module>data = np.loadtxt('pm13_data.txt', delimiter=',', skiprows=0) # delimiter表示分隔列,skiprows作用跳过头行
您好 看可以解决吗
第一个是列数据错误,是不是28672列不是数据?
你或者直接把需要处理的数据发出来,我跑跑你的py
发这儿吗 有字数限制吧
邮件吧 1099930877@qq.com
发过去了
大概看了下,你提到的错误的原因是在pm13_data.txt数据最后多了一个逗号“,”,所以最后一行在逗号后拿不到数据报错,解决方法是将原始数据pm13.txt的最后一行的最后一个数据后的空格给去掉,意思就是保证最后一个数据后面不要留空格。这样在pm13_data.txt的最后就不会多一个逗号,你就不会看到这个错误了。
但是你这个继续执行还是有错误,你看你能不能解决,不能解决就等我回来再看,出去happy了
嗯嗯,程序能运行了,但是得不到想要的结果,特征提取的结果很奇怪,改变提取的时间间隔,得到的特征值却一直是那4行不变
因为在你225行代码那里,data变为了一个一组数据的二位数组,所以只能拿到一组数据
嗯嗯 就是一组数据 (因为还没加循环,先用一组数据试着跑一下) 但是改变一下所取样本的时间段(比如由1.5~2.5变为1.6~2.6)然后再提取特征 得到的还是相同的特征值(不是应该样本提取时间段变了,样本变了,取得特征值也变了吗)
sx_n = s1x[int(1.5*N): int(2.5*N)]-np.mean(s1x[int(1.5*N): int(2.5*N)])
sy_n = s1y[int(1.5*N): int(2.5*N)]-np.mean(s1y[int(1.5*N): int(2.5*N)])
你是在这里做的替换?
是的
我试了下,不一样吧
你可能哪里搞错了,你再试试
对的 这里是不一样 然后下面大概从249行开始提取的7个特征的值是一直一样的(不随时间间隔段的改变而改变)
就生成的a,b文件 里面的数据一直是一样的
不应该,如果你都替换了应该有变化。我看你的py里面有个地方有点奇怪,fft_data_test.txt和fft_data.txt,第二个文件不存在吧,感觉你需要把282行的fft_data.txt替换为fft_data_test.txt
fft_data是另一个程序生成的 我发你邮箱 抱歉 发漏了
那就可以解释了,你说的249行开始的提取值不随你的设置而改变,那是因为你修改的取样时间段是和fft_data_test.txt关联的,fft_data_test.txt这个问文件的值改变了,但是fft_data.txt这个文件没有改变的,所以你无论怎么改,都不会是个不变的值
需要把取样时间和fft_data.txt关联上才行
我也解释不通为什么要这个fft_data,因为我现在只是想取test这部分数据生成test这部分数据的特征值,那是不是可以不要fft_data了
后面mathTrain有用到fft_data_test.txt,mathTrain你看看结果是不是你想要的
a,b文件的结果是想要的,但是这只是一组特整数据,我改变那个1.5~2.5s,结果还是这一组特征数不变,怎么改时间段都不变,这就是目前问题
我发你我调好的程序到邮箱,你可以看看
你这个之所以不变,是因为你的样本太小了。一共才28672个样本,而你的N是14336,那么你每次去从样本里面取值的时候,就不能超过 2*N(28672),而你的程序每次都是从0开始的,并且是0-4.8N,已经包含了所有的采样数据了,所以你只要后面一个数据是在>2里面变动,你永远都是拿的全样本,所以每次都是一样的值。你试试把4.8变为1.5或者小于2的任何值,就会有看到结果不一样了。
所以能不能把全样本的删除了?只保留test部分的数据和程序,全样本我觉得也没有什么用
本来也就是提取测试集的特征
不是,你没理解我的意思,你做个实验,修改为我下面的这两种方式,看看结果变了么
第一种:
sx_n = s1x[int(0*N): int(2*N)]-np.mean(s1x[int(0*N): int(2*N)])
sy_n = s1y[int(0*N): int(2*N)]-np.mean(s1y[int(0*N): int(2*N)])
第二种:
sx_n = s1x[int(0*N): int(1.5*N)]-np.mean(s1x[int(0*N): int(1.5*N)])
sy_n = s1y[int(0*N): int(1.5*N)]-np.mean(s1y[int(0*N): int(1.5*N)])
你现在的问题是“,b文件的结果是想要的,但是这只是一组特整数据,我改变那个1.5~2.5s,结果还是这一组特征数不变,怎么改时间段都不变,这就是目前问题”
其实因为本来就2s的样本,你想要0-4.8S的特征数据,或者说你想要0到超过2s的任何时间的特征数据,都只会是2s的特征数据,因为样本太小了
所以你只能得到2s的特征数据,除非你有更多的样本
我的原始数据是20多秒的
part2特征提取程序也是我套用的程序,之前的程序fft_data就代表了全样本
嗯,问题已经很明确了,就是样本时间问题,你再查查这一块。建议检查下原始数据,是否真的是20多s,这个可能要你要对一下
数据文件:pm13.txt
数据单位:mv
数据结构:第1、2列为测点1的X、Y向振动,第3、4列为测点2的X、Y向振动,第5列为键相信号
采样说明:采样频率1280Hz(即每秒采样1280个数据),总采样数据点数为28672点(总采样时间为22.4秒)
实验描述:高速下的局部碰摩,转速稳定后,铜棒逐渐靠近轴,直到发生碰摩
碰摩过程:碰摩发生时刻约为4.8秒处,碰摩结束时刻约为20.6秒处
实验转速:约2920rpm
临界转速:约1800rpm
使用方法:读取某一列数据,按固定的数据点数(点数不要过少)截取为多个样本,4.8秒前的数据为正常样本,5秒至20秒内的数据为故障样本,20秒至结束为正常
这是原始数据的说明 ,正常和故障我就是根据时间来取的
从这个来看,是你的代码里面的N要换成fs才对,就是每s采样个数
将这个
sx_n = s1x[int(0*N): int(4.8*N)]-np.mean(s1x[int(0*N): int(4.8*N)])
sy_n = s1y[int(0*N): int(4.8*N)]-np.mean(s1y[int(0*N): int(4.8*N)])
换为下面的
sx_n = s1x[int(0*fs): int(4.8*fs)]-np.mean(s1x[int(0*fs): int(4.8*fs)])
sy_n = s1y[int(0*fs): int(4.8*fs)]-np.mean(s1y[int(0*fs): int(4.8*fs)])
你如果要把N前面的数字理解为时间的话,就需要这么修改了
有道理 我改一下 运行看看
Traceback (most recent call last):
File "C:/Users/13160/Desktop/233/A_part1.py", line 56, in <module>
f.write(str(fft_data[j][i]))
IndexError: index 12288 is out of bounds for axis 0 with size 12288
改了之后 part1 出现这个错误了。。。
越界了
有很多N需要修改,你直接将N=1280
你说的是part1程序吗
是的
并且你的A_part2.py里面的 range_size/2 也全部要替换成 1280
但是1280是采样频率 为什么要跟采样点混淆起来
那个range_size是行数,为什么要把行数换成1280,不太明白其中的道理
你这个后面的数据处理,首先,你要求要以S为单位来处理数据,所以你在取数据的时候,个数就是以每S能处理多少数据为单位了,所以你是以1280为基础个数。
当然,你可以不用这个1280,你可以用任何数据,看你的需求,只是你这里是想要用s来处理
我现在只是想要测试数据,可以把那个part1换成part3(发你邮箱),然后prat2里面把一部分关于fft_data的删掉,只保留测试数据的特征处理
你用你昨天的两个py不能得到特征数据吗? 感觉你昨天的加上昨晚修改,就能达到目的了
但我想要的是测试集 不是总的 part1是总数据的fft,
错了 总数据就是训练数据
训练数据和测试数据的7个特征都要提取
按照我给你的修改不行吗?
刚刚发了修改版 Part1是总数据(训练)part3是一部分数据(测试)
改成1280就不是总数据了吧
是总的数据啊,这里只要你用的时候不丢数据就是总的
这个其实就是看你处理那块数据了,你认真理一下就清楚了
那就可能取不了总的数据了,因为【4.8秒前的数据为正常样本,5秒至20秒内的数据为故障样本,20秒至结束为正常样本】这是已知的,正常的必须和故障的分开才能分别加标签
不能直接解决测试部分吗?不管这个总的数据了,先搞定测试部分
现在问题就是a(b)文件的结果是想要的,但是这只是一组特整数据,我改变那个1.5~2.5s,结果还是这一组特征数不变,但是本应该改变的
你用我图上N的配置,肯定要变,其他地方你对应修改就好了,主要是要理解这个是怎么工作的
改了 part2有错误了:IndexError: index 25600 is out of bounds for axis 0 with size 25600
你可以跑一下 按照你的意思 看能不能让a(b)文件中的数据随着时间段改变
昨晚我就能跑过了,可以的
你这个错误是越界了,你看看你part2里面range/2 修改了吗? 要修改我part1里面的fEend的值
改了 现在 part1有错误:IndexError: index 12800 is out of bounds for axis 0 with size 12800
data = np.loadtxt('pm13_data.txt', delimiter=',', skiprows=0) s1x = [y[0] for y in data] # 冒号表示元素,说明是第一列的所有元素 s1y = [y[1] for y in data] # 第二列元素 s2x = [y[2] for y in data] # 第三列元素 s2y = [y[3] for y in data] # 第四列元素 fs = 1280 # fs表示采样频率 N = 1280 # N为采样点数 fStart = fs*5.0 fEnd = fs*20.0 # 频域,n为正常,f为故障,0~4.8是正常,5.0~结束是故障 sx_n = s1x[int(N*0): int(N*5.0)]-np.mean(s1x[int(N*0): int(N*5.0)]) sy_n = s1y[int(N*0): int(N*5.0)]-np.mean(s1y[int(N*0): int(N*5.0)]) sx_f = s1x[int(fStart): int(fEnd)]-np.mean(s1x[int(fStart): int(fEnd)]) sy_f = s1y[int(fStart): int(fEnd)]-np.mean(s1y[int(fStart): int(fEnd)]) Sx_n = 2*abs(fft(sx_n))/N Sy_n = 2*abs(fft(sy_n))/N Sx_f = 2*abs(fft(sx_f))/N Sy_f = 2*abs(fft(sy_f))/N fft_data1 = [np.hstack((Sx_n, Sy_n)), np.hstack((Sx_f, Sy_f))] # 按水平方向(列顺序)堆叠数组构成一个新的数组 # n为正常,f为故障,原始数据的第三列和第四列进行傅里叶变换 sx_n = s2x[int(N*0): int(N*5.0)]-np.mean(s2x[int(N*0): int(N*5.0)]) sy_n = s2y[int(N*0): int(N*5.0)]-np.mean(s2y[int(N*0): int(N*5.0)]) sx_f = s2x[int(fStart): int(fEnd)]-np.mean(s2x[int(fStart): int(fEnd)]) sy_f = s2y[int(fStart): int(fEnd)]-np.mean(s2y[int(fStart): int(fEnd)]) Sx_n = 2*abs(fft(sx_n))/N Sy_n = 2*abs(fft(sy_n))/N Sx_f = 2*abs(fft(sx_f))/N Sy_f = 2*abs(fft(sy_f))/N fft_data2 = [np.hstack((Sx_n, Sy_n)), np.hstack((Sx_f, Sy_f))] fft_data = [fft_data1[0], fft_data2[0], fft_data1[1], fft_data2[1]] with open("fft_data.txt", 'w') as f: for i in range(0, int(fEnd)): for j in range(0, 4): f.write(str(fft_data[j][i])) if j != 4-1: f.write(',') if i != 2*N-1: f.write('\n')
要不你把你能跑的发给我 我看看
扣扣邮箱
part 1
import numpy as np
from scipy.fftpack import fft, ifft
import matplotlib.pyplot as plt
from matplotlib.pylab import mpl
import re
import random
mpl.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文
mpl.rcParams['axes.unicode_minus'] = False # 显示负号
with open("pm13.txt", 'r') as f:
_str = f.read()
_str = re.sub('\t', r',', _str)
_str = re.sub(' ', r'', _str)
_str = re.sub(',\n', r'\n', _str)
with open("pm13_data.txt", 'w') as f:
f.write(_str)
data = np.loadtxt('pm13_data.txt', delimiter=',', skiprows=0)
s1x = [y[0] for y in data] # 冒号表示元素,说明是第一列的所有元素
s1y = [y[1] for y in data] # 第二列元素
s2x = [y[2] for y in data] # 第三列元素
s2y = [y[3] for y in data] # 第四列元素
fs = 1280 # fs表示采样频率
# N = 14336 # N为采样点数
N = 1280 # N为采样点数
fStart = fs*5.0
fEnd = fs*20.0
# 频域,n为正常,f为故障,0~4.8是正常,5.0~结束是故障
sx_n = s1x[int(0*N): int(5*N)]-np.mean(s1x[int(0*N): int(5*N)])
sy_n = s1y[int(0*N): int(5*N)]-np.mean(s1y[int(0*N): int(5*N)])
sx_f = s1x[int(fStart): int(fEnd)]-np.mean(s1x[int(fStart): int(fEnd)])
sy_f = s1y[int(fStart): int(fEnd)]-np.mean(s1y[int(fStart): int(fEnd)])
Sx_n = 2*abs(fft(sx_n))/N
Sy_n = 2*abs(fft(sy_n))/N
Sx_f = 2*abs(fft(sx_f))/N
Sy_f = 2*abs(fft(sy_f))/N
fft_data1 = [np.hstack((Sx_n, Sx_f)), np.hstack(
(Sy_n, Sy_f))] # 按水平方向(列顺序)堆叠数组构成一个新的数组
# n为正常,f为故障,原始数据的第三列和第四列进行傅里叶变换
sx1_n = s2x[int(0*N): int(5*N)]-np.mean(s2x[int(0*N): int(5*N)])
sy1_n = s2y[int(0*N): int(5*N)]-np.mean(s2y[int(0*N): int(5*N)])
sx1_f = s2x[int(fStart): int(fEnd)]-np.mean(s2x[int(fStart): int(fEnd)])
sy1_f = s2y[int(fStart): int(fEnd)]-np.mean(s2y[int(fStart): int(fEnd)])
Sx1_n = 2*abs(fft(sx_n))/N
Sx1_f = 2*abs(fft(sx_f))/N
Sy1_n = 2*abs(fft(sy_n))/N
Sy1_f = 2*abs(fft(sy_f))/N
fft_data2 = [np.hstack((Sx1_n, Sx1_f)), np.hstack((Sy1_n, Sy1_f))]
fft_data = [fft_data1[0], fft_data1[1], fft_data2[0], fft_data2[1]]
with open("fft_data.txt", 'w') as f:
for i in range(0, int(fEnd)):
for j in range(0, 4):
f.write(str(fft_data[j][i]))
if j != 4-1:
f.write(',')
if i != int(fEnd)-1:
f.write('\n')
part2
# -*- coding:UTF-8 -*-
import numpy as np
import random
import math
with open('fft_data_feature_test.txt', 'w') as f:
f.write('')
with open('fft_data_feature.txt', 'w') as f:
f.write('')
def handleText():
faultText1 = open('pm13.txt')
faultTextSet1 = []
for line in faultText1.readlines():
currLine = line.strip().split('\t')
lineArr = []
for i in range(len(currLine)):
lineArr.append(float(currLine[i]))
faultTextSet1.append(lineArr)
faultTextSet1 = np.array(faultTextSet1)
return faultTextSet1
def handleTrain(): # data_test.csv
faultTrain1 = open('data_test.csv')
faultTrainSet1 = []
for line in faultTrain1.readlines():
currLine = line.strip().split('\t')
lineArr = []
for i in range(len(currLine)):
lineArr.append(float(currLine[i]))
faultTrainSet1.append(lineArr)
faultTrainSet1 = np.array(faultTrainSet1)
return faultTrainSet1
def FFTTrain(): # fft_data_test.csv
fftTrain1 = open('fft_data_test.csv')
fftTrainSet1 = []
for line in fftTrain1.readlines():
currLine = line.strip().split('\t')
lineArr = []
for i in range(len(currLine)):
lineArr.append(float(currLine[i]))
fftTrainSet1.append(lineArr)
fftTrainSet1 = np.array(fftTrainSet1)
return fftTrainSet1
def FFTText(): # fft_data.csv
fftText1 = open('fft_data.txt')
fftTextSet1 = []
for line in fftText1.readlines():
currLine = line.strip().split(',')
lineArr = []
for i in range(len(currLine)):
lineArr.append(float(currLine[i]))
fftTextSet1.append(lineArr)
fftTextSet1 = np.array(fftTextSet1)
return fftTextSet1
def mathTrain(): # 生成测试数据特征-->fft_data_feature_test.txt
filename = 'fft_data_feature_test.txt'
faultTrainSet = handleTrain()
fftTrainSet = FFTTrain()
for i in range(5):
faultTrainmath = faultTrainSet[:, i]
fftTrainSetmath = fftTrainSet[:, i]
Sum = 0
Sum2 = 0
Sum4 = 0
Sum_2 = 0
Sum_1 = 0
sump = 0
sump2 = 0
sump3 = 0
fk2 = 0
fk4 = 0
fk = 0
sums = 0
sum1 = 0
sum2 = 0
sum3 = 0
sum4 = 0
range_size = 1666
for j in range(range_size):
Sum = Sum + float(faultTrainmath[[j]])
X_Average = Sum / range_size
with open(filename, 'a') as f:
f.write(str(X_Average))
f.write('\n')
for j in range(range_size):
Sum2 = Sum2 + float(faultTrainmath[[j]]) ** 2
X_rms = math.sqrt(Sum2 / range_size)
with open(filename, 'a') as f:
f.write(str(X_rms))
f.write('\n')
for j in range(range_size):
Sum4 = Sum4 + float(faultTrainmath[[j]]) ** 4
β = Sum4 / range_size
with open(filename, 'a') as f:
f.write(str(β))
f.write('\n')
for j in range(range_size):
Sum_2 = Sum_2 + math.sqrt(math.sqrt(faultTrainmath[[j]] ** 2))
X_r = (Sum_2 / range_size) ** 2
with open(filename, 'a') as f:
f.write(str(X_r))
f.write('\n')
for j in range(range_size):
Sum_1 = Sum_1 + (float(faultTrainmath[[j]]) - X_Average) ** 2
σ2 = Sum_1 / (range_size-1)
with open(filename, 'a') as f:
f.write(str(σ2))
f.write('\n')
for j in range(int(range_size/2)):
sump = sump + float(fftTrainSetmath[[j]])
p1 = sump / (range_size/2)
with open(filename, 'a') as f:
f.write(str(p1))
f.write('\n')
for j in range(int(range_size/2)):
sump2 = sump2 + (float(fftTrainSetmath[[j]]) - p1) ** 2
p2 = sump2 / (range_size/2-1)
with open(filename, 'a') as f:
f.write(str(p2))
f.write('\n')
for j in range(int(range_size/2)):
sump3 = sump3 + (float(fftTrainSetmath[[j]]) - p1) ** 3
p3 = sump3 / ((range_size/2) * (math.sqrt(p2)) ** 3)
with open(filename, 'a') as f:
f.write(str(p3))
f.write('\n')
for j in range(int(range_size/2)):
fk4 = fk4 + float(fftTrainSetmath[[j]]) * (j+1) ** 4
fk2 = fk2 + float(fftTrainSetmath[[j]]) * (j+1) ** 2
p4 = math.sqrt(fk4 / (fk2))
with open(filename, 'a') as f:
f.write(str(p4))
f.write('\n')
for j in range(int(range_size/2)):
fk = fk + (j+1) * float(fftTrainSetmath[[j]])
sums = sums + float(fftTrainSetmath[[j]])
p5 = fk / sums
with open(filename, 'a') as f:
f.write(str(p5))
f.write('\n')
for j in range(int(range_size/2)):
sum1 = sum1 + float(fftTrainSetmath[[j]]) * (j+1 - p5) ** 2
p6 = math.sqrt(sum1 / (range_size/2))
with open(filename, 'a') as f:
f.write(str(p6))
f.write('\n')
for j in range(int(range_size/2)):
sum2 = sum2 + (j+1) * (j+1) * float(fftTrainSetmath[[j]])
sum3 = sum3 + float(fftTrainSetmath[[j]])
sum4 = sum4 + float(fftTrainSetmath[[j]]) * (j+1) ** 4
p7 = sum2 / math.sqrt(sum3 * sum4)
with open(filename, 'a') as f:
f.write(str(p7))
f.write('\n')
if i < 16:
with open(filename, 'a') as f:
f.write('+1')
f.write('\n')
else:
with open(filename, 'a') as f:
f.write('-1')
f.write('\n')
def TrainwriteNp(): # 测试数据特征-->b.txt
b = np.loadtxt('fft_data_feature_test.txt')
b = np.array(b).reshape(int(len(b)/13), 13)
np.savetxt("b.txt", b, fmt='%f', delimiter=',')
def mathText(): # 生成数据特征-->fft_data_feature.txt
faultTextSet = handleText()
fftTextSet = FFTText()
filename = 'fft_data_feature.txt'
for i in range(4):
faultTextmath = faultTextSet[:, i]
fftTextSetmath = fftTextSet[:, i]
Sum = 0
Sum2 = 0
Sum4 = 0
Sum_2 = 0
Sum_1 = 0
sump = 0
sump2 = 0
sump3 = 0
fk2 = 0
fk4 = 0
fk = 0
sums = 0
sum1 = 0
sum2 = 0
sum3 = 0
sum4 = 0
range_size = len(faultTextmath)
for j in range(range_size):
Sum = Sum+float(faultTextmath[[j]])
X_Average = Sum/range_size
with open(filename, 'a') as f:
f.write(str(X_Average))
f.write('\n')
for j in range(range_size):
Sum2 = Sum2+float(faultTextmath[[j]])**2
X_rms = math.sqrt(Sum2/range_size)
with open(filename, 'a') as f:
f.write(str(X_rms))
f.write('\n')
for j in range(range_size):
Sum4 = Sum4+float(faultTextmath[[j]])**4
β = Sum4/range_size
with open(filename, 'a') as f:
f.write(str(β))
f.write('\n')
for j in range(range_size):
Sum_2 = Sum_2+math.sqrt(math.sqrt(faultTextmath[[j]]**2))
X_r = (Sum_2/range_size)**2
with open(filename, 'a') as f:
f.write(str(X_r))
f.write('\n')
for j in range(range_size):
Sum_1 = Sum_1+(float(faultTextmath[[j]])-X_Average)**2
σ2 = Sum_1/(range_size-1)
with open(filename, 'a') as f:
f.write(str(σ2))
f.write('\n')
mm = 1280*20
for j in range(int(mm)):
sump = sump + float(fftTextSetmath[[j]])
p1 = sump / (mm)
with open(filename, 'a') as f:
f.write(str(p1))
f.write('\n')
for j in range(int(mm)):
sump2 = sump2+(float(fftTextSetmath[[j]])-p1)**2
p2 = sump2/(mm)
with open(filename, 'a') as f:
f.write(str(p2))
f.write('\n')
for j in range(int(mm)):
sump3 = sump3+(float(fftTextSetmath[[j]])-p1)**3
p3 = sump3/((mm)*(math.sqrt(p2))**3)
with open(filename, 'a') as f:
f.write(str(p3))
f.write('\n')
for j in range(int(mm)):
fk4 = fk4+float(fftTextSetmath[[j]])*((j+1)**4)
fk2 = fk2+float(fftTextSetmath[[j]])*((j+1)**2)
p4 = math.sqrt(fk4/(fk2))
with open(filename, 'a') as f:
f.write(str(p4))
f.write('\n')
for j in range(int(mm)):
fk = fk+(j+1)*float(fftTextSetmath[[j]])
sums = sums+float(fftTextSetmath[[j]])
p5 = fk/sums
with open(filename, 'a') as f:
f.write(str(p5))
f.write('\n')
for j in range(int(mm)):
sum1 = sum1+float(fftTextSetmath[[j]])*((j-p5)**2)
p6 = math.sqrt(sum1/(range_size/2))
with open(filename, 'a') as f:
f.write(str(p6))
f.write('\n')
for j in range(int(mm)):
sum2 = sum2+(j+1)*(j+1)*float(fftTextSetmath[[j]])
sum3 = sum3+float(fftTextSetmath[[j]])
sum4 = sum4+float(fftTextSetmath[[j]])*((j+1)**4)
p7 = sum2/math.sqrt(sum3*sum4)
with open(filename, 'a') as f:
f.write(str(p7))
f.write('\n')
if i < 80:
with open(filename, 'a') as f:
f.write('+1')
f.write('\n')
else:
with open(filename, 'a') as f:
f.write('-1')
f.write('\n')
def writeNp(): # 数据特征-->a.txt
a = np.loadtxt('fft_data_feature.txt')
a = np.array(a).reshape(int(len(a)/13), 13)
np.savetxt("a.txt", a, fmt='%f', delimiter=',')
if __name__ == '__main__':
handleText()
mathText()
writeNp()
handleTrain()
mathTrain()
TrainwriteNp()
看这个part2
# -*- coding:UTF-8 -*- import numpy as np import random import math with open('fft_data_feature_test.txt', 'w') as f: f.write('') with open('fft_data_feature.txt', 'w') as f: f.write('') def handleText(): faultText1 = open('pm13.txt') faultTextSet1 = [] for line in faultText1.readlines(): currLine = line.strip().split('\t') lineArr = [] for i in range(len(currLine)): lineArr.append(float(currLine[i])) faultTextSet1.append(lineArr) faultTextSet1 = np.array(faultTextSet1) return faultTextSet1 def handleTrain(): # data_test.csv faultTrain1 = open('data_test.csv') faultTrainSet1 = [] for line in faultTrain1.readlines(): currLine = line.strip().split('\t') lineArr = [] for i in range(len(currLine)): lineArr.append(float(currLine[i])) faultTrainSet1.append(lineArr) faultTrainSet1 = np.array(faultTrainSet1) return faultTrainSet1 def FFTTrain(): # fft_data_test.csv fftTrain1 = open('fft_data_test.csv') fftTrainSet1 = [] for line in fftTrain1.readlines(): currLine = line.strip().split('\t') lineArr = [] for i in range(len(currLine)): lineArr.append(float(currLine[i])) fftTrainSet1.append(lineArr) fftTrainSet1 = np.array(fftTrainSet1) return fftTrainSet1 def FFTText(): # fft_data.csv fftText1 = open('fft_data.txt') fftTextSet1 = [] for line in fftText1.readlines(): currLine = line.strip().split(',') lineArr = [] for i in range(len(currLine)): lineArr.append(float(currLine[i])) fftTextSet1.append(lineArr) fftTextSet1 = np.array(fftTextSet1) return fftTextSet1 def mathTrain(): # 生成测试数据特征-->fft_data_feature_test.txt filename = 'fft_data_feature_test.txt' faultTrainSet = handleTrain() fftTrainSet = FFTTrain() for i in range(5): faultTrainmath = faultTrainSet[:, i] fftTrainSetmath = fftTrainSet[:, i] Sum = 0 Sum2 = 0 Sum4 = 0 Sum_2 = 0 Sum_1 = 0 sump = 0 sump2 = 0 sump3 = 0 fk2 = 0 fk4 = 0 fk = 0 sums = 0 sum1 = 0 sum2 = 0 sum3 = 0 sum4 = 0 range_size = 1666 for j in range(range_size): Sum = Sum + float(faultTrainmath[[j]]) X_Average = Sum / range_size with open(filename, 'a') as f: f.write(str(X_Average)) f.write('\n') for j in range(range_size): Sum2 = Sum2 + float(faultTrainmath[[j]]) ** 2 X_rms = math.sqrt(Sum2 / range_size) with open(filename, 'a') as f: f.write(str(X_rms)) f.write('\n') for j in range(range_size): Sum4 = Sum4 + float(faultTrainmath[[j]]) ** 4 β = Sum4 / range_size with open(filename, 'a') as f: f.write(str(β)) f.write('\n') for j in range(range_size): Sum_2 = Sum_2 + math.sqrt(math.sqrt(faultTrainmath[[j]] ** 2)) X_r = (Sum_2 / range_size) ** 2 with open(filename, 'a') as f: f.write(str(X_r)) f.write('\n') for j in range(range_size): Sum_1 = Sum_1 + (float(faultTrainmath[[j]]) - X_Average) ** 2 σ2 = Sum_1 / (range_size-1) with open(filename, 'a') as f: f.write(str(σ2)) f.write('\n') for j in range(int(range_size/2)): sump = sump + float(fftTrainSetmath[[j]]) p1 = sump / (range_size/2) with open(filename, 'a') as f: f.write(str(p1)) f.write('\n') for j in range(int(range_size/2)): sump2 = sump2 + (float(fftTrainSetmath[[j]]) - p1) ** 2 p2 = sump2 / (range_size/2-1) with open(filename, 'a') as f: f.write(str(p2)) f.write('\n') for j in range(int(range_size/2)): sump3 = sump3 + (float(fftTrainSetmath[[j]]) - p1) ** 3 p3 = sump3 / ((range_size/2) * (math.sqrt(p2)) ** 3) with open(filename, 'a') as f: f.write(str(p3)) f.write('\n') for j in range(int(range_size/2)): fk4 = fk4 + float(fftTrainSetmath[[j]]) * (j+1) ** 4 fk2 = fk2 + float(fftTrainSetmath[[j]]) * (j+1) ** 2 p4 = math.sqrt(fk4 / (fk2)) with open(filename, 'a') as f: f.write(str(p4)) f.write('\n') for j in range(int(range_size/2)): fk = fk + (j+1) * float(fftTrainSetmath[[j]]) sums = sums + float(fftTrainSetmath[[j]]) p5 = fk / sums with open(filename, 'a') as f: f.write(str(p5)) f.write('\n') for j in range(int(range_size/2)): sum1 = sum1 + float(fftTrainSetmath[[j]]) * (j+1 - p5) ** 2 p6 = math.sqrt(sum1 / (range_size/2)) with open(filename, 'a') as f: f.write(str(p6)) f.write('\n') for j in range(int(range_size/2)): sum2 = sum2 + (j+1) * (j+1) * float(fftTrainSetmath[[j]]) sum3 = sum3 + float(fftTrainSetmath[[j]]) sum4 = sum4 + float(fftTrainSetmath[[j]]) * (j+1) ** 4 p7 = sum2 / math.sqrt(sum3 * sum4) with open(filename, 'a') as f: f.write(str(p7)) f.write('\n') if i < 16: with open(filename, 'a') as f: f.write('+1') f.write('\n') else: with open(filename, 'a') as f: f.write('-1') f.write('\n') def TrainwriteNp(): # 测试数据特征-->b.txt b = np.loadtxt('fft_data_feature_test.txt') b = np.array(b).reshape(int(len(b)/13), 13) np.savetxt("b.txt", b, fmt='%f', delimiter=',') def mathText(): # 生成数据特征-->fft_data_feature.txt faultTextSet = handleText() fftTextSet = FFTText() filename = 'fft_data_feature.txt' for i in range(4): faultTextmath = faultTextSet[:, i] fftTextSetmath = fftTextSet[:, i] Sum = 0 Sum2 = 0 Sum4 = 0 Sum_2 = 0 Sum_1 = 0 sump = 0 sump2 = 0 sump3 = 0 fk2 = 0 fk4 = 0 fk = 0 sums = 0 sum1 = 0 sum2 = 0 sum3 = 0 sum4 = 0 range_size = len(faultTextmath) for j in range(range_size): Sum = Sum+float(faultTextmath[[j]]) X_Average = Sum/range_size with open(filename, 'a') as f: f.write(str(X_Average)) f.write('\n') for j in range(range_size): Sum2 = Sum2+float(faultTextmath[[j]])**2 X_rms = math.sqrt(Sum2/range_size) with open(filename, 'a') as f: f.write(str(X_rms)) f.write('\n') for j in range(range_size): Sum4 = Sum4+float(faultTextmath[[j]])**4 β = Sum4/range_size with open(filename, 'a') as f: f.write(str(β)) f.write('\n') for j in range(range_size): Sum_2 = Sum_2+math.sqrt(math.sqrt(faultTextmath[[j]]**2)) X_r = (Sum_2/range_size)**2 with open(filename, 'a') as f: f.write(str(X_r)) f.write('\n') for j in range(range_size): Sum_1 = Sum_1+(float(faultTextmath[[j]])-X_Average)**2 σ2 = Sum_1/(range_size-1) with open(filename, 'a') as f: f.write(str(σ2)) f.write('\n') mm = 1280*20 for j in range(int(mm)): sump = sump + float(fftTextSetmath[[j]]) p1 = sump / (mm) with open(filename, 'a') as f: f.write(str(p1)) f.write('\n') for j in range(int(mm)): sump2 = sump2+(float(fftTextSetmath[[j]])-p1)**2 p2 = sump2/(mm) with open(filename, 'a') as f: f.write(str(p2)) f.write('\n') for j in range(int(mm)): sump3 = sump3+(float(fftTextSetmath[[j]])-p1)**3 p3 = sump3/((mm)*(math.sqrt(p2))**3) with open(filename, 'a') as f: f.write(str(p3)) f.write('\n') for j in range(int(mm)): fk4 = fk4+float(fftTextSetmath[[j]])*((j+1)**4) fk2 = fk2+float(fftTextSetmath[[j]])*((j+1)**2) p4 = math.sqrt(fk4/(fk2)) with open(filename, 'a') as f: f.write(str(p4)) f.write('\n') for j in range(int(mm)): fk = fk+(j+1)*float(fftTextSetmath[[j]]) sums = sums+float(fftTextSetmath[[j]]) p5 = fk/sums with open(filename, 'a') as f: f.write(str(p5)) f.write('\n') for j in range(int(mm)): sum1 = sum1+float(fftTextSetmath[[j]])*((j-p5)**2) p6 = math.sqrt(sum1/(range_size/2)) with open(filename, 'a') as f: f.write(str(p6)) f.write('\n') for j in range(int(mm)): sum2 = sum2+(j+1)*(j+1)*float(fftTextSetmath[[j]]) sum3 = sum3+float(fftTextSetmath[[j]]) sum4 = sum4+float(fftTextSetmath[[j]])*((j+1)**4) p7 = sum2/math.sqrt(sum3*sum4) with open(filename, 'a') as f: f.write(str(p7)) f.write('\n') if i < 80: with open(filename, 'a') as f: f.write('+1') f.write('\n') else: with open(filename, 'a') as f: f.write('-1') f.write('\n') def writeNp(): # 数据特征-->a.txt a = np.loadtxt('fft_data_feature.txt') a = np.array(a).reshape(int(len(a)/13), 13) np.savetxt("a.txt", a, fmt='%f', delimiter=',') if __name__ == '__main__': handleText() mathText() writeNp() handleTrain() mathTrain() TrainwriteNp()
part1
import numpy as np from scipy.fftpack import fft, ifft import matplotlib.pyplot as plt from matplotlib.pylab import mpl import re import random mpl.rcParams['font.sans-serif'] = ['SimHei'] # 显示中文 mpl.rcParams['axes.unicode_minus'] = False # 显示负号 with open("pm13.txt", 'r') as f: _str = f.read() _str = re.sub('\t', r',', _str) _str = re.sub(' ', r'', _str) _str = re.sub(',\n', r'\n', _str) with open("pm13_data.txt", 'w') as f: f.write(_str) data = np.loadtxt('pm13_data.txt', delimiter=',', skiprows=0) s1x = [y[0] for y in data] # 冒号表示元素,说明是第一列的所有元素 s1y = [y[1] for y in data] # 第二列元素 s2x = [y[2] for y in data] # 第三列元素 s2y = [y[3] for y in data] # 第四列元素 fs = 1280 # fs表示采样频率 # N = 14336 # N为采样点数 N = 1280 # N为采样点数 fStart = fs*5.0 fEnd = fs*20.0 # 频域,n为正常,f为故障,0~4.8是正常,5.0~结束是故障 sx_n = s1x[int(0*N): int(5*N)]-np.mean(s1x[int(0*N): int(5*N)]) sy_n = s1y[int(0*N): int(5*N)]-np.mean(s1y[int(0*N): int(5*N)]) sx_f = s1x[int(fStart): int(fEnd)]-np.mean(s1x[int(fStart): int(fEnd)]) sy_f = s1y[int(fStart): int(fEnd)]-np.mean(s1y[int(fStart): int(fEnd)]) Sx_n = 2*abs(fft(sx_n))/N Sy_n = 2*abs(fft(sy_n))/N Sx_f = 2*abs(fft(sx_f))/N Sy_f = 2*abs(fft(sy_f))/N fft_data1 = [np.hstack((Sx_n, Sx_f)), np.hstack( (Sy_n, Sy_f))] # 按水平方向(列顺序)堆叠数组构成一个新的数组 # n为正常,f为故障,原始数据的第三列和第四列进行傅里叶变换 sx1_n = s2x[int(0*N): int(5*N)]-np.mean(s2x[int(0*N): int(5*N)]) sy1_n = s2y[int(0*N): int(5*N)]-np.mean(s2y[int(0*N): int(5*N)]) sx1_f = s2x[int(fStart): int(fEnd)]-np.mean(s2x[int(fStart): int(fEnd)]) sy1_f = s2y[int(fStart): int(fEnd)]-np.mean(s2y[int(fStart): int(fEnd)]) Sx1_n = 2*abs(fft(sx_n))/N Sx1_f = 2*abs(fft(sx_f))/N Sy1_n = 2*abs(fft(sy_n))/N Sy1_f = 2*abs(fft(sy_f))/N fft_data2 = [np.hstack((Sx1_n, Sx1_f)), np.hstack((Sy1_n, Sy1_f))] fft_data = [fft_data1[0], fft_data1[1], fft_data2[0], fft_data2[1]] with open("fft_data.txt", 'w') as f: for i in range(0, int(fEnd)): for j in range(0, 4): f.write(str(fft_data[j][i])) if j != 4-1: f.write(',') if i != int(fEnd)-1: f.write('\n')
谢谢 我看一下
现在b的数据变了 但a的不变 想问一下 ab有什么区别 b对应的是测试集数据 那a是全部数据吗?
a/b就是range不一样,你看看py,a是怎么生成的,b怎么生成的。a是我们修改了的,所以不一样了,但是b你是写死了
range_size = 1666
所以b不变,
a是从pm13.txt来的
b是data_test.csv来的
建议你好好理下py
现在a 变了 b 不变
我还是不理解你这样修改的意义 但是我的想法是:
1s---4*1666个数---4*8个样本点
1*n s---4*1666*n---4*8*n个样本点
8是7个特征加1个标签
不知道你那样修改的思路是什么 ,并且你那么修改那正常数据不就0~5s直接了,但已知的是-~4.8正常,
不知道你那样修改的思路是什么 ,并且你那么修改那正常数据不就0~5s之间了,但已知的是0~4.8s正常,
比如说吧1.3~2.3修改成1.4~2.4
应该part3程序里出来的test_data和fft_test_data就不一样了
之后a提取的特征也会不一样,但是现在一直那四行不变
嗯嗯 思路是改part3影响part2
感觉帮不了你了。。。。
你意思采样点取的跟频率一样 就刚好是1s 就是采样1s时间并做fft吗?