【问题标题】:FFT in Python - wrong data?Python中的FFT - 错误的数据?
【发布时间】:2020-01-24 14:11:01
【问题描述】:

在我的 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

【问题讨论】:

    标签: python raspberry-pi fft sensors


    【解决方案1】:

    您的输入数据必须在一行中。目前,您的 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
    

    【讨论】:

    • 好的。我用df.T 转换数据,所以现在我有一个1row x 146652columns 的数据集。但是 fft 没有被绘制。出现图形窗口,但不会绘制 fft 数据。我执行 fft 的方式是否正确?对于这么大的数据集,您将如何执行 fft?
    • @falcao 控制台是否会给您任何类型的错误?
    【解决方案2】:

    现在我正在以另一种方式执行 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

    那么如何缩放轴?

    【讨论】:

      猜你喜欢
      • 2020-12-03
      • 1970-01-01
      • 1970-01-01
      • 2013-10-11
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2013-05-22
      • 1970-01-01
      相关资源
      最近更新 更多