我正试图通过MAX30101高灵敏度脉搏血氧计和心率传感器计算心率和外周毛细血管血氧饱和度(SPO2(。我知道当我处于HR模式时,我的样本有3个字节,而当我处于SPO2模式时,样本有6个字节。我不明白得到原始数据后该怎么办。
我知道,对于SpO2,我需要使用比值R=(ACred/DCred(/(ACir/DCir(,之后SpO2=104-17R(如本数据表所示:https://pdfserv.maximintegrated.com/en/an/AN6409.pdf),但我不知道如何获得AC I DC组件,也不知道如何获取HR。数据表中没有任何关于它的具体信息。有人能给我解释一下,或者举个例子吗?我只能返回原始数据。
以下是我为使用stm32ide读取一个示例而创建的部分代码:
void max_readFIFO_one_sample(uint8_t mode)
{
if (mode= hr)
{
ret= HAL_I2C_Master_Transmit(&hi2c1, MAX_ADDRw, 0x05, 1, HAL_MAX_DELAY);
ret= HAL_I2C_Master_Receive(&hi2c1, MAX_ADDRr, temp, 3, HAL_MAX_DELAY);
}
else if (mode == spo2)
{
uint8_t temp[6] = {0};
ret= HAL_I2C_Master_Transmit(&hi2c1, MAX_ADDRw, 0x05, 1, HAL_MAX_DELAY);
ret= HAL_I2C_Master_Receive(&hi2c1, MAX_ADDRr, temp, 6, HAL_MAX_DELAY);
}
}
您必须使用直流滤波,因为响应的电气特性会使其充满噪声。你需要找到一种方法来平滑产生的锯齿状曲线,这样你才能获得更稳定和可用的响应(更少的噪音(。你提到的这篇文章描述了一种方法,但也有其他方法,包括只取平均值。要点:为了获得有意义的结果,你需要将信号值的范围视为特定时间的特定信号值。你必须找到一种方法将模拟连续值转换为数字离散值。