csv 使用Python计算数据集的快速傅里叶变换

mum43rcc  于 2023-07-31  发布在  Python
关注(0)|答案(1)|浏览(148)

我想用python计算给定信号的fft。X轴是时间(秒),y轴是电压。信号具有某种周期性,看起来像这样:


的数据
在这个post之后,我得到这个图:



这是正确的FFT吗?. csv文件为here。代码:

import numpy as np
import matplotlib.pyplot as plt
from pandas import read_csv
from scipy.fft import fft

plt.rcParams['figure.dpi'] = 1000

# load the dataset #1
dataframe = read_csv('data/1.csv', usecols=[1])

plt.plot(dataframe)
plt.show()

################ FFT Con scipy
#number of sample points
N = 100
#sampling period
T = 1
#create x-axis for time length of signal
x = np.linspace(0, N*T, N)
#create array that corresponds to values in signal
y = dataframe
y = y - np.mean(y)
#perform FFT on signal
yf = fft(y)
#create new x-axis: frequency from signal
xf = np.linspace(0.0, 1.0/(2.0*T), N//2)
#plot results
plt.plot(xf, abs(yf[0:N//2]), label = 'signal')
plt.grid()
plt.xlabel('Frequency')
plt.ylabel('Spectral Amplitude')
plt.legend(loc=1)
plt.savefig('fft.jpg')
plt.show()

字符串

jxct1oxe

jxct1oxe1#

FFT是正确的,但你如何显示它是误导。您需要使用实际的采样周期:

import numpy as np
import pandas as pd
import matplotlib.pyplot as plt

df = pd.read_csv('1.csv')

# The horizontal index must be linear
assert np.all(df.epoch.diff()[1:] == 1)

yf = np.fft.rfft(df.voltage, norm='forward')
ff = np.fft.rfftfreq(n=len(df), d=2)

fig, ax = plt.subplots()
ax.loglog(ff, np.abs(yf))
ax.set_xlabel('Frequency (Hz)')
ax.set_ylabel('Amplitude (V)')
plt.show()

字符串


的数据

相关问题