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

xtos_signal_ssvep_feature

按取整频率 bin 汇总目标谐波功率和邻域噪声,计算 SNR 与 dB。

本页目录

声明

c
#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);

参数

参数类型说明
inputconst double *非 NULL 输入,至少 n 个 double;不修改但不检查 NaN/Inf。
nsize_t非零 2 的幂;作为内部 DFT 长度。
sample_rate_hzuint32_t采样率,单位 Hz,必须大于 0。
target_frequency_hzdouble目标频率,单位 Hz,需位于 (0, fs/2);未显式检查 finite。
harmonic_countsize_t目标谐波数量,必须大于 0,且最高谐波 bin 不得越界。
neighbor_binssize_t每侧邻居 bin 数,必须大于 0。
resultstruct xtos_ssvep_feature *非 NULL 输出结构,由调用方提供。

输出字段

字段类型含义
signal_powerdouble表示目标谐波 bin 的平方幅值功率和,无自动归一化。
noise_powerdouble表示有效邻居 bin 的平均功率。
snrdouble表示 signal_power / noise_power 的线性信噪比。
snr_dbdouble表示 10×log10(snr) 的信噪比,单位 dB。
target_binsize_t表示取整后的目标频率 bin 编号。
harmonics_usedsize_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 的头文件和实现编写。