心脏 BPM 标准化 - Matlab

Posted

技术标签:

【中文标题】心脏 BPM 标准化 - Matlab【英文标题】:Heart BPM Normalization - Matlab 【发布时间】:2016-06-10 09:04:40 【问题描述】:

我有两个 .wav 文件,其中包含两个不同心脏的记录,因此具有不同的心率。我想规范化这两个信号,以便在不修改任何其他内容的情况下将它们的 BPM 固定为 60。

这就是信号的读取方式(另一个信号相同,但有 2 个)以及它的外观(它是 FFT):

[y1,fs1] = audioread(heartbeat1);
    N1 = length(y1);
    t1 = linspace(0, N1/fs1, N1);

我做了一些研究,发现 interp1 但它似乎不适合我的程序。我真的不知道我该怎么做,所以如果你能提供一个我可以使用的功能,那就太好了。

【问题讨论】:

您可以使用fft,使用findpeaks 查找心跳,然后使用resample 查找信号。如果您可以上传一个小示例文件,我们可以更轻松地编写完整的答案。 你尝试过使用无维频率吗? 我认为 FFt 无法让我找到心跳。什么是无维频率? 如前所述,此处的示例文件非常有用。我不认为你想规范化”bc 我认为这会改变幅度:你想在时间轴上拉伸曲线,使心跳达到 60BPM 对吗? @Finn 是的。通过示例文件,您的意思是 .wav 文件? 【参考方案1】:

我不确定我是否理解。

我认为您想比较具有不同“主要”心跳频率的两个心跳信号。所以我认为你可以将这两个信号绘制为

的函数

f / f_节拍

其中 f_beat 是信号的心跳频率。这将是一个无维度的(它没有单位,因为 1/s / 1/s = 1)频率,并且应该允许您比较具有不同心跳频率的信号,因为它不会扭曲它。

这或多或少是我建议的效果。请注意,我不知道计算心跳频率,我只是使用 f_beat=0.8 1/s。也许你可以改进它。

信号作为频率的函数:

信号作为维度频率的函数:

希望这能有所帮助。

【讨论】:

就像@Finn 说的我想在时间轴上拉伸曲线,以便两个信号的心跳都达到 60BPM,我看不出f / f_beat 有什么帮助 因为如果你使用 f_beat=60BPM 那么你知道它对于每个信号都会变为 1。我不认为 streatching 信号是比较它们的好方法 我不想比较它们,我希望它们在两个信号上具有相同的 BPM。例如,第一个有 79BPM,第二个有 94BPM,我想保持相同的信号,但有 60BPM。不知道是不是很清楚.. 我看不出有什么区别。但也许你更愿意pad 你的信号。但我不确定可能的代码实现 再次。如果您对两个信号都使用 f_beat=60BPM,我认为这将等同于您尝试实现的目标。

以上是关于心脏 BPM 标准化 - Matlab的主要内容,如果未能解决你的问题,请参考以下文章

谁来一统BPM江湖?

谁来一统BPM江湖?

谁来一统BPM江湖?

Liferay7 BPM门户开发之38: OSGi Bndtools开发入门

Activiti - 新一代的开源 BPM 引擎 (zhuan)

Activiti - 新一代的开源 BPM 引擎 (zhuan)