鱼C论坛

 找回密码
 立即注册
查看: 1439|回复: 10

请求关于python写入excel文件的问题

[复制链接]
发表于 2020-6-2 22:21:36 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 incrediblejack 于 2020-6-2 22:26 编辑

本例的主要功能:
将时域信号通过快速傅里叶变换FFT,转变为频域信号,并对频域信号提取特征,形成新的数据集。
其中,时域信号是很长的,傅里叶变换在原始时域信号上进行多次分段采样,之后的频域信号也是一段数据,而特征提取之后变成一个点,这样一段时域信号--对应一段频域信号--对应一个特征点,多段时域信号--对应多段频域信号--对应多个特征点。
最终形成一个集成了所有特征点的数据集excel文件。

但是目前有bug
错误为:
Traceback (most recent call last):
  File "C:/Users/Administrator/PycharmProjects/feature202005/p_61_03.py", line 185, in <module>
    ff1 = function_f1(xfp_value)    #调用f_1函数  输入是加了绝对值的频谱幅值xfp_value
  File "C:/Users/Administrator/PycharmProjects/feature202005/p_61_03.py", line 47, in function_f1
    sum_mid_f1_v1 = input[i]
IndexError: index 125 is out of bounds for axis 0 with size 125

源代码已附上。

各位大神帮忙看看咯!
谢谢!

