【问题标题】:Heart BPM Normalization - Matlab心脏 BPM 标准化 - 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 文件?

标签: matlab


【解决方案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,我认为这将等同于您尝试实现的目标。
猜你喜欢
  • 2013-06-29
  • 2011-12-28
  • 2019-06-16
  • 2011-12-05
  • 2018-09-07
  • 2017-11-18
  • 1970-01-01
  • 2013-05-02
相关资源
最近更新 更多