0
1
mirror of https://github.com/radio95-rnt/fm95.git synced 2026-02-27 03:23:54 +01:00

quadrature based on cosine

This commit is contained in:
2024-12-30 12:47:06 +01:00
parent 4be9964673
commit 6b9be41840

View File

@@ -39,9 +39,6 @@ void float_array_to_s16le(const float *input, int16_t *output, size_t num_sample
#ifndef M_2PI #ifndef M_2PI
#define M_2PI (3.14159265358979323846 * 2.0) #define M_2PI (3.14159265358979323846 * 2.0)
#endif #endif
#ifndef M_PI_2
#define M_PI_2 (3.14159265358979323846 / 2.0)
#endif
typedef struct { typedef struct {
float phase; float phase;
@@ -51,20 +48,19 @@ typedef struct {
void init_oscillator(Oscillator *osc, float frequency, float sample_rate) { void init_oscillator(Oscillator *osc, float frequency, float sample_rate) {
osc->phase = 0.0f; osc->phase = 0.0f;
osc->quadrature_phase = M_PI_2; // 90 degrees phase shift
osc->phase_increment = (M_2PI * frequency) / sample_rate; osc->phase_increment = (M_2PI * frequency) / sample_rate;
} }
float get_next_sample(Oscillator *osc, int quadrature) { float get_next_sample(Oscillator *osc, int quadrature) {
float sample; float sample;
if (quadrature) { if (quadrature) {
sample = sinf(osc->quadrature_phase); sample = sinf(osc->phase);
osc->quadrature_phase += osc->phase_increment; osc->phase += osc->phase_increment;
if (osc->quadrature_phase >= M_2PI) { if (osc->phase >= M_2PI) {
osc->quadrature_phase -= M_2PI; osc->phase -= M_2PI;
} }
} else { } else {
sample = sinf(osc->phase); sample = cosf(osc->phase);
osc->phase += osc->phase_increment; osc->phase += osc->phase_increment;
if (osc->phase >= M_2PI) { if (osc->phase >= M_2PI) {
osc->phase -= M_2PI; osc->phase -= M_2PI;