将Excel文件转换为Python频率

1 投票
1 回答
1771 浏览
提问于 2025-04-17 07:19

基本上,我有一个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]

请注意,这种信号的表示也可能是复杂的,也就是说,每个频率都有一个对应的幅度和相位。

希望这些信息对你有帮助,也希望我没有讲了一堆你已经知道的内容。

撰写回答