XTOS / OPEN SOURCE REAL-TIME SYSTEMOPEN SOURCE · VERSION 0.9.0 · BUILD FROM SOURCE
libxtos-signalxtos_signal_p300_feature

xtos_signal_p300_feature

从刺激前基线和毫秒窗口计算中心化正峰、z 分数、能量和相对潜伏期。

本页目录

声明

c
#include <xtos/signal.h>

int xtos_signal_p300_feature(const double *input,
                             size_t n,
                             uint32_t sample_rate_hz,
                             size_t baseline_samples,
                             uint32_t window_start_ms,
                             uint32_t window_end_ms,
                             double detection_z_threshold,
                             struct xtos_p300_feature *result);

参数

参数类型说明
inputconst double *非 NULL 数组,至少 n 项;函数不修改输入。
nsize_t样本数;不要求是 2 的幂。
sample_rate_hzuint32_t采样率,单位 Hz,必须大于 0。
baseline_samplessize_t刺激前基线长度,须满足 2≤baseline_samples<n。
window_start_msuint32_t相对刺激起点的窗口开始,单位毫秒,必须小于结束值。
window_end_msuint32_t相对刺激起点的窗口结束,单位毫秒;结束点不包含。
detection_z_thresholddouble有限且大于 0 的检测阈值。
resultstruct xtos_p300_feature *非 NULL 输出结构,由调用方提供。

输出字段

字段类型含义
baseline_meandouble表示基线样本的平均值,单位与 input 相同。
baseline_stddevdouble表示基线总体标准差,单位与 input 相同。
peak_amplitudedouble表示窗口内相对基线的最大正向幅值,单位与 input 相同。
peak_latency_msdouble表示峰值相对刺激起点的潜伏期,单位毫秒。
peak_z_scoredouble表示 peak_amplitude / baseline_stddev 的 z 分数。
window_energydouble表示窗口内中心化样本平方和,单位为 input 单位的平方。
peak_indexsize_t表示 input 中峰值样本的绝对索引。
detectedint表示 peak_z_score 是否达到 detection_z_threshold;达到为 1,否则为 0。

返回值

成功返回 0 并写入 result;失败返回 -1。detected 仅表示 peak_z_score 达到阈值。

错误

errno条件
EINVAL参数、舍入后的窗口越界,或被检查的基线/窗口样本含 NaN/Inf。
EDOM基线标准差为 0 或非有限。

注意事项

  • 毫秒转样本使用 (ms×fs+500)/1000;峰值取窗口内最大正向中心化值,等值保留最早索引。
  • 实现显式检查基线和窗口数值的 finite;窗口外样本不参与数值检查。
  • result 由调用方拥有,不分配堆内存;这是研究特征,不是诊断或校准结论。

示例

源码

本文按 OpenXTOS 提交 dd313955ad57542bcd2af8827157d1bbd0cf5e83 的头文件和实现编写。