File syn_filter.h¶
File List > dsp > syn_filter.h
Go to the documentation of this file
#ifndef SYN_FILTER_H
#define SYN_FILTER_H
#include "../util/syn_qmath.h"
#include <stdbool.h>
#include <stddef.h>
#include <stdint.h>
#ifdef __cplusplus
extern "C" {
#endif
/* ── Configuration ──────────────────────────────────────────────────────── */
#ifndef SYN_FILTER_MAX_WINDOW
#define SYN_FILTER_MAX_WINDOW 32
#endif
/* ── Moving Average ─────────────────────────────────────────────────────── */
typedef struct {
int16_t buf[SYN_FILTER_MAX_WINDOW];
int32_t sum;
uint8_t window;
uint8_t count;
uint8_t idx;
} SYN_FilterMA;
void syn_filter_ma_init(SYN_FilterMA *f, uint8_t window);
int16_t syn_filter_ma_update(SYN_FilterMA *f, int16_t sample);
void syn_filter_ma_reset(SYN_FilterMA *f);
/* ── Exponential Moving Average ─────────────────────────────────────────── */
typedef struct {
int32_t value;
uint8_t alpha;
bool primed;
} SYN_FilterEMA;
void syn_filter_ema_init(SYN_FilterEMA *f, uint8_t alpha);
int16_t syn_filter_ema_update(SYN_FilterEMA *f, int16_t sample);
void syn_filter_ema_reset(SYN_FilterEMA *f);
/* ── Median Filter ──────────────────────────────────────────────────────── */
typedef struct {
int16_t buf[SYN_FILTER_MAX_WINDOW];
uint8_t window;
uint8_t count;
uint8_t idx;
} SYN_FilterMedian;
void syn_filter_median_init(SYN_FilterMedian *f, uint8_t window);
int16_t syn_filter_median_update(SYN_FilterMedian *f, int16_t sample);
void syn_filter_median_reset(SYN_FilterMedian *f);
/* ── FIR Filter ─────────────────────────────────────────────────────────── */
typedef struct {
const q16_t *taps;
q16_t *history;
uint16_t num_taps;
uint16_t head;
} SYN_FilterFIR;
void syn_filter_fir_init(SYN_FilterFIR *f, const q16_t *taps, q16_t *history, uint16_t num_taps);
q16_t syn_filter_fir_update(SYN_FilterFIR *f, q16_t sample);
void syn_filter_fir_reset(SYN_FilterFIR *f);
#ifdef __cplusplus
}
#endif
#endif /* SYN_FILTER_H */