Skip to main content

forward_cqt

Function forward_cqt 

Source
pub fn forward_cqt(
    samples: &[f32],
    sample_rate: f32,
    f_min: f32,
    bins_per_octave: usize,
    n_bins: usize,
) -> Vec<f32>
Expand description

Real forward constant-Q transform over actual audio samples — direct constant-Q (one complex inner product per log-spaced bin; CPU is fine, this is a cold-path ingest transform).

Geometric bin centres f_k = f_min · 2^(k/bins_per_octave), constant quality factor Q = 1 / (2^(1/bins_per_octave) − 1). Each bin uses a Hann-windowed kernel of length n_k = round(Q · sample_rate / f_k) (clamped to [1, samples.len()]):

X_k = (1/n_k) · Σ_{j<n_k} samples[j] · hann(j, n_k) · exp(−2πi · f_k · j / sample_rate)

and the returned vector holds |X_k| for k ∈ [0, n_bins).