Вычисление БПФ по сигналу тремора рук в Python
Итак, мы работаем над сигналом, полученным от дрожания рук с помощью 3-осевого акселерометра.Мы хотим вычислить БПФ сигнала, чтобы выяснить доминирующую частоту.Доминирующая частота, полученная в matlab, составляла до 10 Гц, что и ожидалось.Однако результат, полученный в python, не таков, как ожидалось.Может ли кто-нибудь, пожалуйста, сообщить нам программу для вычисления БПФ на python?
Что я уже пробовал:
import csv import numpy as np #import scipy as sy #import scipy.fftpack as syfp #import pylab as pyl with open('C:\Users\Sharvari Inamdar\Desktop\F0005CH1.CSV') as csvfile: spamreader=csv.reader(csvfile,delimiter=' ',quotechar='|') for row in spamreader: print(', '.join(row)) #Read in data from file here array=np.loadtxt("C:\Users\Sharvari Inamdar\Desktop\F0005CH1.CSV") from scipy.fftpack import fft # Number of sample points N = len(array) # sample spacing T=1.0/N x = np.linspace(0.0, 2*np.pi*N*T, N) # y = np.sin(50.0 * 2.0*np.pi*x) + 0.5*np.sin(80.0 * 2.0*np.pi*x) yf = fft(array) xf = np.linspace(0.0, 1.0/(2.0*T), N/2) import matplotlib.pyplot as plt plt.plot(xf, 2.0/N * np.abs(yf[0:N/2])) plt.grid() plt.show()
программа 2
import csv import numpy as np import pylab as pyl with open('C:\Users\Sharvari Inamdar\Desktop\F0005CH1.CSV') as csvfile: spamreader=csv.reader(csvfile,delimiter=' ',quotechar='|') for row in spamreader: print(', '.join(row)) #Read in data from file here array=np.loadtxt("C:\Users\Sharvari Inamdar\Desktop\F0005CH1.CSV") Ts=1.00E-03; Fs=1/Ts; Fn=Fs/2; #np.isnan(array)=[] #Ly1=array.shape N=len(array) T=np.linspace(0,1,N)*Ts #pyl.plot(T,array) from scipy.fftpack import fft FF=fft(array/N); #Fv=np.linspace(0,1,np.fix(N/2)+1)*Fn; #Iv=len(Fv) pyl.plot(T,FF)
мы пробовали вышеперечисленные 2 программы и многие другие версии этой программы.
Richard MacCutchan
Это то же самое, что и в любом языке, это математическая проблема, а не программная.