使用斜率的C语言微控制器峰值检测



我正在使用LED和接收器制作手指体积描记仪(FP)。传感器产生模拟脉冲波形,经过滤波、放大并馈入范围为 3.3-0V 的微控制器输入。该信号被转换为其数字形式。

扫描速率为8MHz,处理器频率为26MHz,精度为10或8位。

我在想出一种强大的峰值检测方法时遇到了问题。我希望能够从手指体积描记仪检测心脏脉搏。我已经设法使用阈值方法对心率进行了准确的测量。然而,FP对运动非常敏感,信号的偏移可以根据运动而变化。但是,信号的峰值仍然会显示出来,但电压偏移会有所不同。

因此,我提出了一种使用斜率检测峰值的峰值检测方法。例如,如果产生峰值,则最大值之前和之后的斜率将分别为正和负。

您认为这种方法的可行性如何?有没有更简单的方法使用微控制器执行峰值检测?

您仍然可以在移动设备时引入假峰检测。无论您是定时平均峰值持续时间还是应用 FFT(快速傅里叶变换),都会出现这种情况。

使用FFT,您应该能够忽略您正在考虑的频率范围之外的峰值(例如<30 bpm和> 300 bpm的峰值)。

正如肯尼所说,8MHz可能会压倒26MHz的芯片。如此高的采样率有什么特别的原因吗?

像一些评论一样,我也建议降低采样率,因为您现在只关心脉搏(即心率)。因此,假设您要查看静息心率,您将处于低于 1Hz 到 2Hz 的范围内(60 BPM = 1Hz),具体取决于受试者的健康状况、年龄等。

为了隔离感兴趣的频率范围,我还推荐一个简单的低阶数字滤波器。如果您可以访问 Matlab,则可以使用其滤波器设计和分析工具(FDATool 简介)来尝试数字滤波器设计。你会发现,数字滤波(wiki)的计算成本并不高,因为它是一个乘法和加法的问题。

为了回答您问题的检测部分,是的,在微控制器内对体积描记仪波形实施峰值检测当然是可行的。以您为例,基于斜率的峰值检测算法将对波形数据进行操作,搜索斜率的变化,本质上是斜率波形与零交叉的地方。

以下是有关应用程序需要考虑的其他一些事项:

    计算斜率
  • 可以有一个"扩散"(即,你是否找到相邻样本之间的斜率,或者样本之间相隔几个样本?
  • 如果您的峰值检测算法定位的峰值在生理意义上距离太近或相距太远,该怎么办?
  • 脉搏血氧仪(wiki)通常使用发出红光和红外光的LED。LED的频率如何影响体积描记仪?(提示:它可能并不重要,但我相信你会发现一个波长可以在你感兴趣的频率范围内产生更大的振幅。

当然,如果你进行文献搜索,你会发现各种潜在的算法,但我认为基于斜率的检测因其简单性而非常有用。希望对您有所帮助。

如果可以使用过零来检测周期,即使在 10 Hz 的 10 倍过采样下,也可以使用快速 n-脏边的线拟合来找到确切的周期,然后将该周期的新波样本与前一个波相减,得到直流偏移。 周期测量将具有采样率的精度。 对时间和振幅归一化数据进行操作会容易得多。

与FFT相比,这个想法在计算上是轻量级的,FFT仍然需要额外的数据处理。

最新更新