MCX N94 微控制器具有集成的 DSP 加速器,加速处理光学心率传感信息

概述

诸如健身追踪器和智能手表之类的可穿戴设备通常采用光学传感器来测量佩戴者的生命体征。通过一种称为光电容积脉搏波描记法(PPG)的技术,这些传感器生成一个与受试者皮肤组织内血流和血容量变化相对应的信号。为了获得诸如心率、呼吸率、血氧饱和度甚至血压等合理的生命体征估计值,这个 PPG 信号必须经过不同程度的处理。由于心率是其中最容易获取的,下面展示的项目演示了使用光学传感器获取此值的一种简单方法。

尽管这种方法简单,但它也有一个权衡之处。它所采用的滤波操作计算量非常大,每个输入数据样本需要将近一百次乘法指令。在许多微控制器(MCU)上实现此算法将具有挑战性,并且可能需要做出进一步的权衡(例如,降低采样率)。然而,NXP MCX N94 MCU 具有集成的 DSP 加速器,这使得该算法能够快速执行,并为嵌入式设计者提供了更大的灵活性。继续阅读以获取有关此项目所选硬件的更多详细信息以及定义应用程序的固件概述。

硬件

图 1 展示了项目的运行情况。显然,它由三个元素组成:

图 1:用户使用演示项目获取心率信息。

FRDM-MCXN947

这个项目的基础是 FRDM-MCXN947 开发板,其具有 MCX N94x 系列 MCU。FRDM 平台是一种经济实惠的评估选项,优先考虑具有众多接头的 I/O 访问,并提供基本的原型设计功能,如按钮、LED 和外部闪存。FRDM-MCXN947 甚至包括一个 CAN 连接器、以太网连接器、温度传感器和触摸板。除了支持标准的 Arduino、mikroBUS 和 Pmod 外形尺寸外,还包括摄像头和 LCD 接头。SmartDMA / 摄像头接头与 CAMERA-OV7670 等摄像头模块兼容,FlexIO/LCD 接头与 LCD-PAR-S035 等显示器兼容。

这个项目利用 mikroBUS 和 LCD 接头与用户进行交互。Heart Rate 10 Click 板插入 mikroBUS 插座,从用户的手指收集 PPG 数据,而 LCD-PAR-S035 显示器用于展示自定义图形用户界面(GUI),其中经过后处理的 PPG 数据以实时图表的形式显示。

光学传感器

PPG 传感器的基本工作原理很简单:光从 LED 发射到皮肤组织中,其中一部分被循环血液吸收。由光电探测器测量从组织射出的光(通过反射或透射)的强度,从而可以观察到其强度随时间的变化。这种变化对应于心脏周期不同阶段的血流变化。

根据应用的不同(例如,正在测量哪些生命体征、光电探测器相对于光源的位置、受试者的活动水平),可以使用不同波长的光。光的波长越长,它在组织中的穿透就越深。例如,波长为 470nm(即蓝光)的光只能到达表皮中的毛细血管。波长为 570nm(即绿光)的光可以更深入地到达包含小动脉的真皮层。要到达位于皮下组织中的动脉,需要波长为 640nm 至 940nm(即红光和红外光)的光。许多 PPG 传感器使用多个 LED,这些 LED 快速依次开关以获取多个数据通道。图 2 提供了一个简化的图示,其中一个反射型传感器使用四个 LED 从人类指尖的不同深度收集数据。

图 2:利用多种波长光的反射型光学传感器的核心工作原理。

ADIMAX86916 光学传感器专为可穿戴和移动设备设计。

在其 3.5mm x 7.0mm x 1.5mm 的封装内集成了四个 LED(红外、红、绿和蓝);一个光电二极管;以及用于环境光消除、串扰消除和一些数字滤波的低噪声电路。通过允许主机配置使用哪些 LED、它们的排序顺序、每个 LED 的强度以及它们的脉冲宽度,实现了最大的灵活性。内部 ADC 具有 19 位分辨率,并且可以编程为高达每秒 3200 个样本(sps)的数据速率。数据存储在 32 个样本深度的 FIFO 中,直到主机处理器准备通过 I2C 总线检索它。

