Skip to content

File syn_dds.h

File List > dsp > syn_dds.h

Go to the documentation of this file

#ifndef SYN_DDS_H
#define SYN_DDS_H

#include "../common/syn_defs.h"
#include "../util/syn_qmath.h"

#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>

#ifdef __cplusplus
extern "C" {
#endif

typedef enum {
    SYN_DDS_SINE = 0,     
    SYN_DDS_TRIANGLE = 1, 
    SYN_DDS_SAWTOOTH = 2, 
    SYN_DDS_SQUARE = 3,   
    SYN_DDS_NOISE = 4     
} SYN_DDS_Waveform;

typedef struct {
    SYN_DDS_Waveform type; 
    uint32_t phase;        
    uint32_t phase_step;   
    q16_t amplitude;       
    q16_t offset;          
    uint16_t duty_q16;     
    uint32_t rand_state;   
} SYN_DDS;

SYN_Status syn_dds_init(SYN_DDS *dds, SYN_DDS_Waveform type, uint32_t freq_hz,
                        uint32_t sample_rate_hz);

SYN_Status syn_dds_set_freq(SYN_DDS *dds, uint32_t freq_hz, uint32_t sample_rate_hz);

SYN_Status syn_dds_set_gain(SYN_DDS *dds, q16_t amplitude, q16_t offset);

SYN_Status syn_dds_set_duty(SYN_DDS *dds, float duty_pct);

q16_t syn_dds_step(SYN_DDS *dds);

SYN_Status syn_dds_fill_q16(SYN_DDS *dds, q16_t *buf, size_t count);

SYN_Status syn_dds_fill_u16(SYN_DDS *dds, uint16_t *buf, size_t count, uint16_t dac_center,
                            uint16_t dac_span);

#ifdef __cplusplus
}
#endif

#endif /* SYN_DDS_H */