22 void Init(
float* coefficients) {
25 _coefficients =
new float[_length];
27 HLog(
"Copied filter coefficients");
30 _taps =
new T[_length];
31 memset((
void *) _taps, 0, _length *
sizeof(T));
32 HLog(
"Allocated and initialized delay buffer for %d taps", _length);
36 inline T Filter(T value) {
43 for(
int k = 0; k < _length; k++ ) {
44 result += _taps[_head++] * _coefficients[k];
45 if( _head == _length ) {
51 _head = _head == 0 ? _length : _head;
65 inline T Filter(T* value,
int advance) {
67 T result = Filter(*value);
69 for(
int i = 1; i < advance; i ++ ) {
72 _taps[_head] = value[i * _skip];
75 _head = _head == 0 ? _length : _head;
90 HFir(
float *coefficients,
int length) : _length(length), _head(0), _spacing(1), _advance(1), _skip(1) {
92 HLog(
"HFir(float*, %d)", length);
113 HFir(
float *coefficients,
int length,
int spacing,
int advance,
int skip):
114 _length(length), _head(0), _spacing(spacing), _advance(advance), _skip(skip) {
116 HLog(
"HFir(float*, length=%d, spacing=%d, advance=%d, skip=%d)", length, spacing, advance, skip);
126 delete[] _coefficients;
135 inline void Filter(T *values, T* result,
size_t blocksize) {
138 for(
int i = 0; i < blocksize; i += _advance * _skip ) {
139 result[j] = Filter(&values[i], _advance);
140 j += (_spacing - 1) + (_advance * _skip);
152 if (length != _length) {
153 HError(
"It is not possible to assign a set of coefficients of different length than the length used at construction (%d)",
159 memcpy(_coefficients, coefficients, length *
sizeof(
float));
166 std::vector<float> coefficients;
167 for (
int i = 0; i < _length; i++) {
168 coefficients.push_back(_coefficients[i]);