Skip to content

File syn_biquad.h

File List > dsp > syn_biquad.h

Go to the documentation of this file

#ifndef SYN_BIQUAD_H
#define SYN_BIQUAD_H

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

#ifdef __cplusplus
extern "C" {
#endif

typedef struct {
    q16_t b0; 
    q16_t b1; 
    q16_t b2; 
    q16_t a1; 
    q16_t a2; 
    q16_t x1; 
    q16_t x2; 
    q16_t y1; 
    q16_t y2; 
} SYN_FilterBiquad;

void syn_filter_biquad_init(SYN_FilterBiquad *f, q16_t b0, q16_t b1, q16_t b2, q16_t a1, q16_t a2);

void syn_filter_biquad_reset(SYN_FilterBiquad *f);

q16_t syn_filter_biquad_update(SYN_FilterBiquad *f, q16_t sample);

void syn_filter_biquad_process_block(SYN_FilterBiquad *f, const q16_t *in, q16_t *out,
                                     uint16_t count);

void syn_filter_biquad_lowpass(SYN_FilterBiquad *f, q16_t fc, q16_t fs);

void syn_filter_biquad_highpass(SYN_FilterBiquad *f, q16_t fc, q16_t fs);

void syn_filter_biquad_bandpass(SYN_FilterBiquad *f, q16_t fc, q16_t fs, q16_t q);

void syn_filter_biquad_notch(SYN_FilterBiquad *f, q16_t fc, q16_t fs, q16_t q);

/* ── Cascaded Biquad Filter Bank ─────────────────────────────────────────── */

#define SYN_BIQUAD_CASCADE_MAX_STAGES 8

typedef struct {
    SYN_FilterBiquad stages[SYN_BIQUAD_CASCADE_MAX_STAGES];
    uint8_t num_stages;
} SYN_FilterBiquadCascade;

SYN_Status syn_filter_biquad_cascade_init(SYN_FilterBiquadCascade *c, uint8_t num_stages);

void syn_filter_biquad_cascade_reset(SYN_FilterBiquadCascade *c);

q16_t syn_filter_biquad_cascade_update(SYN_FilterBiquadCascade *c, q16_t sample);

void syn_filter_biquad_cascade_process_block(SYN_FilterBiquadCascade *c, const q16_t *in,
                                             q16_t *out, uint16_t count);

#ifdef __cplusplus
}
#endif

#endif /* SYN_BIQUAD_H */