58 lines
1.5 KiB
C
58 lines
1.5 KiB
C
/* Copyright (c) 2013 The Chromium OS Authors. All rights reserved.
|
|
* Use of this source code is governed by a BSD-style license that can be
|
|
* found in the LICENSE file.
|
|
*/
|
|
|
|
#ifndef BIQUAD_H_
|
|
#define BIQUAD_H_
|
|
|
|
#ifdef __cplusplus
|
|
extern "C" {
|
|
#endif
|
|
|
|
/* The biquad filter parameters. The transfer function H(z) is (b0 + b1 * z^(-1)
|
|
* + b2 * z^(-2)) / (1 + a1 * z^(-1) + a2 * z^(-2)). The previous two inputs
|
|
* are stored in x1 and x2, and the previous two outputs are stored in y1 and
|
|
* y2.
|
|
*
|
|
* We use double during the coefficients calculation for better accuracy, but
|
|
* float is used during the actual filtering for faster computation.
|
|
*/
|
|
struct biquad {
|
|
float b0, b1, b2;
|
|
float a1, a2;
|
|
float x1, x2;
|
|
float y1, y2;
|
|
};
|
|
|
|
/* The type of the biquad filters */
|
|
enum biquad_type {
|
|
BQ_NONE,
|
|
BQ_LOWPASS,
|
|
BQ_HIGHPASS,
|
|
BQ_BANDPASS,
|
|
BQ_LOWSHELF,
|
|
BQ_HIGHSHELF,
|
|
BQ_PEAKING,
|
|
BQ_NOTCH,
|
|
BQ_ALLPASS
|
|
};
|
|
|
|
/* Initialize a biquad filter parameters from its type and parameters.
|
|
* Args:
|
|
* bq - The biquad filter we want to set.
|
|
* type - The type of the biquad filter.
|
|
* frequency - The value should be in the range [0, 1]. It is relative to
|
|
* half of the sampling rate.
|
|
* Q - Quality factor. See Web Audio API for details.
|
|
* gain - The value is in dB. See Web Audio API for details.
|
|
*/
|
|
void biquad_set(struct biquad *bq, enum biquad_type type, double freq, double Q,
|
|
double gain);
|
|
|
|
#ifdef __cplusplus
|
|
} /* extern "C" */
|
|
#endif
|
|
|
|
#endif /* BIQUAD_H_ */
|