其余相关代码:
echo_times=[0.080,0.200,0.400]毫秒
F_s=1/(0.006)0.006=样品之间的时间
freq=np.linspace(0,29556,29556)*(f_s/29556)(29556=数据长度)
#生成子批次
图,轴=plt.子图(3,1,FigSize=(18,16))
对于范围内的IDX(长度(回声时间)):
轴[IDX].绘图(freq,lead_pts_fft_df.large[IDX].real,real part
freq,lead_pts_fft_df.量级[idx].imag,虚部
轴[IDX].Legend()对每组轴应用图例
#显示绘图
请显示())
后DFT(scipyfftpack):

后干膜厚度(numpy)

hereis a link to the dataset(on dropbox)used to create these plots,and这里是Jupyter笔记本的链接。
编辑:
我使用张贴的建议,并采取的幅度(绝对值)的数据,也绘制了对数y轴。新结果发布在下面。我的信号好像有点模糊。我是否使用了正确的频率刻度?更新后的代码和绘图如下。
生成子批次
图,轴=plt.子图(3,1,FigSize=(18,16))
对于范围内的IDX(长度(回声时间)):
轴[IDX].plot(freq[1::]、np.log(np.abs(lead-pts-fft-df.large[IDX][1::]),
label=lead_pts_df.index[idx],应用标签
颜色=绘图颜色[IDX]颜色
轴[IDX].Legend()对每组轴应用图例
#显示绘图
请显示())
=here
如果你想快速了解背景的话)。以下是一些上下文中两个绘制波形的几个片段:

对于每一个波形,我都试图执行一个DFT,以发现呼吸的主要频率。
我的问题是,当我绘制我执行的DFT时,我得到了两件事情中的一件,这取决于我使用的FFT库。此外,它们都不能代表我所期待的。我知道数据并不总是按照我们想要的方式显示,但我的数据中显然存在波形,所以我希望离散傅立叶变换在某个合理的地方产生一个频率峰值。作为参考,我预计大约80到130赫兹。
我的数据存储在pandas
数据帧,每个回波时间的数据在一个单独的序列中。我正在应用选择的fft函数(见下面的代码),并为每个函数接收不同的结果。
坐骨神经痛(fftpack
)
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:
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
其他相关代码:
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()
后干膜厚度(scipyFFT背包
):

后干膜厚度(numpy)

Here是指向用于创建这些绘图的数据集(在Dropbox上)的链接,以及here是指向Jupyter笔记本的链接。
编辑:
我使用张贴的建议,并采取的幅度(绝对值)的数据,也绘制了对数y轴。新结果发布在下面。我的信号好像有点模糊。我是否使用了正确的频率刻度?更新后的代码和绘图如下。
# 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()
