47 lines
1.4 KiB
C
47 lines
1.4 KiB
C
#ifndef SINE_GENERATOR_H
|
|
#define SINE_GENERATOR_H
|
|
|
|
#include <stdint.h>
|
|
#include <stdbool.h>
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
// 正弦波生成器结构体
|
|
typedef struct {
|
|
// 用户可调参数
|
|
float frequency; // 正弦波频率 (Hz)
|
|
float amplitude; // 幅值 (V)
|
|
|
|
// 内部状态
|
|
uint32_t sample_count; // 样本计数器
|
|
float sample_rate; // 采样率 (Hz)
|
|
bool is_running; // 是否正在运行
|
|
|
|
// 预计算正弦波查找表
|
|
float* sine_lookup_table; // 正弦波查找表
|
|
uint32_t table_size; // 查找表大小
|
|
uint32_t table_index; // 当前索引
|
|
} sine_generator_t;
|
|
|
|
// 函数声明
|
|
void sine_generator_init(sine_generator_t *generator, float sample_rate);
|
|
void sine_generator_set_frequency(sine_generator_t *generator, float frequency);
|
|
void sine_generator_set_amplitude(sine_generator_t *generator, float amplitude_mv);
|
|
void sine_generator_start(sine_generator_t *generator);
|
|
void sine_generator_stop(sine_generator_t *generator);
|
|
void sine_generator_reset(sine_generator_t *generator);
|
|
float sine_generator_get_next_sample(sine_generator_t *generator);
|
|
void sine_generator_cleanup(sine_generator_t *generator);
|
|
|
|
// 查找表管理函数
|
|
void sine_generator_generate_lookup_table(sine_generator_t *generator);
|
|
void sine_generator_free_lookup_table(sine_generator_t *generator);
|
|
|
|
#ifdef __cplusplus
|
|
}
|
|
#endif
|
|
|
|
#endif // SINE_GENERATOR_H
|