MikroElektronika 提供了 Heart Rate 10 Click 扩展板,作为与 MAX86916 传感器轻松接口的一种方式。除了传感器本身,它还包括一个 1.8V LDO、I2C 总线的电压电平转换器和中断信号的上拉电阻。该板通过 mikroBUS 插座连接到 FRDM-MCXN947 板,以建立与 MCU 的连接。

MCX N947

NXP的 MCX N 系列 MCU 针对需要高计算性能和低功耗的应用。可用的功能,如双 Arm Cortex-M33 内核、协处理器、加速器和智能外设,有助于加速、自主和并行操作。从而可以大大降低延迟和功耗。MCX N94x 是该系列中的顶级产品,包括所有上述功能,如其在图 3 中的框图所总结。

图 3:NXP的 MCX N94x MCU 的框图

对于这个项目特别感兴趣的是加速器部分中的一个块:PowerQuad DSP 协处理器和加速器。这个外设旨在协助 Cortex-M33 完成常见的数字信号处理(DSP)任务。如图 4 中的框图所示,它包含几个计算引擎,能够进行 FIR 滤波(即卷积)、FFT/IFFT 操作、矩阵操作(例如乘法、求逆、点积、缩放)、双二阶 IIR 滤波、三角函数、超越函数和用于反三角函数的 CORDIC(即 Volder 算法)。

图 4:NXP MCX N94x/54x 系列微控制器中 PowerQuad 数字信号处理器(DSP)加速器的框图。

PowerQuad 的每个引擎都使用四个浮点乘法累加器(MAC)块中的一些或全部,从而能够并行执行计算。例如,FIR 滤波引擎可以并行运行四个 MAC 操作,这显著加快了底层卷积操作。更快的卷积意味着更快的滤波,这反过来意味着 a)MCU 可以在低功耗状态下花费更多时间,或者 b)信号处理链可以变得更强大。

对于这个简单的项目,功耗不是主要关注的问题,所以我们选择(b)并使用 PowerQuad 对四个 PPG 数据通道中的每一个进行一个大型的 99 抽头 FIR 高通滤波器(HPF)滤波。这样,直流偏移和基线漂移将被消除,结果信号将以零为中心。虽然可以使用计算量较小的滤波方法实现此效果,但这会导致 PPG 波形的显著变形。尽管对于简单的心率检测这不一定是问题,但我们确实希望在 LCD 显示屏上绘制的 PPG 数据能够准确地显示与心脏活动相关的特征。

注意: 虽然增加更多的抽头确实可以提高滤波器性能,但除了增加计算时间外,它还存在另一个缺点。FIR 滤波器的群延迟是滤波器阶数的一半(N−1)/2,这意味着随着滤波器系数的数量增加,输出信号中引入的延迟也会增加。因此,我们使用的 99 抽头滤波器将 PPG 信号延迟了 49 个样本。虽然这对于我们的项目来说没问题,但由应用程序设计者来确定其特定系统中可以接受的延迟量。

固件

此应用的 MCUXpresso 项目可以在其 GitHub 存储库中找到。要找到实现数据收集、数据处理和 GUI 控制的高级应用代码,请导航到 source/lvgl_guider.c 文件中的 PpgTask () 函数。

PPG 数据采集和处理

在从 MAX86916 光学传感器收集数据之前,必须首先通过 I2C 总线修改其内部寄存器来对其进行配置。这样做很简单,并且在设备的数据手册中对这些寄存器有详细的说明。对于此应用,设备配置为依次照亮四个 LED 并测量每个的反射光强度,从而产生四个 PPG 数据通道。采样率设置为 800 sps,“样本平均” 设置为 16。这样,传感器将在内部对每 16 个样本进行平均,并将结果写入 FIFO 供 MCU 读取,从而产生 50 sps 的有效采样率。一旦将 17 个这样的样本写入 FIFO,就会在中断引脚上向 MCU 发送中断信号。传感器的接近功能也已启用。

