summaryrefslogtreecommitdiff
path: root/src/dft.h
diff options
context:
space:
mode:
Diffstat (limited to 'src/dft.h')
-rw-r--r--src/dft.h38
1 files changed, 22 insertions, 16 deletions
diff --git a/src/dft.h b/src/dft.h
index 30b911c..74178aa 100644
--- a/src/dft.h
+++ b/src/dft.h
@@ -2,7 +2,6 @@
#include "common.h"
#include "smrt_arena.h"
-#include "vec2.h"
#include "wav.h"
typedef struct {
@@ -18,13 +17,12 @@ dft_data_t discrete_fourier_transform(smrt_arena_t * arena ,
u64 sample_count ,
u64 sample_rate);
-/// Run FFT algorithm on samples
-dft_data_t fast_fourier_transform( smrt_arena_t * arena ,
- f64 * samples ,
- u64 sample_count ,
- u64 sample_rate ,
- smrt_arena_t ** conflicts ,
- u64 num_conflicts);
+/// Run FFT algorithm on samples. sample_count must be a power of 2.
+dft_data_t fast_fourier_transform(smrt_arena_t * arena ,
+ f64 * samples ,
+ u64 sample_count ,
+ u64 sample_rate ,
+ smrt_arena_t **conflicts , u64 num_conflicts);
/// Convert DFT frequency data to unsigned 8-bit PCM WAV amplitude data
wav_data_t dft_data_to_wav(smrt_arena_t * arena ,
@@ -52,19 +50,27 @@ stft_data_t short_time_fourier_transform(smrt_arena_t * arena ,
u64 sample_count ,
u64 sample_rate);
-/// Run in-place inverse FFT on a complex spectrum
-void inverse_fast_fourier_transform(vec2d_soa_t vs);
+/// Run inverse FFT on a complex spectrum (real/imag, length sample_count).
+/// Pass NULL for either out-param to skip allocating/returning that component
+void inverse_fast_fourier_transform(smrt_arena_t * arena ,
+ f64 const * real ,
+ f64 const * imag ,
+ u64 sample_count ,
+ f64 ** real_o ,
+ f64 ** imag_o ,
+ smrt_arena_t **conflicts, u64 num_conflicts);
/// Reconstruct samples from STFT data via overlap-add inverse FFT synthesis
f64 *inverse_short_time_fourier_transform( smrt_arena_t * arena ,
stft_data_t stft ,
u64 window_size ,
u64 hop_size ,
- smrt_arena_t ** conflicts ,
- u64 num_conflicts);
+ smrt_arena_t **conflicts, u64 num_conflicts);
-/// Rebuild a window's full mirrored complex spectrum from DFT amplitude/phase data
-void reconstruct_spectrum(dft_data_t * data ,
- u64 sample_count ,
- vec2d_soa_t vs_o);
+/// Reconstruct a full N-point complex spectrum from one-sided DFT amplitude/phase data
+void reconstruct_spectrum(smrt_arena_t * arena ,
+ dft_data_t const * data ,
+ u64 sample_count ,
+ f64 ** real_o ,
+ f64 ** imag_o);