xtos_ signal_ p300_ feature
从刺激前基线和毫秒窗口计算中心化正峰、z 分数、能量和相对潜伏期。
本页目录
声明
#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);参数
| 参数 | 类型 | 说明 |
|---|---|---|
| input | const double * | 非 NULL 数组,至少 n 项;函数不修改输入。 |
| n | size_t | 样本数;不要求是 2 的幂。 |
| sample_rate_hz | uint32_t | 采样率,单位 Hz,必须大于 0。 |
| baseline_samples | size_t | 刺激前基线长度,须满足 2≤baseline_samples<n。 |
| window_start_ms | uint32_t | 相对刺激起点的窗口开始,单位毫秒,必须小于结束值。 |
| window_end_ms | uint32_t | 相对刺激起点的窗口结束,单位毫秒;结束点不包含。 |
| detection_z_threshold | double | 有限且大于 0 的检测阈值。 |
| result | struct xtos_p300_feature * | 非 NULL 输出结构,由调用方提供。 |
输出字段
| 字段 | 类型 | 含义 |
|---|---|---|
| baseline_mean | double | 表示基线样本的平均值,单位与 input 相同。 |
| baseline_stddev | double | 表示基线总体标准差,单位与 input 相同。 |
| peak_amplitude | double | 表示窗口内相对基线的最大正向幅值,单位与 input 相同。 |
| peak_latency_ms | double | 表示峰值相对刺激起点的潜伏期,单位毫秒。 |
| peak_z_score | double | 表示 peak_amplitude / baseline_stddev 的 z 分数。 |
| window_energy | double | 表示窗口内中心化样本平方和,单位为 input 单位的平方。 |
| peak_index | size_t | 表示 input 中峰值样本的绝对索引。 |
| detected | int | 表示 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 的头文件和实现编写。