我对在我的 python 3.7 中运行 numpy FFT 函数的代码集获得的结果有疑问。
问题是频率与幅度和频率与功率谱密度图不正确 - 从我的原始数据的形状和外观来看:
从原始数据图中可以看出,我希望频率。vs 幅度和频率。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()`