Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/sockets/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 3.x Numpy FFT函数结果不正确,无法将时域数据转换为频域数据_Python 3.x_Pandas_Numpy_Fft_Continuous Fourier - Fatal编程技术网

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

Python 3.x Numpy FFT函数结果不正确,无法将时域数据转换为频域数据,python-3.x,pandas,numpy,fft,continuous-fourier,Python 3.x,Pandas,Numpy,Fft,Continuous Fourier,在我的Python3.7中,运行numpy FFT函数的代码集得到的结果有一个问题 问题在于,频率与振幅和频率与功率谱密度图不正确-从我的原始数据的形状和外观判断: 从原始数据图中可以看出,我认为频率与振幅和频率与PSD图不应该像我现在看到的那样: 仅供参考,我的原始数据长度为4096,采集时间为5.7小时。所以,这意味着一个数据点在5秒内被获取 如何修复我的代码以获得正确的FFT分析结果 import pandas as pd import matplotlib.pyplot as plt

在我的Python3.7中,运行numpy FFT函数的代码集得到的结果有一个问题

问题在于,频率与振幅和频率与功率谱密度图不正确-从我的原始数据的形状和外观判断:

从原始数据图中可以看出,我认为频率与振幅和频率与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()`

这是一个缩放问题。DC值(频率=0时)与其他值相比非常大。将该元素设置为0(这相当于从信号中减去平均值)以查看绘图中的其他峰值。您好,非常感谢您的回答,您的意思是从平均值中减去每个数据点吗?如果我这样做,我的振幅值不是很小吗?谢谢你
y=data1-np.mean(data1)
。这不会改变振幅。这只是去除了
f=0处的峰值。所有其他垃圾箱将与现在一样。这是一个缩放问题。DC值(频率=0时)与其他值相比非常大。将该元素设置为0(这相当于从信号中减去平均值)以查看绘图中的其他峰值。您好,非常感谢您的回答,您的意思是从平均值中减去每个数据点吗?如果我这样做,我的振幅值不是很小吗?谢谢你
y=data1-np.mean(data1)
。这不会改变振幅。这只是去除了
f=0处的峰值。所有其他垃圾箱将与现在一样。