summaryrefslogtreecommitdiffstats
path: root/src/lowpass.h
blob: 6c9921277072febe9bd23ae3a816d172fe8ad81d (plain) (blame)
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
38
39
40
41
42
43
44
45
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