25 lines
1.3 KiB
C
25 lines
1.3 KiB
C
// feature_params.h -- SINGLE SOURCE OF TRUTH for the audio feature pipeline.
|
|
//
|
|
// This file contains ONLY #define lines (plus comments and an include guard).
|
|
// tools/make_template.py parses it with a regex, so firmware and Python can
|
|
// never silently disagree. Keep every value a plain numeric literal.
|
|
//
|
|
// Band edges (implemented identically in fingerprint.c and make_template.py):
|
|
// f_b = F_MIN_HZ * (F_MAX_HZ / F_MIN_HZ) ^ (b / NUM_BANDS), b = 0..NUM_BANDS
|
|
// bin_b = floor(f_b * FRAME_LEN / FS_HZ + 0.5) (round half up, double math)
|
|
// if bin_b < bin_(b-1) + 1 then bin_b = bin_(b-1) + 1 (>= 1 bin per band)
|
|
// band b covers FFT bins [bin_b, bin_(b+1)). bin_NUM_BANDS must be <= FRAME_LEN/2.
|
|
#ifndef FEATURE_PARAMS_H
|
|
#define FEATURE_PARAMS_H
|
|
|
|
#define FS_HZ 16000 // sample rate of the whole pipeline
|
|
#define FRAME_LEN 1024 // samples per analysis frame (power of two)
|
|
#define HOP_LEN 512 // hop = 32 ms at 16 kHz
|
|
#define NUM_BANDS 32 // log-spaced bands in the fingerprint
|
|
#define F_MIN_HZ 100 // lower edge of band 0
|
|
#define F_MAX_HZ 7500 // nominal upper edge of the last band
|
|
#define LOG_EPS 1e-10f // added to band power before log (power is of samples scaled to +-1.0)
|
|
#define FP_DETREND 1 // 1: remove linear tilt across band index, 0: off
|
|
|
|
#endif
|