12 int32_t input_pos = 0;
13 long long rounding = 0;
14 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;
25 for (
int i = 0; i < len; i++) {
27 for (
int j = 0; j < fir->
decim - fir->
d_pos; j++) {
32 fir->
delay[fir->
pos++] = input[input_pos++];
36 long long acc = rounding;
40 acc += (int32_t)fir->
coeffs[coeff_pos--] * (int32_t)fir->
delay[
n];
42 for (
int n = 0;
n < fir->
pos ;
n++) {
43 acc += (int32_t)fir->
coeffs[coeff_pos--] * (int32_t)fir->
delay[
n];
46 if (final_shift > 0) {
47 output[result++] = (int16_t)(acc << final_shift);
49 output[result++] = (int16_t)(acc >> (-final_shift));
int32_t dsps_fird_s16_ansi(fir_s16_t *fir, const int16_t *input, int16_t *output, int32_t len)
16 bit signed fixed point Decimation FIR filter