ESP-IDF Firmware
Firmware architecture and call graph
Loading...
Searching...
No Matches
dsps_firmr_init_f32.c
Go to the documentation of this file.
1
/*
2
* SPDX-FileCopyrightText: 2025 Espressif Systems (Shanghai) CO LTD
3
*
4
* SPDX-License-Identifier: Apache-2.0
5
*/
6
7
#include "
dsps_fir.h
"
8
#include "
dsp_common.h
"
9
#include <malloc.h>
10
#include "
dsp_tests.h
"
11
12
esp_err_t
dsps_firmr_init_f32
(
fir_f32_t
*fir,
float
*
coeffs
,
float
*
delay
,
int
length,
int
interp,
int
decim,
int
start_pos)
13
{
14
fir->
coeffs
=
coeffs
;
15
fir->
delay
=
delay
;
16
fir->
N
= length;
17
fir->
pos
= 0;
18
fir->
decim
= decim;
19
fir->
use_delay
= 0;
20
fir->
interp
= interp;
21
fir->
interp_pos
= 0;
22
fir->
start_pos
= start_pos;
23
fir->
delay_size
= length / interp;
24
25
if
(
delay
== NULL) {
26
#ifdef CONFIG_IDF_TARGET_ESP32S3
27
fir->
delay
= (
float
*)
memalign
(16, (fir->
delay_size
+ 4) *
sizeof
(
float
));
28
#else
29
fir->
delay
= (
float
*)malloc((fir->
delay_size
+ 4) *
sizeof
(
float
));
30
#endif
// CONFIG_IDF_TARGET_ESP32S3
31
fir->
use_delay
= 1;
32
}
else
{
33
fir->
use_delay
= 0;
34
}
35
36
if
(decim == 0) {
37
return
ESP_ERR_DSP_INVALID_PARAM
;
38
}
39
if
(interp == 0) {
40
return
ESP_ERR_DSP_INVALID_PARAM
;
41
}
42
if
(length % interp != 0) {
43
return
ESP_ERR_DSP_INVALID_LENGTH
;
44
}
45
if
(start_pos < 0 || start_pos >= decim) {
46
return
ESP_ERR_DSP_INVALID_PARAM
;
47
}
48
49
#ifdef CONFIG_IDF_TARGET_ESP32S3
50
// The delay array should be aligned to 16
51
if
(((uint32_t)
delay
) & 0x0f) {
52
return
ESP_ERR_DSP_ARRAY_NOT_ALIGNED
;
53
}
54
#endif
// CONFIG_IDF_TARGET_ESP32S3
55
56
for
(
int
i = 0 ; i < fir->
delay_size
; i++) {
57
fir->
delay
[i] = 0;
58
}
59
return
ESP_OK
;
60
}
dsp_common.h
ESP_ERR_DSP_INVALID_PARAM
#define ESP_ERR_DSP_INVALID_PARAM
Definition
dsp_err_codes.h:21
ESP_ERR_DSP_INVALID_LENGTH
#define ESP_ERR_DSP_INVALID_LENGTH
Definition
dsp_err_codes.h:20
ESP_ERR_DSP_ARRAY_NOT_ALIGNED
#define ESP_ERR_DSP_ARRAY_NOT_ALIGNED
Definition
dsp_err_codes.h:25
dsp_tests.h
memalign
#define memalign(align_, size_)
Definition
dsp_tests.h:35
dsps_fir.h
fir_f32_t
struct fir_f32_s fir_f32_t
Data struct of f32 fir filter.
dsps_firmr_init_f32
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...
Definition
dsps_firmr_init_f32.c:12
esp_err_t
int esp_err_t
Definition
esp_err.h:21
ESP_OK
#define ESP_OK
Definition
esp_err.h:23
fir_f32_s::interp
int interp
Definition
dsps_fir.h:42
fir_f32_s::interp_pos
int interp_pos
Definition
dsps_fir.h:43
fir_f32_s::coeffs
float * coeffs
Definition
dsps_fir.h:30
fir_f32_s::pos
int pos
Definition
dsps_fir.h:33
fir_f32_s::delay
float * delay
Definition
dsps_fir.h:31
fir_f32_s::start_pos
int start_pos
Definition
dsps_fir.h:44
fir_f32_s::N
int N
Definition
dsps_fir.h:32
fir_f32_s::use_delay
int16_t use_delay
Definition
dsps_fir.h:35
fir_f32_s::delay_size
int delay_size
Interpolation parameters.
Definition
dsps_fir.h:41
fir_f32_s::decim
int decim
Definition
dsps_fir.h:34
delay
float delay[256]
Definition
test_fir.c:15
coeffs
float coeffs[256]
Definition
test_fir.c:14
components
espressif__esp-dsp
modules
fir
float
dsps_firmr_init_f32.c
Generated by
1.16.1