|
|
#include "FIR.h"
/*360hz 0.51Hz~8.9Hz 20190925*/ #define taps 32
static const float coefficients[taps] = {0.012177,0.01599,0.019905,0.02387,0.027827,0.031719,0.035487,0.039075,0.042426,0.045488,0.048212,0.050553,0.052475,0.053944,0.054937,0.055438,0.055438,0.054937,0.053944,0.052475,0.050553,0.048212,0.045488,0.042426,0.039075,0.035487,0.031719,0.027827,0.02387,0.019905,0.01599,0.012177};
static float buffer[taps]; unsigned offset;
float FIR_filter(float input) { const float *coeff = coefficients; const float *coeff_end = coefficients + taps;
float *buf_val = buffer + offset;
*buf_val = input; float output_ = 0;
while (buf_val >= buffer) { output_ += *buf_val-- * *coeff++; }
buf_val = buffer + taps - 1;
while (coeff < coeff_end) { output_ += *buf_val-- * *coeff++; }
if (++offset >= taps) { offset = 0; }
return output_; }
void FIR_reset_buffer() { memset(buffer, 0, sizeof(float) * taps); offset = 0; }
|