ESP-IDF Firmware
Firmware architecture and call graph
Loading...
Searching...
No Matches
dsps_fir.h
Go to the documentation of this file.
1/*
2 * SPDX-FileCopyrightText: 2018-2025 Espressif Systems (Shanghai) CO LTD
3 *
4 * SPDX-License-Identifier: Apache-2.0
5 */
6
7
8#ifndef _dsps_fir_H_
9#define _dsps_fir_H_
10
11
12#include "dsp_err.h"
13
14#include "dsps_fir_platform.h"
15#include "dsp_common.h"
16
17#ifdef __cplusplus
18extern "C"
19{
20#endif
21
29typedef struct fir_f32_s {
30 float *coeffs;
31 float *delay;
32 int N;
33 int pos;
34 int decim;
35 int16_t use_delay;
42 int interp;
46
54typedef struct fir_s16_s {
55 int16_t *coeffs;
56 int16_t *delay;
57 int16_t coeffs_len;
58 int16_t pos;
59 int16_t decim;
60 int16_t d_pos;
61 int16_t shift;
62 int32_t *rounding_buff;
63 int32_t rounding_val;
64 int16_t free_status;
65
71 int16_t delay_size;
72 int16_t interp;
73 int16_t interp_pos;
74 int16_t start_pos;
76
92esp_err_t dsps_fir_init_f32(fir_f32_t *fir, float *coeffs, float *delay, int coeffs_len);
93
109esp_err_t dsps_fird_init_f32(fir_f32_t *fir, float *coeffs, float *delay, int N, int decim);
110
128esp_err_t dsps_fird_init_s16(fir_s16_t *fir, int16_t *coeffs, int16_t *delay, int16_t coeffs_len, int16_t decim, int16_t start_pos, int16_t shift);
129
130
148esp_err_t dsps_fir_f32_ansi(fir_f32_t *fir, const float *input, float *output, int len);
149esp_err_t dsps_fir_f32_ae32(fir_f32_t *fir, const float *input, float *output, int len);
150esp_err_t dsps_fir_f32_aes3(fir_f32_t *fir, const float *input, float *output, int len);
152
169int dsps_fird_f32_ansi(fir_f32_t *fir, const float *input, float *output, int len);
170int dsps_fird_f32_ae32(fir_f32_t *fir, const float *input, float *output, int len);
171int dsps_fird_f32_aes3(fir_f32_t *fir, const float *input, float *output, int len);
172int dsps_fird_f32_arp4(fir_f32_t *fir, const float *input, float *output, int len);
174
191int32_t dsps_fird_s16_ansi(fir_s16_t *fir, const int16_t *input, int16_t *output, int32_t len);
192int32_t dsps_fird_s16_ae32(fir_s16_t *fir, const int16_t *input, int16_t *output, int32_t len);
193int32_t dsps_fird_s16_aes3(fir_s16_t *fir, const int16_t *input, int16_t *output, int32_t len);
194int32_t dsps_fird_s16_arp4(fir_s16_t *fir, const int16_t *input, int16_t *output, int32_t len);
196
215esp_err_t dsps_firmr_init_f32(fir_f32_t *fir, float *coeffs, float *delay, int length, int interp, int decim, int start_pos );
217
237esp_err_t dsps_firmr_init_s16(fir_s16_t *fir, int16_t *coeffs, int16_t *delay, int16_t length, int16_t interp, int16_t decim, int16_t start_pos, int16_t shift);
239
259int dsps_firmr_f32_ansi(fir_f32_t *fir, const float *input, float *output, int input_len);
261
278int32_t dsps_firmr_s16_ansi(fir_s16_t *fir, const int16_t *input, int16_t *output, int32_t input_len);
280
281
299
300
314
315
329esp_err_t dsps_16_array_rev(int16_t *arr, int16_t len);
331
332#ifdef __cplusplus
333}
334#endif
335
336
337#if CONFIG_DSP_OPTIMIZED
338
339#if (dsps_fir_f32_ae32_enabled == 1)
340#define dsps_fir_f32 dsps_fir_f32_ae32
341#elif (dsps_fir_f32_aes3_enabled == 1)
342#define dsps_fir_f32 dsps_fir_f32_aes3
343#else
344#define dsps_fir_f32 dsps_fir_f32_ansi
345#endif
346
347#if (dsps_fird_f32_aes3_enabled == 1)
348#define dsps_fird_f32 dsps_fird_f32_aes3
349#define dsps_firmr_f32 dsps_firmr_f32_ansi
350#elif (dsps_fird_f32_ae32_enabled == 1)
351#define dsps_fird_f32 dsps_fird_f32_ae32
352#define dsps_firmr_f32 dsps_firmr_f32_ansi
353#elif (dsps_fird_f32_arp4_enabled == 1)
354#define dsps_fird_f32 dsps_fird_f32_arp4
355#define dsps_firmr_f32 dsps_firmr_f32_ansi
356#else
357#define dsps_fird_f32 dsps_fird_f32_ansi
358#define dsps_firmr_f32 dsps_firmr_f32_ansi
359#endif
360
361
362#if (dsps_fird_s16_ae32_enabled == 1)
363#define dsps_fird_s16 dsps_fird_s16_ae32
364#define dsps_firmr_s16 dsps_firmr_s16_ansi
365#elif (dsps_fird_s16_aes3_enabled == 1)
366#define dsps_fird_s16 dsps_fird_s16_aes3
367#define dsps_firmr_s16 dsps_firmr_s16_ansi
368#elif (dsps_fird_s16_arp4_enabled == 1)
369#define dsps_fird_s16 dsps_fird_s16_arp4
370#define dsps_firmr_s16 dsps_firmr_s16_ansi
371#else
372#define dsps_fird_s16 dsps_fird_s16_ansi
373#define dsps_firmr_s16 dsps_firmr_s16_ansi
374#endif
375
376#else // CONFIG_DSP_OPTIMIZED
377
378#define dsps_fir_f32 dsps_fir_f32_ansi
379#define dsps_fird_f32 dsps_fird_f32_ansi
380#define dsps_firmr_f32 dsps_firmr_f32_ansi
381#define dsps_fird_s16 dsps_fird_s16_ansi
382#define dsps_firmr_s16 dsps_firmr_s16_ansi
383
384#endif // CONFIG_DSP_OPTIMIZED
385
386#endif // _dsps_fir_H_
int dsps_fird_f32_aes3(fir_f32_t *fir, const float *input, float *output, int len)
int dsps_fird_f32_ansi(fir_f32_t *fir, const float *input, float *output, int len)
32 bit floating point Decimation FIR filter
struct fir_f32_s fir_f32_t
Data struct of f32 fir filter.
esp_err_t dsps_fir_f32_free(fir_f32_t *fir)
support arrays freeing function
int32_t dsps_fird_s16_aes3(fir_s16_t *fir, const int16_t *input, int16_t *output, int32_t len)
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
int32_t dsps_fird_s16_ae32(fir_s16_t *fir, const int16_t *input, int16_t *output, int32_t len)
esp_err_t dsps_fird_s16_aexx_free(fir_s16_t *fir)
support arrays freeing function
int dsps_fird_f32_arp4(fir_f32_t *fir, const float *input, float *output, int len)
esp_err_t dsps_fird_init_f32(fir_f32_t *fir, float *coeffs, float *delay, int N, int decim)
initialize structure for 32 bit Decimation FIR filter Function initialize structure for 32 bit floati...
esp_err_t dsps_16_array_rev(int16_t *arr, int16_t len)
Array reversal.
esp_err_t dsps_fir_f32_aes3(fir_f32_t *fir, const float *input, float *output, int len)
esp_err_t dsps_fir_init_f32(fir_f32_t *fir, float *coeffs, float *delay, int coeffs_len)
initialize structure for 32 bit FIR filter
esp_err_t dsps_firmr_init_s16(fir_s16_t *fir, int16_t *coeffs, int16_t *delay, int16_t length, int16_t interp, int16_t decim, int16_t start_pos, int16_t shift)
initialize structure for multi-rate FIR filter Function initialize structure for 16 bit signed fixed ...
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
struct fir_s16_s fir_s16_t
Data struct of s16 fir filter.
int dsps_fird_f32_ae32(fir_f32_t *fir, const float *input, float *output, int len)
esp_err_t dsps_fir_f32_ae32(fir_f32_t *fir, const float *input, float *output, int len)
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
esp_err_t dsps_fird_init_s16(fir_s16_t *fir, int16_t *coeffs, int16_t *delay, int16_t coeffs_len, int16_t decim, int16_t start_pos, int16_t shift)
initialize structure for 16 bit Decimation FIR filter Function initialize structure for 16 bit signed...
esp_err_t dsps_firmr_init_f32(fir_f32_t *fir, float *coeffs, float *delay, int length, int interp, int decim, int start_pos)
initialize structure for multi-rate FIR filter Function initialize structure for 32 bit floating poin...
int32_t dsps_fird_s16_arp4(fir_s16_t *fir, const int16_t *input, int16_t *output, int32_t len)
esp_err_t dsps_fir_f32_ansi(fir_f32_t *fir, const float *input, float *output, int len)
32 bit floating point FIR filter
int esp_err_t
Definition esp_err.h:21
Data struct of f32 fir filter.
Definition dsps_fir.h:29
int interp
Definition dsps_fir.h:42
int interp_pos
Definition dsps_fir.h:43
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
int16_t use_delay
Definition dsps_fir.h:35
int delay_size
Interpolation parameters.
Definition dsps_fir.h:41
int decim
Definition dsps_fir.h:34
Data struct of s16 fir filter.
Definition dsps_fir.h:54
int16_t delay_size
Interpolation parameters.
Definition dsps_fir.h:71
int16_t shift
Definition dsps_fir.h:61
int16_t * coeffs
Definition dsps_fir.h:55
int32_t rounding_val
Definition dsps_fir.h:63
int16_t * delay
Definition dsps_fir.h:56
int16_t decim
Definition dsps_fir.h:59
int16_t pos
Definition dsps_fir.h:58
int16_t start_pos
Definition dsps_fir.h:74
int16_t interp_pos
Definition dsps_fir.h:73
int32_t * rounding_buff
Definition dsps_fir.h:62
int16_t interp
Definition dsps_fir.h:72
int16_t d_pos
Definition dsps_fir.h:60
int16_t coeffs_len
Definition dsps_fir.h:57
int16_t free_status
Definition dsps_fir.h:64
float delay[256]
Definition test_fir.c:15
float coeffs[256]
Definition test_fir.c:14
#define N
Definition test_mmult.c:13