将Excel文件转换为Python频率
基本上,我有一个Excel文件,第一列是电压,第二列是时间。我想找出电压的周期,因为它会生成一个图表,y轴是电压,x轴是时间,看起来像一个正弦函数,有规律地波动。
为了找到频率,我把我的Excel文件上传到了Python,因为我觉得这样会更简单——可能还有什么我没想到的,可以让这个过程更简单。
到目前为止,在Python中我已经做了:
import xlrd
import numpy as N
import numpy.fft as F
import matplotlib.pyplot as P
wb = xlrd.open_workbook('temp7.xls') #LOADING EXCEL FILE
wb.sheet_names()
sh = wb.sheet_by_index(0)
first_column = sh.col_values(1) #VALUES FROM EXCEL
second_column = sh.col_values(2) #VALUES FROM EXCEL
那么,我该如何从这里找到频率呢?
1 个回答
1
我不知道你对傅里叶变换了解多少,所以如果我说的背景知识太多了,请见谅。
你的信号并不是只有“一个频率”,它可以看作是许多频率的总和。傅里叶变换可以告诉你这些频率的权重。可惜的是,当我们把模拟信号(连续时间)转换成数字信号(离散时间)时,可能会丢失一些信息。这就限制了我们能获取的频率信息——也就是说,我们能确定的最高频率和数字采样率有关(这就是奈奎斯特-香农准则):
fs > 2B
这里的 fs
是你的采样率(每单位时间的样本数,通常以赫兹为单位),而 B
是你信号的最高频率。如果你的信号实际上有高于 B
的频率,它们会被“混叠”成一个低于 B
的值。
对于你的问题,你只需要做以下操作:
x = N.array(first_column)
X = F.fft(x)
现在 X
是你电压信号的频率域表示。根据采样定理,相应的频率范围是 [0, fs)
。那么,fs
是什么呢?你需要通过查看样本数量除以你采样信号的总时长来计算它(注意单位):
fs = len(second_column) / second_column[-1]
请注意,这种信号的表示也可能是复杂的,也就是说,每个频率都有一个对应的幅度和相位。
希望这些信息对你有帮助,也希望我没有讲了一堆你已经知道的内容。