25static const char *
TAG =
"fftr2_ansi";
34#ifdef CONFIG_IDF_TARGET_ESP32S3
35extern float *dsps_fft2r_w_table_fc32_1024;
38unsigned short reverse(
unsigned short x,
unsigned short N,
int order);
49 if (table_size == 0) {
52 if (fft_table_buff != NULL) {
60#if CONFIG_IDF_TARGET_ESP32S3
61 if (table_size <= 1024) {
80 if ((pow > 3) && (pow < 13)) {
105#if CONFIG_IDF_TARGET_ESP32S3
135 float re_temp, im_temp;
138 for (
int N2 =
N / 2; N2 > 0; N2 >>= 1) {
140 for (
int j = 0; j < ie; j++) {
143 for (
int i = 0; i < N2; i++) {
145 re_temp = c *
data[2 *
m] + s *
data[2 *
m + 1];
146 im_temp = c *
data[2 *
m + 1] - s *
data[2 *
m];
148 data[2 *
m + 1] =
data[2 * ia + 1] - im_temp;
149 data[2 * ia] =
data[2 * ia] + re_temp;
150 data[2 * ia + 1] =
data[2 * ia + 1] + im_temp;
161unsigned short reverse(
unsigned short x,
unsigned short N,
int order)
163 unsigned short b =
x;
165 b = (b & 0xff00) >> 8 | (b & 0x00fF) << 8;
166 b = (b & 0xf0F0) >> 4 | (b & 0x0f0F) << 4;
167 b = (b & 0xCCCC) >> 2 | (b & 0x3333) << 2;
168 b = (b & 0xAAAA) >> 1 | (b & 0x5555) << 1;
169 return b >> (16 - order);
181 float r_temp, i_temp;
183 for (
int i = 1; i < (
N - 1); i++) {
191 r_temp =
data[j * 2];
193 data[i * 2] = r_temp;
194 i_temp =
data[j * 2 + 1];
196 data[i * 2 + 1] = i_temp;
211 float e =
M_PI * 2.0 /
N;
213 for (i = 0; i < (
N >> 1); i++) {
214 w[2 * i] = cosf(i * e);
215 w[2 * i + 1] = sinf(i * e);
240 for (i = 0; i < (
N / 4); i++) {
241 rkl =
data[i * 2 + 0 + 2];
242 ikl =
data[i * 2 + 1 + 2];
243 rnl =
data[n2 - i * 2 - 2];
244 inl =
data[n2 - i * 2 - 1];
246 rkh =
data[i * 2 + 0 + 2 +
N];
247 ikh =
data[i * 2 + 1 + 2 +
N];
248 rnh =
data[n2 - i * 2 - 2 -
N];
249 inh =
data[n2 - i * 2 - 1 -
N];
251 data[i * 2 + 0 + 2] = rkl + rnl;
252 data[i * 2 + 1 + 2] = ikl - inl;
254 data[n2 - i * 2 - 1 -
N] = inh - ikh;
255 data[n2 - i * 2 - 2 -
N] = rkh + rnh;
257 data[i * 2 + 0 + 2 +
N] = ikl + inl;
258 data[i * 2 + 1 + 2 +
N] = rnl - rkl;
260 data[n2 - i * 2 - 1] = rkh - rnh;
261 data[n2 - i * 2 - 2] = ikh + inh;
279 ESP_LOGD(
TAG,
"const uint16_t bitrev2r_table_%i_%s[] = { ",
N, name_ext);
280 for (
int i = 1; i < (
N - 1); i++) {
290 if ((items_count % 8) == 0) {
296 ESP_LOGD(
TAG,
"const uint16_t bitrev2r_table_%i_%s_size = %i;\n",
N, name_ext, items_count);
298 ESP_LOGD(
TAG,
"extern const uint16_t bitrev2r_table_%i_%s[];",
N, name_ext);
299 ESP_LOGD(
TAG,
"extern const uint16_t bitrev2r_table_%i_%s_size;\n",
N, name_ext);
354 float r_temp, i_temp;
355 for (
int n = 0 ;
n < reverse_size ;
n++) {
356 uint16_t i = reverse_tab[
n * 2 + 0] >> 2;
357 uint16_t j = reverse_tab[
n * 2 + 1] >> 2;
361 i_temp =
data[j + 1];
363 data[i + 1] = i_temp;
bool dsp_is_power_of_two(int x)
check power of two The function check if the argument is power of 2. The implementation use ANSI C an...
int dsp_power_of_two(int x)
Power of two The function return power of 2 for values 2^N. The implementation use ANSI C and could b...
#define ESP_ERR_DSP_PARAM_OUTOFRANGE
#define ESP_ERR_DSP_UNINITIALIZED
#define ESP_ERR_DSP_INVALID_LENGTH
#define ESP_ERR_DSP_REINITIALIZED
#define memalign(align_, size_)
#define dsps_bit_rev_fc32
#define dsps_bit_rev_lookup_fc32
#define CONFIG_DSP_MAX_FFT_SIZE
const uint16_t dsps_fft2r_rev_tables_fc32_size[]
uint16_t * dsps_fft2r_rev_tables_fc32[]
void dsps_fft2r_rev_tables_init_fc32(void)
float * dsps_fft_w_table_fc32
esp_err_t dsps_gen_bitrev2r_table(int N, int step, char *name_ext)
uint8_t dsps_fft2r_mem_allocated
esp_err_t dsps_fft2r_fc32_ansi_(float *data, int N, float *w)
complex FFT of radix 2
void dsps_fft2r_deinit_fc32()
deinit fft tables
esp_err_t dsps_gen_w_r2_fc32(float *w, int N)
Generate coefficients table for the FFT radix 2.
esp_err_t dsps_cplx2reC_fc32_ansi(float *data, int N)
Convert complex array to two real arrays.
uint16_t * dsps_fft2r_ram_rev_table
unsigned short reverse(unsigned short x, unsigned short N, int order)
esp_err_t dsps_fft2r_init_fc32(float *fft_table_buff, int table_size)
init fft tables
uint8_t dsps_fft2r_initialized
esp_err_t dsps_bit_rev_lookup_fc32_ansi(float *data, int reverse_size, uint16_t *reverse_tab)
esp_err_t dsps_bit_rev2r_fc32(float *data, int N)
esp_err_t dsps_bit_rev_fc32_ansi(float *data, int N)
bit reverse operation for the complex input array
int dsps_fft_w_table_size
static float data[128 *2]