/* 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 accurary, 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_ */