Loading [MathJax]/jax/output/CommonHTML/config.js
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >Python意外的FFT结果

Python意外的FFT结果
EN

Stack Overflow用户
提问于 2018-07-19 10:42:01
回答 1查看 2.8K关注 0票数 2

我正在分析什么是呼吸波形,由3种不同的形状构成(数据来源于磁共振成像,因此使用了多次回波时间;如果您想要一些快速的背景信息,请参阅这里 )。以下是为某些上下文绘制的两个波形的几个片段:

对于每个波形,我试图执行一个DFT,以发现主导频率或呼吸频率。

我的问题是,当我绘制我所执行的FFT时,我得到了两件事之一,取决于我使用的FFT库。此外,都不代表我所期望的。我知道数据并不总是我们想要的样子,但是我的数据中显然有波形,所以我希望离散傅里叶变换在某个合理的地方产生一个频率峰值。供参考,我预计约80至130赫兹。

我的数据存储在一个pandas数据帧中,每个回波时间的数据都存储在一个单独的系列中。我正在应用所选择的FFT函数(请参阅下面的代码),并为每个函数接收不同的结果。

SciPy (fftpack)

代码语言:javascript
运行
AI代码解释
复制
import pandas as pd
import scipy.fftpack

# temporary copy to maintain data structure
lead_pts_fft_df = lead_pts_df.copy()

# apply a discrete fast Fourier transform to each data series in the data frame
lead_pts_fft_df.magnitude = lead_pts_df.magnitude.apply(scipy.fftpack.fft)
lead_pts_fft_df

NumPy:

代码语言:javascript
运行
AI代码解释
复制
import pandas as pd
import numpy as np 

# temporary copy to maintain data structure
lead_pts_fft_df = lead_pts_df.copy()

# apply a discrete fast Fourier transform to each data series in the data frame
lead_pts_fft_df.magnitude = lead_pts_df.magnitude.apply(np.fft.fft)
lead_pts_fft_df

其余的相关守则:

代码语言:javascript
运行
AI代码解释
复制
ECHO_TIMES = [0.080, 0.200, 0.400] # milliseconds

f_s = 1 / (0.006) # 0.006 = time between samples
freq = np.linspace(0, 29556, 29556) * (f_s / 29556) # (29556 = length of data)

# generate subplots
fig, axes = plt.subplots(3, 1, figsize=(18, 16))

