diff options
Diffstat (limited to 'src/lowpass.h')
-rw-r--r-- | src/lowpass.h | 46 |
1 files changed, 46 insertions, 0 deletions
diff --git a/src/lowpass.h b/src/lowpass.h new file mode 100644 index 0000000..6c99212 --- /dev/null +++ b/src/lowpass.h @@ -0,0 +1,46 @@ +#ifndef _LOWPASS_H +#define _LOWPASS_H + + +/* FILTER INFORMATION STRUCTURE FOR FILTER ROUTINES */ + +#define FILTER_SECTIONS 2 /* 2 filter sections for 24 db/oct filter */ + +typedef struct { + unsigned int length; /* size of filter */ + float history[2 * FILTER_SECTIONS]; /* history in filter */ + float *coef; /* pointer to coefficients of filter */ +} FILTER; + +typedef struct { + double a0, a1, a2; /* numerator coefficients */ + double b0, b1, b2; /* denominator coefficients */ +} BIQUAD; + +static BIQUAD ProtoCoef[FILTER_SECTIONS]; /* Filter prototype coefficients, + 1 for each filter section */ + +void szxform( + double *a0, double *a1, double *a2, /* numerator coefficients */ + double *b0, double *b1, double *b2, /* denominator coefficients */ + double fc, /* Filter cutoff frequency */ + double fs, /* sampling rate */ + double *k, /* overall gain factor */ + float *coef); /* pointer to 4 iir coefficients */ + + + +#ifdef __cplusplus + extern "C" { +#endif + + signed char LowPass_Init(); + void LowPass_Close(); + float LowPass_Filter(float input); + void LowPass_Update(float resonance, float cutoff, int samplerate); + +#ifdef __cplusplus + } +#endif + +#endif |