vibe code the initial impl
This commit is contained in:
@@ -0,0 +1,26 @@
|
||||
// Host stand-in for esp-dsp: float32 radix-2 FFT with the same call sequence
|
||||
// (fft2r then bit_rev). Output order is natural, so bit_rev is a no-op here.
|
||||
#pragma once
|
||||
#include <math.h>
|
||||
#include "esp_err.h"
|
||||
static inline esp_err_t dsps_fft2r_init_fc32(float *t, int n) { (void)t; (void)n; return ESP_OK; }
|
||||
static inline esp_err_t dsps_fft2r_fc32(float *d, int n)
|
||||
{
|
||||
for (int i = 1, j = 0; i < n; i++) { // bit-reverse permutation
|
||||
int bit = n >> 1;
|
||||
for (; j & bit; bit >>= 1) j ^= bit;
|
||||
j ^= bit;
|
||||
if (i < j) { float a = d[2*i], b = d[2*i+1]; d[2*i] = d[2*j]; d[2*i+1] = d[2*j+1]; d[2*j] = a; d[2*j+1] = b; }
|
||||
}
|
||||
for (int len = 2; len <= n; len <<= 1) {
|
||||
float ang = -2.0f * (float)M_PI / (float)len;
|
||||
for (int i = 0; i < n; i += len) for (int k = 0; k < len / 2; k++) {
|
||||
float wr = cosf(ang * k), wi = sinf(ang * k);
|
||||
int a = i + k, b = i + k + len / 2;
|
||||
float xr = d[2*b] * wr - d[2*b+1] * wi, xi = d[2*b] * wi + d[2*b+1] * wr;
|
||||
d[2*b] = d[2*a] - xr; d[2*b+1] = d[2*a+1] - xi; d[2*a] += xr; d[2*a+1] += xi;
|
||||
}
|
||||
}
|
||||
return ESP_OK;
|
||||
}
|
||||
static inline esp_err_t dsps_bit_rev_fc32(float *d, int n) { (void)d; (void)n; return ESP_OK; }
|
||||
Reference in New Issue
Block a user