我在python 3.7中运行numpy FFT函数的代码集所获得的结果有问题。
问题是频率与幅度,频率与功率谱密度图不正确-从原始数据的形状和外观来看:
从原始数据图中可以看出,我希望得到频率。与振幅和频率vs PSD图应该看起来不像我现在的样子:
仅供参考,我的原始数据长度为4096,即5.7小时。因此,这意味着一个数据点需要大约5秒钟的时间。
如何修正代码以获得正确的FFT分析结果?
import pandas as pd
import matplotlib.pyplot as plt
import numpy as np
from numpy.fft import fft, fftfreq, ifft, rfft
file = "C:\work\Data_2019-01-03_16-19-49.txt"
df = pd.read_csv(file,skiprows = (0,2), delimiter='\t')
data1_name = "CH9CC05"
data1 = df[data1_name].values
n = data1.size
y= data1
fft_vals = fft(y,n)
freqs = fftfreq(n)
mask = freqs>=0
fft_theo = 1/n* np.abs(fft_vals)
psd = 1/n*(np.abs(fft_vals)**2)
plt.figure(1)
plt.plot(y, label= data1_name)
plt.title(data1_name+" Raw Data")
plt.figure(2)
plt.plot(freqs[mask], fft_theo[mask], 'r')
plt.title(data1_name+" Freq vs Amplitude")
plt.show()
plt.figure(3)
plt.plot(freqs[mask], psd[mask], 'r')
plt.title(data1_name+" Freq vs PSD")
plt.show()`