14 long long rounding = 0;
15 const int32_t final_shift = fir->
shift - 15;
18 if (fir->
shift >= 0) {
19 rounding = (rounding >> fir->
shift) & 0xFFFFFFFFFF;
21 rounding = (rounding << (-fir->
shift)) & 0xFFFFFFFFFF;
26 for (
int i = 0; i < input_len; i++) {
30 long long acc = rounding;
35 for (
int n = 0;
n < fir->
pos;
n++) {
39 if (final_shift > 0) {
40 output[result++] = (int16_t)(acc << final_shift);
42 output[result++] = (int16_t)(acc >> (-final_shift));
int32_t dsps_firmr_s16_ansi(fir_s16_t *fir, const int16_t *input, int16_t *output, int32_t input_len)
16 bit signed fixed point multi-rate FIR filter