diff options
| author | steven-na <noreply.github@stvnc.dev> | 2026-08-05 13:05:55 -0700 |
|---|---|---|
| committer | steven-na <noreply.github@stvnc.dev> | 2026-08-05 13:05:55 -0700 |
| commit | 5ae677003dd79f031595b47df99e5b2a7d118ed9 (patch) | |
| tree | 407095475454a1aecf903bc70978a8c7adbdd891 /src/dft.h | |
| parent | 351af801854e603fb314e10289ad55944ba840d4 (diff) | |
API change and formatting
Diffstat (limited to 'src/dft.h')
| -rw-r--r-- | src/dft.h | 38 |
1 files changed, 22 insertions, 16 deletions
@@ -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); |