使用傅里叶变换查找心跳的BPM

时间:2017-04-14 10:37:42

标签: matlab signal-processing fft

我有一个信号的傅里叶变换图。绘制信号的傅里叶变换与其索引号。给出了采样频率(Fs)和样本总数(N),以及样本中两个最大峰的指数。我希望通过这些信息找到每分钟信号的节拍。我的第一个猜测是它是样本的总数除以最大峰值的指数(N /(最大指数)。但是,我觉得应该用第二个最大峰值完成某些事情。我很困惑在哪里指数发挥作用。任何帮助将不胜感激。

1 个答案:

答案 0 :(得分:1)

实际输入数据的离散傅立叶变换具有some symmetryX_{N-k} = X*_{k}。我假设你的山峰服从这种关系。因此,只有第一个N/2点是相关的,您只能检测低于Fs/2的频率,因为如果您以Fs的频率采样频率为{{1}的窦你无法看到这个窦和常数之间的区别。

Fs/2

请注意,BPM = (largest_index - 1)/N * Fs * 60 是必需的,因为第一个元素对应零频率(即常数值)。

您可以通过手动确定两次心跳之间的峰值来检查您的代码,方法是使用已知频率的生成信号验证您的方法。