forked from Qortal/Brooklyn
You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
51 lines
977 B
51 lines
977 B
/* SPDX-License-Identifier: GPL-2.0-or-later */ |
|
/* |
|
* SpanDSP - a series of DSP components for telephony |
|
* |
|
* biquad.h - General telephony bi-quad section routines (currently this just |
|
* handles canonic/type 2 form) |
|
* |
|
* Written by Steve Underwood <[email protected]> |
|
* |
|
* Copyright (C) 2001 Steve Underwood |
|
* |
|
* All rights reserved. |
|
*/ |
|
|
|
struct biquad2_state { |
|
int32_t gain; |
|
int32_t a1; |
|
int32_t a2; |
|
int32_t b1; |
|
int32_t b2; |
|
|
|
int32_t z1; |
|
int32_t z2; |
|
}; |
|
|
|
static inline void biquad2_init(struct biquad2_state *bq, |
|
int32_t gain, int32_t a1, int32_t a2, int32_t b1, int32_t b2) |
|
{ |
|
bq->gain = gain; |
|
bq->a1 = a1; |
|
bq->a2 = a2; |
|
bq->b1 = b1; |
|
bq->b2 = b2; |
|
|
|
bq->z1 = 0; |
|
bq->z2 = 0; |
|
} |
|
|
|
static inline int16_t biquad2(struct biquad2_state *bq, int16_t sample) |
|
{ |
|
int32_t y; |
|
int32_t z0; |
|
|
|
z0 = sample * bq->gain + bq->z1 * bq->a1 + bq->z2 * bq->a2; |
|
y = z0 + bq->z1 * bq->b1 + bq->z2 * bq->b2; |
|
|
|
bq->z2 = bq->z1; |
|
bq->z1 = z0 >> 15; |
|
y >>= 15; |
|
return y; |
|
}
|
|
|