xtos_ signal_ ssvep_ feature
按取整频率 bin 汇总目标谐波功率和邻域噪声,计算 SNR 与 dB。
本页目录
声明
#include <xtos/signal.h>
int xtos_signal_ssvep_feature(const double *input,
size_t n,
uint32_t sample_rate_hz,
double target_frequency_hz,
size_t harmonic_count,
size_t neighbor_bins,
struct xtos_ssvep_feature *result);参数
| 参数 | 类型 | 说明 |
|---|---|---|
| input | const double * | 非 NULL 输入,至少 n 个 double;不修改但不检查 NaN/Inf。 |
| n | size_t | 非零 2 的幂;作为内部 DFT 长度。 |
| sample_rate_hz | uint32_t | 采样率,单位 Hz,必须大于 0。 |
| target_frequency_hz | double | 目标频率,单位 Hz,需位于 (0, fs/2);未显式检查 finite。 |
| harmonic_count | size_t | 目标谐波数量,必须大于 0,且最高谐波 bin 不得越界。 |
| neighbor_bins | size_t | 每侧邻居 bin 数,必须大于 0。 |
| result | struct xtos_ssvep_feature * | 非 NULL 输出结构,由调用方提供。 |
输出字段
| 字段 | 类型 | 含义 |
|---|---|---|
| signal_power | double | 表示目标谐波 bin 的平方幅值功率和,无自动归一化。 |
| noise_power | double | 表示有效邻居 bin 的平均功率。 |
| snr | double | 表示 signal_power / noise_power 的线性信噪比。 |
| snr_db | double | 表示 10×log10(snr) 的信噪比,单位 dB。 |
| target_bin | size_t | 表示取整后的目标频率 bin 编号。 |
| harmonics_used | size_t | 表示实际累加的目标谐波数量。 |
返回值
成功返回 0 并写入 result;失败返回 -1。signal_power 为目标 bin 之和,noise_power 为有效邻居平均值。
错误
| errno | 条件 |
|---|---|
| EINVAL | 参数为空、n 非 2 的幂、频率范围无效、目标 bin 为 0,或谐波 bin 越界。 |
| ENOMEM | 内部功率数组或 FFT 临时数组分配失败。 |
| EDOM | 没有有效邻居,或噪声功率不大于 0。 |
注意事项
- 实现内部为 power 和 FFT 分配堆内存;未检查输入或 target_frequency_hz 的 NaN/Inf,调用方必须先验证。
- 邻域重叠时同一噪声 bin 可能被多次计数;这不是 CCA、刺激识别或伪迹剔除。
示例
源码
本文按 OpenXTOS 提交 dd313955ad57542bcd2af8827157d1bbd0cf5e83 的头文件和实现编写。