另外,怎么添加附件呀?我没找到添加附件的选项,我的框框中只有表情和图片,没有“文件”那个按钮啊,所以我附上个链接吧,里面是数据集。
链接: https://pan.baidu.com/s/1U4gADju6QtH2ZRFDLEb3-g 提取码: fgcu


  1. #这个版本是在p_61_02基础上改的。
  2. #20200612  19:16
  3. #时域和频域分别绘图
  4. import numpy as np
  5. import matplotlib.pyplot as plt

  6. import os
  7. os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
  8. import xlrd
  9. import math
  10. import xlwt

  11. workbook = xlwt.Workbook(encoding='utf-8')   #写入数据是用的临时变量
  12. booksheet = workbook.add_sheet('Sheet 1', cell_overwrite_ok=True)

  13. train1 = xlrd.open_workbook('shuangtu_13_14.xlsx')  #读取原始数据文件
  14. table1 = train1.sheets()[0]    #提第一页sheet
  15. len_train = 1000               #设置取用数据长度(可更改)
  16. # p_a = [0 for i in range(len_train)]      #中间变量,列表p_a
  17. # for i in range(len_train):             #1000次
  18. #     p_a[i] = table1.row_values(i)[1]        #将第1列的内容,逐行读取,存入p_a列表
  19. #原始数据集装入a
  20. a = [0 for i in range(len_train)]      #中间变量,列表a
  21. for i in range(len_train):             #1000次
  22.     a[i]=table1.row_values(i)[1]       #将第1列的内容,逐行读取,存入a列表

  23. fft_size = 250  #快速傅里叶变换长度
  24. start_i = 1 #设置初始提取位置
  25. #傅里叶变换的方法,封装成函数:
  26. def Fast_Fourier_Trans(x):
  27.     sampling_rate = 500    #采样频率
  28.     t = np.linspace(0, 1, sampling_rate)  # 截取一段时间,截取是任意的,这里截取了0~1秒的一段时间。

  29.     xs = x[start_i:start_i + fft_size]    #进行原始数据分割和提取,将用于进行傅里叶变换
  30.     xf = 2*np.fft.rfft(xs) / fft_size  # 傅里叶变换公式,得到频谱幅值
  31.     freqs = np.linspace(0, sampling_rate // 2, fft_size // 2 + 1)  #横轴: 表示频率, 从0开始,到采样频率//2,一共显示有包括首尾的fft_size/2  +1个数
  32.     xfp = np.clip(np.abs(xf), 1e-20, 1e100)  #为了避免频谱幅值出现负数,添加的取绝对值的步骤。
  33.     t_heng = t[start_i:start_i + fft_size]   # 为了后面显示用

  34.     return (freqs, xfp, t_heng, xs, t, xf)  #多个返回值。

  35. #特征函数,求f_1   对应公式5-12
  36. def function_f1(input):
  37.     sum_mid_f1_v1 = 0
  38.     sum_mid_f1_v2 = 0
  39.     for i in range(len(freqs_value)):
  40.         sum_mid_f1_v1 = input[i]
  41.         sum_mid_f1_v2 += sum_mid_f1_v1

  42.         f_1 = sum_mid_f1_v2 / len(freqs_value)
  43.     # print('平均能量,即f1:')
  44.     # print(f_1)
  45.     # print(' ')
  46.     return f_1

  47. #特征函数,求f_2    对应公式5-13
  48. def function_f2(input):
  49.     sum_mid_f2_v1 = 0
  50.     sum_mid_f2_v2 = 0
  51.     for i in range(len(freqs_value)):
  52.         sum_mid_f2_v1 = (input[i] - function_f1(input)) ** 2  # 式子5-13分子括号里的
  53.         sum_mid_f2_v2 += sum_mid_f2_v1  # 式子5-13分子。
  54.         f_2 = sum_mid_f2_v2 / (len(freqs_value) - 1)
  55.     # print('f2:')
  56.     # print(f_2)
  57.     # print(' ')
  58.     return f_2

  59. #特征函数,求f_3    对应公式5-14
  60. def function_f3(input):
  61.     sum_mid_f3_v1 = 0
  62.     sum_mid_f3_v2 = 0
  63.     for i in range(len(freqs_value)):
  64.         sum_mid_f3_v1 = (input[i] - function_f1(input)) ** 3
  65.         sum_mid_f3_v2 += sum_mid_f3_v1
  66.         f_3 = sum_mid_f3_v2 / (len(freqs_value) * ((function_f2(input)) ** 1.5))
  67.     # print('f3:')
  68.     # print(f_3)
  69.     # print(' ')
  70.     return f_3

  71. #特征函数,求f_4    对应公式5-15
  72. def function_f4(input):
  73.     sum_mid_f4_v1 = 0
  74.     sum_mid_f4_v2 = 0
  75.     for i in range(len(freqs_value)):
  76.         sum_mid_f4_v1 = (input[i] - function_f1(input)) ** 4
  77.         sum_mid_f4_v2 += sum_mid_f4_v1
  78.         f_4 = sum_mid_f4_v2 / (len(freqs_value) * ((function_f2(input)) ** 2))
  79.     # print('f4:')
  80.     # print(f_4)
  81.     # print(' ')
  82.     return f_4

  83. #特征函数,求f_5    对应公式5-16
  84. def function_f5(input):
  85.     sum_mid_f5_v1 = 0
  86.     sum_mid_f5_v2 = 0
  87.     sum_vid_f5_v3 = 0
  88.     sum_mid_f5_v4 = 0
  89.     for i in range(len(freqs_value)):
  90.         sum_mid_f5_v1 = (freqs_value[i]) * (input[i])
  91.         sum_mid_f5_v2 += sum_mid_f5_v1
  92.         sum_mid_f5_v3 = input[i]
  93.         sum_mid_f5_v4 += sum_mid_f5_v3
  94.         f_5 = sum_mid_f5_v2/ sum_mid_f5_v4
  95.     # print('f5:')
  96.     # print(f_5)
  97.     # print(' ')
  98.     return f_5

  99. #特征函数,求f_6    对应公式5-17
  100. def function_f6(input):
  101.     sum_mid_f6_v1 = 0  # fk^2*X(k)
  102.     sum_mid_f6_v2 = 0  # ∑fk^2*X(k)
  103.     sum_mid_f6_v3 = 0  # (∑fk^2*X(k))^0.5
  104.     sum_mid_f6_v4 = 0  # 分母
  105.     for i in range(len(freqs_value)):
  106.         sum_mid_f6_v1 = ((freqs_value[i]) ** 2) * (input[i])
  107.         sum_mid_f6_v2 += sum_mid_f6_v1
  108.         sum_mid_f6_v3 = (sum_mid_f6_v2) ** 0.5  # 这个好像算不出来。
  109.         sum_mid_f6_v4 += input[i]
  110.         f_6 = sum_mid_f6_v3 / sum_mid_f6_v4
  111.     # print('f6:')
  112.     # print(f_6)
  113.     # print(' ')
  114.     return f_6

  115. #特征函数,求f_7    对应公式5-18
  116. def function_f7(input):
  117.     sum_mid_f7_v1 = 0  # fk^4*X(k)
  118.     sum_mid_f7_v2 = 0  # ∑fk^4*X(k)
  119.     sum_mid_f7_v3 = 0  # (∑fk^4*X(k))^0.5
  120.     sum_mid_f7_v4 = 0  # fk^2*X(k)
  121.     sum_mid_f7_v5 = 0  # ∑fk^2*X(k)
  122.     for i in range(len(freqs_value)):
  123.         sum_mid_f7_v1 = ((freqs_value[i]) ** 4) * (input[i])
  124.         sum_mid_f7_v2 += sum_mid_f7_v1
  125.         sum_mid_f7_v3 = (sum_mid_f7_v2) ** 0.5
  126.         sum_mid_f7_v4 = ((freqs_value[i]) ** 2) * (input[i])
  127.         sum_mid_f7_v5 += sum_mid_f7_v4
  128.         f_7 = sum_mid_f7_v3 / sum_mid_f7_v5
  129.     # print('f7:')
  130.     # print(f_7)
  131.     # print(' ')
  132.     return f_7

  133. #特征函数,求f_8    对应公式5-19
  134. def function_f8(input):
  135.     sum_mid_f8_v1 = 0  # fk^2*X(k)
  136.     sum_mid_f8_v2 = 0  # ∑fk^2*X(k)
  137.     sum_mid_f8_v3 = 0  # fk^4*X(k)
  138.     sum_mid_f8_v4 = 0  # ∑fk^4*X(k)
  139.     sum_mid_f8_v5 = 0  # X(k)
  140.     sum_mid_f8_v6 = 0  # ∑X(k)
  141.     sum_mid_f8_v7 = 0  # (∑fk^4*X(k))*(∑X(k))
  142.     for i in range(len(freqs_value)):
  143.         sum_mid_f8_v1 = ((freqs_value[i]) ** 2) * (input[i])
  144.         sum_mid_f8_v2 += sum_mid_f8_v1
  145.         sum_mid_f8_v3 = ((freqs_value[i]) ** 4) * (input[i])
  146.         sum_mid_f8_v4 += sum_mid_f8_v3
  147.         sum_mid_f8_v5 = input[i]
  148.         sum_mid_f8_v6 += sum_mid_f8_v5
  149.         sum_mid_f8_v7 = (sum_mid_f8_v4) * (sum_mid_f8_v6)
  150.         f_8 = (sum_mid_f8_v7) ** 0.5
  151.     # print('f8:')
  152.     # print(f_8)
  153.     # print(' ')
  154.     return f_8

  155. #主流程
  156. for j in range(len_train // fft_size):    #这个变量是为了控制写入数据的行数 j
  157.     if j < 2:

  158.         for er in range(len_train // fft_size):  #这个变量是为了控制运行傅立叶变换Fft函数的次数 er
  159.             Fft = Fast_Fourier_Trans(a)     #调用快速傅里叶变换函数Fft,输入是提取了len_train长度的原始a列表数据

  160.             freqs_value = Fft[0]    #Fft返回值,这个是干啥的?
  161.             xfp_value = Fft[1]      #Fft返回值,返回加了绝对值的频谱幅值
  162.             t_heng_value = Fft[2]   #Fft返回值,返回当前时域(Fft变换之前的)横坐标值
  163.             xs_value = Fft[3]       #Fft返回值,返回当前时域(Fft变换之前的)纵坐标值
  164.             t_value = Fft[4]        #Fft返回值,返回采样间隔么?
  165.             xf_value = Fft[5]       #Fft返回值,返回未加绝对值的频谱幅值(可能会有负的,所以不用这个)

  166.             ff1 = function_f1(xfp_value)    #调用f_1函数  输入是加了绝对值的频谱幅值xfp_value
  167.             print("ff1:")
  168.             print(ff1)    #测试用
  169.             print(' ')
  170.             ff2 = function_f2(xfp_value)    #调用f_2函数。。。下面道理类同
  171.             print("ff2:")
  172.             print(ff2)
  173.             print(' ')
  174.             ff3 = function_f3(xfp_value)
  175.             ff4 = function_f4(xfp_value)
  176.             ff5 = function_f5(xfp_value)
  177.             ff6 = function_f6(xfp_value)
  178.             ff7 = function_f7(xfp_value)
  179.             ff8 = function_f8(xfp_value)



  180.             rowdata = [ff1, ff2, ff3, ff4, ff5, ff6, ff7, ff8]   #形成一行数值
  181.             print('rowdata:')
  182.             print(rowdata)   #测试用
  183.             print(' ')

  184.             for i in range(len(rowdata)):    #这个变量i是为了遍历上面的rowdata,为了将来写入excel表格

  185.                 booksheet.write(j,i, rowdata[i])   #读取rowdata的第i个,写入excel的第j列,第i行
  186.                 i += 1


  187.             er += 1
  188.             start_i += fft_size  #执行完一轮Fft之后变量start_i增加一个采样周期fft_size之后重新计算

  189.         j += 1

  190.     else:
  191.         break



  192. plt.figure(figsize=(8,8))  #生成画布
  193. plt.subplot(211)    #生成子图  #这个图是
  194. plt.plot(t_heng_value, xs_value)  #时域图
  195. plt.xlabel(u'时间(秒)', fontproperties='FangSong')
  196. plt.title(u'原始幅值',fontproperties='FangSong')

  197. plt.subplot(212)
  198. plt.plot(freqs_value, xfp_value)  ##频域图
  199. plt.xlabel(u'频率(HZ)', fontproperties='FangSong')
  200. plt.ylabel(u'幅值',fontproperties='FangSong')
  201. plt.subplots_adjust(hspace=0.4)



  202. plt.show()
  203. # print('xfp_value')
  204. # print(xfp_value)
  205. # print(' ')
  206. # print('xfp_value 傅立叶变换后的点纵坐标的个数:')
  207. # print(len(xfp_value))
  208. # print(' ')
  209. # print('xs_value 傅里叶变换后的点横坐标的个数:')
  210. # print(len(xs_value))
  211. # print(' ')


  212. workbook.save('p_61_02.xls')   #保存

复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

发表于 2020-6-3 07:32:03 | 显示全部楼层
IndexError: index 125 is out of bounds for axis 0 with size 125
应该是你的 excel 文件数据有问题,看下125行是不是空行?
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-3 07:58:55 | 显示全部楼层
将时域信号通过快速傅里叶变换FFT,转变为频域信号,并对频域信号提取特征,形成新的数据集。

我记得Origin有直接FFT的选项,你可以试试这个,看看原始数据有没有问题
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-3 09:03:00 | 显示全部楼层
Twilight6 发表于 2020-6-3 07:32
应该是你的 excel 文件数据有问题,看下125行是不是空行?

我看了,原始数据没有空行。我如果更改sampling_rate、fft_size等参数,这个报错的125还会变成其他数值的。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-3 09:04:01 | 显示全部楼层
jijidebaba 发表于 2020-6-3 07:58
我记得Origin有直接FFT的选项,你可以试试这个,看看原始数据有没有问题

谢谢,回头我可以试试,但是这个基于numpy的FFT的组装成新表格的例子,我没有搞定的话实在是迈不过去这个坎儿啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-3 09:11:19 | 显示全部楼层
incrediblejack 发表于 2020-6-3 09:03
我看了,原始数据没有空行。我如果更改sampling_rate、fft_size等参数,这个报错的125还会变成其他数值的 ...

好吧
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-3 11:34:41 | 显示全部楼层
上传附件是有权限的,不同账号等级,功能不能。
努力回帖,发帖升级吧。
到达鱼油1,就可以发截图了。
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-5 15:22:12 | 显示全部楼层
一直没有人回复给我正确的答案,我写了个简单版的,以排除傅里叶变换对结果可能带来的影响,见帖子:https://fishc.com.cn/forum.php?mod=viewthread&tid=171185&page=1#pid4738298
感谢在这个帖子中 @yifenyu 提供的修改思路。
我在那个帖子的答案的基础上,把傅里叶变换内容加进去了,经过运行结果正确。鉴于目前没人提供答案,那我就自己把改过的代码粘上来咯。只能发自己最佳答案了嘿嘿,各位见谅~
改后的代码:
  1. #本例在20200603的基础上,加上了傅里叶变换的内容,也就是频域特征提取,然后看能否实现提取后形成一个新的表格功能。
  2. #20200605写的
  3. import numpy as np
  4. import matplotlib.pyplot as plt
  5. import os
  6. os.environ['TF_CPP_MIN_LOG_LEVEL'] = '2'
  7. import xlrd
  8. import xlwt
  9. import typing

  10. workbook = xlwt.Workbook(encoding='utf-8')
  11. booksheet = workbook.add_sheet('Sheet 1', cell_overwrite_ok=True)

  12. train1 = xlrd.open_workbook('shuangtu_13_14.xlsx')  #读取原始数据文件
  13. table1 = train1.sheets()[0]    #提第一页sheet
  14. len_train = 20003              #设置取用数据长度(可更改)
  15. a = [0 for i in range(len_train)]      #中间变量,列表a
  16. for i in range(len_train):             #1000次
  17.     a[i]=table1.row_values(i)[1]       #将第1列的内容,逐行读取,存入a列表


  18. #全局变量
  19. changdu = 250
  20. start_i = 1

  21. def calculateMean(x, start_i):    #注意,这里我原来写的是这样,def calculateMean(x),别人帮我改了。就是这个新逻辑。

  22.     xf = []
  23.     xs = x[start_i:start_i + changdu]
  24.     for p in xs:
  25.         xf.append(p*p*3)   #注意这里不要写成 xf = xf.apppend(p*3)

  26.     return (x, xs, xf)

  27. #傅立叶变换函数
  28. def Fast_Fourier_Trans(x, start_i):
  29.     sampling_rate = 500 #采样频率
  30.     t = np.linspace(0,1,sampling_rate)   #截取一段时间,这个有待研究
  31.     xs = x[start_i:start_i+changdu]
  32.     xf = 2*np.fft.rfft(xs) / changdu   #傅立叶变换计算公式,得到频谱幅值
  33.     freqs = np.linspace(0, sampling_rate // 2, changdu//2 + 1)    #这个干啥用的?回头自己在图中改改试试
  34.     xft = np.clip(np.abs(xf), 1e-10, 1e100) #频谱幅值加了绝对值之后的。为了避免出现负数。
  35.     t_heng = t[start_i:start_i+changdu]   #不知道用上用不上。随后再更改。

  36.     return (t, xs, xf, freqs, xft, t_heng)   #[0]:t  [1]:xs  [2]:xf  [3]:freqs  [4]:xft  [5]t_heng


  37. #f1
  38. def func_f1(input):
  39.     sum_mid_f1_v1 = 0  # 当前值
  40.     sum_mid_f1_v2 = 0  # 加和值
  41.     for i in range(len(res_freqs)):
  42.         sum_mid_f1_v1 = input[i]
  43.         sum_mid_f1_v2 += sum_mid_f1_v1
  44.     f_1 = sum_mid_f1_v2 / len(res_freqs)
  45.     return f_1

  46. #f2
  47. def func_f2(input):
  48.     sum_mid_f2_v1 = 0
  49.     sum_mid_f2_v2 = 0
  50.     for i in range(len(res_freqs)):
  51.         sum_mid_f2_v1 = (input[i] - func_f1(input)) ** 2  # 式子5-13分子括号里的   #注意这里func_f1不能去掉(input)
  52.         sum_mid_f2_v2 += sum_mid_f2_v1  # 式子5-13分子。
  53.     f_2 = sum_mid_f2_v2 / (len(res_freqs) - 1)
  54.     return f_2

  55. #f3
  56. def func_f3(input):
  57.     sum_mid_f3_v1 = 0
  58.     sum_mid_f3_v2 = 0
  59.     for i in range(len(res_freqs)):
  60.         sum_mid_f3_v1 = (input[i] - func_f1(input)) ** 3   #注意这里先不去掉(input)试试,后同。
  61.         sum_mid_f3_v2 += sum_mid_f3_v1
  62.     f_3 = sum_mid_f3_v2 / (len(res_freqs) * ((func_f2(input)) ** 1.5))
  63.     return f_3

  64. #f4
  65. def func_f4(input):
  66.     sum_mid_f4_v1 = 0
  67.     sum_mid_f4_v2 = 0
  68.     for i in range(len(res_freqs)):
  69.         sum_mid_f4_v1 = (input[i] - func_f1(input)) ** 4
  70.         sum_mid_f4_v2 += sum_mid_f4_v1
  71.     f_4 = sum_mid_f4_v2 / (len(res_freqs) * ((func_f2(input)) ** 2))
  72.     return f_4

  73. #f5
  74. def func_f5(input):
  75.     sum_mid_f5_v1 = 0
  76.     sum_mid_f5_v2 = 0
  77.     sum_vid_f5_v3 = 0
  78.     sum_mid_f5_v4 = 0
  79.     for i in range(len(res_freqs)):
  80.         sum_mid_f5_v1 = (res_freqs[i]) * (input[i])   #这个公式对么?对照公式看一看。后面也检查下
  81.         sum_mid_f5_v2 += sum_mid_f5_v1
  82.         sum_mid_f5_v3 = input[i]
  83.         sum_mid_f5_v4 += sum_mid_f5_v3
  84.     f_5 = sum_mid_f5_v2/ sum_mid_f5_v4
  85.     return f_5

  86. #f6:
  87. def func_f6(input):
  88.     sum_mid_f6_v1 = 0  # fk^2*X(k)
  89.     sum_mid_f6_v2 = 0  # ∑fk^2*X(k)
  90.     sum_mid_f6_v3 = 0  # (∑fk^2*X(k))^0.5
  91.     sum_mid_f6_v4 = 0  # 分母
  92.     for i in range(len(res_freqs)):
  93.         sum_mid_f6_v1 = ((res_freqs[i]) ** 2) * (input[i])
  94.         sum_mid_f6_v2 += sum_mid_f6_v1
  95.         sum_mid_f6_v3 = (sum_mid_f6_v2) ** 0.5  # 这个好像算不出来。
  96.         sum_mid_f6_v4 += input[i]
  97.     f_6 = sum_mid_f6_v3 / sum_mid_f6_v4
  98.     return f_6

  99. #f7:
  100. def func_f7(input):
  101.     sum_mid_f7_v1 = 0  # fk^4*X(k)
  102.     sum_mid_f7_v2 = 0  # ∑fk^4*X(k)
  103.     sum_mid_f7_v3 = 0  # (∑fk^4*X(k))^0.5
  104.     sum_mid_f7_v4 = 0  # fk^2*X(k)
  105.     sum_mid_f7_v5 = 0  # ∑fk^2*X(k)
  106.     for i in range(len(res_freqs)):
  107.         sum_mid_f7_v1 = ((res_freqs[i]) ** 4) * (input[i])
  108.         sum_mid_f7_v2 += sum_mid_f7_v1
  109.         sum_mid_f7_v3 = (sum_mid_f7_v2) ** 0.5
  110.         sum_mid_f7_v4 = ((res_freqs[i]) ** 2) * (input[i])
  111.         sum_mid_f7_v5 += sum_mid_f7_v4
  112.     f_7 = sum_mid_f7_v3 / sum_mid_f7_v5
  113.     return f_7

  114. #f8:
  115. def func_f8(input):
  116.     sum_mid_f8_v1 = 0  # fk^2*X(k)
  117.     sum_mid_f8_v2 = 0  # ∑fk^2*X(k)
  118.     sum_mid_f8_v3 = 0  # fk^4*X(k)
  119.     sum_mid_f8_v4 = 0  # ∑fk^4*X(k)
  120.     sum_mid_f8_v5 = 0  # X(k)
  121.     sum_mid_f8_v6 = 0  # ∑X(k)
  122.     sum_mid_f8_v7 = 0  # (∑fk^4*X(k))*(∑X(k))
  123.     for i in range(len(res_freqs)):
  124.         sum_mid_f8_v1 = ((res_freqs[i]) ** 2) * (input[i])
  125.         sum_mid_f8_v2 += sum_mid_f8_v1
  126.         sum_mid_f8_v3 = ((res_freqs[i]) ** 4) * (input[i])
  127.         sum_mid_f8_v4 += sum_mid_f8_v3
  128.         sum_mid_f8_v5 = input[i]
  129.         sum_mid_f8_v6 += sum_mid_f8_v5
  130.         sum_mid_f8_v7 = (sum_mid_f8_v4) * (sum_mid_f8_v6)
  131.     f_8 = (sum_mid_f8_v7) ** 0.5
  132.     return f_8

  133. for j in range(len_train // changdu):
  134.     fun_FFT = Fast_Fourier_Trans(a, j*changdu)
  135.     res_t = fun_FFT[0]
  136.     res_xs = fun_FFT[1]
  137.     res_xf = fun_FFT[2]
  138.     res_freqs = fun_FFT[3]
  139.     res_xft = fun_FFT[4]
  140.     res_t_heng = fun_FFT[5]

  141.     ff1 = func_f1(res_xft)
  142.     ff2 = func_f2(res_xft)
  143.     ff3 = func_f3(res_xft)
  144.     ff4 = func_f4(res_xft)
  145.     ff5 = func_f5(res_xft)
  146.     ff6 = func_f6(res_xft)
  147.     ff7 = func_f7(res_xft)
  148.     ff8 = func_f8(res_xft)

  149.     rowdata = [ff1,ff2,ff3,ff4,ff5,ff6,ff7,ff8]
  150.     for i in range(len(rowdata)):
  151.         booksheet.write(j, i, rowdata[i])

  152. workbook.save('20200605_fourier.xls')


  153. #这个例子可以实现喔。
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 1 反对 0

使用道具 举报

 楼主| 发表于 2020-6-5 15:23:10 | 显示全部楼层
incrediblejack 发表于 2020-6-5 15:22
一直没有人回复给我正确的答案,我写了个简单版的,以排除傅里叶变换对结果可能带来的影响,见帖子:https: ...

诶?自己没法给自己设置最佳答案诶
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-6-6 16:08:56 | 显示全部楼层
向楼主学习,以后批量处理时域场的数据说不定可以用到
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-6-6 19:42:51 | 显示全部楼层
jijidebaba 发表于 2020-6-6 16:08
向楼主学习,以后批量处理时域场的数据说不定可以用到

过奖过奖,是我应该多虚心学习
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-6-21 10:25

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表