ESP-IDF Firmware
Firmware architecture and call graph
Loading...
Searching...
No Matches
dsps_firmr_f32_ansi.c File Reference
#include "dsps_fir.h"
#include "dsp_common.h"
#include <malloc.h>
#include "dsp_tests.h"
Include dependency graph for dsps_firmr_f32_ansi.c:

Go to the source code of this file.

Functions

int dsps_firmr_f32_ansi (fir_f32_t *fir, const float *input, float *output, int input_len)
 32 bit floating point multi-rate FIR filter

Function Documentation

◆ dsps_firmr_f32_ansi()

int dsps_firmr_f32_ansi ( fir_f32_t * fir,
const float * input,
float * output,
int input_len )

32 bit floating point multi-rate FIR filter

Function implements FIR filter with decimation The extension (_ansi) uses ANSI C and could be compiled and run on any platform. The extension (_ae32) is optimized for ESP32 chip.

Parameters
firpointer to fir filter structure, that must be initialized before
inputinput array
outputarray with the result of the FIR filter
input_lenlength of the input array
Returns
  • amount of samples stored in the output array
  • depends on the previous state value
  • could be [0..len*intepr/decimation]

Definition at line 14 of file dsps_firmr_f32_ansi.c.

15{
16 int m = fir->start_pos;
17 int result = 0;
18
19 for (int i = 0; i < input_len; i++) {
20 fir->delay[fir->pos] = input[i];
21
22 for (m = fir->start_pos; m < fir->interp; m += fir->decim) {
23 float fir_sum = 0;
24 int coeff_pos = 0;
25 for (int n = fir->pos; n < fir->delay_size; n++) {
26 fir_sum += fir->delay[n] * fir->coeffs[coeff_pos++ * fir->interp + m];
27 }
28 for (int n = 0; n < fir->pos; n++) {
29 fir_sum += fir->delay[n] * fir->coeffs[coeff_pos++ * fir->interp + m];
30 }
31 output[result++] = fir_sum;
32 }
33 fir->start_pos = m - fir->interp;
34
35 fir->pos--;
36 if (fir->pos < 0) {
37 fir->pos = fir->delay_size - 1;
38 }
39 }
40 return result;
41}
int interp
Definition dsps_fir.h:42
float * coeffs
Definition dsps_fir.h:30
int pos
Definition dsps_fir.h:33
float * delay
Definition dsps_fir.h:31
int start_pos
Definition dsps_fir.h:44
int delay_size
Interpolation parameters.
Definition dsps_fir.h:41
int decim
Definition dsps_fir.h:34
const int m
Definition test_mmult.c:16
const int n
Definition test_mmult.c:17

References fir_f32_s::coeffs, fir_f32_s::decim, fir_f32_s::delay, fir_f32_s::delay_size, fir_f32_s::interp, m, n, fir_f32_s::pos, and fir_f32_s::start_pos.