【问题标题】:How to apply FFT on raw signal using Python如何使用 Python 对原始信号应用 FFT
【发布时间】:2019-01-30 04:59:53
【问题描述】:

我是信号处理新手,需要您的帮助。

我从我的 TI AFE4490 获得了 10 秒的原始 PPG(光电容积描记图)信号。我的硬件已经过校准,我每秒使用 250 个样本来记录这些信号。我最后获得了2500分。

您可以看到下面的图像、点和代码。

上:我的原始 PPG 信号 - 下:尝试应用 FFT:

代码:

RED, IR, nSamples, sRate = getAFESignal()


period = 1/sRate

plt.figure(1)

plt.subplot(2,1,1)
x = np.linspace(0.0, nSamples*period, nSamples)
y = IR
plt.xlabel("Time (s)")
plt.ylabel("Voltage (V)")
plt.plot(x,y)

plt.subplot(2,1,2)
yf = fft(y)
xf = np.linspace(0.0, 1.0/(2.0*period), nSamples//2) 
plt.xlabel("Frequency (Hz)")
plt.ylabel("Gain")
plt.plot(xf, 2.0/nSamples * np.abs(yf[0:nSamples//2])) 

plt.grid()
plt.show()

函数getAFEsignal()只是一个读取.txt文件并将所有内容放入两个numpy数组的函数。

您可以在此处找到 .txt 文件:Raw signal file

如您所见,我没有正确应用 FFT,我需要它来发现我需要过滤哪些频率。你知道我做错了什么吗,是否可以对这个信号应用 FFT?

【问题讨论】:

  • 有几件事可能是错误的,规范化,步长等。尝试阅读这些内容,看看你是否正确应用。
  • 嘿乔。感谢您的回复。我会读这些东西。 ;)

标签: python scipy signal-processing fft


【解决方案1】:

好消息是您的 FFT 计算结果很好。您在时域中显示的数据具有相当强的低频分量。相应地,您得到的频域图在 0Hz 附近显示出明显的尖峰。

主要问题在于如何绘制结果。为了更好地根据对时域波形的直观感知来查看您可能期望在频域中看到的内容,您需要重新调整每个轴的比例。特别是,在显示的时间尺度上,您可能会注意到持续时间约为 0.25 秒的模式 最多可能几秒钟。这将对应于大约 0-5Hz 的频率范围。然后将注意力集中在该范围而不是显示整个 0-125Hz 频谱是有意义的。这可以通过设置 x 轴限制来实现:

plt.xlim(0,5) # set x-axis limits from 0 to 5Hz

与 y 轴类似,您需要考虑幅度较小的频率分量(在线性尺度上变得更难注意到)仍然可以对时域信号产生非常明显的影响。因此,通常希望以对数分贝标度显示频域幅度。这可以按如下方式完成:

plt.plot(xf, 20*np.log10(2.0/nSamples * np.abs(yf[0:nSamples//2])))

最后,如果您想更好地查看某些特定频率分量的贡献,而不会受到来自其他频率分量的spectral leakage 的干扰,您可能需要考虑在计算 FFT 之前对您的时域信号进行预滤波。例如,如果您想消除恒定信号偏差的影响、缓慢的 ~0.1Hz 变化和频率大于 10Hz 的噪声,您可以使用以下内容:

import scipy.signal
b,a = signal.butter(4, [0.25/sRate, 10/sRate], btype='bandpass')
y = signal.filtfilt(b,a,signal.detrend(IR, type='constant'))

【讨论】:

  • 哇。非常感谢侦探之眼。我尝试了你所有的提示,现在我可以看到我需要在信号上看到的内容。 ;)
  • 谢谢。是否将截止频率除以采样频率或奈奎斯特频率?
  • @PaulMwaniki 我已经查看了old docsscipy.butter,看起来您毕竟必须除以奈奎斯特频率。使用 scipy 1.2 或更高版本要简单得多,您可以选择根本不进行除法,而是使用 fs 参数指定采样频率。
猜你喜欢
  • 2020-05-29
  • 2021-07-24
  • 2019-02-02
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-04-22
  • 2012-03-30
  • 2020-04-22
相关资源
最近更新 更多