Numpy FFT函数结果不正确,无法将时域转换为频域数据

时间:2019-07-06 16:36:43

标签: python-3.x pandas numpy fft continuous-fourier

我在python 3.7中运行numpy FFT函数的代码集所获得的结果有问题。

问题是频率与幅度,频率与功率谱密度图不正确-从原始数据的形状和外观来看:

Raw Data

从原始数据图中可以看出,我希望得到频率。与振幅和频率vs PSD图应该看起来不像我现在的样子:

Current results

仅供参考,我的原始数据长度为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()`

0 个答案:

没有答案
相关问题