【发布时间】:2021-11-20 03:47:18
【问题描述】:
我是信号处理的新手。我正在尝试计算和绘制给定数据集的 FFT。该数据集对应于使用加速度计捕获的振动信号。数据集包含 x、y 和 z 方向的幅度以及时间。
我面临的问题是,当我尝试获取数据的子集时,FFT 给出了一条直线,我看不到其中的频率和幅度。以下是我正在使用的代码:
import matplotlib.pyplot as plt
import numpy as np
from scipy.fftpack import fft
from scipy import signal
import tkinter as tk
from tkinter import filedialog
import time
#Prompt user for file
root = tk.Tk()
root.withdraw()
file_path = filedialog.askopenfilename(filetypes=[("Two Column CSV","*.csv")])
print(file_path)
title = input("Enter Experiment Name: ")
#Load Data (assumes two column array
tic = time.process_time()
x, y, z, t = np.genfromtxt(file_path,delimiter=',', unpack=True)
print(t)
toc = time.process_time()
print("Load Time:",toc-tic)
#Determine variables
N = np.int(np.prod(t.shape))#length of the array
Fs = 1/((t[1]-t[0])/10**9) #sample rate (Hz)
total_duration = (t[-1] - t[0])/10**9
T = 1/Fs
t_sec = [(t[i+1] - t[0])/10**9 for i in range(0,len(t)-1)]
print('Total Duration: ', total_duration)
print("# Samples:",N)
print('Sampling rate: ',Fs)
tic = time.process_time()
fig_fft, host_fft = plt.subplots()
fig_fft.set_size_inches(16,9)
plt.figure(3)
xf = np.linspace(0.0, 1.0/(2.0*T), N//2)
yf = fft(x)
plt.plot(xf, 2.0/N * np.abs(yf[0:np.int(N/2)]))
plt.grid()
plt.xlabel('Frequency (Hz)', fontsize=14)
plt.ylabel('Acc (m/$sec^2$)', fontsize=14)
plt.title('FFT (X)- ' + title, fontsize=18)
plt.savefig('FFT (X) {}'.format(title), dpi=300, bbox_inches='tight')
plt.show()
here is the link to main dataset
here is the link to 10sec data extracted from above dataset
请告诉我如何解决这个问题。 谢谢
【问题讨论】:
标签: python scipy signal-processing fft vibration