Stimulate/components/signal_generators/include/ecg_generator.h

74 lines
2.6 KiB
C
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

#ifndef ECG_GENERATOR_H
#define ECG_GENERATOR_H
#include <stdint.h>
#include <stdbool.h>
#ifdef __cplusplus
extern "C" {
#endif
// ECG导联类型
typedef enum {
ECG_LEAD_I = 0, // I导联右手到左手
ECG_LEAD_II = 1, // II导联右手到左腿
} ecg_lead_t;
// ECG生成器结构体
typedef struct {
// 用户可调参数
float heart_rate; // 心率 (次/分)
float amplitude; // 幅值 (V)
ecg_lead_t lead; // 当前导联
// 内部状态
uint32_t sample_count; // 样本计数器
float sample_rate; // 采样率 (Hz)
bool is_running; // 是否正在运行
// 导联相关波形参数
float p_amp_ratio; // P波幅度比例
float q_amp_ratio; // Q波幅度比例
float r_amp_ratio; // R波幅度比例
float s_amp_ratio; // S波幅度比例
float t_amp_ratio; // T波幅度比例
// 固定时间参数 (保持正常ECG时序)
float p_width; // P波宽度
float qrs_width; // QRS波群宽度
float t_width; // T波宽度
// 预计算ECG查找表
float* ecg_lookup_table; // ECG查找表
uint32_t table_size; // 查找表大小
uint32_t table_index; // 当前索引
// 按比例重复采样
uint32_t ideal_table_size; // 理想表大小(理论周期点数)
uint32_t samples_per_point; // 每个表点对应的样本数
uint32_t sample_counter; // 当前表点的样本计数器
} ecg_generator_t;
// 函数声明
void ecg_generator_init(ecg_generator_t *generator, float sample_rate, ecg_lead_t lead);
void ecg_generator_set_heart_rate(ecg_generator_t *generator, float heart_rate);
void ecg_generator_set_amplitude(ecg_generator_t *generator, float amplitude_mv); // 直接输入mV值内部自动转换
void ecg_generator_set_lead(ecg_generator_t *generator, ecg_lead_t lead); // 设置导联
void ecg_generator_start(ecg_generator_t *generator);
void ecg_generator_stop(ecg_generator_t *generator);
void ecg_generator_reset(ecg_generator_t *generator);
float ecg_generator_get_next_sample(ecg_generator_t *generator);
void ecg_generator_generate_lookup_table(ecg_generator_t *generator);
void ecg_generator_free_lookup_table(ecg_generator_t *generator);
void ecg_generator_cleanup(ecg_generator_t *generator);
void ecg_param_set(ecg_generator_t *generator, float amplitude_mv, float heart_rate);
// 内部函数声明
void ecg_generator_set_lead_parameters(ecg_generator_t *generator, ecg_lead_t lead);
float ecg_generator_calculate_sample_realtime(ecg_generator_t *generator);
#ifdef __cplusplus
}
#endif
#endif // ECG_GENERATOR_H