启用接近功能后,红外 LED 将作为接近探测器起到双重作用,以确定传感器附近是否有物体。只有当物体足够靠近传感器时,它才会进入数据采集模式。在这种情况下,用户将手指放在传感器上会触发 LED 排序操作和 FIFO 中的样本数据积累。MCU 将通过中断引脚定期收到信号,以便在 FIFO 满之前从 FIFO 读取数据。如果物体远离传感器,它将自动退出数据采集模式以降低功耗。

一旦 MCU 从传感器的 FIFO 读取了一段样本数据,就会在上一节中描述的 PowerQuad DSP 协处理器的帮助下进行高通滤波。其结果如下图所示。请注意,原始波形(黑色)具有高直流偏移,并且信号的基线随时间漂移。通过衰减这些低频分量并使高频分量不受影响,我们得到了以零为中心的红色波形。还要注意,滤波后的 PPG 信号的形状没有明显失真。

图 5:从传感器获取的 PPG 数据进行高通滤波的示例

一旦收集并滤波了足够的样本,就可以用于估计用户的心率。虽然为此目的可以采用许多复杂的方法和算法,但为了简单起见,这个项目使用了一种非常直接的方法。它通过检测和时间标记负过零点作为索引单个心跳的方法来工作。然后,可以通过平均后续心跳之间的时间间隔并将此 “每个心跳的样本数” 指标转换为 “每分钟心跳数” 来轻松得出心率估计值。

图形用户界面

LCD 子板用于显示一个简单的 GUI,向用户展示最新的滤波后的 PPG 数据以及估计的心率值。它是使用NXP的 GUI Guider 工具设计的,该工具提供了一个拖放编辑器,用于放置和配置小部件,如图表、进度条、标签和图像。图 6 中的屏幕截图显示了此项目使用的小部件以及它们的布局方式。一旦 GUI 设计完成,该工具可用于生成要在 MCUXpresso 项目中实现的 C 代码。

图 6:用于设计此项目的 GUI 的NXP的 GUI Guider 工具的屏幕截图

该工具使用开源的 LVGL 图形库来实现 GUI 元素,应用代码使用其高级接口来控制 GUI 的行为并更新要显示的数据。这包括使用最新的 PPG 数据更新图表元素,使用最新的推导估计值更新心率标签,并触发各种动画以在不同的应用状态之间提供平滑过渡。实际上,由于 GUI Guider 生成的 ui_animation () 函数,动画的编码变得更简单。有了它,此应用中的每个动画都可以用一行代码实现。

如前所述,一旦用户将手指放在光学传感器上,此应用中的数据采集就会被触发。当 MCU 收集到初始样本时,进度条将按比例填充,直到超过滤波器的群延迟。一旦完全填充,进度条淡出,标签 / 图像淡入。然后,只要用户继续与传感器接触,四个图表将不断用滤波后的数据样本更新,每次检测到负过零点时都会更新心率值,右上角的心脏图像将定期通过缩放动画 “跳动”。

一旦用户移开手指并且光学传感器退出数据采集模式,GUI 的更新和动画就会冻结。重新放置手指会导致 GUI 重置并从头开始。

总结:

这个简单的项目仅仅触及了NXP MCX N94x 系列微控制器所能实现功能的皮毛。特别是 eIQ 中子神经网络处理器(NPU),通过大幅缩短嵌入式神经网络的推理时间,为许多先进的边缘人工智能应用打开了大门。例如,可以用卷积神经网络(CNN)或循环神经网络(RNN)模型来替代上述实现的简单心率估计算法。鉴于光电容积脉搏波(PPG)信号可能存在很大噪声,这种深度学习方法有可能提供更准确、更可靠的心率估算值。

当然,潜在应用的范围远远超出了医疗保健领域。该微控制器系列对于工业领域的电机控制和机器人技术挑战,以及监控摄像头和智能音箱等智能家居产品来说,是一个绝佳的解决方案。