diff options
| author | steven-na <noreply.github@stvnc.dev> | 2026-08-05 02:48:08 -0700 |
|---|---|---|
| committer | steven-na <noreply.github@stvnc.dev> | 2026-08-05 02:48:08 -0700 |
| commit | 351af801854e603fb314e10289ad55944ba840d4 (patch) | |
| tree | 119e85454f93462e8d49250af6aea182328af8b9 /src/dft.h | |
| parent | 85d6a21304d80d1a5ca093a198118e986fe81c46 (diff) | |
Update and FFT implementation
Diffstat (limited to 'src/dft.h')
| -rw-r--r-- | src/dft.h | 44 |
1 files changed, 33 insertions, 11 deletions
@@ -2,6 +2,7 @@ #include "common.h" #include "smrt_arena.h" +#include "vec2.h" #include "wav.h" typedef struct { @@ -17,6 +18,14 @@ 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); + /// Convert DFT frequency data to unsigned 8-bit PCM WAV amplitude data wav_data_t dft_data_to_wav(smrt_arena_t * arena , dft_data_t dft , @@ -35,14 +44,27 @@ typedef struct { u64 sample_rate; } stft_data_t; -/// Run STFT algorithm on samples. -stft_data_t short_time_fourier_transform(smrt_arena_t * arena , - u64 samples_per_segment , - f64 * samples , - u64 sample_count , - u64 sample_rate); - -/// Convert STFT frequency data to unsigned 8-bit PCM WAV amplitude data -wav_data_t stft_data_to_wav(smrt_arena_t * arena , - stft_data_t stft , - u64 sample_count); +/// Run STFT algorithm on samples, sliding a window_size window by hop_size each step +stft_data_t short_time_fourier_transform(smrt_arena_t * arena , + u64 window_size , + u64 hop_size , + f64 * samples , + u64 sample_count , + u64 sample_rate); + +/// Run in-place inverse FFT on a complex spectrum +void inverse_fast_fourier_transform(vec2d_soa_t vs); + +/// 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); + +/// 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); + |