Я хочу выполнить БПФ для массива данных, который я извлек из датчика MPU6050, подключенного к Arduino UNO с использованием Python
Пожалуйста, найдите образец данных ниже
0.13,0.04,1.03
0.14,0.01,1.02
0,15, -0.04,1.05
0.16,0.02,1.05
0.14,0.01,1.02
0,16, -0.03,1.04
0,15, -0.00,1.04
0.14,0.03,1.02
0.14,0.01,1.03
0.17,0.02,1.05
0.15,0.03,1.03
0.14,0.00,1.02
0,17, -0.02,1.05
0.16,0.01,1.04
0.14,0.02,1.01
0.15,0.00,1.03
0.16,0.03,1.05
0.11,0.03,1.01
0,15, -0.01,1.03
0.16,0.01,1.05
0.14,0.02,1.03
0.13,0.01,1.02
* * 0.15,0.02,1.05 тысяча сорок-девять
0.13,0.00,1.03
0.08,0.01,1.03
0,09, -0.01,1.03
0,09, -0.02,1.03
0.07,0.01,1.03
0.06,0.00,1.05
0.04,0.00,1.04
0.01,0.01,1.02
0,03, -0.05,1.02 * +1068 *
-0,03, -0.05,1.03
-0,05, -0.02,1.02
Я взял 1-й столбец (ось X) и сохранил в массиве
Справка: https://hackaday.io/project/12109-open-source-fft-spectrum-analyzer/details
из этого я взял часть FFT и код, как показано ниже
from scipy.signal import filtfilt, iirfilter, butter, lfilter
from scipy import fftpack, arange
import numpy as np
import string
import matplotlib.pyplot as plt
sample_rate = 0.2
accx_list_MPU=[]
outputfile1='C:/Users/Meena/Desktop/SensorData.txt'
def fftfunction(array):
n=len(array)
print('The length is....',n)
k=arange(n)
fs=sample_rate/1.0
T=n/fs
freq=k/T
freq=freq[range(n//2)]
Y = fftpack.fft(array)/n
Y = Y[range(n//2)]
pyl.plot(freq, abs(Y))
pyl.grid()
ply.show()
with open(outputfile1) as f:
string1=f.readlines()
N1=len(string1)
for i in range (10,N1):
if (i%2==0):
new_list=string1[i].split(',')
l=len(new_list)
if (l==3):
accx_list_MPU.append(float(new_list[0]))
fftfunction(accx_list_MPU)
У меня есть выход FFT, как показано FFToutput
Я не понимаю, верен ли график. Я впервые работаю с БПФ и как мы соотносим его с данными
Вот что я получил после предложенных изменений: FFTnew