76 FIR(
const T (&
b)[
B],
const T factor = 1.0) : lenB(
B), factor(factor) {
83 coeff_b.resize(2 * lenB - 1);
84 for (
uint16_t i = 0; i < 2 * lenB - 1; i++) {
85 coeff_b[i] =
b[(2 * lenB - 1 - i) % lenB];
91 for (
uint16_t i = 0; i < lenB; i++) x[i] = 0;
97 T*
b_shift = &coeff_b[lenB - i_b - 1];
98 for (
uint16_t i = 0; i < lenB; i++) {
102 if (i_b == lenB) i_b = 0;
105 if (!(std::is_same<T, float>::value || std::is_same<T, double>::value)) {
137 template <
size_t B,
size_t A>
139 : factor(factor), lenB(
B), lenA(
A - 1) {
142 coeff_b.resize(2 * lenB - 1);
143 coeff_a.resize(2 * lenA - 1);
146 for (
uint16_t i = 0; i < 2 * lenB - 1; i++) {
147 coeff_b[i] =
b[(2 * lenB - 1 - i) % lenB] /
a0;
149 for (
uint16_t i = 0; i < 2 * lenA - 1; i++) {
150 coeff_a[i] =
a[(2 * lenA - 2 - i) % lenA] /
a0;
157 for (
uint16_t i = 0; i < lenB; i++) x[i] = 0;
158 for (
uint16_t i = 0; i < lenA; i++) y[i] = 0;
164 T*
b_shift = &coeff_b[lenB - i_b - 1];
167 T*
a_shift = &coeff_a[lenA - i_a - 1];
169 for (
uint16_t i = 0; i < lenB; i++) {
172 for (
uint16_t i = 0; i < lenA; i++) {
179 if (i_b == lenB) i_b = 0;
181 if (i_a == lenA) i_a = 0;
184 if (!(std::is_same<T, float>::value || std::is_same<T, double>::value)) {
185 filtered = filtered / factor;
189 filtered = filtered / factor;
224 : b_0(
b[0]), b_1(
b[1]), b_2(
b[2]), a_1(
a[0]), a_2(
a[1]) {}
232 : b_0(gain *
b[0] /
a[0]),
233 b_1(gain *
b[1] /
a[0]),
234 b_2(gain *
b[2] /
a[0]),
238 void reset()
override { x_0 = x_1 = y_1 = y_2 = 0; }
293 :
b_0(gain *
b[0] /
a[0]),
294 b_1(gain *
b[1] /
a[0]),
295 b_2(gain *
b[2] /
a[0]),
342 begin(frequency, sampleRate,
q);
344 void begin(
float frequency,
float sampleRate,
float q = 0.7071f) {
345 T w0 = frequency * (2.0f *
PI / sampleRate);
349 T scale = 1.0 / (1.0 +
alpha);
377 begin(frequency, sampleRate,
q);
379 void begin(
float frequency,
float sampleRate,
float q = 0.7071f) {
380 T w0 = frequency * (2.0f *
PI / sampleRate);
384 T scale = 1.0 / (1.0 +
alpha);
413 begin(frequency, sampleRate,
q);
415 void begin(
float frequency,
float sampleRate,
float q = 1.0) {
416 T w0 = frequency * (2.0f *
PI / sampleRate);
420 T scale = 1.0 / (1.0 +
alpha);
450 begin(frequency, sampleRate,
q);
453 void begin(
float frequency,
float sampleRate,
float q = 1.0) {
454 T w0 = frequency * (2.0f *
PI / sampleRate);
458 T scale = 1.0 / (1.0 +
alpha);
492 void begin(
float frequency,
float sampleRate,
float gain,
493 float slope = 1.0f) {
494 T a = pow(10.0, gain / 40.0f);
495 T w0 = frequency * (2.0f *
PI / sampleRate);
501 sqrt((pow(
a, 2.0) + 1.0) * (1.0 / (
float)
slope - 1.0) + 2.0 *
a);
538 void begin(
float frequency,
float sampleRate,
float gain,
539 float slope = 1.0f) {
540 T a = pow(10.0, gain / 40.0f);
541 T w0 = frequency * (2.0f *
PI / sampleRate);
547 sqrt((pow(
a, 2.0) + 1.0) * (1.0 / (
float)
slope - 1.0) + 2.0 *
a);
572template <
typename T,
size_t N>
576 for (
size_t i = 0; i < N; i++)
580 for (
size_t i = 0; i < N; i++) {
589 for (
size_t i = 0; i < N; i++)
601 for (
size_t i = 0; i < N; i++)
delete filters[i];
604 for (
Filter<T>*& filter : filters) filter->reset();
607 for (
Filter<T>*& filter : filters) value = filter->process(value);
615 for (
size_t i = 0; i < M; i++)
dest[i] =
src[i];
627template <
typename T,
size_t N>
631 for (
size_t i = 0; i < N; i++) {
632 this->filters[i] = filters[i];
638 if (filter !=
nullptr) filter->reset();
644 if (filter !=
nullptr) {
645 value = filter->process(value);
#define PI
Definition AudioEffectsSuite.h:27