首页 > 解决方案 > .wav 文件中的心率 (BPM) 计算

问题描述

我有一个数字听诊器,我可以用安卓手机轻松录制人的心音,而且很清楚,我可以从录制的文件中清楚地听到 lub-dub(s1-S2)。

我想计算录制音频的心率,有没有办法从音频文件计算 BPM?

我在 Kotlin 中编写了 Android 应用程序,并在 java 中编写了一些部分。

提前致谢

标签: javaandroidkotlinaudioaudio-processing

解决方案


首先,获取数据的 PCM 值流(例如,从 -1 到 1 的浮点数,或者如果您的数据是 16 位,则可能是从 -32768 到 32767 的短整数)。我假设签署了 PCM。

其次,对数据应用 RMS(均方根)函数,以获得数据过程中体积的相对功率,并寻找峰值。我假设每个“重击”都是一个相对响度的点,并且“重击”之间的音频音量较小。

第三,计算峰值之间的帧数。使用您的采样率,您可以从中得出时间值。

IDK Android/Kotlin 系统如何提供对 PCM 的访问的细节。很可能它将采用根据音频格式编码的字节流的形式。例如,单声道、44100 fps、16 位、小端。使用 Java,TargetDataLine可能会涉及到 a。

SO 有解释如何将字节转换为 PCM 的问题。

SO 也有关于如何将 RMS 函数应用于 PCM 的问题。涉及一些聚合,因为它涉及计算移动平均线。

我不知道频率分析工具是否有用。心跳的频率非常低,例如每秒 1 或 2 次。我们甚至听不到每秒 20 以下的频率。但是有可能的工具可以在这么低的频率范围内工作。


推荐阅读