summaryrefslogtreecommitdiffstats
path: root/src/lowpass.h
blob: 0f506837526f191093ea77d316f8c4b973ff41b1 (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
#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