Python中的FFT错误数据?

2024-04-26 05:39:27 发布

您现在位置:Python中文网/ 问答频道 /正文

在我的Raspberry PI 4上,我有一个xlsx文件,我用它扫描:df = pd.read_excel('') 这是一个具有146651行x 1列的压力传感器数据集。我想对这个数据集执行fft,但是如果我绘制fft,我会得到一条与时间信号完全相同的曲线(在x轴上移动??)。 那么问题是什么呢

import numpy as np
import matplotlib.pyplot as plt
from scipy import fftpack
import pandas as pd


# Import csv file
df = pd.read_excel('/home/pi/Downloads/test_11.12.19_500_neuHz.xlsx', skiprows=1)


print(df)

sig_fft = fftpack.fft(df)
power = np.abs(sig_fft)
print (power)
sample_freq = fftpack.fftfreq(df.size, 0.02)
plt.figure(figsize=(6,5))
plt.plot(sample_freq, power)


plt.show()

graph


Tags: 数据importfftdfreadasnpplt
2条回答

您的输入数据必须在一行中。当前,FFT分别应用于所有行,这意味着任何给定行的输出都是单个单元格信号的平均值,因此,输出与输入相同

#data is one column
df = pd.DataFrame([4,5,4])
df
fft = fftpack.fft(df)
fft
# output = input => wrong

#data as one row
df = pd.DataFrame({'0':[4],'1':[5],'2':[4]})
df
fft = fftpack.fft(df)
fft
# right

现在我用另一种方式执行fft。但是我如何缩放频率和震级轴呢

import numpy as np
import matplotlib.pyplot as plt
import scipy
from scipy.fftpack import fft
import pandas as pd
import math
from tkinter import filedialog
from tkinter import *

#choose csv file
root = Tk()
root.filename = filedialog.askopenfilename ( initialdir = "/home/pi", title = "Datei auswählen", filetypes = (("Comma Seperated Values (CSV)", "*.csv"), ("Alle Dateien", "*.*")) )


# Import csv file
df = pd.read_csv(root.filename, delimiter = ';')
#convert Voltage to Bar
df_echt = df/0.01
#preparation for fft
df_neu = df.as_matrix()
time = df_neu[:,0]
voltage = df_neu[:,0]/df_neu[:,0].max()
df_tr = df_neu.T

#fft
amplitude = np.fft.rfft (voltage)
freq = np.fft.rfftfreq(len(time),np.diff(time)[0])

#plot time signal and fft
plt.plot( np.absolute(amplitude), lw = 0.5)
plt.figure (2)
plt.plot (df_echt)
plt.legend (df)
plt.show()

FFT graph

那么如何缩放轴呢

相关问题 更多 >

    热门问题