66 FIR(
const T (&
b)[
B],
const T factor = 1.0) : lenB(
B), factor(factor) {
73 coeff_b.resize(2 * lenB - 1);
74 for (
uint16_t i = 0; i < 2 * lenB - 1; i++) {
75 coeff_b[i] =
b[(2 * lenB - 1 - i) % lenB];
82 T *
b_shift = &coeff_b[lenB - i_b - 1];
83 for (
uint8_t i = 0; i < lenB; i++) {
87 if (i_b == lenB) i_b = 0;
90 if (!(std::is_same<T, float>::value || std::is_same<T, float>::value)) {
120 template <
size_t B,
size_t A>
122 : factor(factor), lenB(
B), lenA(
A - 1) {
125 coeff_b.resize(2 * lenB - 1);
126 coeff_a.resize(2 * lenA - 1);
129 for (
uint16_t i = 0; i < 2 * lenB - 1; i++) {
130 coeff_b[i] =
b[(2 * lenB - 1 - i) % lenB] /
a0;
132 for (
uint16_t i = 0; i < 2 * lenA - 1; i++) {
133 coeff_a[i] =
a[(2 * lenA - 2 - i) % lenA] /
a0;
141 T *
b_shift = &coeff_b[lenB - i_b - 1];
144 T *
a_shift = &coeff_a[lenA - i_a - 1];
146 for (
uint8_t i = 0; i < lenB; i++) {
149 for (
uint8_t i = 0; i < lenA; i++) {
156 if (i_b == lenB) i_b = 0;
158 if (i_a == lenA) i_a = 0;
161 if (!(std::is_same<T, float>::value || std::is_same<T, float>::value)) {
162 filtered = filtered / factor;
166 filtered = filtered / factor;
201 : b_0(
b[0]), b_1(
b[1]), b_2(
b[2]), a_1(
a[0]), a_2(
a[1]) {}
209 : b_0(gain *
b[0] /
a[0]),
210 b_1(gain *
b[1] /
a[0]),
211 b_2(gain *
b[2] /
a[0]),
267 :
b_0(gain *
b[0] /
a[0]),
268 b_1(gain *
b[1] /
a[0]),
269 b_2(gain *
b[2] /
a[0]),
313 begin(frequency, sampleRate,
q);
315 void begin(
float frequency,
float sampleRate,
float q = 0.7071f) {
316 T w0 = frequency * (2.0f *
PI / sampleRate);
320 T scale = 1.0 / (1.0 +
alpha);
347 begin(frequency, sampleRate,
q);
349 void begin(
float frequency,
float sampleRate,
float q = 0.7071) {
350 T w0 = frequency * (2.0f *
PI / sampleRate);
354 T scale = 1.0 / (1.0 +
alpha);
381 begin(frequency, sampleRate,
q);
383 void begin(
float frequency,
float sampleRate,
float q = 1.0) {
384 T w0 = frequency * (2.0f *
PI / sampleRate);
388 T scale = 1.0 / (1.0 +
alpha);
415 begin(frequency, sampleRate,
q);
418 void begin(
float frequency,
float sampleRate,
float q = 1.0) {
419 T w0 = frequency * (2.0f *
PI / sampleRate);
423 T scale = 1.0 / (1.0 +
alpha);
454 void begin(
float frequency,
float sampleRate,
float gain,
455 float slope = 1.0f) {
456 T a = pow(10.0, gain / 40.0f);
457 T w0 = frequency * (2.0f *
PI / sampleRate);
463 sqrt((pow(
a, 2.0) + 1.0) * (1.0 / (
float)
slope - 1.0) + 2.0 *
a);
496 void begin(
float frequency,
float sampleRate,
float gain,
497 float slope = 1.0f) {
498 T a = pow(10.0, gain / 40.0f);
499 T w0 = frequency * (2.0f *
PI / sampleRate);
505 sqrt((pow(
a, 2.0) + 1.0) * (1.0 / (
float)
slope - 1.0) + 2.0 *
a);
527template <
typename T,
size_t N>
531 for (
size_t i = 0; i < N; i++)
535 for (
size_t i = 0; i < N; i++) {
544 for (
size_t i = 0; i < N; i++)
554 for (
size_t i = 0; i < N; i++)
delete filters[i];
557 for (
Filter<T> *&filter : filters) value = filter->process(value);
565 for (
size_t i = 0; i < M; i++)
dest[i] =
src[i];
575template <
typename T,
size_t N>
579 for (
size_t i = 0; i < N; i++) {
580 this->filters[i] = filters[i];
586 if (filter !=
nullptr) {
587 value = filter->process(value);
#define PI
Definition AudioEffectsSuite.h:27