1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
|
#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 */
signed char lpf_init();
void lpf_close();
float lpf_filter(float input);
void lpf_update(float resonance, float cutoff, int samplerate);
#endif
|