首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >理解快速傅立叶变换方法的输出

理解快速傅立叶变换方法的输出
EN

Stack Overflow用户
提问于 2019-02-25 11:46:13
回答 1查看 249关注 0票数 2

我正在尝试理解python FFT库产生的输出。

我有一个sqlite数据库,其中记录了几个系列的ADC值。每个序列由1024个采样组成,采样频率为1ms。

导入数据序列后,我对其进行规范化,并通过fft方法运行int。我已经包含了一些原始信号与FFT输出的比较图。

代码语言:javascript
运行
AI代码解释
复制
import sqlite3
import struct
import numpy as np
from matplotlib import pyplot as plt
import time
import math

conn = sqlite3.connect(r"C:\my_test_data.sqlite")
c = conn.cursor()

c.execute('SELECT ID, time, data_blob FROM log_tbl')


for row in c:
    data_raw = bytes(row[2])
    data_raw_floats = struct.unpack('f'*1024, data_raw)
    data_np = np.asarray(data_raw_floats)

    data_normalized = (data_np - data_np.mean()) / (data_np.max() - data_np.min())

    fft = np.fft.fft(data_normalized)
    N = data_normalized .size

    plt.figure(1)
    plt.subplot(211)
    plt.plot(data_normalized )

    plt.subplot(212)
    plt.plot(np.abs(fft)[:N // 2] * 1 / N)
    plt.show()

    plt.clf()

信号清楚地包含一些频率,我希望它们可以从FFT输出中看到。

我做错了什么?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2019-02-25 12:14:26

在使用np.fft.fft时,您需要确保数据均匀分布,否则输出将不准确。如果它们不是均匀分布的,可以使用LS周期图,例如:http://docs.astropy.org/en/stable/stats/lombscargle.html。或者查找非均匀fft。

关于情节:我不认为你做了什么明显错误的事情。您的信号由一个周期为100量级的信号组成,因此您可以预期在1/period=0.01附近有一个很强的频率信号。这是您的图表中可见的内容。时域信号不是那么正弦的,所以你在频域中的峰值将是模糊的,如你的图表所示。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54865473

复制
相关文章

相似问题

领券
社区富文本编辑器全新改版!诚邀体验~
全新交互,全新视觉,新增快捷键、悬浮工具栏、高亮块等功能并同时优化现有功能,全面提升创作效率和体验
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文