for idx in range(len(ECHO_TIMES)):
    axes[idx].plot(freq, lead_pts_fft_df.magnitude[idx].real, # real part
                   freq, lead_pts_fft_df.magnitude[idx].imag, # imaginary part

    axes[idx].legend() # apply legend to each set of axes

# show the plot
plt.show()

后DFT (SciPy fftpack):

后DFT (NumPy)

这里是用于创建这些图的数据集(在Dropbox上)的链接,而这里是指向木星笔记本的链接。

编辑:

我使用了张贴的建议,并采取了大小(绝对值)的数据,并绘制了一个对数y轴。新的结果公布如下。看来我的信号里有一些环绕。我没有使用正确的频率刻度吗?更新后的代码和情节如下。

代码语言:javascript
运行
AI代码解释
复制
# generate subplots
fig, axes = plt.subplots(3, 1, figsize=(18, 16))

for idx in range(len(ECHO_TIMES)):
    axes[idx].plot(freq[1::], np.log(np.abs(lead_pts_fft_df.magnitude[idx][1::])),
                   label=lead_pts_df.index[idx], # apply labels
                   color=plot_colors[idx]) # colors
    axes[idx].legend() # apply legend to each set of axes

# show the plot
plt.show()

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-08-08 10:15:18

我已经解决了我的问题。

鲁安戈此链接非常有帮助,它帮助我确定如何正确地缩放我的频率箱,并适当地绘制DFT。

另外:我忘了考虑信号中的偏移量。它不仅在DFT中引起0 Hz的巨峰问题,而且对变换后的信号中的大部分噪声也起着一定的作用。我利用scipy.signal.detrend()消除了这个问题,得到了一个非常合适的DFT。

代码语言:javascript
运行
AI代码解释
复制
# import DFT and signal packages from SciPy
import scipy.fftpack
import scipy.signal

# temporary copy to maintain data structure; original data frame is NOT changed due to ".copy()"
lead_pts_fft_df = lead_pts_df.copy()

# apply a discrete fast Fourier transform to each data series in the data frame AND detrend the signal
lead_pts_fft_df.magnitude = lead_pts_fft_df.magnitude.apply(scipy.signal.detrend)
lead_pts_fft_df.magnitude = lead_pts_fft_df.magnitude.apply(np.fft.fft)
lead_pts_fft_df

相应地安排频率箱:

代码语言:javascript
运行
AI代码解释
复制
num_projections = 29556
N = num_projections
T = (6 * 3) / 1000 # 6*3 b/c of the nature of my signal: 1 pt for each waveform collected every third acquisition
xf = np.linspace(0.0, 1.0 / (2.0 * T), num_projections / 2)

然后情节:

代码语言:javascript
运行
AI代码解释
复制
# generate subplots
fig, axes = plt.subplots(3, 1, figsize=(18, 16))

for idx in range(len(ECHO_TIMES)):
    axes[idx].plot(xf, 2.0/num_projections * np.abs(lead_pts_fft_df.magnitude[idx][:num_projections//2]),
                   label=lead_pts_df.index[idx], # apply labels
                   color=plot_colors[idx]) # colors
    axes[idx].legend() # apply legend to each set of axes

# show the plot
plt.show()

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

https://stackoverflow.com/questions/51429792

复制
相关文章
【笔记】《计算机图形学》(4)——光线追踪
这系列的笔记来自著名的图形学虎书《Fundamentals of Computer Graphics》,这里我为了保证与最新的技术接轨看的是英文第五版,而没有选择第二版的中文翻译版本。不过在记笔记时多少也会参考一下中文版本
ZifengHuang
2020/07/29
2.6K0
【笔记】《计算机图形学》(4)——光线追踪
CGAL:线段和多边形之间的交点?
CGAL:线段和多边形之间的交点? [英] CGAL: Intersection between a segment and a polygon? 查看:422 发布时间:2020/9/30 21
用户3519280
2023/07/06
5460
模拟试题B
1.灰度等级为256级,分辨率为2048*1024的显示器,至少需要的帧缓存容量为( )
步行者08
2018/10/09
4.3K2
爱因斯坦的光线
爱因斯坦的光线
宇相
2018/09/18
6170
爱因斯坦的光线
模拟试题A
版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/wpxu08/article/details/70208378
步行者08
2018/10/09
3.6K0
链表相交,找交点
力扣题目链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists-lcci
代码随想录
2021/12/22
8230
链表相交,找交点
光线追踪介绍
摘要 图像渲染就是一个这样的过程,输入一组物体,输出一个像素矩阵。把这个像素矩阵输送给显卡,显示器上就可以显示出来图像。本篇介绍下这个过程用到的算法,就是光线追踪。
一只小虾米
2022/10/25
1.1K0
光线追踪介绍
光学词汇6-系统基本概念6-主光线和边缘光线
主光线(chief ray)是从物体的一个偏离光轴的点发出,并且经过光学系统孔径光阑的中心的光线。主光线代表着从物体某一点发出的光束的中心线。
HawkWang
2023/09/01
1.8K0
光学词汇6-系统基本概念6-主光线和边缘光线
photo-distortion
Opticaldistortion=Δyy×100%TVdistortion=Δh2h×100%
为为为什么
2022/11/24
1.6K0
photo-distortion
模拟试题C
2.用编码裁剪法裁剪二维线段时,判断下列直线段采用哪种处理方法。假设直线段两个端点M、N的编码为1000和1001(按TBRL顺序)( )
步行者08
2018/10/09
2.1K0
光线传媒的爆款尴尬
突如其来的疫情,给整个国内院线电影蒙上了阴霾,也给整个电影产业链带来了持久的影响。作为电影产业链的一员,光线传媒受损严重。
刘旷
2020/08/25
4650
光线传媒的爆款尴尬
机器视觉(第3期)----图像采集之镜头原理详述
上期我们一起学习了光源相关的知识,知道了怎么选择光源,链接如下: 机器视觉(第2期)----图像采集之照明综述 镜头是一种光学设备,用于聚集光线在摄像机内部成像。镜头的作用是产生锐利的图像,以得到被测物的细节,这一期我们将一起学习使用不同镜头产生不同的成像几何,以及镜头像差是如何产生的。希望通过本期学习,我们能够掌握如何选择镜头以及像差产生的原因。 作为一个机器视觉算法人员,来介绍光学系统方面的知识,有些地方理解起来还是有些难度的,小编已经再旁边放了几摞砖,欢迎大家来拍。希望能够和大家一起交流,共同进步。
智能算法
2018/04/03
3.1K0
机器视觉(第3期)----图像采集之镜头原理详述
【笔记】《游戏编程算法与技巧》7-12
本篇是看完《游戏编程算法与技巧》后做的笔记的下半部分. 这本书可以看作是《游戏引擎架构》的入门版, 主要介绍了游戏相关的常见算法和一些基础知识, 很多知识点都在面试中会遇到, 值得一读.
ZifengHuang
2022/08/30
2.2K0
求两个链表的交点
已知链表A的头节点指针headA,链表B的头节点指针headB,两个链表相交,求两链表交点对应的节点。 [](LeetCode 160)
小飞侠xp
2018/08/29
9120
VTK:实现光照效果,从一根线到一个面
导读:很多地方需要查看光照度什么的,目前也有很多软件来处理。今天就做了一个关于光照效果的内容。从早上10点开始,到下午3点半,开始写头条号。大概就这么长时间。中午没有休息,没有吃饭。
曾高飞
2022/02/17
1.5K1
「黑悟空」实机演示炸裂登场,英伟达大秀光追技术
---- 新智元报道   编辑:Aeneas 桃子 【新智元导读】「黑悟空」时隔一年后炸裂回归,4K光追 + DLSS,让玩家大呼过瘾。 时隔一年,「黑悟空」归来再度登上热榜。 这次,除了官方发布了一段6分钟实机剧情片段,英伟达更是带来了8分钟实机试玩片段。 重磅的是,这是「黑悟空」首次支持4K  RTX ON光追+NVIDIA DLSS技术。 网友们看后瞬间热血沸腾。 首支4K光追 + DLSS 2020年,黑悟空首次曝光,惊艳全球。 到了2021年,大秀UE5的测试,那白雪纷纷的地面
新智元
2022/08/26
7620
「黑悟空」实机演示炸裂登场,英伟达大秀光追技术
链表相交,找出交点
题目链接:https://leetcode-cn.com/problems/intersection-of-two-linked-lists-lcci/
代码随想录
2021/06/17
7520
Day2-球球
用户10759271
2023/09/19
1500
点击加载更多

相似问题

找到光线和多边形的交点的最快方法是什么?

41

光线-平面交点,用于确定交点的Z

10

线与球的交点

11

求光线的最远交点

11

光线不能准确地确定交点

239
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文