【问题标题】:FFT on MPU6050 output signalMPU6050 输出信号上的 FFT
【发布时间】:2018-04-27 09:04:05
【问题描述】:

我想对使用 Python 从连接到 Arduino UNO 的 MPU6050 传感器中提取的数据数组执行 FFT

请在下面找到数据样本

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

-0.03,-0.05,1.03

-0.05,-0.02,1.02

我已经取了第一列(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

我不明白图表是否正确。这是我第一次使用 FFT,我们如何将它与数据联系起来

这是我在建议更改后得到的:FFTnew

【问题讨论】:

  • 问题是什么?
  • 对不起,我编辑了它

标签: python-3.x arduino fft arduino-uno mpu6050


【解决方案1】:

这是您的fftfunction 的一点修改:

def fftfunction(array):
    N = len(array)
    amp_spec = abs(fftpack.fft(array)) / N
    freq = np.linspace(0, 1, num=N, endpoint=False)

    plt.plot(freq, amp_spec, "o-", markerfacecolor="none")
    plt.xlim(0, 0.6)  # easy way to hide datapoints
    plt.margins(0.05, 0.05)

    plt.xlabel("Frequency $f/f_{sample}$")
    plt.ylabel("Amplitude spectrum")
    plt.minorticks_on()
    plt.grid(True, which="both")

fftfunction(X)

具体来说,它会删除 fs=sample_rate/1.0 部分 - 不应该是相反的吗?

然后,该图基本上会告诉您哪个频率(相对于采样频率)有多强。查看您的图像,在f=0,您的信号偏移量或平均值约为 0.12。对于其余部分,没有发生太多事情,没有任何峰值表明测量数据中过度存在某个频率。

【讨论】:

  • 我已尝试按照您的建议使用该功能.. 我得到了名为 FFTnew 的图表
猜你喜欢
  • 1970-01-01
  • 2011-08-15
  • 2016-11-24
  • 1970-01-01
  • 1970-01-01
  • 2015-07-28
  • 2012-12-03
  • 1970-01-01
  • 2023-03-21
相关资源
最近更新 更多