1

我对在我的 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()`
4

0 回答 0